wordpress - Docker for WordPress 慢
问题描述
问题:
我的 WordPress 和 Docker 有问题,因为我的网站加载时间很慢(+- 7 秒)。我不确定为什么会发生这种情况,但我认为这与外部数据库或共享卷有关。
设置:
我有一个使用 XDebug 和 Mailhog 在 WordPress 上构建的自定义 Dockerfile。这个 Dockerfile 包含在我的 docker-compose.yml 中,我的 docker-compose 包含的其他服务是 WP-CLI 和 Mailhog。我的数据库托管在 Amazon RDS 上,因此我可以与同事共享它。
代码:
我的 Dockerfile 看起来像这样:
FROM wordpress:latest
# Plugins & Media
RUN mkdir -p /var/www/html/wp-content/plugins
RUN mkdir -p /var/www/html/wp-content/uploads
RUN chown -R www-data:www-data /var/www
RUN find /var/www/ -type d -exec chmod 0755 {} \;
RUN find /var/www/ -type f -exec chmod 644 {} \;
# Mailhog
RUN curl --location --output /usr/local/bin/mhsendmail https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64 && \
chmod +x /usr/local/bin/mhsendmail
RUN echo 'sendmail_path="/usr/local/bin/mhsendmail --smtp-addr=mailhog:1025 --from=noreply@examle.com"' > /usr/local/etc/php/conf.d/mailhog.ini
# Xdebug
ENV XDEBUG_PORT 9000
RUN yes | pecl install xdebug \
&& echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_autostart=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.profiler_enable=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.profiler_output_name=cachegrind.out.%t" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.profiler_output_dir=/tmp" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "max_input_vars=2000" >> /usr/local/etc/php/conf.d/custom.ini \
&& rm -rf /usr/local/etc/php/conf.d/opcache-recommended.ini
EXPOSE 9000
我的 Docker-compose.yml 看起来像这样:
version: "3.7"
services:
wordpress:
container_name: "${PROJECT_NAME}_wordpress"
restart: always
build:
context: ./
dockerfile: ./Dockerfile
ports:
- "8888:80"
- "443:443"
environment:
WORDPRESS_DB_NAME: "${PROJECT_NAME}"
WORDPRESS_DB_HOST: "${MYSQL_HOST}"
WORDPRESS_DB_USER: "${MYSQL_USER}"
WORDPRESS_DB_PASSWORD: "${MYSQL_PASSWORD}"
WORDPRESS_DEBUG: 1
XDEBUG_CONFIG: remote_host=host.docker.internal
WORDPRESS_CONFIG_EXTRA: |
define('FS_METHOD', 'direct');
volumes:
- "wordpress:/var/www/html"
- "./build/uploads:/var/www/html/wp-content/uploads:cached"
- "./build/plugins:/var/www/html/wp-content/plugins:cached"
- "./build/themes:/var/www/html/wp-content/themes:cached"
cli:
container_name: "${PROJECT_NAME}_cli"
image: "wordpress:cli"
volumes:
- "wordpress:/var/www/html"
- "./build/plugins:/var/www/html/wp-content/plugins:cached"
depends_on:
- wordpress
mailhog:
container_name: "${PROJECT_NAME}_mailhog"
image: mailhog/mailhog
depends_on:
- wordpress
ports:
- "1025:1025"
- "8025:8025"
volumes:
wordpress: null
但我不知道为什么它这么慢;我得到了 Docker Desktop 的 2.1.09.3 版本,并且在快速的 Mac 或 Windows 上工作。
有人可以帮助我或指出正确的方向吗?
编辑
- 如果我查看 docker stats,我的 CPU 大约是 0.01%,而我的 MEM 大约是 2.73%,所以这不是问题。
- 发现最大的问题是连接到外部数据库。如果我转移到本地数据库,加载时间会快很多(+- 1 秒)。
解决方案
Mac 和 Windows 卷性能存在一些问题。
链接了解更多详情:
在 Mac 和 Windows 中,我们应该考虑一些卷性能问题。
我改变了我的docker-compose.yml
请注意,我将short syntax 更改为 long syntax。
这种表示法允许添加consistency option
。
我添加了wp-content
and php-conf
(以获取 php.ini),因为它们是每次在浏览器中加载 Wordpress 页面时最常调用的文件目录。
services:
wordpress:
...
volumes:
- ./data:/data
- ./scripts:/docker-entrypoint-initwp.d
#- ./wp-content:/app/wp-content
- type: bind
source: ./wp-content
target: /app/wp-content
consistency: cached
#- ./php-conf:/usr/local/etc/php
- type: bind
source: ./php-conf
target: /usr/local/etc/php
consistency: cached
推荐阅读
- reactjs - 将 MediaStream 动态添加到 current.srcObject 到 useRef 列表中
- vue.js - 单击增量按钮后跨度不更改值(Vue.js)
- python - 我的代码不断删除用户分数和姓名
- eclipse - 有没有办法可以在 Eclipse IDE 中开发反应?
- c# - 在具有不同数据类型的派生类中覆盖 C# 变量
- java - 如何在主动选择参数Jenkins中通过SSH从远程系统获取文件
- scala - 为 scala 2.12.11 添加 tensorflow 依赖项时遇到问题
- javascript - 来自 props 构造函数事件侦听器的本机调用函数
- javascript - 如何在两个或多个项目之间共享代码
- c++ - gdb `list` 命令在附加到进程时仅显示一个行号而不是内容