步驟一:在雲端主機面板建立實例(選作系統:Ubuntu 22.04 與最小映像)。
步驟二:本機產生金鑰對(Linux/Mac):ssh-keygen -t ed25519 -C "your@email",複製公鑰到雲主機管理面板或使用 cloud-init。
步驟三:首次連線後建立非 root 管理員並設定 sudo:
sudo adduser deployer; sudo usermod -aG sudo deployer; mkdir -p /home/deployer/.ssh; chmod 700 /home/deployer/.ssh; echo "你的公鑰" > /home/deployer/.ssh/authorized_keys; chmod 600 /home/deployer/.ssh/authorized_keys; chown -R deployer:deployer /home/deployer/.
編輯 /etc/ssh/sshd_config:關閉密碼登入、禁止 root 直接登入、限制登入使用者:
PermitRootLogin no; PasswordAuthentication no; AllowUsers deployer
重啟 SSH:sudo systemctl restart sshd。測試新連線、保留管理終端後再關閉現有連線。建議改變預設 22 埠(同時別忘設定防火牆規則)。
啟用 UFW 並允許必要埠:
sudo apt update && sudo apt install -y ufw fail2ban; sudo ufw default deny incoming; sudo ufw default allow outgoing; sudo ufw allow 22/tcp; sudo ufw allow 80/tcp; sudo ufw allow 443/tcp; sudo ufw enable
安裝並配置 fail2ban(防暴力破解):編輯 /etc/fail2ban/jail.local,針對 sshd 啟用並設定 ban 時間與閾值,重啟服務 sudo systemctl restart fail2ban。
安裝更新並啟用 unattended-upgrades:
sudo apt install -y unattended-upgrades apt-listchanges; sudo dpkg-reconfigure --priority=low unattended-upgrades
設定 NTP:sudo apt install -y chrony; sudo systemctl enable --now chrony。確認時區為台灣(Asia/Taipei):sudo timedatectl set-timezone Asia/Taipei。
新增區塊儲存後,使用 lsblk 確認裝置名稱(例如 /dev/sdb),建立分割與格式化:
sudo parted /dev/sdb --script mklabel gpt mkpart primary ext4 0% 100%; sudo mkfs.ext4 /dev/sdb1
將其掛載到 /data:sudo mkdir /data; sudo blkid /dev/sdb1;編輯 /etc/fstab 加入 UUID=xxxxx /data ext4 defaults,noatime 0 2,然後 sudo mount -a。若需 LVM 或 RAID,依步驟建立並測試快照策略。
安裝 Certbot 並取得 Let’s Encrypt 憑證(以 Nginx 為例):sudo apt install -y certbot python3-certbot-nginx; sudo certbot --nginx -d example.com
確認自動續期:sudo systemctl status certbot.timer;可手動測試 sudo certbot renew --dry-run。將 http 強制跳轉至 https,並設定 HSTS 及安全 header。
採用輕量監控 agent(Prometheus node_exporter + Grafana)或雲端監控服務:
安裝 node_exporter:下載官方二進位檔並建立 systemd 服務;在 Prometheus server 新增 scrape target。
設定基本監控指標:CPU、RAM、磁碟使用、網路延遲;並在 Grafana 建立 dashboard 與可視化告警(透過 Alertmanager 或雲端通知)。
建議採用多重備份:雲端快照(時間點恢復)、rsync 到異地備份伺服器、資料庫專用備份(mysqldump 或 pg_dump)與定期驗證恢復流程。
範例 cron:每日資料庫備份並上傳 S3-like 儲存桶:
/etc/cron.d/db-backup: 0 3 * * * root /usr/local/bin/backup-db.sh
backup-db.sh 範例:PGPASSWORD=xxx pg_dump -U user dbname | gzip > /backup/db-$(date +\%F).sql.gz && aws s3 cp /backup/db-$(date +\%F).sql.gz s3://your-bucket/。
推薦使用 Docker + docker-compose 或 Kubernetes(EKS/GKE/自建 k8s)進行部署。簡易流程:
1) 在 CI(如 GitHub Actions)建置映像並推到私有 registry;2) 測試環境部署驗證;3) 使用藍綠或滾動更新於生產環境;4) 健康檢查與流量切換。
示例 GitHub Actions:build -> push -> trigger 部署腳本(使用 SSH 或 API 呼叫雲端 LB)。
不要把密碼或金鑰硬編在程式碼中。選擇雲端 KMS(若有)或 HashiCorp Vault 管理密文,應用端透過短期憑證或環境變數注入。
步驟示例:在部署腳本中,呼叫 Vault API 取得 DB 密碼,再以 docker secret 或 k8s secret 注入容器。定期輪換金鑰並記錄存取日誌。
選擇台灣或鄰近節點可降低延遲;測試使用 mtr/traceroute 與 curl -sI 確認路徑與 RTT。若處理個資,務必遵循台灣個人資料保護法(PDPA),確認備份與第三方服務的資料流向。
如果需跨國備援,設計資料同步與延展一致性策略,並在 SLA 與合約中明確備援/恢復時限。
答:建議使用 mtr -rw <目標IP或域名> 取得即時路徑與丟包率,利用 ping 檢查延遲,curl -v 測試服務層連線。若懷疑 ISP 或雲端節點問題,可在不同區域(家用、資料中心)做對比;另可使用 tcptraceroute 或 iperf3 進行吞吐量測試,並比對雲端提供商的流量與路由報表來定位問題。
答:對於磁碟,先於雲端面板擴充區塊裝置大小,然後在系統內使用 growpart 與 resize2fs(ext4)或 xfs_growfs(xfs)擴展檔案系統;若是 LVM,需 pvresize 與 lvextend。對於 CPU/記憶體,若支援熱擴充會自動生效,否則需排定維護窗口並做滾動升級(替換實例或啟用 auto-scaling),確保有健康檢查與流量導向機制避免中斷。
答:第一步在雲端面板使用「救援模式」或啟動救援磁碟(recovery ISO),掛載原始磁碟進行檢查(fsck)或修改 /etc/ssh/sshd_config;若為系統損毀,可從快照建立新實例並將應用資料掛載回去。若是應用層故障,可將流量切到備援實例或使用負載均衡器的健康檢查移除故障實例。事先準備 SOP 與自動化 runbook(例如透過 Ansible 腳本)能大幅縮短恢復時間。