原本的VPS是Centos 6的,系统比较老,而且不支持docker,wordpress本身就是lnmp一套走完,在宿主机上也要耗费不少时间,最近疫情肆虐,在家闲着也是闲着,着手把系统升级到7,7原生的支持docker,顺手也把网站的部署容器化。
备份
没看到网上有比较详细的资料应该怎么备份,有的说是通过wordpress的插件,有的说是备份wordpress的实际目录,据我观察,比较关键的内容是数据库和wp-content
文件夹。实际体验后发现,插件会备份一堆乱七八糟的没用的东西,博客网站最重要的是内容,其次是文件,最后是样式,剩下的都是没用的。内容在数据库,文件和样式分别对应content和themes的设置。
- 备份数据库,看一下wp用的哪个database,用
mysqldump -u {username} -p {passwd} --databases {db_name} > wp_db.sql
保存数据库的所有数据,大括号圈住的字段是要换成自己的参数,例如mysqldump -u root -p rootpw --databases wp-db > wp_db.sql
。 - 备份
wp-content
下面你觉得有用的内容,不是所有都需要,uploads
文件夹里面是你之前上传过的文件,我只有这个比较重要,所以我直接scp下来了。
升级系统
直接在云厂商的可视化控制台上一键升级
Docker部署wordpress以及https设置
- 安装docker engine以及docker compose
- https://docs.docker.com/install/linux/docker-ce/centos/
- https://docs.docker.com/compose/install/
- 选择一个位置新建一个目录,用于存放
docker-compose.yaml
文件,需要用的几个镜像,分别是- mysql 5.7
- phpmyadmin (可选,mysql的可视化控制台)
- nginx
- wordpress
- https-portal (封装了https ssl证书申请服务的一个镜像)
- portainer(可选的,这个镜像提供一个可视化的容器管理界面)目录下新建
docker-compose.yaml
文件:
version: '3'
services:
db:
image: mysql:5.7
container_name: mysql57
volumes:
- ./db-data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: YOURPASSWD
MYSQL_DATABASE: DATABASENAME
MYSQL_USER: USER
MYSQL_PASSWORD: PASSWD
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
container_name: phpmyadmin
ports:
- "9090:80"
environment:
- MYSQL_USER=MYSQLUSER
- MYSQL_PASSWORD=USERPASSWD
- MYSQL_ROOT_PASSWORD=ROOTPASSWD
- PMA_HOST=mysql57
links:
- db
wordpress:
links:
- db
image: wordpress:5-fpm
volumes:
- ./php-uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
- ./wordpress:/var/www/html
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: DUSER
WORDPRESS_DB_PASSWORD: PASSWD
WORDPRESS_DB_NAME: DBNAME
web:
image: nginx
depends_on:
- wordpress
restart: always
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- ./wordpress:/var/www/html
- ./logs:/var/log/nginx
https-portal:
image: steveltn/https-portal:1
container_name: https-portal
depends_on:
- web
- phpmyadmin
ports:
- 80:80
- 443:443
restart: always
volumes:
- ./ssl_certs:/var/lib/https-portal
environment:
#DOMAINS: 'localhost -> http://web:80 #local'
DOMAINS: 'jeffdingzone.com -> http://web:80 #staging' # Uncomment when you want to test a staging cert.
#DOMAINS: 'jeffdingzone.com -> http://web:80 #production' # Uncomment when you are ready for production.
CLIENT_MAX_BODY_SIZE: 64M
portainer:
image: portainer/portainer:latest
container_name: portainer-test
restart: always
ports:
- 9095:9000
volumes:
- /var/run/docker.sock:/var/run/docker.sock
这里还有两个文件,nginx.conf
和php-uploads.ini
,一个是nginx的配置文件,一个是php上传文件大小的设置文件,这个根据自己的需要进行设置。
nginx.conf
如下:
实际的时候,fastcgi_pass
这一项需要根据自己wordpress的service来设置,别的不需要改动。注意到这里没有server_name的设置。上一层实际是被https portal
容器处理了,所以域名的设置放在了https portal的环境变量里。
server {
listen 80;
root /var/www/html;
index index.php;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
client_max_body_size 64M;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass wordpress:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
php-uploads.ini
文件如下,因为我有上传大文件的需要,所以值都设置的比较大,自己可以按需进行设置
#
# Allow larger file uploads
#
file_uploads = On
memory_limit = 1024M
upload_max_filesize = 2048M
post_max_size = 2048M
max_execution_time = 36000
- 注意:
https-portal
镜像申请ssl证书时,使用的是Let's Encrypt
网站的证书,由于资源的限制,Let's Encrypt
会对每个域名的证书发放频率进行限制,详见:https://letsencrypt.org/docs/rate-limits/。因此他们提供了几个stage进行选择,以供测试,建议一开始先使用local\staging两个stage进行测试,在网站部署成功后,再改为production的stage。这里我自己就因为触发rate limit,导致一个星期之后才能使用production的stage。 docker-compose logs service_name
可以查看特定的容器的log,用于定位问题。
- 最后,在当前目录执行
docker-compose up -d
,即可启动镜像,关闭的时候,可以执行docker-compose down
,成功启动后,执行netstat -plntu
查看当前有哪些端口被监听。可以看到目录下会多出几个文件夹,这几个文件夹是容器的挂载文件,用于保证关键数据的持久化,避免容器重启后,数据丢失,并且,如果以后想要迁移网站到新的服务器,只要把整个文件夹整个打包即可。 - 浏览器中输入网址,查看网站是否部署成功,成功后,可以将
https portal
的stage改为production。重启容器即可。如果启动了phpmyadmin和portainer,可以通过http://ip:9090
,htt[://ip:9095
端口进行查看。
网站数据恢复
网站数据原本已经用备份到wp_db.sql
了,在部署好网站,设置好wordpress之后,两个方式恢复
- 本地
docker-compose exec mysql-service-name sh
进入mysql的容器,然后mysql -u username -p passwd
进mysql控制台,用source
命令读入wp_db.sql
,恢复数据 - 进
phpmyadmin
,点击导入,上传sql文件或者sql文件的压缩文件
零碎点
- cloudfare可以提供DNS和CDN服务,一定程度上防护网站、提高访问速度,用于设置dns和cdn,还可以进行简单的防攻击防护。普通网站选择免费套餐就够了。
- 本次更改后新增DB管理入口
- 本次更改后新增访问数据统计
发表回复
要发表评论,您必须先登录。