Docker / Nginx / Symfony4:未显示php修改

时间:2019-01-02 15:17:17

标签: docker nginx symfony4

我正在使用Nginx和PHP 7为Symfony 4应用程序设置一个docker堆栈。我需要为我的docker堆栈提供建议,因为我遇到了一个问题:PHP文件中的每个更改(控制器,存储库,实体等...)不会显示。每次,我都需要关闭docker堆栈并重新启动以查看更改,即使是简单的dump()。 我已验证OPCache是​​否已像Symfony文档中那样启用和配置。 我认为问题出在我的Docker堆栈中。

这是docker-compose.yml:

version: '2.2'
services:
    # PHP
    php:
        build:
            context: docker/php7-fpm
            args:
                TIMEZONE: ${TIMEZONE}
        container_name: dso_php
        volumes:
            - ".:/var/www/myproject:rw,cached"
            - "./docker/php7-fpm/www.conf:/usr/local/etc/php-fpm.d/www.conf"
            - "./docker/php7-fpm/php.ini:/usr/local/etc/php/conf.d/030-custom.ini"
        env_file:
          - .env
        working_dir: /var/www/myproject
    # NGINX
    nginx:
        build:
            context: docker/nginx
            args:
                NGINX_HOST: ${NGINX_HOST}
        container_name: dso_nginx
        ports:
            - 80:80
        depends_on:
            - php
        volumes:
            - ".:/var/www/myproject:cached"
            - ./logs/nginx/:/var/log/nginx
        env_file:
            - .env
        environment:
            - NGINX_HOST=${NGINX_HOST}

我为PHP和Nginx构建了自己的Dockerfile: 第一个PHP,这里是Dockerfile:

FROM php:7.2-fpm
MAINTAINER HamHamFonFon <balistik.fonfon@gmail.com>
USER root

# Utils
RUN apt-get update \
  && apt-get upgrade -y \
  && apt-get install -y curl less vim libpq-dev wget gnupg libicu-dev libpng-dev zlib1g-dev sudo wget \
  && docker-php-ext-install mysqli \
  && docker-php-ext-install pdo_mysql \
  && docker-php-ext-install intl \
  && docker-php-ext-install opcache \
  && docker-php-ext-install zip \
  && docker-php-ext-install gd

RUN apt-get install -y zip unzip

# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
&& composer --version

# npm & node
RUN curl -sL https://deb.nodesource.com/setup_9.x | bash
RUN apt-get install -y nodejs npm \
  && update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10
# build tools
RUN apt-get install -y build-essential

# yarn package manager
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
  && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list

# Git
RUN apt-get install -y git

# bugfix: remove cmdtest to install yarn correctly.
RUN apt-get remove -y cmdtest
RUN apt-get update
RUN apt-get install -y yarn

# Clear archives in apt cache folder
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint
RUN chmod +x /usr/local/bin/docker-entrypoint

ENTRYPOINT ["docker-entrypoint"]

php.ini:

; General settings
date.timezone = Europe/Paris
xdebug.max_nesting_level=500
short_open_tag = Off
memory_limit="512M"

; Error reporting optimized for production (http://www.phptherightway.com/#error_reporting)
display_errors = Off
display_startup_errors = Off
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php-app/error.log

apc.enable_cli = 1
# http://symfony.com/doc/current/performance.html
opcache.interned_strings_buffer = 16
opcache.memory_consumption = 256
opcache.max_accelerated_files = 20000
opcache.validate_timestamps=0

; maximum memory allocated to store the results
realpath_cache_size=4096K
; save the results for 10 minutes (600 seconds)
realpath_cache_ttl=600

和www.conf(我已在此示例中删除了所有注释行):

[www]
user = site
listen = [::]:9000

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

php_admin_value[upload_max_filesize] = 50M
php_admin_value[post_max_size] = 50M

现在,对于nginx: 首先,Dockerfile:

FROM debian:jessie
ARG NGINX_HOST
MAINTAINER HamHamFonFon <balistik.fonfon@gmail.com>

# Install nginx
RUN apt-get update && apt-get install -y nginx

# Configure Nginx
ADD nginx.conf /etc/nginx/

ADD symfony.conf /etc/nginx/conf.d/
RUN sed "/server_name nginx_host;/c\    server_name ${NGINX_HOST};" -i /etc/nginx/conf.d/symfony.conf
RUN echo "upstream php-upstream { server php:9000; }" > /etc/nginx/conf.d/upstream.conf
RUN usermod -u 1000 www-data

# Run Nginx
CMD ["nginx"]
# Expose ports
EXPOSE 80

nginx.conf:

user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
  worker_connections  2048;
  multi_accept on;
  use epoll;
}

http {
  server_tokens off;
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 15;
  types_hash_max_size 2048;
  include /etc/nginx/mime.types;
  default_type application/octet-stream;
  access_log off;
  error_log off;
  gzip on;
  gzip_disable "msie6";
  include /etc/nginx/conf.d/*.conf;
  open_file_cache max=100;
  client_body_temp_path /tmp 1 2;
  client_body_buffer_size 256k;
  client_body_in_file_only off;
}

daemon off;

最后是symfony.conf:

server {
    listen 80;
    listen [::]:80;
    server_name nginx_host;
    client_max_body_size 20M;

    root /var/www/deep-space-objects/public;

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

    location ~ ^/(index)\.php(/|$) {
        fastcgi_pass php-upstream;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;

        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;

        internal;
    }

    location ~ \.php$ {
        return 404;
    }

    error_log /var/log/nginx/symfony_error.log;
    access_log /var/log/nginx/symfony_access.log;
}

在Dockerfile中,命令“ sed”用我在.env文件中声明的服务器名称替换“ nginx_host”。

我的问题看起来像这样:Docker with Symfony 4 - Unable to see the file changes,但是我已经验证了OPCache配置。 我如何检查Nginx和php是否通讯?我的堆栈中有什么可以改善的地方吗? 谢谢,我不知道该怎么找。

0 个答案:

没有答案