技术:docker-compose部署wordpres和mysql,宿主机的nginx部署SSL证书将HTTPS反向代理到wordpress。使用的是ubuntu 20.04
准备工作:
-一台云服务器,一个已经备案的域名
-免费申请到的nginx的SSL证书
-docker、docker-compose、nginx已部署,确认可以拉取镜像
一、docker-compose部署wordress和mysql
在/opt下创建一个wordpress的文件夹并创建docker-compose.yml文件,创建和启动mysql和wordpress容器。
mkdir -p /opt/wordpress&&cd /opt/wordpress&&vim docker-compose.yml
version: '3.1'
services:
wordpress:
image: wordpress
restart: always #容器因为某种原因停止时,Docker Compose始终尝试重新启动它
ports:
- 8080:80 #端口映射。宿主机8080端口被映射到容器80端口
environment: #设置了 WordPress 所需的环境变量,以连接到 MySQL 数据库
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes: #定义一个卷映射,将主机的 /opt/wordpress 目录映射到容器的 /var/www/html
- /opt/wordpress:/var/www/html
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- /opt/mysql:/var/lib/mysql
启动docke-compser.yml
docker-compose -f docker-compose.yaml up -d
-f:调用文件
-d:开启守护进程
在浏览器访问wordpress,并将修改站点地址为域名,后面部署ssl证书重定向到这个域名
starless.site:8080
二、配置nginx反向代理和SSL证书
将下载下来的SSL证书上传到服务器,我是上传到/opt/ssl目录下的
配置nginx文件,
vim /etc/nginx/sites-available/default
server {
listen 80;
server_name starless.site www.starless.site;
return 301 https://www.starless.site$request_uri; #所有到达这里请求,返回一个301永久重定向响应,将HTTP重定向到HTTPS,并带上原始请求的URI($request_uri
}
server {
listen 443 ssl http2; #在443端口上监听HTTPS,并使用HTTP/2协议
server_name www.starless.site;
ssl_certificate "/opt/ssl/starless.site_bundle.pem"; #配置SSL证书
ssl_certificate_key "/opt/ssl/starless.site.key"; #配置SSL秘钥
location / {
proxy_pass http://localhost:8080;
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 https;
}
修改好后重新加载一下nginx的配置文件。
nginx -s reload
修改wordpress配置文件,
如果直接代理过去,会有很多问题,需要修改/opt/wordpress/wp-config.php。这个是docker容器挂载的卷,添加以下内容
vi /opt/wordpress/wp-config.php
define('FORCE_SSL_ADMIN', true);
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false){
$_SERVER['HTTPS'] = 'on';
$_SERVER['SERVER_PORT'] = 443;
}
if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
}
define('WP_HOME','https://starless.site/');
define('WP_SITEURL','https://starless.site/');
最后重启一下docker容器
docker-compose -f wordpress.yml restart
访问web页面,ssl秘钥也生效了
starless.site