Docker / Nginx / Symfony4: модификации php не отображаются - PullRequest
0 голосов
/ 02 января 2019

Я настраиваю стек докера для приложения Symfony 4 с Nginx и PHP 7. Мне нужен совет для моего стека докеров, потому что я столкнулся с одной проблемой: все изменения в файле PHP (контроллер, хранилище, объект и т.д ...) не отображаются. Каждый раз, когда мне нужно сбросить стек ma docker и перезапустить, чтобы увидеть изменения, даже для простого dump (). Я проверил, что OPCache включен и настроен, как в документации Symfony. Я думаю, что проблема в моем стеке докера.

Это 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}

Я создаю свой собственный Dockerfile для PHP и Nginx: Первый 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» заменяет «nginx_host» именем сервера, которое я объявляю в файле .env.

Моя проблема выглядит следующим образом: Docker с Symfony 4 - Невозможно увидеть изменения файла , но я проверил конфигурацию OPCache. Как я могу проверить, общаются ли nginx и php? В моем стеке есть что-то плохое, что я могу улучшить? Спасибо, я не знаю, как искать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...