【问题标题】:Cannot host more than one Wordpress site with docker and nginx as reverse proxy无法使用 docker 和 nginx 作为反向代理托管多个 Wordpress 站点
【发布时间】:2018-01-26 06:54:44
【问题描述】:

我正在尝试在单个 Digital Ocean VPS 上托管多个站点。我正在使用 docker 来实现这一点。每个 Wordpress 网站都有自己的数据库。

使用两个站点中的任何一个的 docker-compose 文件都可以正常工作,并且该站点可以上线。添加第二个不起作用。 (导航到域会出现“服务暂时不可用”的 nginx 错误)

我尝试从基于 apache 映像的容器启动静态网站,它确实有效。所以 nginx 反向代理确实成功地路由了流量。

我猜我需要在两个 docker-compose 文件之间进行更改。我发现的每个教程或示例都在创建第一个之后停止,并且从未真正显示正在创建的第二个 Wordpress 站点。

Wordpress 网站 1:

docker-compose.yml

version: "3"

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
     container_name: site1_db

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     expose:
       - 80
     restart: always
     environment:
       VIRTUAL_HOST: www.site1.com
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
     container_name: site1_wp
volumes:
    db_data:

networks:
  default:
    external:
      name: nginx-proxy

Wordpress 网站 2:

docker-compose.yml

version: "3"

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
     container_name: site2_db

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     expose:
       - 80
     restart: always
     environment:
       VIRTUAL_HOST: www.site2.com
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
     container_name: site2_wp
volumes:
    db_data:

networks:
  default:
    external:
      name: nginx-proxy

预先创建了一个名为 nginx-proxy 的网络来链接所有容器。我省略了有关 nginx 实例的详细信息,因为它使用了众所周知的 jwilder 图像,就像我说的那样,它似乎工作得很好。

【问题讨论】:

  • 为什么要使用两个docker-compose 文件?我认为您需要将docker-compose 文件、nginx proxy 与另一个文件合并。另外我认为你有数据库问题,因为你有两个数据库实例,它将数据库保存到同一个位置。
  • 不,每个站点都完全包含在自己的目录中,有自己的 docker-compose 文件以及映射到相关容器的文件夹
  • 您能否检查两个 wordpress 是否无法通过 nginx proxy 访问?
  • 添加你的 nginx 配置
  • jwilder nginx proxy 不需要配置。它是自动 nginx 代理。

标签: wordpress docker nginx docker-compose digital-ocean


【解决方案1】:

我终于找到了答案。它有两个方面:

  1. WORDPRESS_DB_HOST 环境变量不应该是服务,而是它所引用的容器

因此改变:

WORDPRESS_DB_HOST: db:3306

到:

WORDPRESS_DB_HOST: site1_db:3306

site2 显然也是如此

  1. 上述修复仍然无法生成有效的设置。当将数据库容器更改为从 mariadb 而不是 mysql 构建时,它开始工作!我一点也不知道为什么这是真的。尤其是mysql实例可以独立运行,但同时运行时,只有mariadb可以运行

【讨论】:

    猜你喜欢
    • 2020-02-13
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 2020-11-23
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    相关资源
    最近更新 更多