文章目录
- 欢迎关注公众号
原本的VPS是Centos 6的,系统比较老,而且不原生的支持docker。最近疫情肆虐,在家闲着也是闲着,着手把系统升级到7,顺手也把网站的部署容器化。
备份
关于如何备份,查到的资料中,有的说是通过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.7container_name: mysql57volumes:- ./db-data:/var/lib/mysqlrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: YOURPASSWDMYSQL_DATABASE: DATABASENAMEMYSQL_USER: USERMYSQL_PASSWORD: PASSWDphpmyadmin:image: phpmyadmin/phpmyadmin:latestcontainer_name: phpmyadminports:- "9090:80"environment:- MYSQL_USER=MYSQLUSER- MYSQL_PASSWORD=USERPASSWD- MYSQL_ROOT_PASSWORD=ROOTPASSWD- PMA_HOST=mysql57links:- dbwordpress:links:- dbimage: wordpress:5-fpmvolumes:- ./php-uploads.ini:/usr/local/etc/php/conf.d/uploads.ini- ./wordpress:/var/www/htmlrestart: alwaysenvironment:WORDPRESS_DB_HOST: db:3306WORDPRESS_DB_USER: DUSERWORDPRESS_DB_PASSWORD: PASSWDWORDPRESS_DB_NAME: DBNAMEweb:image: nginxdepends_on:- wordpressrestart: alwaysvolumes:- ./nginx.conf:/etc/nginx/conf.d/default.conf- ./wordpress:/var/www/html- ./logs:/var/log/nginxhttps-portal:image: steveltn/https-portal:1container_name: https-portaldepends_on:- web- phpmyadminports:- 80:80- 443:443restart: alwaysvolumes:- ./ssl_certs:/var/lib/https-portalenvironment:#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: 64Mportainer:image: portainer/portainer:latestcontainer_name: portainer-testrestart: alwaysports:- 9095:9000volumes:- /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进行选择,以供测试,建议一开始先使用localstaging两个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管理入口
- 本次更改后新增访问数据统计
欢迎关注公众号