搭建准备
- 域名
- vps
- cloudflare账号
域名购买
域名托管
https://www.hao0564.com/2947.html
wordpress docker方式部署
- 编写wordpress docker-compose.yml如下,wordpress默认端口是80,这里不进行外部端口映射,通过容器ip+80端口访问wordpress,执行docker compose up -d启动容器
version: "3.7"
services:
db:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
volumes:
- db_data:/var/lib/mysql
wordpress:
depends_on:
- db
image: wordpress:latest
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: password
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
volumes:
db_data:
wordpress_data:
- 查询并记录下wordpress容器的ip地址,后面在nginx中配置反向代理要用
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
[!NOTE] 命令解释
命令docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
是用来查看 Docker 容器的 IP 地址的。这里的解释分为几个部分:
- docker inspect: 这是 Docker 命令行的一个命令,用于显示 Docker 对象的详细信息,通常是容器或者镜像。
- -f: 这个参数是
--format
的缩写,用来指定输出格式。这里使用 Go 的模板语言来定义所需的输出格式。- {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}: 这部分是一个 Go 模板表达式,用来从容器的网络设置中提取 IP 地址。这里的
range
函数遍历所有网络,.IPAddress
是从每个网络中提取 IP 地址的方法。
- .NetworkSettings.Networks: 这指的是容器的网络配置部分,一个容器可能连接多个网络。
- .IPAddress: 这是网络配置中的字段,表示分配给容器的 IP 地址。
- container_name_or_id: 这部分指的是容器的名称或者 ID,用来指定我们想要查看哪个容器的信息。
综上所述,整个命令的功能是从指定容器的所有网络配置中提取并显示每个网络的 IP 地址。这对于网络故障排查或者系统管理等任务非常有用。
服务器端ssl申请
注意先关闭nginx服务,再执行以下命令申请证书
apt-get install socat
acme.sh --issue -d 域名 --standalone -k ec-256
如果默认CA无法颁发,则可以切换下列CA:
#切换 Let’s Encrypt:
acme.sh --set-default-ca --server letsencrypt
#切换 Buypass:
acme.sh --set-default-ca --server buypass
#切换 ZeroSSL:
acme.sh --set-default-ca --server zerossl
nginx配置
配置如下:
server {
listen 80;
server_name 域名;
location / {
return 301 https://$server_name$request_uri;
}
}
server {
listen 443 ssl;
server_name 域名;
ssl_certificate 证书地址;
ssl_certificate_key 证书秘钥;
location / {
proxy_pass http://容器ip:80;
absolute_redirect off;
proxy_pass_request_headers on;
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;
}
}
cloudflare设置
- 添加域名DNS记录,主机名随便填,例如blog,内容指向部署wordpress服务器的ip地址
- 在左侧规则栏选择Configuration Rules创建配置规则,规则名称自己随便定义,选择自定义筛选表达式,字段选择主机名,运算符选择等于,值为博客网站域名,SSL加密模式选择完全。最后保存部署。
[!NOTE] 为什么使用完全的加密方式?
cloudflare默认的加密模式是灵活,它会对客户->cloudflare服务器间使用https加密的方式访问,但是在cloudflare服务器->wordpress服务器之间使用的是http请求方式,这就导致了博客网站出现一些静态文件请求跨域的问题,所以改成完全的加密方式,解决跨域问题