我用的服务器是阿里云的,操作系统是centos7.9
需要安装docker(这里不详细描述)
为了服务器尽可能多的被利用(即不仅仅是用作博客),尽量将nginx和wordpress分不同用户部署
需要申请ssl证书,可自行在阿里云上申请免费证书
需要开启https
这里提供两种方式,一种是不用nginx跳转的(这种比较简单),第二种是利用nginx跳转并实现https
前提是centos7安装了docker
因为想把服务器高度利用,所以每个应用都做了用户分离
useradd -g docker wordpress 2. su 到 wordpress 用户,新建docker-compose.yml文件并编辑
# 新建 docker-compose.yml 文件 并编辑
vim docker-compose.yml
version: '3.7'
services:
db:
image: mysql:5.7
hostname: mysql
volumes:
- /home/wordpress/db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_root_password
MYSQL_DATABASE: your_database
MYSQL_USER: your_user
MYSQL_PASSWORD: your_password
ports:
- "3306:3306"
networks:
- mynet
wordpress:
depends_on:
- db
image: wordpress:latest
hostname: wordpress
restart: always
links:
- db
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: your_user
WORDPRESS_DB_PASSWORD: your_password
WORDPRESS_DB_NAME: your_database
ports:
- "8000:80"
volumes:
- /home/wordpress/wordpress_data:/var/www/html
networks:
- mynet
volumes:
db_data:
wordpress:
networks:
bridge: mynet
docker-compose -f docker-compose.yml up -d 4. 查看容器运行状态
docker ps 5. 浏览器访问
http://ip:8000
因为想把服务器高度利用,所以每个应用都部署在了不同的用户
useradd -g docker wordpressuseradd -g docker nginx 2. 创建docker网络
注意:因为我们需要通过两个用户(即wordpress和nginx)分别创建wordpress和nginx容器,这里就涉及到 nginx容器访问wordpress容器的问题
# 我们可以查看一下当前docker网络
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
38465999**** bridge bridge local
3b031875**** host host local
7c1a2a89**** none null local
# 我们创建自己的docker网络,默认就是bridge
$ docker network create wp-net
# 再次查看docker网络,可发现已创建成功
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
38465999**** bridge bridge local
3b031875**** host host local
7c1a2a89**** none null local
c0140c3d**** wp-net bridge local 3. su 到 wordpress 用户,新建docker-wordpress.yml文件并编辑
# 新建 docker-wordpress.yml 文件 并编辑
vim docker-wordpress.yml
version: '3.3'
services:
db:
image: mysql:5.7
hostname: mysql
volumes:
- /home/wordpress/db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_root_password
MYSQL_DATABASE: your_database
MYSQL_USER: your_user
MYSQL_PASSWORD: your_password
ports:
- "3301:3306"
networks:
- "mynet"
wordpress:
depends_on:
- db
image: wordpress:latest
hostname: wordpress
restart: always
links:
- db
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: your_user
WORDPRESS_DB_PASSWORD: your_password
WORDPRESS_DB_NAME: your_database
ports:
- "18080:80"
volumes:
- /home/wordpress/wordpress_data:/var/www/html
networks:
- "mynet"
volumes:
db_data:
wordpress_data:
networks:
mynet:
external:
name: wp-net 4. 启动wordpress容器
docker-compose -f docker-wordpress.yml up -d 5. 查看容器运行状态
docker ps 6. 访问博客网址
http://ip:18080
这时候想配置wp就配置,不想配置就等nginx配好之后再弄 到这儿只要确保我们的wp能正常访问运行即可COPY 7. su 到 nginx 用户,新建docker-nginx.yml文件并编辑
# 新建 docker-nginx.yml 文件 并编辑
vim docker-nginx.yml
version: "3.3"
services:
my-nginx:
image: nginx
container_name: my-nginx
hostname: mynginx
restart: always
ports:
- "80:80"
- "443:443"
privileged: true
volumes:
- /home/nginx/nginx/html:/usr/share/nginx/html
- /home/nginx/nginx/nginx.conf:/etc/nginx/nginx.conf
- /home/nginx/nginx/conf.d:/etc/nginx/conf.d
- /home/nginx/nginx/logs:/var/log/nginx
- /home/nginx/nginx/cert:/cert
environment:
- TZ=Asia/Shanghai
networks:
- "mynet"
networks:
mynet:
external:
name: wp-net 8. 启动nginx容器 并查看
docker-compose -f docker-nginx.yml up -d
docker ps 9. 停止nginx容器 配置conf
当上一步nginx容器启动成功之后,你会发现在当前目录下生成了 nginx/ 目录(因为已经通过volume挂载) 我们就需要在这里面配置 nginx的配置文件
$ cd nginx/conf.d
# 新建并编辑wordpress.conf,第一步实现http功能
$ vim wordpress.conf
server {
listen 80;
server_name xxxxblog;
#charset koi8-r;
access_log /var/log/nginx/wordpress.access.log main;
set $node_port 18080;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
// 这里需要填写你的容器IP,可以通过 docker network inspect wp-net 查看
proxy_pass http://your_wordpress_ip:80;
proxy_redirect off;
proxy_connect_timeout 1s;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
} 10. 重启服务,访问测试
docker restart my-nginx
http://ip
如果访问成功则进行下一步配置https
若没访问成功,可以排查一下 nginx 到 wordpress 容器间网络问题,或nginx配置 11.配置 https (这里省略了证书申请过程,大家可以通过阿里云申请免费证书)
# 备份一下之前写的 wordpress.conf
$ cp wordpress.conf wordpress.conf.http
# 编辑
$ vim wordpress.conf
upstream wordpress {
server your_wordpress_ip:80 ; // wordpress容器地址
}
server {
listen 80;
rewrite ^/(.*)$ https://url/$1 permanent;
}
server {
listen 443 ssl;
server_name xxxxblog;
ssl_certificate /cert/XXX.pem;
ssl_certificate_key /cert/XXX.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
#charset koi8-r;
access_log /var/log/nginx/wordpress.access.log main;
location / {
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 X-Forwarded-Proto $scheme;
proxy_pass http://wordpress;
proxy_connect_timeout 1s;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
} 12. 重启服务,访问测试
docker restart my-nginx
https://ip
若没访问成功,排查一下nginx配置 或 证书配置路径等!