遷移Discourse到新的服務器

注意事項:

1.我修改了新服務器上的存儲位置,不是Discourse默認的/var目錄,因為新服務器系統盤只有20GB,單獨掛了一個數據盤在/mnt/data,所以新服務器上的數據存儲位置是/mnt/data。

2.這台新服務器是我自己用ProxmoxVE開的小雞,並且只有IPv6,所以我套了一個CloudFlare的CDN。

如果你要參考我這篇文章來遷移Discourse,務必根據自己的環境做出相應的修改。

首先登錄到Discourse後台,將程序升級到最新版本:

遷移Discourse到新的服務器

[重要]轉到設置 > 備份,啟用include thumbnails in backups:

遷移Discourse到新的服務器

[重要]轉到備份界面,啟用只讀模式防止新數據寫入:

[重要]創建備份,勾選“包括所有上傳內容”:

登錄到新服務器,在新服務器上安裝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

如果恢復成功會有類似下圖的回顯:

遷移Discourse到新的服務器

執行如下命令退出容器:

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,生成一張新的證書:
遷移Discourse到新的服務器

將申請到的證書和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記錄:

遷移Discourse到新的服務器

當CloudFlare檢測到只有一條AAAA記錄時,會隱式添加一個與AAAA記錄相同值的A記錄:

遷移Discourse到新的服務器
這樣就可以讓Only IPv6服務器搭建的網站也能被IPv4客戶端訪問到。

如果一切正常,現在應該可以訪問到遷移後的Discourse了,登錄到後台將disable emails改為no:

遷移Discourse到新的服務器

至此整個遷移過程就全部完成了。

[補充]如果遇到遷移後無法創建新的備份,提示權限問題,執行如下命令即可解決:

cd /mnt/data/discourse/shared/standalone/backups
chown -R 1000:www-data default

原文來自LALA

原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/2516.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-03-28 13:15
下一篇 2024-03-30 15:19

發表回復

登錄後才能評論