docker/wordpress:将默认插件与自己的插件分开

2024-01-09

让我尝试解释一下我想要实现的目标:

我正在做 WordPress 开发,并尝试通过 docker 很好地设置它。我有一个文件夹themes and plugin我在其中开发插件和主题。此文件夹还包含 Docker 文件,以便能够在通过其 docker 映像安装 wordpress 的容器中运行它们。到目前为止一切都很好,但我无法真正实现我想要的,即使我的代码与其他所有内容分开,同时保持代码更改传播到容器。

使用官方的wordpress image (https://hub.docker.com/_/wordpress/ https://hub.docker.com/_/wordpress/)您应该将预装的主题和插件放在相应的文件夹中/var/www/html/wp-content。用一个docker-compose.yml通过音量指令我可以实现这一点。

web:
    image: wordpress
    ports: [...]
    environment:[...]
    volumes:
        - ./plugins:/var/www/html/wp-content/plugins/
        - ./themes:/var/www/html/wp-content/themes/

然而,在这种情况下,当容器启动时,wordpress 会将自身复制到/var/www/html/文件夹,还将默认主题和插件放在上面的文件夹中。而我原来的结构是“妥协的”。我不要那个。

问题是我没有找到任何方法来保持我的原始插件和主题结构不受影响,同时保持代码更改立即传播到 docker 容器。我可以一一安装插件和主题,但这也不是我想要的。

我尝试自定义 Dockerfile 或自定义入口点并摆弄符号链接等。但实际上我找不到方法来做到这一点。也许我做的都是错的,无论如何都不应该这样做。有什么建议么?


官方如何文字新闻 https://hub.docker.com/_/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 安装设置,并且您将丢失以前的所有开发数据、插件和上传。

本地 docker wp 处理...

将每个本地 WordPress 项目视为自己的项目!

我没有在此答案中包含子主题用法,但我的方法 可以扩展以适应儿童主题。

当我说将每个项目视为自己的项目时。项目文件夹包含docker-compose.yml是你的 git 存储库!随着时间的推移,您的操作系统上将拥有每个单独的本地 wp 项目/站点的文件夹。

每个本地文件夹都是您当前项目/站点的开发主题!

不要尝试使用单个docker-compose.yml配置来处理 多个项目/主题,直到您了解 docker 如何重建 基于您的配置的容器。

一个全新的 WordPress 主题 docker 工作流程...

创建一个新的空本地文件夹/项目。

Add 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', '[email protected] /cdn-cgi/l/email-protection');
        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

确保您的 Docker 应用程序是最新的。如果任何以前的 docker 项目正在运行,请在项目中使用此命令将其关闭...

docker-compose down

然后在您的新项目文件夹中运行此命令来构建新的 WordPress 站点...

docker-compose up -d

现在,这将在您的项目文件夹中构建一个带有持久文件夹的新安装...

在访问该网站之前,您需要更新uploads.ini文件夹到实际的uploads.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在此项目中,您的环境将在您停止的位置准确启动。

随着您的项目的增长,高级主题开发,将每一个内容整合到项目/文件夹中,使得管理多个主题项目变得更加容易。

比如像这样...

使用 docker 工作流程在本地部署现有的 wp 主题...

如果您想在本地部署现有的主题/项目。获取现有的主题文件夹和内容,并在操作系统本地找到它。

不要尝试绘制地图themes文件夹在你的docker-compose.yml所以 您可以手动添加主题并激活它。这不是办法!

本质上(与上面相同),创建一个docker-compose.yml文件位于现有主题的根目录中(本地)。

如果您不需要任何现有的db/plugins/uploads为了运行这个主题,然后简单地(如上所示)使用docker-compose up -d使用持久性构建全新的 WordPress 安装db/plugins/uploads映射到此现有的本地主题文件夹。

显然,如果您现有的主题项目文件夹以前包含名为db/plugins/uploads,然后尝试使用我的 yml 配置(上面提到的)重建可能会失败。确保您现有的主题文件夹没有具有这些名称的子文件夹...db/plugins/uploads.

如果您想使用 docker 部署现有主题/项目,同时保留db/plugins/uploads来自生产或暂存环境的数据然后......

创建一个名为的文件夹和子文件夹docker/db-dumps在您现有的主题中以及docker-compose.yml带有 yml 配置的文件(如上所示)。

在对接之前,放置一个mySql数据库转储文件(示例dump.sql) in docker/db-dumps以及任何所需的插件/上传plugins and 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

这意味着当您docker-compose up -d,它将首先运行转储并将转储的 sql 生成到新安装中,将数据库部署到db folder.

意思是如果您希望在下一次重建此数据docker-compose up -d,那么你需要恢复docker-compose.yml回到我原来的状态db卷,以便 docker 从您停止的位置重建。

Git 忽略示例...

如我的高级开发屏幕截图所示,您将看到一个 git 忽略文件。一般来说,如果您使用我的高级开发屏幕截图中显示的技术,这就是 git 忽略文件内容的样子......

/vendor
/uploads
/db
/dist
/node_modules
/plugins
/docker
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker/wordpress:将默认插件与自己的插件分开 的相关文章

随机推荐