环境准备
Docker 安装见:安装 Docker
Docker Compose 的安装见:安装 Docker Compose
创建目录
用于部署 WordPress ,同时网站备份或者迁移的话备份或迁移该文件即可,即 wordpress
目录
1
| mkdir wordpress && cd wordpress && touch docker-compose.yml && mkdir volumes
|
编辑 yml 文件
docker-compose.yml
的内容需要自己修改,尝试的话用下面默认的也行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| version: '3.9'
networks: wordpress:
services: mysql: image: mysql:5.7 container_name: mysql volumes: - ./volumes/mysql:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress networks: - wordpress
wordpress: depends_on: - mysql image: wordpress volumes: - ./volumes/wordpress:/var/www/html restart: always environment: WORDPRESS_DB_HOST: mysql WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress networks: - wordpress
nginx: depends_on: - wordpress image: nginx container_name: nginx volumes: - ./volumes/nginx/conf.d:/etc/nginx/conf.d networks: - wordpress ports: - '80:80' - '443:443' restart: always
|
配置 Nginx
首先在前台启动容器
等待运行起来,屏幕不再有输出的时候 Ctrl + C
停止运行
开始配置 Nginx
1
| cd volumes/nginx/conf.d/ && mkdir certs && touch wordpress.conf
|
其中 certs目录
用于存放 SSL 证书,wordpress.conf
是 Nginx 的配置文件
编辑wordpress.conf
下方的内容同样需要自行修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| server { listen 80; listen [::]:80; # 自己的域名 server_name example.com; # 客户端请求服务器最大允许大小 client_max_body_size 100M; sendfile on; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_tokens off; keepalive_timeout 5;
# 自己的域名 server_name example.com; # SSL证书和key的绝对路径,只需要修改最后的文件名 # 对应的就是宿主机 /volumes/nginx/conf.d/certs 目录下的文件 ssl_certificate /etc/nginx/conf.d/certs/example.com.crt; ssl_certificate_key /etc/nginx/conf.d/certs/example.com.key;
ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; # 客户端请求服务器最大允许大小 client_max_body_size 100M; sendfile on;
location / { proxy_pass http://wordpress; 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; } }
|
配置 SSL 证书
如果已经有 SSL 证书,可以直接放到 certs目录
下,在上方 Nginx 的配置文件中只需要修改文件名为自己的即可
如果没有 SSL 证书,可以使用 acme.sh
脚本申请,详细见:使用 acme.sh 快速申请 SSL 证书
同样最后证书安装到 certs目录
下,下方的域名和路径自行修改
1 2 3 4
| acme.sh --install-cert -d example.com \ --key-file /root/wordpress/volumes/nginx/conf.d/certs/example.com.key \ --fullchain-file /root/wordpress/volumes/nginx/conf.d/certs/example.com.crt \ --reloadcmd "docker exec nginx service nginx force-reload"
|
修改上传大小
有些自定的主题需要自己手动上传,上面只修改了 Nginx 的允许上传大小为 100M,php 的也需要修改一下(注意一下自己的目录,我的在用户家目录下部署的)
1 2
| cd ~/wordpress/volumes/wordpress/ vim .htaccess
|
在最后加入
1 2 3
| php_value upload_max_filesize 100M php_value post_max_size 100M php_value memory_limit 100M
|
效果
从新启动容器
在 wordpress/
目录下从新启动容器,首先尝试启动以下
访问自己的网站
如果可以正常访问的话, Ctrl + C
停止运行,然后从新后台运行容器
定时备份
可以考虑备份到网盘或者 GitHub 上,这里以备份到天翼云盘为例
1、配置天翼云
下载项目,并移动可执行文件到 /usr/local/bin/
目录下
1
| curl -L https://github.com/gowsp/cloud189/releases/download/v0.5.3/cloud189_0.5.3_linux_amd64.tar.gz -o ~/cloud189.tar.gz && mkdir ~/cloud189 && tar -zxvf ~/cloud189.tar.gz -C ~/cloud189 && mv ~/cloud189/cloud189 /usr/local/bin/ && rm -rf ~/cloud189.tar.gz ~/cloud189
|
登录天翼云,输入自己的账户密码
2、配置脚本
创建脚本 autobackup.sh
这里一开始还遇到一个问题,因为天翼云这个上传脚本是 golang 写的,遇到了前台执行脚本一切正常,后台定时任务 go 程序不运行的问题,加上程序全路径解决问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #!/bin/bash echo "-------------------------------------------------------------------" echo "备份开始(`date +"%Y-%m-%d %H:%M:%S"`)"
WebsiteName=wordpress Date=$(date +"%Y%m%d")
mkdir -p /data/backup/$WebsiteName/$Date
cd /data/backup/$WebsiteName
tar -zcPf /data/backup/$WebsiteName/$Date/$WebsiteName.tar.gz /root/wordpress
echo "备份成功(`date +"%Y-%m-%d %H:%M:%S"`),文件夹为:/data/backup/$WebsiteName/$Date" echo "-------------------------------------------------------------------"
echo "同步开始(`date +"%Y-%m-%d %H:%M:%S"`)"
/usr/local/bin/cloud189 up /data/backup/$WebsiteName/$Date /Website/$WebsiteName/$Date
echo "同步完成(`date +"%Y-%m-%d %H:%M:%S"`)"
echo "删除本地备份(`date +"%Y-%m-%d %H:%M:%S"`)" rm -rf /data/backup/$WebsiteName
DELTIME=`date -d "7 days ago" +%Y%m%d` echo "开始删除云盘旧备份,删除七天前($DELTIME)的备份版本" /usr/local/bin/cloud189 rm /Website/$WebsiteName/$DELTIME
echo "-------------------------------------------------------------------"
|
授予可执行权限
可以测试执行一下
3、加入定时任务
自行修改脚本位置所在的位置
该脚本每天凌晨 2:30 执行,并记录执行日志
1
| 30 2 * * * /root/autobackup.sh >> /data/backup/autobackup.log
|