这里以memos为例。将memos应用及数据从腾讯云服务器A迁移至阿里云服务器B。
容器迁移
先在A上创建相关文件
mkdir -p /root/data/docker_data/memos
cd /root/data/docker_data/memos
touch docker-compose.yml
vim docker-compose.yml
配置如下:
version: "3"
services:
memos:
image: neosmemo/memos:latest
container_name: memeos
hostname: memeos
ports:
- "5230:5230"
volumes:
- /root/data/docker_data/memos/.memos/:/var/opt/memos
restart: always
将B上的.memos文件夹复制到配置文件中的路径。我这里使用的是transmit来sftp传输。
起容器:
docker-compose pull
docker-compose up -d
在B的阿里云后台防火墙打开5230端口访问,通过B的ip+端口访问成功,数据正确。
域名设置
我的域名、域名解析和SSL证书都是设置在阿里云的(不影响绑定腾讯云IP),对应阿里云的云解析服务和数字证书管理服务。
在云解析服务中将域名记录值从A的ip换到B的ip。将A中nginx.conf的相关配置复制到B中nginx.conf。
比如对于memos来说,我的相关配置如下:
upstream memos {
server 127.0.0.1:5230;
}
server {
#listen 80;
listen 443 ssl;
server_name memos.zhangtianchen.com;
#charset koi8-r;
#access_log logs/host.access.log main;
ssl_certificate /ssl/memos_cert.pem;
ssl_certificate_key /ssl/memos_cert.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://memos;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
在B中将ssl证书文件放到配置的/ssl路径下。可以从A中拷出来,也可以去阿里云数字证书管理服务中下载。建议直接用本地sftp工具完成,云端自带的远程连接工具会有各样的小问题。
注意对于memos等会上传数据的应用,在nginx.conf中要正确配置sendfile和 client_max_body_size参数。
这里我的免费证书都快过期了,既然要重新配置正好全部申请新的证书下载配置。
配置完nginx后记得重启:
nginx -t
nginx -s reload
再看看博客系统的后端是否有链接需要更新。通过域名访问验证,数据正确。
最后可以根据需求清理A:
docker stop memos
docker rm -f memos
rm -rf /root/data/docker_data/memos
Q.E.D.