To see more:
- 目录结构
- Docker
- Nginx
- MySQL
- WordPress
- Typecho
使用 docker-compose 部署,采用系统 Nginx + docker MySQL + docker WordPress 方案 系统 Nginx 作为反向代理服务,转发对应域名下的服务至对应的 docker 化的 WordPress 服务,采用 docker-compose 部署单独的 MySQL 服务和多个 WordPress 服务。不同 WordPress 站点的数据库连接同一个 MySQL 服务,利用数据库名做区分,对应不同数据库,WordPress 单独部署,利用挂载目录对应不同站点,所有 WordPress 挂载目录统一集中至 docker-compose 服务下的 ./wwwroot/ 目录下。
采用和 https://github.com/helloMJW/docker-lnmp 类似的目录结构
./
├── LICENSE
├── README.md
├── app
│ └── nginx
│ ├── vhost
│ │ └── www.zfou.net.conf
│ └── wordpress.conf
├── data
│ ├── mysql
│ └── mysql_init
│ └── 01-databases.sql
├── docker-compose.yml
└── wwwroot
├── www.demo1.com
└── www.demo2.com
- docker-compose.yml
# ./docker-compose.yml
version: "3"
services:
nginx:
image: nginx:1.12.1-alpine
container_name: wordpress_nginx
ports:
- "8000:80"
links:
- wordpress_1:wordpress
volumes:
- ./app/nginx/vhost:/etc/nginx/conf.d
db:
image: mysql:5.7
container_name: wordpress_mysql
command: mysqld --performance_schema=0 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./data/mysql:/var/lib/mysql
- ./data/conf:/etc/mysql/conf.d
- ./data/mysql_init:/docker-entrypoint-initdb.d
restart: always
environment:
MYSQL_ROOT_PASSWORD: love1314
MYSQL_DATABASE: wordpress_www_zfou_net
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress_1:
image: wordpress:latest
container_name: wordpress_www.zfou.net
volumes:
- ./wwwroot/www.zfou.net:/var/www/html
depends_on:
- db
links:
- db:mysql
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress_www_zfou_net
- docker 命令
# login to database by docker-compose
docker-compose exec db mysql -uroot -p -e 'show databases;'
wordpress.conf 配置文件需要写入系统 Nginx 配置中,作为反向代理,转发请求至 docker 服务中的 Nginx
# ./app/nginx/wordpress.conf
upstream wordpress-host {
server 127.0.0.1:8000 fail_timeout=10s;
#server 127.0.0.1:8001 fail_timeout=10s;
}
server {
listen 80;
server_name zfou.net www.zfou.net m.zfou.net;
#client_max_body_size 10M;
location / {
proxy_pass http://wordpress-host;
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Connection "";
}
# config for gzip
gzip on;
gzip_min_length 1k;
gzip_comp_level 4;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_types text/plain application/javascript application/x-javascript
text/css application/xml text/javascript image/jpeg image/gif image/png;
gzip_vary on;
}
cp ./app/nginx/wordpress.conf /etc/nginx/conf.d/wordpress.conf
vhost 配置文件挂载到 docker 服务中的 Nginx 配置下
# ./app/nginx/vhost/www.zfou.net.conf
server {
listen 80;
server_name zfou.net www.zfou.net;
location / {
#proxy_pass http://127.0.0.1:8000;
proxy_pass wordpress_1:80;
#proxy_http_version 1.1;
#proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header Connection "";
}
#location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
# expires 7d;
# access_log off;
#}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# config for gzip
gzip on;
gzip_min_length 1k;
gzip_comp_level 4;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_types text/plain application/javascript application/x-javascript
text/css application/xml text/javascript image/jpeg image/gif image/png;
gzip_vary on;
}
- mysql_init
docker 创建 mysql 容器时,会初始化数据库,初始化文件依赖于此
- 01-databases.sql
# 01-databases.sql
# create databases if it doesn't exist
# CREATE DATABASE IF NOT EXISTS `wordpress_www_zfou_net`;
# create wordpress user and grant rights
# CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'wordpress';
# GRANT ALL ON wordpress_*.* TO 'wordpress'@'%';
暂采用 docker image + sqlite3 方案,站点不大,暂时不使用 MySQL 故,数据全部在 ./wwwroot/m.zfou.net/ 目录下,sqlite数据库文件在 ./wwwroot/m.zfou.net/usr/m.zfou.net.db
- nginx
调整 nginx wordpress.conf 配置文件 增加 nginx vhost 配置文件
- docker-compose.yml
增加 typecho 片段
services:
nginx:
...
links:
- wordpress_1:wordpress
- typecho_1:typecho
...
...
typecho_1:
image: yangxuan8282/typecho
container_name: typecho_m.zfou.net
restart: "always"
volumes:
- "./wwwroot/m.zfou.net:/var/www/html"