pat*_*man 1 wordpress docker docker-compose
让我尝试解释一下我想要实现的目标:
我正在做 WordPress 开发,并尝试通过 docker 很好地设置它。我有一个文件夹themes,plugin其中包含我开发的插件和主题。该文件夹还包含 Docker 文件,以便能够在通过其 docker 映像安装 wordpress 的容器中运行它们。到目前为止一切都很好,但我无法真正实现我想要的,即使我的代码与其他所有内容分开,同时保持代码更改传播到容器。
使用官方wordpress映像(https://hub.docker.com/_/wordpress/),您应该将预安装的主题和插件放在 下的相应文件夹中/var/www/html/wp-content。使用docker-compose.yml带有音量指令的 a 可以实现这一点。
web:
image: wordpress
ports: [...]
environment:[...]
volumes:
- ./plugins:/var/www/html/wp-content/plugins/
- ./themes:/var/www/html/wp-content/themes/
Run Code Online (Sandbox Code Playgroud)
然而,在这种情况下,当容器启动时,wordpress 会将自身复制到该/var/www/html/文件夹中,并将默认主题和插件放置在上述文件夹中。而我原来的结构是“妥协的”。我不要那个。
问题是我没有找到任何方法来保持我的原始插件和主题结构不受影响,同时保持代码更改立即传播到 docker 容器。我可以一一安装插件和主题,但这也不是我想要的。
我尝试自定义 Dockerfile 或自定义入口点并摆弄符号链接等。但实际上我找不到方法来做到这一点。也许我做的都是错的,无论如何都不应该这样做。有什么建议么?
官方WordPress docker 镜像如何工作...
所在的docker-compose.yml位置,就是当前的主题文件夹!
尝试使用符号链接映射主题文件夹不是一个好主意,因为这是testing主题所在的位置。这只会让我假设你可能从你的问题中遇到的事情变得混乱。
这是我在 noob docker wp 开发人员中经常看到的常见现象。他们认为他们必须编辑 docker 构建的文件。您永远不会编辑或访问由 docker 构建的容器文件...因为当您编辑或访问时docker-compose down,所有数据都将被删除。
每次docker-compose up -d在包含配置文件的文件夹上运行时docker-compose.yml,docker 每次都会构建一个全新的 WordPress 安装。
然后,当您运行时,docker-compose down它将删除所有容器,删除数据库、插件并上传数据。
因此,下次当您docker-compose up -d参与此项目时,您将必须重新进行 WordPress 安装设置,并且您将丢失以前的所有开发数据、插件和上传。
将每个本地 WordPress 项目视为自己的项目!
我没有在此答案中包括子主题的用法,但我的方法可以扩展以适应子主题。
当我说将每个项目视为自己的项目时。包含的项目文件夹docker-compose.yml是您的 git 存储库!随着时间的推移,您的操作系统上将拥有每个单独的本地 wp 项目/站点的文件夹。
每个本地文件夹都是您当前项目/站点的开发主题!
docker-compose.yml在您了解 docker 如何根据您的配置重建容器之前,请勿尝试使用单个配置来处理多个项目/主题。
创建一个新的空本地文件夹/项目。
docker-compose.yml将文件添加到您的项目..
将此代码复制到您的 yml 配置中...
version: '3.7'
networks:
wordpress:
ipam:
config:
- subnet: 172.25.0.0/16
services:
# here is our mysql database
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 server
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', 'whoever@example.com');
define('WORDPRESS_SMTP_FROM_NAME', 'Whoever');
/* add any more custom wp-config defines here */
# here is our mail hog server
mailhog:
image: mailhog/mailhog:latest
ports:
- "8025:8025"
networks:
- wordpress
Run Code Online (Sandbox Code Playgroud)
确保您的 Docker 应用程序是最新的。如果任何以前的 docker 项目正在运行,请在项目中使用此命令将其关闭...
docker-compose down
Run Code Online (Sandbox Code Playgroud)
然后在您的新项目文件夹中运行此命令来构建新的 WordPress 站点...
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
现在,这将在您的项目文件夹中构建一个带有持久文件夹的新安装...
在访问该站点之前,您需要使用此配置代码uploads.ini将该文件夹更新为实际uploads.ini文件...
file_uploads = On
memory_limit = 2000M
upload_max_filesize = 2000M
post_max_size = 2000M
max_execution_time = 600
Run Code Online (Sandbox Code Playgroud)
所以现在你将拥有...
在您再次访问该网站之前,最好放入一些基本主题文件,以便您的主题在您访问该网站和管理时运行。
为了让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;
});
Run Code Online (Sandbox Code Playgroud)
现在下面的这些网址就可以使用了...
因此,每次您docker-compose down执行docker-compose up -d此项目时,您的环境都会从您上次中断的位置准确启动。
随着项目的发展,高级主题开发,将每一个内容整合到项目/文件夹中,使得管理多个主题项目变得更加容易。
比如像这样...
如果您想在本地部署现有的主题/项目。获取现有的主题文件夹和内容,并在操作系统本地找到它。
不要尝试映射
themes您的文件夹docker-compose.yml,以便您可以手动添加主题并激活它。这不是办法!
本质上(与上面相同),docker-compose.yml在现有主题的根目录(本地)中创建一个文件。
如果您不需要任何现有的db//来运行此主题,则只需(如上所示)使用构建全新的 WordPress 安装并将持久的plugins//映射到此现有的本地主题文件夹中。uploadsdocker-compose up -ddbpluginsuploads
显然,如果您现有的主题项目文件夹以前包含任何名为
db/plugins/ 的子文件夹uploads,那么尝试使用我的 yml 配置(上面提到的)重建可能会很困难。确保您现有的主题文件夹没有具有这些名称的子文件夹...db/plugins/uploads。
如果您想使用 docker 部署现有主题/项目,同时保留来自生产或暂存环境的数据,db那么plugins...uploads
创建一个在现有主题中调用的文件夹和子文件夹docker/db-dumps以及docker-compose.yml带有 yml 配置的文件(如上所示)。
在启动之前,将mySql数据库转储文件(示例dump.sql)放入此现有主题中docker/db-dumps,并将任何所需的插件/上传plugins和uploads文件夹放入其中。像这样...
请注意,在上面的屏幕截图演示中,我没有显示任何现有的主题文件。如果您尝试这样做,上面的演示屏幕截图子目录结构将附加到您现有的主题文件夹文件中。
当您的生产或临时数据库 sql 转储和插件/上传正确定位后,您唯一需要编辑的docker-compose.yml是...
# here is our mysql database
db:
image: mysql:5.7
volumes:
# - ./db:/var/lib/mysql:delegated (remove this and add the line below)
- ./docker/db-dumps:/docker-entrypoint-initdb.d:delegated
Run Code Online (Sandbox Code Playgroud)
这意味着当您执行转储时docker-compose up -d,它将首先运行转储并将转储的 sql 生成到新安装中,并将数据库部署到该db文件夹。
这意味着如果您希望在下一个中重建此数据docker-compose up -d,那么您需要将其恢复docker-compose.yml到我的原始db卷,以便 docker 从您停止的位置重建。
如我的高级开发屏幕截图所示,您将看到一个 git 忽略文件。一般来说,如果您使用我的高级开发屏幕截图中显示的技术,这就是 git 忽略文件内容的样子...
/vendor
/uploads
/db
/dist
/node_modules
/plugins
/docker
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2702 次 |
| 最近记录: |