【问题标题】:Dockerized Laravel App, always 404 on assetsDockerized Laravel 应用程序,资产总是 404
【发布时间】:2020-04-18 02:42:40
【问题描述】:

所以,经过大量尝试后,我设法让我的 Laravel 5.6 应用程序通过 docker 运行。我正在创建图像并将其存储在 Amazon ECR 上。然后通过 docker-compose 我正在加载 Laravel、Nginx 和其他一些。

除了一件事,一切都完美无缺。与 css 和 js 等资产相关的所有内容都未加载 (404)。

我尝试在前面加载“/”,我尝试通过 assets() 函数,但无济于事。

所以,这里是我使用的文件:

Laravel 应用的 Dockerfile:

FROM php:7.1.15-fpm

RUN apt-get update && apt-get install -y libmcrypt-dev \
mysql-client zip unzip git libjpeg62-turbo-dev libpng12-dev libmagickwand-dev --no-install-recommends \
&& pecl install imagick \
&& docker-php-ext-enable imagick \
&& docker-php-ext-install gd mcrypt pdo_mysql \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

COPY php-fpm.conf /etc/php-fpm.conf

COPY www.conf /etc/php-fpm.d/www.conf

WORKDIR /var/www

COPY . /var/www

RUN composer update

RUN chown -R www-data: /var/www

此图像构建良好并存储在亚马逊中。

docker-compose 文件:

version: '2'
services:

  # The Laravel Application
  app:
    image: URL_TO_IMAGE-WORKS
    restart: always
    working_dir: /var/www
    volumes:
      - ./storage/app:/var/www/storage/app
      - ./storage/logs:/var/www/storage/logs
      - "./php-fpm.conf:/etc/php-fpm.conf"
      - "./www.conf:/etc/php-fpm.d/www.conf"
    links:
    - database
    environment:
      - "DB_PORT=3306"
      - "DB_HOST=database"

#The Nginx server
  proxy:
    build: server
    working_dir: /var/www
    restart: always
    volumes_from:
      - app
    ports:
      - "80:80"

  database:
    image: mysql:5.7.22
    volumes:
      - ./mysqldata_2:/var/lib/mysql
    restart: always
    environment:
      - "MYSQL_ROOT_PASSWORD=secret"
      - "MYSQL_DATABASE=secret"
      - "MYSQL_PASSWORD=secret"
      - "MYSQL_USER=secret"
    ports:
        - "33061:3306"

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    links:
      - database
    ports:
      - '8080:80'
    restart: always
    environment:
      PMA_HOST: database
      PMA_PORT: 3306

  elk:
    image: sebp/elk
    ports:
      - "5601:5601"
      - "9200:9200"
      - "5044:5044"

NGINX Docker 文件是:

FROM nginx:alpine
RUN rm /etc/nginx/conf.d/*
COPY proxy.conf /etc/nginx/conf.d

NGINX 使用的 proxy.conf:

server {
    listen 80;
    server_name  admin.mydomain.com;
    include /etc/nginx/mime.types;
    index index.php server.php;
           root /var/www/public;

           location / {
               try_files $uri $uri/ /index.php?$args;
           }

           location ~ \.php$ {
               fastcgi_split_path_info ^(.+\.php)(/.+)$;
               fastcgi_pass app:9000;
               fastcgi_index index.php;
               include fastcgi_params;
               fastcgi_param SCRIPT_FILENAME     $document_root$fastcgi_script_name;
               fastcgi_param PATH_INFO $fastcgi_path_info;
           }

   }

所以,在一切顺利启动后,我导航到 admin.mydomain.com 功能正常,但 css 和 js 文件均未加载。

我在 docker 镜像和 nginx 设置上尝试了很多不同的设置,但均无济于事。任何见解都将受到高度赞赏!

注意:如果您需要任何额外的信息,请告诉我

【问题讨论】:

  • 你在这方面有什么收获吗?我被困在同一个问题上。
  • 很遗憾没有...
  • 当我尝试运行日志查看器和调试栏等软件包时,我收到 404 本地。如果我使用 php artisan serve 运行一切正常。
  • 登录到您的“应用”图像,查看资产是否存在。您没有将本地源目录映射到容器目录
  • @UnderDog 所有来源都复制到图像中。我已经通过浏览应用程序容器确认了...

标签: php laravel docker nginx


【解决方案1】:

我遇到了这个问题。

  • 我在本地链接了存储 (php artisan storage:link),并确保我可以在容器中通过 ls 找到文件。
  • 我确保我的 vhost.conf(使用 apache)遵循符号链接。

  • 我检查了 dockerfile 末尾的 at mod_rewrite 已启用 (a2enmod rewrite)。

【讨论】:

    【解决方案2】:

    Nginx (proxy docker) 直接提供静态内容而不使用 php 脚本 (app docker)。 docker-compose 文件必须定义代理服务的卷参数:

     proxy:
         build: server
         working_dir: /var/www
         restart: always
         # Here the volume defined
         volumes:
           - ./:/var/www
         ports:
           - "80:80"
    

    在没有数据库的情况下完成工作:

    docker-compose.yml:

    version: '3.4'
    services:
      app:
        build:
          context: ./
          dockerfile: app.dockerfile
        working_dir: /var/www
        volumes:
          - ./:/var/www:cached
      web:
        build:
          context: ./
          dockerfile: web.dockerfile
        working_dir: /var/www
        volumes:
          - ./:/var/www
        ports:
          - 81:81
    

    app.dockerfile:

    FROM php:7.1.3-fpm
    
    RUN apt-get update && apt-get install -y libmcrypt-dev \
        mysql-client libmagickwand-dev --no-install-recommends \
        && pecl install imagick \
        && docker-php-ext-enable imagick \
        && docker-php-ext-install mcrypt pdo_mysql
    

    web.docker 文件:

    FROM nginx:1.10
    ADD vhost.conf /etc/nginx/conf.d/default.conf
    

    vhost.conf:

    server {
    
        listen 81;
        index index.php server.php index.html;
        root /var/www/public;
    
        location / {
            try_files $uri $uri/ /index.php$is_args$args;
        }
    
        location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass app:9000;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
        }
    }
    

    【讨论】:

    • 您好,会尽快试用并通知您,谢谢!
    猜你喜欢
    • 2019-09-05
    • 1970-01-01
    • 2021-01-06
    • 2017-01-10
    • 2021-11-25
    • 2021-06-22
    • 2016-11-18
    • 2019-05-23
    • 2020-12-26
    相关资源
    最近更新 更多