「一個好的 AI Agent 專案,最難的往往不是寫出演算法,而是如何確保每次代碼更新都能以自動化、無縫且能以 Zero-Downtime 的方式部署至生產伺服器。」
在 Day 13 中,我們探討了如何透過 Podman 撰寫 Containerfile 將 FastAPI 應用打包,並由 Systemd (angelina.service) 進行服務化託管。今天我們將進入自動化部署的核心章節——deploy/deploy.sh 自動化部署腳本實作與 CI/CD 流程整合!
這套腳本專為 RHEL 企業級 Linux 伺服器打造,結合 Git 版本控管、Podman 零快取建置與 Systemd 服務動態重載,實現「一鍵拉取、自動編譯與零人工失誤」的部署體驗。
在生產伺服器 /opt/angelina 目錄下,我們撰寫了 deploy/deploy.sh。腳本開頭設置了 set -e(遇到任何非零返回碼知識立刻終止),確保部署過程中只要有任何一個步驟失敗,就會立刻中斷並回報,避免將有瑕疵的代碼部署至線上:
Bash
#!/usr/bin/env bash
# ==============================================================================
# Angelina AI Agent - One-Click Deployment Script
# Path: /opt/angelina/deploy/deploy.sh
# ==============================================================================
set -euo pipefail
APP_DIR="/opt/angelina"
IMAGE_NAME="angelina-agent:latest"
SERVICE_NAME="angelina.service"
echo "[1/5] Starting deployment pipeline for Angelina Agent..."
# Step 1: 進入專案目錄並拉取最新 Git 代碼
cd "${APP_DIR}"
echo "[2/5] Pulling latest changes from git repository..."
git pull origin main
# Step 2: 使用 Podman 重新建置容器映像檔
echo "🔨 [3/5] Building Podman container image..."
podman build -t "${IMAGE_NAME}" -f Containerfile .
# Step 3: 重新載入 Systemd 服務設定
echo "[4/5] Reloading systemd manager configuration..."
systemctl daemon-reload
# Step 4: 重啟 Angelina Systemd 服務
echo "[5/5] Restarting ${SERVICE_NAME}..."
systemctl restart "${SERVICE_NAME}"
# Step 5: 探測健康檢查端點,確認部署成功
echo "🔍 Verifying application health..."
sleep 3
if curl -s -f http://127.0.0.1:8080/health > /dev/null; then
echo "Deployment completed successfully! Angelina Agent is healthy."
else
echo "Health check failed! Please check logs using: journalctl -u ${SERVICE_NAME} -n 50"
exit 1
fi
set -euo pipefail 嚴格防錯:
(1) -e:任何命令出錯即刻退出。
(2) -u:未定義變數視為錯誤。
-o pipefail:管道(Pipe)中只要有一個指令失敗,整體即判定失敗。
Podman 無縫重新建置:
(1) 執行 podman build 時,Podman 會比對檔案雜湊值,自動完成套件快取與層級建置,大幅縮短 deployment 時間。
Systemd 安全重啟機制:
(1) 配合在 Day 13 寫好的 angelina.service,當執行 systemctl restart angelina.service 時,Systemd 會先執行 ExecStartPre 停止並清理舊容器,再帶入掛載參數啟動新容器。
即時健康檢查驗空(Health Gatekeeper):
(1) 重啟後自動使用 curl -s -f http://127.0.0.1:8080/health 發起探測。若未回傳 HTTP 200,立刻回報錯誤並指引維運者查看 journalctl 日誌。
搭配我們專案中的 Ansible 目錄,維運者只需在 Local 管理端執行一行 Playbook,即可遠端觸發伺服器上的 deploy.sh 腳本,實現去中心化的自動化維運:
YAML
# ansible/deploy_playbook.yml
- name: Trigger Angelina Agent Deployment Pipeline
hosts: angelina_servers
become: yes
tasks:
- name: Ensure deploy.sh has execution permissions
file:
path: /opt/angelina/deploy/deploy.sh
mode: '0755'
- name: Execute automated deployment script
command: /opt/angelina/deploy/deploy.sh
register: deploy_output
- name: Display deployment log
debug:
var: deploy_output.stdout_lines
到今天為止,我們完成了一套具備基礎架構、AI 推理大腦、長效記憶、RAG 知識檢索、自動化數據管線,以及容器化與自動化部署的 Angelina AI Financial Expert Agent 核心系統!
這套架構讓 Agent 能在 RHEL 伺服器上實現 數據 100% 留存本地、營運成本 $0 元 的穩定運作。隨後我們將進一步針對 Agent 的思考品質、防禦機制與效能瓶頸進行深入調優與演進!
明日預告:【Day 15】(敬請期待~)