注意事項:
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
原文來自LALA
原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/2516.html
微信掃一掃
支付寶掃一掃