一、前言
之前一直采用LANMP直接搭建服务,但后来使用docker后,搭建和迁移数据都很方便,所以将服务都容器化。
下面介绍一下使用docker-compose
搭建WordPress网站,并且使用Nginx的反向代理开启https的方法。
直接搭建的文章可以参考我的这一篇博文:最新Centos 7.6 LANMP搭建WordPress详细教程
二、环境准备
基础环境的搭建这里不做细讲,默认环境已经安装或者拥有下面的服务和文件:
- Nginx服务器
- docker
- docker-compose
- 域名证书(Nginx适用)
docker的安装可以参考我的这一篇博文:Ubuntu使用Docker搭建编译环境完整教程
三、docker-compose配置
(一)docker-compose.yml
注意点:
- 数据库挂载到当前
./db
文件夹 - WordPress挂载到当前
./wordpress
文件夹 - 主机ports使用的是
17080
端口,可以自行修改,后面Nginx需要反向代理到这个端口 WORDPRESS_DB_PASSWORD
是我设置的数据库密码,可自行修改,但是需要和下面的MYSQL_PASSWORD
值相同。
version: '3.1'
services:
wordpress:
image: wordpress
container_name: wordpress
restart: always
ports:
- 17080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: KDM2RwB5fcQ2X2
WORDPRESS_DB_NAME: wordpress
volumes:
- ./wordpress:/var/www/html
db:
image: mysql:5.7
container_name: wordpress_db
restart: always
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: KDM2RwB5fcQ2X2
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- ./db:/var/lib/mysql
(二)启动运行
在docker-compose.yml
所在文件夹运行下面的命令启动:
docker-compose up -d
可以使用下面的命令查看运行日志:
docker-compose logs -f
等日志显示启动完毕后,我们在浏览器里输入http://127.0.0.1:17080
应该可以看到安装界面了,如果你只需要使用ip和端口进行访问,安装完毕就可以用使用了,不需要阅读下面的步骤。
但是我们一般使用域名访问,而且本文还开启了https,所以还需要配置Nginx反向代理。
温馨提示:
如果你确定使用域名访问并开启htpps,建议可以等反向代理配置完毕后再输入域名进行安装,这样后面不用修改站点地址。
四、Nginx配置
在/etc/nginx/conf.d
里创建wordpress.conf
。
注意点:
server_name
换成你的域名ssl_certificate
和ssl_certificate_key
换成你的域名证书proxy_pass
换成你的链接和端口号
server {
listen 80;
listen [::]:80;
server_name shangyexin.com www.shangyexin.com;
# redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://www.shangyexin.com$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name www.shangyexin.com;
location / {
proxy_pass http://127.0.0.1:17080;
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
ssl_certificate /yasin/ssl/nginx/www_shangyexin_com/www.shangyexin.com.pem;
ssl_certificate_key /yasin/ssl/nginx/www_shangyexin_com/www.shangyexin.com.key;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
# intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
重启Nginx使配置生效:
systemctl restart nginx
五、WordPress配置
这时候还不要使用域名直接访问你的网站,需要在WordPress的配置里将网站地址改成你的域名:
修改完成后,浏览器里输入你的域名,应该就可以看到https开启成功了。
如果之前访问过域名链接,因为开启了HSTS,所以可以会自动跳转到域名+端口的地址,这时候需要清除缓存和cookie后再重新访问,或者使用浏览器的隐身模式,可以先确认网页可以打开。
六、结束
就这?是的,就这。
是不是超级简单?所以也许这就是容器的魅力吧。