Search code examples
amazon-elastic-beanstalk

elastic beanstalk document root resolves to /var/www/html/var/www/html/


I want to deploy a laravel site using elastic beanstalk. I'm using pipelines pulling from a BitBucket repository. After I created my EB application and environment, I changed the document-root to /web/public because the laravel-root is under the '[repo-root]/web' directory. The deployment is failing:

2023/02/12 01:40:11 [error] 3857#3857: *109 "/var/www/html/var/www/html/web/public/index.php" is not found (2: No such file or directory), client: ..., server: , request: "GET / HTTP/1.1", host: "..."

A similar project where the laravel-root === 'repo-root' and document-root: public works, but this is not ideal.

How can I configure the pipeline or EB to use the '[repo-root]/web' as the document-root?

I've unsuccessfully tried various values for the document-root, but nothing seems to work.

In another forum, someone suggested changing the pipeline to return the laravel-root as an artifact, but I'm not sure how to do this. Seems like it is stored as a zip under S3 and if I change to Full Clone I get an invalid-structure error related to code build. I don't know what that means since I'm not using code build.

TIA


Solution

  • While I'm sure there are a number of ways to solve this, what worked for me was using CodeBuild to pull the code from the repo and a buildspec.yml file to create a zip of just the directory required for deployment.

    buildspec.yml

    version: 0.2
    
    phases:
      pre_build:
        commands:
          - cd web
          - zip -r ../web.zip ./*
    artifacts:
      files:
        - web.zip
    

    Still under CodeBuild, I configured the Artifacts to output to an S3 bucket. Then I created a Code Pipeline with a Source stage that pulls the zip from the build bucket and a Deploy stage that sends the source artifact to Elastic Beanstalk (provider). When setting up the pipeline, it seems to want you to have a 'Build' stage between Source and Deploy, but I deleted this.

    It looks like you can also leverage artifact handling and let CodeBuild do the packaging (zipping). I haven't tested this. https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec.artifacts.base-directory

    ...
    artifacts:
      files:
        - '**/*'
      base-directory: 'my-build*'
    

    As far as the weird pathing issue in the original post, I think there was some sort of EB config cache issue/corruption. When I rebuilt the environment, that error was gone.