最近把网站迁移到国内的云服务厂商上,之前几次迁移部署都是采用编译安装的方式,非常的不方便,此次采用的是docker方式搭建环境的配置,前端也不再采用nginx,采用了能够自动生成和替换证书的ca#ddy来实现的。
安装workpress
安装docker和docker-compose
# 安装docker ... # 安装docker-compose sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
编写wordpress的docker-compose.yml文件
version: "3.9" services: db: image: mysql:8.0.25 volumes: - ~/docker/mysql/data:/var/lib/mysql # docker的重启策略:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器 restart: unless-stopped command: # MySQL8的密码验证方式默认是 caching_sha2_password,但是很多的连接工具还不支持该方式 # 就需要手动设置下mysql的密码认证方式为以前的 mysql_native_password 方式 --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci environment: MYSQL_ROOT_PASSWORD: {数据库ROOT密码} MYSQL_DATABASE: {数据库名称} MYSQL_USER: {数据库普通用户名,可用来做wordpress的用户} MYSQL_PASSWORD: {数据库普通用户的密码} TZ: Asia/Shanghai ports: - 3306:3306 volumes: - ~/docker/mysql/data:/var/lib/mysql - ~/docker/mysql/conf:/etc/mysql/conf.d - ~/docker/mysql/logs:/logs networks: - app-network wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_NAME: {数据库名称} WORDPRESS_DB_USER: {数据库普通用户名,可用来做wordpress的用户} WORDPRESS_DB_PASSWORD: {数据库普通用户的密码} volumes: - ~/docker/wordpress:/var/www/html networks: - app-network networks: app-network: driver: bridge
本地需要创建mysql和wordpress的目录,docker会把本地创建的目录挂载到docker镜像中,这样mysql的数据和wordpress的配置才会在docker销毁时不会丢失。
mkdir mysql mkdir mysql/conf mkdir mysql/data mkdir mysql/log mkdir wordpress
启动docker镜像
docker-compose up
然后临时打云厂商的防火墙的8000端口,在本地看是docker是否能到安装配置页面,如果可以正常打开,说明wordpress已经安装配置完成,可以使用 docker-compose up -d
转到后台执行,我们现在需要把云厂商的防火墙关闭。
安装配置ca#ddy
编写执行脚本
#!/usr/bin/env sh VERSION=2.4.1 IMAGE=caddy:${VERSION} CMD="" docker run -itd --restart=always \ --name caddy \ --net=host \ -v $PWD/conf/Caddyfile:/etc/Caddyfile \ -v $PWD/data:/data/caddy \ -v $PWD/www:/opt/www \ ${IMAGE} caddy run -config /etc/Caddyfile
编写Ca#ddy的配置文件
https://www.{域名}.com https://{域名}.com http://www.{域名}.com http://{域名}.com { tls internal { on_demand } route /* { reverse_proxy * localhost:8000 { header_up -Origin } encode * { gzip zstd } } log { output stdout } }
预创建目录
mkdir caddy mkdir caddy/conf mkdir caddy/data mkdir caddy/www
执行脚本启动服务器,服务启动后我们在本地机器上可以通过配置hosts的方式,连接上去,看是否能打开wordpress的安装页面。
配置证书
我们使用cloudflare的证书,需要先到其官方网站上注册 https://dash.cloudflare.com/login
账号。
接下来我们需要在网站上添加我们的网站
然后到自己的域名服务商修改域名服务器为cloudflare的,等cloudflare检测通过
# 域名服务器 braden.ns.cloudflare.com shubhi.ns.cloudflare.com
接下来需要拿到我们的api key,点击cloudflare右上角 “我的个人资料” – “API令牌“
配置ca#ddy
在服务器 caddy/conf
文件夹下编写文件 caddy.service
文件内容为:
[Service] Environment=CLOUDFLARE_EMAIL={你的邮箱地址} Environment=CLOUDFLARE_API_KEY={刚拿到的cloudflare密钥}
接下来重启ca#ddy
docker restart caddy
此时用chrome打开网站,查看地址栏左侧是否提示锁的图标,如果不是也不用着急,有可能是域名解析还没有完全切换到新的域名服务器,这需要一定的时间。