静看光阴荏苒
不管不顾不问不说也不念

迁移Discourse到新的服务器

此迁移方法适用于: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
赞(1)
未经允许不得转载:荒岛 » 迁移Discourse到新的服务器
分享到: 更多 (0)

评论 6

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    哥,能给我个联系方式吗?我没有PayPal :cry:

    中老年妇女之友8个月前 (04-13) Microsoft Edge 123.0.0.0 Microsoft Edge 123.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 我想问问,哥你还在做冒险岛国际服一条龙服务没有?

      中老年妇女之友8个月前 (04-13) Microsoft Edge 123.0.0.0 Microsoft Edge 123.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition回复
      • 做的,你留言这个qq号我加你了。

        LALA8个月前 (04-14) Google Chrome 102.0.0.0 Google Chrome 102.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition回复
  2. #2

    我想象中的Discourse搬家是旧服务器备份docker,新服务器恢复docker就行,难道不是这样?

    Star7个月前 (05-05) Microsoft Edge 124.0.0.0 Microsoft Edge 124.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7回复
  3. #3

    我修改了新服务器上的存储位置,不是Discourse默认的/var目录
    这个是怎么实现的,我修改docker配置文件好像discourse会强制安装到/var目录

    M4个月前 (08-15) Firefox 129.0 Firefox 129.0 Windows 10 x64 Edition Windows 10 x64 Edition回复

分享创造快乐

广告合作资源投稿