多个 WordPress 站点和一个使用 Docker 的共享数据库

Posted

技术标签:

【中文标题】多个 WordPress 站点和一个使用 Docker 的共享数据库【英文标题】:Multiple WordPress sites with one shared DB using Docker 【发布时间】:2017-09-06 08:10:49 【问题描述】:

我想使用 docker 运行多个 WordPress 网站和一个共享数据库。

是否可以指定一个数据库并为某个sql文件设置一个合适的卷来为它的docker-compose.yml文件中的每个容器初始化WordPress?


例如,我有三个docker-compose.yml 文件用于共享容器、站点A 和站点B。

当我在./shared 中运行docker-compose up 时,将为两个站点(example_a 和example_b)创建两个数据库。

当我在./siteA 中运行docker-compose up 时,我想将当前数据库更改为example_a,并通过来自./siteA/mysql/setup.sql 的sql 使用一定量的数据初始化站点。

siteB 也是如此。

我知道我可以在docker-compose.yml 的 mysql 部分中指定数据库和卷,如 - WORDPRESS_DB_NAME: example_a- ./db-data/mysql.dump.sql:/docker-entrypoint-initdb.d/install_wordpress.sql,但我只有一个共享 mysql,无法为每个站点指定数据库和卷。


我有多个 docker-compose.yml 文件,如下所示。

./shared/docker-compose.yml

version: "2"

services:

  proxy:
    image: jwilder/nginx-proxy
    privileged: true
    container_name: proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./certs:/etc/nginx/certs:ro
    restart: always
    logging:
      options:
        max-size: 5m
        max-file: "10"

  mysql:
    image: mysql:5.7
    container_name: mysql
    command: >
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --max-allowed-packet=128M
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=foobar
    restart: always
    volumes:
      - db-data:/var/lib/mysql
      - ./mysql/sql-setup.sql:/docker-entrypoint-initdb.d/sql-setup.sql # to create multiple databases (e.g. example_a, example_b)
    logging:
      options:
        max-size: 5m
        max-file: "10"

volumes:
  db-data:
    driver: local

networks:
  default:
    external:
      name: shared

./siteA/docker-compose.yml

version: "2"

services:
  example_a_wordpress:
    image: wordpress
    container_name: a.example
    environment:
      WORDPRESS_DB_NAME=example_a
      WORDPRESS_DB_PASSWORD=foobar
      VIRTUAL_HOST: a.example.dev
    external_links:
      - mysql
    restart: always
    volumes:
      - ./dist/theme:/var/www/html/wp-content/themes/main
      - ./dist/assets:/var/www/html/assets
    logging:
      options:
        max-size: 5m
        max-file: "10"

networks:
  default:
    external:
      name: shared

./siteB/docker-compose.yml

version: "2"

services:
  example_b_wordpress:
    image: wordpress
    container_name: b.example
    environment:
    WORDPRESS_DB_NAME=example_b
    WORDPRESS_DB_PASSWORD=foobar
      VIRTUAL_HOST: b.example.dev
    external_links:
      - mysql
    restart: always
    volumes:
      - ./dist/theme:/var/www/html/wp-content/themes/main
      - ./dist/assets:/var/www/html/assets
    logging:
      options:
        max-size: 5m
        max-file: "10"

networks:
  default:
    external:
      name: shared

【问题讨论】:

我认为你过于复杂了。您应该研究一下 Wordpress Multisite,它几乎可以满足您的所有需求。 premium.wpmudev.org/blog/ultimate-guide-multisite 除了共享 MySQL 容器外,您还可以共享一个 Apache2/php 容器,而不是使用多个容器与官方 wordpress 镜像。 通过使用不同的前缀,您可以将所有内容存储在一个数据库中。不明白这会是你真正想要的东西。 【参考方案1】:

是的,您可以将多个 WordPress 实例安装到一个数据库中。您只需要在安装时更改每次安装的数据库前缀。只需检查您的 wp-config 并更改前缀和 DBs 凭据。

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'database_name_here');

/** MySQL database username */
define('DB_USER', 'username_here');

/** MySQL database password */
define('DB_PASSWORD', 'password_here');

/** MySQL hostname */
define('DB_HOST', 'localhost');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');

【讨论】:

【参考方案2】:

您是否尝试在wp_config.php 中设置表前缀

$table_prefix  = 'yourcustomname_';

这应该可以解决两个站点上的一个数据库连接问题..

【讨论】:

以上是关于多个 WordPress 站点和一个使用 Docker 的共享数据库的主要内容,如果未能解决你的问题,请参考以下文章

在 wordpress 中为多个站点创建编辑器

用一个数据库和一个代码库管理多个WordPress站点

Nginx位置正则表达式来处理/ sub /目录中多个WordPress站点的永久链接

如何在 Mac 的 Dock 上对应用程序的多个窗口进行分组

如何在 wamp 中使用多个 wordpress 网站?

怎样在一个服务器上安装多个wordpress