> ## Content Index
> Fetch the complete content index at: https://taiwanding.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# Hostinger KVM 4 搬家到 KVM 2：VPS 省錢攻略與 Ghost CMS 遷移實戰
- URL: https://taiwanding.com/hostinger-kvm-4-ban-jia-dao-kvm-2-vps-sheng-qian-gong-lue-yu-ghost-cms-qian-yi-shi-zhan/
- Published: 2026-03-01T11:36:31.000Z
- Updated: 2026-07-15T02:50:27.000Z
- Author: Kevin Chen
- Tags: #hostinger, vps, tool

## 前言

最近收到 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 還便宜一半以上。

### 省錢小提醒

1. **不要加 Daily auto-backup**：Hostinger 的自動備份 $6-12/月，兩年下來 $144-288，幾乎跟 VPS 一樣貴，自己寫 cron job 備份免費搞定。
2. **續約價會變貴**：KVM 2 續約價是 $14.99/月，兩年後記得重新評估。
3. **免費 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 資料夾和設定檔：

```bash
cd /path/to/ghost
sudo tar czf /root/ghost-backup.tar.gz content/ config.production.json

```

因為舊機用的是 MySQL，還需要 dump 資料庫：

```bash
sudo mysqldump --no-tablespaces -u DB_USER -p'DB_PASSWORD' ghost_db > ~/ghost-db-backup.sql

```

> 💡 如果你的 Ghost 是用 SQLite，資料庫檔案就在 `content/data/` 裡面，不用額外 dump。

### Step 2：新機基礎設定

新機開好之後，先更新系統：

```bash
apt update && apt upgrade -y
reboot

```

建立非 root 使用者（Ghost 官方不建議用 root 跑）：

```bash
adduser youruser
usermod -aG sudo youruser

```

記得幫新使用者加 SSH key：

```bash
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 目前要求的版本）：

```bash
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt install -y nodejs

```

安裝 MySQL 和 Nginx：

```bash
apt install -y mysql-server nginx

```

建立 Ghost 用的資料庫：

```bash
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：

```bash
npm install -g ghost-cli

```

### Step 4：安裝 Ghost

切換到非 root 使用者，建立目錄並安裝：

```bash
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：匯入舊資料

把備份檔傳到新機（透過本地當中繼）：

```bash
# 從舊機拉到本地
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：

```bash
# 匯入資料庫
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 蓋過去，需要修正成新機的設定：

```json
{
  "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"
  }
}

```

記得修正權限：

```bash
sudo chown ghost:ghost /var/www/ghost/config.production.json
sudo chmod 664 /var/www/ghost/config.production.json

```

重啟 Ghost：

```bash
sudo systemctl restart ghost_taiwanding-com

```

### Step 7：設定 SSL

先刪除 Nginx 預設頁面（不然會擋住 Ghost）：

```bash
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -s reload

```

如果用 Cloudflare，先暫時把 Proxy 關掉（橘色雲朵改灰色），讓 Let's Encrypt 能直接驗證：

```bash
cd /var/www/ghost
ghost setup ssl --sslemail your@email.com

```

### Step 8：切換 DNS

1. 去 Cloudflare 修改 A record，把 IP 改成新機的 IP
2. 打開橘色雲朵（Proxied）
3. SSL/TLS 模式設為 **Full (Strict)**
4. 瀏覽器確認網站正常

### Step 9：善後

- 舊機的自動續約記得**關掉**
- 舊機資料確認搬完後，到期自然就好

## 踩坑紀錄

搬家過程中遇到幾個問題，紀錄一下：

### 1\. Ghost 啟動失敗 - config 權限問題

**錯誤訊息**：`EACCES: permission denied, open '/var/www/ghost/config.production.json'`

**原因**：解壓縮舊備份時，舊的 config.production.json 蓋掉了新的，權限變成了舊使用者的。

**解法**：

```bash
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：

```bash
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：

```bash
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：

```bash
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

```

### Fail2ban

防暴力破解：

```bash
sudo apt install -y fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

```

## Terminal 美化

都搬完了，也來幫 terminal 換個風格。加入 `~/.bashrc`：

```bash
# === 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` → 重啟 Ghost
- `ports` → 查看開放的 port

## 結語

整個搬家過程大概花了一小時左右，最後成功從 KVM 4（$371.88/年）降到 KVM 2 新帳號（$83.88/年），**一年省了將近 $290 USD**。

對於只跑 Ghost CMS 的用途來說，2 vCPU / 8GB RAM 完全綽綽有餘，搬家前記得先確認自己的實際資源使用量，很多時候我們都在為用不到的資源付費。

*如果你也在考慮 VPS 搬家，希望這篇文章對你有幫助*，*有任何問題歡迎留言討論！*