这里以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.