访学快要结束了,在美帝这里用着学校.edu的邮箱白嫖了微软一年的Azure云,眼看就要账号就要到期了,所以需要把站点的内容的搬到另一个Linode的一个月5刀的服务器上面去,之前还担心迁移会比较麻烦,现在发现其实还是比较简单的。
现在把站点搬到Docker上面去了,接下来迁移就更简单了,只要把Docker目录打包一下,一键迁移。
大致步骤如下:
1、用All-in-One WP Migration插件备份所有数据(注意:免费版有容量限制,大概500m左右,估计大部分个人站点都不到这个数把)
2、安装Dokcer,有很多脚本可以使用,我是在本机上安装一份,在本机Docker上确认了没有问题,才Deploy到服务器上去的,另外想吐槽一下,Windows下的Docker真难用,直接搞了我Vmware都用不了,最后还是用Vmware装Ubuntu,终于勉强能用。。。(果然Windows不适合作为生产力工具来使啊)
3、部署docker-compose,直接运行,随便建个账号,然后导入数据即可,不过这里建议不要用docker的volume存储,而是直接存在目录下面,迁移的时候,连着目录打包就行。
version: '3.3'
services:
db:
image: mysql:5.7
container_name: wp_mysql
volumes:
- ./db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: mysqlrootpassword # 随便起,和下面的 phpMyAdmin 中的需要一致
MYSQL_DATABASE: wp_mysql # 这三行设定需要和下面一致
MYSQL_USER: wordpress
MYSQL_PASSWORD: mysqlpassword
wp:
depends_on:
- db
image: wordpress:latest
container_name: wp_site
ports:
- "8700:80" # 可以根据需要改成其他端口,但下文的实例将使用1234
restart: always
links:
- db:mysql
environment:
WORDPRESS_DB_NAME: wp_mysql
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: mysqlpassword
volumes:
- ./www:/var/www/html
- ./wplog:/var/log
phpmyadmin: # 如果不需要 phpMyAdmin,可以删掉33-47行相关部分
depends_on:
- db
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
links:
- db:mysql
restart: always
ports:
- "80"
volumes:
- /sessions
environment:
MYSQL_ROOT_PASSWORD: mysqlpassword
4、nginx代理设置,由于本身服务器上安装nginx,并部署了其它服务,所以需要用nginx进行反代
server {
listen 80;
server_name www.xuzp.net;
return 301 https://www.xuzp.net$request_uri;
}
server {
listen 443;
listen [::]:443;
server_name www.xuzp.net;
ssl on;
ssl_certificate /root/.acme.sh/xuzp.net/fullchain.cer;
ssl_certificate_key /root/.acme.sh/xuzp.net/xuzp.net.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header Origin "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8700;
}
}
5、用代理的情况下,一般会出现css样式不能正确加载的问题,需要在wp-config.php里面加一行
if ($_SERVER['HTTP_X_SSL'] == 'on') $_SERVER['HTTPS']='on';
6、如果更换域名的话,在phpmyadmin里面修改域名
UPDATE wp_options SET option_value = replace(option_value, 'www.mydomain.com','www.newdomain.com') ;
UPDATE wp_posts SET post_content = replace(post_content, 'www.mydomain.com','www.newdomain.com') ;
UPDATE wp_comments SET comment_content = replace(comment_content, 'www.mydomain.com', 'www.newdomain.com') ;
UPDATE wp_comments SET comment_author_url = replace(comment_author_url, 'www.mydomain.com', 'www.newdomain.com') ;
7、一般迁移后,原来的插件不在了,需要重新下载一下插件。