docker容器部署wordpress,使用原有nginx代理并开启https
搭建wordpress的时候遇到了一些小问题,记录一下从头到尾的搭建过程
搭建环境
- 服务器
阿*云 esc t6 赶上优惠八百多买了五年的,做博客够用了 - 环境版本
操作系统: centos7.6
docker: 18.09.7
docker-compose: 1.24.1
申请免费证书
阿*云可以免费申请20个
升级方法可以使用caddy自动申请证书
第一步 规划目录
- /data/wordpress 放置wordpress的 docker-compose.yml 配置文件
- /data/nginx 单独启动nginx相关配置
第二部 docker-compose配置
- 这里的wordpress 和mysql 都使用了latest镜像,可以根据自己需要修改
- mysql8 开始默认认证方式改变
- 可以用–default-authentication-plugin=mysql_native_password或者启动后重新设置密码,这里懒得弄了
配置文件如下
version: '3.1'
services:
wordpress:
image: wordpress
restart: always
depends_on:
- db
ports:
- 18080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: mywordpressuser
WORDPRESS_DB_PASSWORD: mywordpresspwd
WORDPRESS_DB_NAME: wordpress_db
volumes:
- wordpress:/var/www/html
db:
image: mysql
restart: always
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_DATABASE: wordpress_db
MYSQL_USER: mywordpressuser
MYSQL_PASSWORD: mywordpresspwd
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:
cd /data/wordpress
# 启动wordpress
docker-compose up -d
这里很多人会遇到问题,即使wordpress的depends_on 设置成了db 在第一次启动时,一样会出现无法链接数据库的各种问题,解决方式如下
先启动db, 稍后数据库启动完毕后再启动wordpress即可
docker-compose up db
docker-compose up -d
第三步 nginx配置
创建nginx容器启动脚本 /data/nginx/start.sh
cd /data/nginx
touch start.sh
chmod +x start.sh
vim start.sh # 复制下面内容到start.sh
./start.sh # 启动nginx
start.sh 文件内容如下
#!/usr/bin/env bash
docker stop nginx
docker rm nginx
docker run --name nginx \
--restart=always \
-p 80:80 \
-p 443:443 \
-v $(pwd)/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v $(pwd)/nginx/conf.d:/etc/nginx/conf.d \
-v $(pwd)/logs:/var/log/nginx \
-v $(pwd)/html:/data \
-v $(pwd)/cert:/cert \
-d nginx
第四步 配置nginx
增加配置文件/data/nginx/nginx/conf.d/wordpress.conf
其中https通过nginx来实现,所以wordpress保留现有配置即可
首先通过配置http访问,来初始化配置,nginx配置如下
server {
listen 80;
server_name blog.yujindong.com;
#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";
proxy_pass http://本机ip:$node_port$request_uri;
proxy_redirect off;
}
}
重启nginx,直接在/data/nginx目录下执行./start.sh即可
访问 http://blog.yujindong.com会打开初始配置页面
至此,http协议的配置就已经完成了
第五步开启https访问
首先使用http协议登录博客后台,在插件中选择Really Simple SSL安装并启用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nTLAGqrt-1573192077888)(https://blog.yujindong.com/wp-content/uploads/2019/11/search.png)]
将80端口301重定向到https, 配置如下
然后重启nginx
upstream wordpress {
server 192.168.x.x:18080; // 本机ip
}
server {
listen 80;
server_name blog.yujindong.com;
rewrite ^/(.*)$ https://blog.yujindong.com/$1 permanent;
}
server {
listen 443 ssl;
server_name blog.yujindong.com;
ssl_certificate /cert/xxx.pem;
ssl_certificate_key /cert/xxx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
#charset koi8-r;
access_log /var/log/nginx/wordpress.access.log main;
location / {
proxy_pass http://wordpress;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
结束
很多细节未做说明如nginx的基础配置等,不属于本文重点