注意事項:
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-hant/n/2516.html