【问题标题】:How to write the right instructions on dockerfile in order to increase PHP resources?如何在 dockerfile 上编写正确的指令以增加 PHP 资源?
【发布时间】:2019-08-23 18:03:45
【问题描述】:

我的 WordPress 主题抱怨 max_execution_time (30)、max_input_vars (1000) 和 WP Memory Limit (40)。我真的需要在我的网站所在的 docker 容器上增加 PHP 资源和内存。

我尝试手动更改 php.ini 和 .htaccess 文件,但没有成功。据我了解,这些设置需要按照说明在 dockerfile 上完成。

这是我的 dockerfile:

# ========== STAGE FOR BUILDING THE JS/CSS ASSETS
FROM node:9.11.1-slim AS builder

WORKDIR /var/www/

# Install the required packages for building the assets
COPY src/package*.json src/gulpfile.js ./
RUN npm install

# Build the assets
COPY src/wp-content/themes/tsc ./wp-content/themes/tsc
RUN npm run build-prod


# ========== PRODUCTION IMAGE
FROM wordpress:5.0.3-php7.2-fpm

# ---------- Configure PHP
# RUN docker-php-ext-install sockets
# RUN sed -i "s|;pid =.*|pid = /var/run/php-fpm.pid|"            /usr/local/etc/php-fpm.conf
# RUN sed -i "s|listen =.*|listen = /var/run/php/php-fpm.sock|" /usr/local/etc/php-fpm.d/www.conf
# RUN sed -i "s|;listen.mode =.*|listen.mode = 0666|" /usr/local/etc/php-fpm.d/www.conf 

COPY ./conf/php/* ./conf/php-fpm.conf /usr/local/etc/
COPY ./conf/php-fpm.d/* /usr/local/etc/php-fpm.d/

# ---------- Configure blog files and directories
WORKDIR /var/www/html/
COPY src ./tsc/
COPY --from=builder /var/www/wp-content/themes/tsc/build/ ./tsc/wp-content/themes/tsc/build/

COPY bin /usr/local/bin/
RUN chmod +x /usr/local/bin/start-server.sh

# ---------- Install and configure Nginx
RUN apt-get update && apt-get install -y wget gnupg
RUN wget -O- http://nginx.org/keys/nginx_signing.key > nginx.key && apt-key add nginx.key && rm nginx.key
RUN echo deb http://nginx.org/packages/debian/ stretch nginx > /etc/apt/sources.list.d/nginx.list && \
    echo deb-src http://nginx.org/packages/debian/ stretch nginx >> /etc/apt/sources.list.d/nginx.list
RUN apt-get update
RUN apt-get install -y --allow-downgrades --allow-remove-essential --allow-change-held-packages nginx

# Copy nginx and default site conf
COPY conf/nginx.conf      /etc/nginx/nginx.conf
COPY conf/nginx-site.conf /etc/nginx/conf.d/default.conf


# ---------- Configure environment
COPY conf/setup-env-vars.sh /tmp/setup-env-vars.sh
RUN chmod +x /tmp/setup-env-vars.sh

# ---------- Run
EXPOSE 80
CMD ["start-server.sh"]


# ---------- Configure debug
RUN sed -i "s|;error_log =.*|error_log = /var/log/fpm-php.www.log|"            /usr/local/etc/php-fpm.conf
RUN echo "\ncatch_workers_output = yes" >> /usr/local/etc/php-fpm.d/www.conf
RUN echo "\nphp_flag[display_errors] = on" >> /usr/local/etc/php-fpm.d/www.conf
# RUN echo "\nphp_admin_value[error_log] = /var/log/fpm-php.www.log" >> /usr/local/etc/php-fpm.d/www.conf
RUN echo "\nphp_admin_flag[log_errors] = on" >> /usr/local/etc/php-fpm.d/www.conf
# RUN touch /var/log/fpm-php.www.log && chmod 777 /var/log/fpm-php.www.log

# Forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log && \
    ln -sf /dev/stderr /var/log/nginx/error.log

所以,我需要一些说明来帮助我在我的 docker 容器上实现以下值:

max_input_vars = 5000

max_execution_time = 300

post_max_size = 50M

upload_max_filesize = 50M

【问题讨论】:

  • 您使用的是哪个码头工人基地?有时他们会将有效的php.ini 文件放在一个意想不到的位置。
  • 我不知道,伙计。我在哪里可以找到这些信息?
  • 在您的 Dockerfile 中,有一行以 FROM 开头。 FROM 后面的名称是基础镜像。
  • 我用整个 dockerfile 更新了我的问题。

标签: php wordpress docker dockerfile


【解决方案1】:

所以,你可以这样探索 docker 镜像:

docker pull wordpress:5.0.3-php7.2-fpm
docker run -t -i wordpress:5.0.3-php7.2-fpm /bin/bash

完成此操作后,您可以探索定位 docker 映像的布局方式,并确定您是否更新了正确的文件。

此图像的php.ini 文件位于php-fpm.conf./php-fpm.d/www.conf 中的/usr/local/etc。我建议将您的 4 个变量放入一个文件中,该文件将被复制到 .../php-fpm.d/<mystuff>.conf

您用来启动 PHP 的 start-server.sh 文件未在此处列出,因此在这种情况下,我无法确定您发送给 PHP 的命令行参数是什么。覆盖默认启动可能不是一个好主意**。默认情况下,此图像将运行 php-fpm 引擎。如果您只想要一个多合一的图像,您可以考虑使用预先配置为处理 HTTP 流量的 wordpress:5.0.3-apache

** 注意:实际上,您也在将 nginx 中的内容复制到 docker 映像中。这也是 docker 的反模式。每个 docker 容器应该只有一个服务 - 这个服务将运行 php-fpm 来执行 wordpress 引擎,并且应该有另一个运行你的前端(例如 nginx 或其他)并按名称连接 em> 到 php-fpm 映像以运行 PHP。但我离题了。

【讨论】:

  • 伙计,对我来说有这么多新信息......我以为我只需要在 dockerfile 上写 3 或 4 行就可以实现我的目标。但我想我应该感谢您花费宝贵的时间回答我。虽然我还迷茫,但至少我现在有功课。
  • 不管怎样,start-server.sh: chown -R www-data:www-data /var/www/html/tsc/wp-config.php /var/www/html/tsc/wp-content /tmp/setup-env-vars.sh && php-fpm & nginx -g "daemon off;"
  • 如果您要使用wordpress:5.0.3-apache 图像,那就容易多了。
  • 是的——以这种方式使用 nginx 对 docker 来说是一种糟糕的做法。 Docker 心态决定了一个容器;一个进程。
  • 很遗憾,这不是我的选择。
猜你喜欢
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多