我一直使用 docker 来处理 wordpress,这是我的工作流程..(在 Mac 上)
创建一个项目文件夹并用这个添加一个docker-compose.yml 文件..
version: '3.7'
services:
# here is our mysql container
db:
image: mysql:5.7
volumes:
- ./db:/var/lib/mysql:delegated
ports:
- "3306:3306"
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
# here is our wordpress container
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
# our persistent local data re routing
- .:/var/www/html/wp-content/themes/testing:delegated
- ./plugins:/var/www/html/wp-content/plugins
- ./uploads:/var/www/html/wp-content/uploads
- ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
ports:
- "80:80"
restart: always
environment:
# our local dev environment
WORDPRESS_DEBUG: 1
DEVELOPMENT: 1
# docker wp config settings
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
WORDPRESS_AUTH_KEY: 5f6ede1b94d25a2294e29eeba929a8c80a5ac0fb
WORDPRESS_SECURE_KEY: 5f6ede1b94d25a2294e29eeba929a8c80a5ac0fb
WORDPRESS_LOGGED_IN_KEY: 5f6ede1b94d25a2294e29eeba929a8c80a5ac0fb
WORDPRESS_NONCE_KEY: 5f6ede1b94d25a2294e29eeba929a8c80a5ac0fb
WORDPRESS_SECURE_AUTH_SALT: 5f6ede1b94d25a2294e29eeba929a8c80a5ac0fb
WORDPRESS_LOGGED_IN_SALT: 5f6ede1b94d25a2294e29eeba929a8c80a5ac0fb
WORDPRESS_NONCE_SALT: 5f6ede1b94d25a2294e29eeba929a8c80a5ac0fb
WORDPRESS_CONFIG_EXTRA: |
/* Development parameters */
define('WP_CACHE', false);
define('ENVIRONMENT', 'local');
/* Configure mailhog server */
define('WORDPRESS_SMTP_AUTH', false);
define('WORDPRESS_SMTP_SECURE', '');
define('WORDPRESS_SMTP_HOST', 'mailhog');
define('WORDPRESS_SMTP_PORT', '1025');
define('WORDPRESS_SMTP_USERNAME', null);
define('WORDPRESS_SMTP_PASSWORD', null);
define('WORDPRESS_SMTP_FROM', 'whoever@example.com');
define('WORDPRESS_SMTP_FROM_NAME', 'Whoever');
/* other wp-config defines here */
# here is our mailhog container
mailhog:
image: mailhog/mailhog:latest
ports:
- "8025:8025"
然后在这个项目文件夹中运行这个终端命令(运行 docker app)..
docker-compose up -d
..你将在http://localhost/拥有一个wordpress网站
此docker-compose.yml 已配置,因此您将拥有..
- Wordpress 站点位于 http://localhost/ 或 http://localhost:80
- Mailhog 服务器在 http://localhost:8025/ 处捕获所有外发邮件
- 持久的本地数据库、插件、上传和
uploads.ini
所有持久性数据都映射到此项目文件夹,即您的主题文件夹。这样可以为每个项目保持良好和收集的东西..
在执行任何操作之前进行初始构建后,将 uploads.ini 文件夹替换为实际的 uploads.ini 文件..
file_uploads = On
memory_limit = 2000M
upload_max_filesize = 2000M
post_max_size = 2000M
max_execution_time = 600
所以你的项目(主题)文件夹应该是这样的..
现在您可以像这样开始在此文件夹中构建您的主题,将与此本地环境相关的所有内容保留在此处。
每次运行此命令关闭环境..
docker-compose down
下次你在这个项目上运行这个命令..
docker-compose up -d
..您以前的所有数据库、插件和上传都将完全在您离开的地方,这对于 wordpress 本地开发人员来说太棒了!
需要考虑的一些注意事项..
在这个本地 wordpress 项目中使用 GIT
如果您使用 GIT 将此项目保存为存储库,请确保您的 .gitignore 文件不包括这些文件/文件夹..
/vendor
/uploads
/db
/dist
/node_modules
/plugins
值得为您的/db、/plugins 和/uploads 文件夹设置一个备用云备份解决方案,例如谷歌驱动器,以防硬盘驱动器出现故障或其他情况。
部署到服务器,staging 和 production
在此项目的 IDE 设置中,您可能希望排除某些文件和文件夹部署到 staging 和 production 服务器环境,这是我通常排除的内容。..
/Users/joshmoto/Sites/demo/db
/Users/joshmoto/Sites/demo/node_modules
/Users/joshmoto/Sites/demo/src
/Users/joshmoto/Sites/demo/uploads
/Users/joshmoto/Sites/demo/composer.json
/Users/joshmoto/Sites/demo/composer.lock
/Users/joshmoto/Sites/demo/docker-compose.yml
/Users/joshmoto/Sites/demo/package-lock.json
/Users/joshmoto/Sites/demo/package.json
/Users/joshmoto/Sites/demo/uploads.ini
/Users/joshmoto/Sites/demo/webpack.mix.js
/Users/joshmoto/Sites/demo/plugins
/Users/joshmoto/Sites/demo/.gitignore
/Users/joshmoto/Sites/demo/vendor
-
/plugins我通过cPanel或wordpress仪表板上传手动管理,因为同步到远程时索引非常繁重。
-
/vendors 是由 composer 生成的,同样的问题,索引很疯狂,所以最好手动压缩它并通过 cPanel 或您使用的任何服务器管理员上传。
如果您在通过 wordpress 仪表板在本地上传媒体和插件时遇到问题
您有时可能会在使用 dockers wordpress 容器 wp-content 文件夹时遇到一些权限问题。这是一个简单的修复。当您的项目在 docker 中启动并运行时,在项目中运行这些 docker compose 命令以更改 wp-content 文件夹的权限..
显示正在运行的 docker 容器命令..
docker ps
返回结果..
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4052536e574a wordpress:latest "docker-entrypoint.s…" 1 hour ago Up 1 hour 0.0.0.0:80->80/tcp demo_wordpress_1
b0fbb0a8f9e6 mysql:5.7 "docker-entrypoint.s…" 1 hour ago Up 1 hour 0.0.0.0:3306->3306/tcp, 33060/tcp demo_db_1
769262e584e7 mailhog/mailhog:latest "MailHog" 1 hour ago Up 1 hour 1025/tcp, 0.0.0.0:8025->8025/tcp demo_mailhog_1
复制并记下wordpress:latest 容器 ID,在此示例中,我的容器 ID 是..
4052536e574a
现在使用这个 wordpress 容器 ID 运行这个命令来执行这个容器目录中的东西..
docker exec -it 4052536e574a /bin/bash
返回结果..
root@4052536e574a:/var/www/html#
现在我们位于容器根目录中,您现在可以运行此命令,该命令将递归更改 wp-content 上的权限并修复本地 wordpress 仪表板中的上传权限问题。
chown -R www-data:www-data wp-content
您可能必须在项目文件夹上运行 docker-compose down 和 docker-compose up -d 命令才能使这些更改生效,但我认为您不需要。
如果您想要一个本地自定义 URL 而不是 http://localhost
在终端(这次不在您的项目文件夹中)运行此命令来编辑您的主机文件..
sudo nano /etc/hosts
然后通过终端和WriteOut在Exit之前将您的自定义网址添加到您的主机文件中。..
127.0.0.1 local.demo.com
现在您的重定向掩码已保存在您的主机中,您需要将其添加到您的docker-compose.yml 下方的/* other wp-config defines here */..
define('WP_HOME','http://local.demo.com');
define('WP_SITEURL','http://local.demo.com');
很遗憾你不能使用https,你必须使用http。
您需要docker-compose down 和docker-compose up -d 才能让这些新定义的配置在您的本地wp-config.php 中运行。
处理您的暂存和生产 wp-config
您的服务器环境应该使用唯一的盐等独立安装,您不应该从 docker-compose.yml 配置中获取任何内容,实际上您最初只想添加这些额外的定义..
暂存 wp-config.php
define('ENVIRONMENT', 'staging');
define('WP_DEBUG', true);
define('WP_HOME','https://staging.demo.com');
define('WP_SITEURL','https://staging.demo.com');
生产 wp-config.php
define('ENVIRONMENT', 'production');
define('WP_DEBUG', false);
define('WP_HOME','https://www.demo.com');
define('WP_SITEURL','https://www.demo.com');
更新 dockers wordpress 图片
您无法通过 wordpress 仪表板更新您的本地 wordpress 网站。在我的 docker-compose.yml 示例中,我定义了 image: wordpress:latest,它会在您的 docker 应用上安装最新的 wordpress 图像。
这意味着如果您 docker-compose up -d 在当时使用旧版 wordpress 的项目中,该项目将更新到安装在 docker 上的最新 wordpress 映像。
我没有在docker-compose.yml 中亲自定义wordpress 图像版本,但如果您不希望某些项目在您下一个docker-compose up -d 项目时使用最新图像,您可以这样做。
您必须使用此命令手动更新 wordpress docker 映像..
docker pull wordpress
您必须docker-compose down 和docker-compose up -d 才能让您的项目使用最新更新,当您首次通过浏览器访问该网站时,有时需要更新wordpress 数据库。
通过仪表板上传/删除插件时的权限问题
要更改wp-content 文件夹的权限,以便可以通过仪表板写入uploads 和plugins。
确保在容器运行时运行下面的这些命令...
- 显示容器命令...
docker ps
- 记下正在运行的
wordpress 映像的容器 ID
- 在容器中执行命令(将
[container_id]替换为您的ID,不带括号)...
docker exec -it [container_id] /bin/bash
- 更改 wp-content 文件夹的权限...
chown -R www-data:www-data wp-content
这应该可以解决使用 docker compose 在本地通过 uploads 和 plugins 的仪表板上传和删除文件的任何问题。