不能托管多个使用 docker 和 nginx 作为反向代理的 Wordpress 站点
Cannot host more than one Wordpress site with docker and nginx as reverse proxy
我正在尝试在一个 Digital Ocean 上托管多个站点 VPS。我正在使用 docker 来实现这一点。每个 Wordpress 站点都有自己的数据库。
使用这两个站点中任何一个的 docker-compose 文件都可以正常工作并且站点上线了。添加第二个不起作用。 (导航到域会出现 'service temporarily unavailable' 的 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
预先为 link 所有容器创建了一个名为 nginx-proxy 的网络。我省略了有关 nginx 实例的详细信息,因为它使用众所周知的 jwilder 图像,就像我说的,它似乎工作得很好。
我终于找到了答案。它是双重的:
- WORDPRESS_DB_HOST 环境变量不应该是服务,而是它引用的容器
因此改变:
WORDPRESS_DB_HOST: db:3306
至:
WORDPRESS_DB_HOST: site1_db:3306
site2 显然也是如此
- 上面的修复仍然没有产生有效的设置。当更改数据库容器以从 mariadb 而不是 mysql 构建时,它开始工作了!我完全不知道为什么这是真的。特别是因为 mysql 实例可以独立工作,但是当 运行 同时工作时,只有 mariadb 工作
我正在尝试在一个 Digital Ocean 上托管多个站点 VPS。我正在使用 docker 来实现这一点。每个 Wordpress 站点都有自己的数据库。
使用这两个站点中任何一个的 docker-compose 文件都可以正常工作并且站点上线了。添加第二个不起作用。 (导航到域会出现 'service temporarily unavailable' 的 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
预先为 link 所有容器创建了一个名为 nginx-proxy 的网络。我省略了有关 nginx 实例的详细信息,因为它使用众所周知的 jwilder 图像,就像我说的,它似乎工作得很好。
我终于找到了答案。它是双重的:
- WORDPRESS_DB_HOST 环境变量不应该是服务,而是它引用的容器
因此改变:
WORDPRESS_DB_HOST: db:3306
至:
WORDPRESS_DB_HOST: site1_db:3306
site2 显然也是如此
- 上面的修复仍然没有产生有效的设置。当更改数据库容器以从 mariadb 而不是 mysql 构建时,它开始工作了!我完全不知道为什么这是真的。特别是因为 mysql 实例可以独立工作,但是当 运行 同时工作时,只有 mariadb 工作