此迁移方法适用于:https://lala.im/8668.html,但是我自己还额外做了一些修改。
注意事项:
1.我修改了新服务器上的存储位置,不是Discourse默认的/var目录,因为新服务器系统盘只有20GB,单独挂了一个数据盘在/mnt/data,所以新服务器上的数据存储位置是/mnt/data。
2.这台新服务器是我自己用ProxmoxVE开的小鸡,并且只有IPv6,所以我套了一个CloudFlare的CDN。
如果你要参考我这篇文章来迁移Discourse,务必根据自己的环境做出相应的修改。
首先登录到Discourse后台,将程序升级到最新版本:
[重要]转到设置 > 备份,启用include thumbnails in backups:
[重要]转到备份界面,启用只读模式防止新数据写入:
[重要]创建备份,勾选“包括所有上传内容”:
登录到新服务器,在新服务器上安装Docker等软件包:
apt -y update apt -y install curl git nginx curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh
克隆discourse_docker项目:
git clone https://github.com/discourse/discourse_docker.git /mnt/data/discourse cd /mnt/data/discourse
将旧服务器上的app.yml配置文件传到新服务器内:
cd /var/discourse/containers scp app.yml root@[newserveripv6address]:/mnt/data/discourse/containers
在新服务器上编辑app.yml配置文件:
nano containers/app.yml
将容器卷的路径改为/mnt/data/discourse:
volumes: - volume: host: /mnt/data/discourse/shared/standalone guest: /shared - volume: host: /mnt/data/discourse/shared/standalone/log/var-log guest: /var/log
在新服务器上重建Discourse:
./launcher rebuild app
重建完成后,在新服务器上创建默认的备份目录:
mkdir -p /mnt/data/discourse/shared/standalone/backups/default
将旧服务器上的备份传到新服务器:
cd /var/discourse/shared/standalone/backups/default scp discourse-2024-03-29-000916-v20240327000440.tar.gz root@[newserveripv6address]:/mnt/data/discourse/shared/standalone/backups/default
在新服务器上执行如下命令进入到容器内:
./launcher enter app
启用恢复功能:
discourse enable_restore
指定刚才传输过来的备份文件进行恢复:
discourse restore discourse-2024-03-29-000916-v20240327000440.tar.gz
如果恢复成功会有类似下图的回显:
执行如下命令退出容器:
exit
在新服务器上新建Nginx站点配置文件:
nano /etc/nginx/sites-available/discourse
写入如下配置:
server { listen 80; listen [::]:80; server_name bbs.example.com; if ($host = bbs.example.com) { return 301 https://$host$request_uri; } return 404; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name bbs.example.com; client_max_body_size 100m; ssl_certificate /etc/nginx/cert/bbs.example.com.pem; ssl_certificate_key /etc/nginx/cert/bbs.example.com.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; location / { proxy_pass http://unix:/mnt/data/discourse/shared/standalone/nginx.http.sock:; proxy_set_header Host $http_host; proxy_http_version 1.1; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; } }
创建目录用于存放TLS证书:
mkdir -p /etc/nginx/cert
转到CloudFlare > SSL/TLS > Origin Server,生成一张新的证书:
将申请到的证书和key分别写入到如下文件:
nano /etc/nginx/cert/bbs.example.com.pem nano /etc/nginx/cert/bbs.example.com.key
启用站点:
ln -s /etc/nginx/sites-available/discourse /etc/nginx/sites-enabled/discourse
重载Nginx:
systemctl reload nginx
修改DNS的AAAA记录到新服务器,启用小云朵。
[重要]删除原来的A记录,只保留一个AAAA记录:
当CloudFlare检测到只有一条AAAA记录时,会隐式添加一个与AAAA记录相同值的A记录:
这样就可以让Only IPv6服务器搭建的网站也能被IPv4客户端访问到。
如果一切正常,现在应该可以访问到迁移后的Discourse了,登录到后台将disable emails改为no:
至此整个迁移过程就全部完成了。
[补充]如果遇到迁移后无法创建新的备份,提示权限问题,执行如下命令即可解决:
cd /mnt/data/discourse/shared/standalone/backups chown -R 1000:www-data default
哥,能给我个联系方式吗?我没有PayPal
我想问问,哥你还在做冒险岛国际服一条龙服务没有?
做的,你留言这个qq号我加你了。
我想象中的Discourse搬家是旧服务器备份docker,新服务器恢复docker就行,难道不是这样?
我修改了新服务器上的存储位置,不是Discourse默认的/var目录
这个是怎么实现的,我修改docker配置文件好像discourse会强制安装到/var目录