Hostinger KVM 4 搬家到 KVM 2:VPS 省錢攻略與 Ghost CMS 遷移實戰
前言
最近收到 Hostinger 的續約通知,KVM 4 一年要價 $371.88 USD,換算下來月費約 $31,對於只跑一個 Ghost CMS 部落格來說,這個價格實在太貴了,於是決定趁這次機會好好研究一下 VPS 市場,順便紀錄整個搬家過程。
為什麼要搬?
先看一下舊機的實際使用狀況:
- RAM:16GB 配置,全年最高用到 4GB 左右
- CPU:長年在 10% 以下
- 用途:只跑 Ghost CMS 部落格
簡單來說,4 vCPU / 16GB RAM 的 KVM 4 對一個部落格完全是殺雞用牛刀,Ghost 官方建議最低 1GB RAM 就能跑了,我卻在用 16GB,等於有 12GB 的 RAM 在那邊空轉燒錢。
VPS 比價:同規格能省多少?
既然要搬家,那就來好好比較一下市場上類似規格的 VPS 方案。以下是跑 Ghost CMS 夠用的規格(2-4 vCPU / 4-16GB RAM)的比較:
| 供應商 | 方案 | 規格 | 月費 | 年費估算 | 備註 |
|---|---|---|---|---|---|
| Hostinger KVM 4 | 續約 | 4C/16G/200G | ~$31 | $371.88 | 舊方案 |
| Hostinger KVM 2 | 新帳號首購 | 2C/8G/100G | $6.99 | ~$84 | 24 個月方案 |
| Hetzner CX32 | Shared | 4C/8G/80G NVMe | ~$7.5 | ~$90 | 美國 Ashburn 有機房 |
| Vultr HF | High Frequency | 2C/4G/128G NVMe | $24 | $288 | Intel 3GHz+ 保證 |
| DigitalOcean | Premium Intel | 2C/4G/80G NVMe | $21 | $252 | 可指定 Intel CPU |
最終選擇:Hostinger KVM 2 新帳號
決定用吃 Hostinger 新購優惠:
- KVM 2 / 24 個月方案
- 2 vCPU / 8GB RAM / 100GB NVMe
- $6.99/月,兩年共 $167.76
- 美國 Phoenix 機房
兩年 $167.76,比原本 KVM 4 一年 $371.88 還便宜一半以上。
省錢小提醒
- 不要加 Daily auto-backup:Hostinger 的自動備份 $6-12/月,兩年下來 $144-288,幾乎跟 VPS 一樣貴,自己寫 cron job 備份免費搞定。
- 續約價會變貴:KVM 2 續約價是 $14.99/月,兩年後記得重新評估。
- 免費 Domain 用不到就別理它:附贈的免費域名一年後續約要 ~$64/年。
Ghost CMS 遷移實戰
以下是完整的搬家步驟,從舊機備份到新機上線。
環境資訊
- 舊機:Hostinger KVM 4 / Ubuntu 24.04 with CloudPanel / Phoenix
- 新機:Hostinger KVM 2 / Ubuntu 24.04 / Phoenix
- Ghost 版本:v6.19.3
- 資料庫:MySQL
- DNS:Cloudflare
Step 1:備份舊機資料
SSH 進入舊機,打包 Ghost 的 content 資料夾和設定檔:
cd /path/to/ghost
sudo tar czf /root/ghost-backup.tar.gz content/ config.production.json
因為舊機用的是 MySQL,還需要 dump 資料庫:
sudo mysqldump --no-tablespaces -u DB_USER -p'DB_PASSWORD' ghost_db > ~/ghost-db-backup.sql
💡 如果你的 Ghost 是用 SQLite,資料庫檔案就在 content/data/ 裡面,不用額外 dump。Step 2:新機基礎設定
新機開好之後,先更新系統:
apt update && apt upgrade -y
reboot
建立非 root 使用者(Ghost 官方不建議用 root 跑):
adduser youruser
usermod -aG sudo youruser
記得幫新使用者加 SSH key:
mkdir -p /home/youruser/.ssh
echo "your-public-key" >> /home/youruser/.ssh/authorized_keys
chmod 700 /home/youruser/.ssh
chmod 600 /home/youruser/.ssh/authorized_keys
Step 3:安裝 Ghost 依賴
安裝 Node.js v22(Ghost 目前要求的版本):
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt install -y nodejs
安裝 MySQL 和 Nginx:
apt install -y mysql-server nginx
建立 Ghost 用的資料庫:
GHOST_DB_PASS=$(openssl rand -base64 24)
echo "Ghost DB Password: $GHOST_DB_PASS" # 記下這個密碼
mysql -u root -e "
CREATE DATABASE ghost_db;
CREATE USER 'ghost_user'@'localhost' IDENTIFIED BY '$GHOST_DB_PASS';
GRANT ALL PRIVILEGES ON ghost_db.* TO 'ghost_user'@'localhost';
FLUSH PRIVILEGES;
"
安裝 Ghost-CLI:
npm install -g ghost-cli
Step 4:安裝 Ghost
切換到非 root 使用者,建立目錄並安裝:
sudo mkdir -p /var/www/ghost
sudo chown youruser:youruser /var/www/ghost
cd /var/www/ghost
ghost install \
--db mysql \
--dbhost localhost \
--dbuser ghost_user \
--dbpass YOUR_DB_PASSWORD \
--dbname ghost_db \
--url https://yourdomain.com \
--process systemd \
--no-prompt
Step 5:匯入舊資料
把備份檔傳到新機(透過本地當中繼):
# 從舊機拉到本地
scp user@OLD_IP:~/ghost-backup.tar.gz ~/ghost-backup.tar.gz
scp user@OLD_IP:~/ghost-db-backup.sql ~/ghost-db-backup.sql
# 從本地傳到新機
scp ~/ghost-backup.tar.gz user@NEW_IP:/tmp/
scp ~/ghost-db-backup.sql user@NEW_IP:/tmp/
在新機上匯入資料庫和 content:
# 匯入資料庫
sudo mysql -u root ghost_db < /tmp/ghost-db-backup.sql
# 還原 content
cd /var/www/ghost
sudo tar xzf /tmp/ghost-backup.tar.gz -C /var/www/ghost/
sudo chown -R ghost:ghost /var/www/ghost/content
Step 6:修正設定檔
解壓縮會把舊的 config 蓋過去,需要修正成新機的設定:
{
"url": "https://yourdomain.com",
"server": {
"port": 2368,
"host": "127.0.0.1"
},
"database": {
"client": "mysql",
"connection": {
"host": "localhost",
"user": "ghost_user",
"password": "YOUR_NEW_DB_PASSWORD",
"database": "ghost_db"
}
},
"mail": {
"transport": "Direct"
},
"logging": {
"transports": ["file", "stdout"]
},
"process": "systemd",
"paths": {
"contentPath": "/var/www/ghost/content"
}
}
記得修正權限:
sudo chown ghost:ghost /var/www/ghost/config.production.json
sudo chmod 664 /var/www/ghost/config.production.json
重啟 Ghost:
sudo systemctl restart ghost_taiwanding-com
Step 7:設定 SSL
先刪除 Nginx 預設頁面(不然會擋住 Ghost):
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -s reload
如果用 Cloudflare,先暫時把 Proxy 關掉(橘色雲朵改灰色),讓 Let's Encrypt 能直接驗證:
cd /var/www/ghost
ghost setup ssl --sslemail [email protected]
Step 8:切換 DNS
- 去 Cloudflare 修改 A record,把 IP 改成新機的 IP
- 打開橘色雲朵(Proxied)
- SSL/TLS 模式設為 Full (Strict)
- 瀏覽器確認網站正常
Step 9:善後
- 舊機的自動續約記得關掉
- 舊機資料確認搬完後,到期自然就好
踩坑紀錄
搬家過程中遇到幾個問題,紀錄一下:
1. Ghost 啟動失敗 - config 權限問題
錯誤訊息:EACCES: permission denied, open '/var/www/ghost/config.production.json'
原因:解壓縮舊備份時,舊的 config.production.json 蓋掉了新的,權限變成了舊使用者的。
解法:
sudo chown ghost:ghost /var/www/ghost/config.production.json
sudo chmod 664 /var/www/ghost/config.production.json
2. Cloudflare 522 Error
原因:Nginx 預設頁面把 Ghost 的 vhost 擋住了。
解法:刪掉 default site:
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -s reload
3. ERR_TOO_MANY_REDIRECTS
原因:Cloudflare SSL 設成 Flexible,但 Ghost URL 設成 https,造成無限重導迴圈。
解法:裝 Let's Encrypt 後把 Cloudflare SSL 模式改成 Full (Strict)。
伺服器強化
搬完家之後,別忘了做基本的安全強化。
SSH 強化
關掉 root 登入和密碼登入,只允許 SSH key:
sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart ssh
⚠️ 跑之前務必確認你的使用者 + SSH key 可以正常登入,不然會把自己鎖在外面。
UFW 防火牆
只開放必要的 port:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Fail2ban
防暴力破解:
sudo apt install -y fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Terminal 美化
都搬完了,也來幫 terminal 換個風格。加入 ~/.bashrc:
# === Hacker Style Prompt ===
GREEN='\[\033[01;32m\]'
CYAN='\[\033[01;36m\]'
RED='\[\033[01;31m\]'
YELLOW='\[\033[01;33m\]'
RESET='\[\033[00m\]'
PS1="${GREEN}┌──[${CYAN}\t${GREEN}]─[${RED}⚡${GREEN}]─[${YELLOW}\u@\h${GREEN}]─[${CYAN}\w${GREEN}]\n${GREEN}└──╼ \$ ${RESET}"
alias ll='ls -lah --color=auto'
alias gs='systemctl status ghost_taiwanding-com'
alias gr='sudo systemctl restart ghost_taiwanding-com'
alias ports='sudo ss -tlnp'
幾個實用 alias:
gs→ 查看 Ghost 狀態gr→ 重啟 Ghostports→ 查看開放的 port
結語
整個搬家過程大概花了一小時左右,最後成功從 KVM 4($371.88/年)降到 KVM 2 新帳號($83.88/年),一年省了將近 $290 USD。
對於只跑 Ghost CMS 的用途來說,2 vCPU / 8GB RAM 完全綽綽有餘,搬家前記得先確認自己的實際資源使用量,很多時候我們都在為用不到的資源付費。
如果你也在考慮 VPS 搬家,希望這篇文章對你有幫助,有任何問題歡迎留言討論!
Member discussion