Ian Chou's Blog

2026 年 Python 部署雙雄:uv + Ansible 讓 FDE 的日子不再難過

前言:為什麼 FDE 需要的不只是 Docker Compose?

你可能已經很熟悉 Docker Compose:寫一個 docker-compose.yml,然後 docker compose up -d,App、Redis、DB 一次跑起來。

但當你作為 Forward Deployed Engineer (FDE) 到客戶現場部署時,第一個會遇到的問題是:

「這台機器連 Docker 都沒裝,我要怎麼跑 Docker Compose?」

更殘酷的是,客戶可能給你一台 Red Hat Enterprise Linux 7 的裸機,而且完全斷網 (Air-gapped)

這時候你需要的就是今天的主角:


一、Ansible:機器的劇本 (Playbook)

Docker Compose vs Ansible 的職責分工

簡單來說:

Docker Compose 做不到這些事,但 Ansible 可以:

實戰範例對照

你的 Docker Compose (docker-compose.yml)

version: "3"
services:
  web:
    image: my-ai-app:latest
    ports:
      - "80:8080"

你的 Ansible Playbook (deploy.yml)

---
- name: 部署 AI 系統到客戶伺服器
  hosts: client_servers # 目標機器
  become: yes # 使用 sudo 權限

  tasks:
    # 步驟 1: 確保 Docker 已經安裝
    - name: 安裝 Docker
      apt:
        name: docker.io
        state: present

    # 步驟 2: 把專案資料夾建好
    - name: 創建專案目錄
      file:
        path: /opt/my-ai-project
        state: directory
        mode: "0755"

    # 步驟 3: 把 docker-compose.yml 丟過去
    - name: 複製 Docker Compose 檔案
      copy:
        src: ./docker-compose.yml
        dest: /opt/my-ai-project/docker-compose.yml

    # 步驟 4: 啟動 Docker Compose
    - name: 啟動服務
      command: docker compose up -d
      args:
        chdir: /opt/my-ai-project

Ansible 的兩大優勢

1. Agentless (無代理)

不需要在客戶的機器上預先安裝任何軟體(除了 Python 和 SSH)。只要你的電腦能 SSH 連進去,Ansible 就能工作。

這對 FDE 超級方便,因為客戶通常不喜歡你在他們機器上裝一堆管理軟體。

2. Idempotency (冪等性)

這個詞的意思是 「執行一次和執行一百次,結果都是一樣的」

這讓自動化腳本非常穩定,不會因為重複執行而炸開。


二、uv:Python 世界的 Bun

為什麼說 uv 就像 Bun?

如果你熟悉前端生態,這個類比會讓你秒懂:

特性 Bun (前端) uv (Python)
底層語言 Zig Rust
速度 比 npm 快 10-100 倍 比 pip 快 10-100 倍
All-in-One Runtime + Package Manager + Bundler + Test Runner Python Version Manager + venv + pip + pip-tools
安裝方式 單一執行檔 單一執行檔

uv 取代了什麼?

以前你需要這一堆工具:

現在 uv = 以上全部,而且快到飛起。

實戰對比:傳統 vs uv

傳統 venv + pip 流程

python -m venv .venv         # 1. 呼叫 python 模組建環境
source .venv/bin/activate    # 2. 啟動環境
pip install requests         # 3. 安裝套件

uv 流程

uv venv                      # 1. 極速建立虛擬環境
uv pip install requests      # 2. 安裝套件
# 或者更簡單:
uv run main.py               # 自動檢測 .venv,沒有就建,缺套件就裝

FDE 殺手級功能:內建 Python 版本管理

這是 FDE 最愛的功能。

場景:客戶機器上只有 Python 3.6(太舊),但你需要 Python 3.11。

方案 做法
傳統 自己編譯安裝 Python 3.11(超痛苦)
uv uv python install 3.11

uv 會下載一個獨立的 Python 執行檔放在 user space,完全不干擾 OS 的 Python

這解決了一個黃金法則:OS 的 Python 是神聖不可侵犯的。動了它可能會讓系統工具(如 yum, dnf)崩潰。


三、Python 3.14 時代的新戰術

No-GIL (Free-Threading) 的覺醒

Python 3.14 正式進入 No-GIL 穩定期,這對 AI Agent 開發意義重大。

面試題:「我們的 AI Agent 需要大量並行處理,你會怎麼利用 Python 3.14 的特性來優化?」

神級回答

「以往我們為了避開 GIL,只能用 multiprocessing(多進程),但這會有很高的記憶體開銷和序列化成本。」

「現在有了 Python 3.14 (Free-threaded build),我們可以真正利用 Multithreading 來跑 CPU-bound 的任務,而不需要付多進程的代價。」

什麼時候用 Threading,什麼時候用 Ray?

場景 選擇 理由
單機 + 資源受限 Python 3.14 No-GIL Threading 輕量、零延遲、共享記憶體
叢集 + 大規模 Batch Processing Ray 分散式調度、跨機器、跨 GPU

知道 "When to use what",正是 Senior FDE 的價值所在。


四、Air-gapped 環境的生存指南

殘酷的現實

當客戶給你一台完全斷網的 Linux 機器

FDE 求生包 (Offline Bundle)

1. 準備階段(在你有網路的電腦上)

下載 uv 的 binary:

curl -L https://github.com/astral-sh/uv/releases/latest/download/uv-x86_64-unknown-linux-gnu.tar.gz -o uv.tar.gz

下載所有 Python 依賴:

uv pip compile pyproject.toml -o requirements.txt
pip download -r requirements.txt -d ./wheels

打包 Docker Images:

docker save -o image.tar my-ai-app:latest

2. 部署階段(在客戶斷網的機器上)

Step 1: 安裝 uv

tar -xzf uv.tar.gz
cp uv /usr/local/bin/

Step 2: 離線安裝 Python 依賴

python3 -m venv .venv
source .venv/bin/activate
pip install --no-index --find-links=./wheels -r requirements.txt

Step 3: 載入 Docker Image

docker load -i image.tar

五、uv 的逃生門設計 (The Escape Hatch)

這是評估新工具是否敢用在生產環境的關鍵。

uv 最聰明的地方:它隨時可以匯出成標準格式

萬一在客戶那邊發現 uv 有 bug?

uv pip compile pyproject.toml -o requirements.txt

瞬間回到最傳統、最安全的 requirements.txt 模式。

引入 uv 的風險極低——你享受它的速度,但你並沒有被「鎖死 (Vendor Lock-in)」。


六、面試必備:整合話術

當面試官問:「你如何優化部署流程?」

「就像前端界現在流行用 Bun 來加速構建一樣,我在 Python 專案中引入了 uv

以前在 CI/CD pipeline 裡,光是 pip install 可能就要花 2-3 分鐘,換成 uv 後通常秒解。

而且因為 uv 是單一執行檔且跨平台,我在客戶那邊部署時,不用擔心他們原本裝了什麼版本的 pip,我直接帶一個 uv binary 過去,就能確保環境的一致性和構建速度。」

當面試官問:「客戶環境完全斷網,你要怎麼部署?」

「我會預先準備一個 Artifact Package,裡面包含:

  1. 靜態編譯的工具 Binary(如 uv)
  2. 預先下載好的 Python Wheelspip download -d
  3. Docker Images 的 tar 檔docker save

這樣我就能確保在完全沒有 Internet 的情況下,透過 docker load 和本地安裝指令完成部署。」


結論:2026 年的 FDE 人設

你不是一個停留在 2023 年還在用 venvPython 3.10 的工程師。

你是一個:

  1. 擁抱效能:知道 Python 3.14 有 No-GIL 和 JIT,並知道何時開啟它們
  2. 擁抱工具:使用 uv 來秒速管理環境,用 Ansible 來自動化機器設定
  3. 擁抱型別:用 Pydantic + 最新 Type Hinting 寫出像 TypeScript 一樣健壯的 Python 程式碼
  4. 擁抱離線:永遠準備好 Air-gapped 環境的 Offline Bundle

這就是 2026 年 Forward Deployed Engineer 的標準配備。