我发现 WordPress 开发的经验法则是,在使用 docker 本地环境时,wp 核心文件不应更改或可访问。
每次你docker-compose up -d
一个docker wordpress环境,docker会重新构建一个当前安装的docker wordpress版本。
因此,与其映射整个 WordPress 卷,不如对当前本地项目动态的文件和数据使用持久映射。
本质上,您的 Mac 上的每个本地 WordPress 项目都会有一个文件夹,您可以随时上下移动该文件夹。然后将每个文件夹作为存储库提交到 git。
确保你.gitignore
上传、插件、数据库、node_modules
ETC...
例如,在 Mac 上的任意位置创建一个项目文件夹并添加docker-compose.yml
进入包含以下配置代码的文件夹...
version: '3.7'
networks:
wordpress:
ipam:
config:
- subnet: 172.25.0.0/16
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
networks:
- 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
networks:
- wordpress
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');
define('WP_DEBUG', true);
/* configure mail 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', '[email protected] /cdn-cgi/l/email-protection');
define('WORDPRESS_SMTP_FROM_NAME', 'Whoever');
/* add anymore custom configs here... */
# here is our mail hog container
mailhog:
image: mailhog/mailhog:latest
ports:
- "8025:8025"
networks:
- wordpress
现在在此文件夹中运行命令docker-compose up -d
这将构建一个全新的安装,在你的想法中看起来像这样......
在访问和设置此本地 WordPress 安装之前http://locolhost http://locolhost你需要更换uploads.ini
带有 true 的文件夹uploads.ini
配置文件。用这个替换文件夹.ini
配置代码...
file_uploads = On
memory_limit = 2000M
upload_max_filesize = 2000M
post_max_size = 2000M
max_execution_time = 600
所以你现在将拥有...
在您再次访问该网站之前,最好放入一些基本主题文件,以便您的主题在您访问该网站和管理时运行...
For mailhog https://hub.docker.com/r/mailhog/mailhog/要工作并接收来自本地 WordPress 环境的外发邮件,您需要将其添加到您的functions.php
...
// add the action
add_action('wp_mail_failed', 'action_wp_mail_failed', 10, 1);
// configure PHPMailer to send through SMTP
add_action('phpmailer_init', function ($phpmailer) {
$phpmailer->isSMTP();
// host details
$phpmailer->SMTPAuth = WORDPRESS_SMTP_AUTH;
$phpmailer->SMTPSecure = WORDPRESS_SMTP_SECURE;
$phpmailer->SMTPAutoTLS = false;
$phpmailer->Host = WORDPRESS_SMTP_HOST;
$phpmailer->Port = WORDPRESS_SMTP_PORT;
// from details
$phpmailer->From = WORDPRESS_SMTP_FROM;
$phpmailer->FromName = WORDPRESS_SMTP_FROM_NAME;
// login details
$phpmailer->Username = WORDPRESS_SMTP_USERNAME;
$phpmailer->Password = WORDPRESS_SMTP_PASSWORD;
});
现在下面的这些网址就可以使用了...
-
http://locolhost http://locolhost- 你的网站
-
http://locolhost/admin http://localhost/admin- 您的网站 wp 管理员(网站设置后)
-
http://本地主机:8025 http://localhost:8025- mailhog 用于查看从站点发出的邮件
所以每次你docker-compose down
and docker-compose up -d
在此项目中,您的环境将在您停止的位置准确启动。
您可以添加数据库数据、上传和插件,所有这些数据都将是持久的,无需编辑核心文件。
您可以添加任何额外的wp-config.php
设置到这个docker-compose.yml
文件。但你需要docker-compose down
and up -d
以使这些配置生效。
这个主题文件夹名为testing
在 docker 容器文件中,但是如果修改style.css
文件包含以下代码,此激活的主题将显示在管理员中,并显示您设置的内容...
/*
Theme Name: Project Name
Author: joshmoto
Description: Project Description
Version: 1.0
License: Private
*/
按照你的评论。您可以尝试持久映射整个wp-content
通过在现有的卷中使用它来从您的卷中docker-compose.yml
...
# here is our mysql container
db:
image: mysql:5.7
volumes:
- ./db:/var/lib/mysql:delegated
# here is our wordpress container
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- ./wp-content:/var/www/html/wp-content
- ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
您可能需要使用持久性db
映射和uploads.ini
如果您希望本地环境使用与上一个会话相同的主题设置和数据重新启动,仍然如此。