# Coolify + Cloudflare Tunnel 部署指南

## 問題摘要

原本透過 Coolify 的 Traefik 反向代理部署 Docker 容器，遇到 503/404 錯誤。

### 根本原因

1. **Coolify beta 版本 (4.0.0-beta.442)** 的 Traefik 無法正確路由 Docker 容器
2. **Cloudflare Tunnel 萬用字元規則** (`*.anlstudio.cc`) 優先於特定主機名稱規則

### 解決方案

繞過 Traefik，改用 Cloudflare Tunnel 直接連線到容器。

---

## 部署新映像檔 (Docker Image) 步驟

### 1. 建立 Coolify 應用程式

```bash
coolify app create dockerimage \
  --server-uuid <伺服器UUID> \
  --project-uuid <專案UUID> \
  --docker-registry-image-name "your-image:tag" \
  --ports-exposes "3000" \
  --domains "http://your-domain.anlstudio.cc"
```

### 2. 同步環境變數

```bash
coolify app env sync <app-uuid> --file .env.your-app
```

### 3. 取得容器 IP

```bash
# SSH 進入伺服器
ssh -i ~/Desktop/ssh-key.key ubuntu@138.2.104.7

# 查詢容器 IP
docker inspect $(docker ps -qf 'label=coolify.name=<app-uuid>') \
  --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'
```

### 4. 設定 Cloudflare Tunnel

在 **Cloudflare Zero Trust Dashboard** → **Networks** → **Tunnels** 新增 Public Hostname：

| 欄位 | 值 |
|-----|---|
| Subdomain | `your-subdomain` |
| Domain | `anlstudio.cc` |
| Type | `HTTP` (非 HTTPS!) |
| URL | `<容器IP>:3000` |

### 5. ⚠️ 重要：調整路由順序

**特定主機名稱必須排在萬用字元之前！**

正確順序：
```
1. your-domain.anlstudio.cc → http://<容器IP>:3000
2. *.anlstudio.cc → http://138.2.104.7:80
```

### 6. 重啟 Cloudflared

```bash
docker restart cloudflared-pw00w88ss4ckkg8kwcgw0kws
```

---

## 部署注意事項

> [!WARNING]
> **容器 IP 會在每次重啟/重新部署後變更！**

每次重新部署後需要：
1. 重新查詢容器 IP
2. 更新 Cloudflare Tunnel 的 URL

### 長期解決方案

- 升級 Coolify 到正式版本，讓 Traefik 正常運作
- 或將 cloudflared 加入容器網路，使用容器名稱而非 IP

---

## 快速驗證指令

```bash
# 測試連線
curl -sS -o /dev/null -w "%{http_code}" https://your-domain.anlstudio.cc/

# 查看容器狀態
coolify app get <app-uuid> --format pretty

# 查看容器日誌
coolify app logs <app-uuid> --lines 30
```

---

## 相關 UUID 參考

| 項目 | UUID |
|-----|-----|
| 伺服器 | `igcskocw4kcgko4wswc8wwoo` |
| PayloadCMS 專案 | `j8kkko4gc0gs00w44gs8swk0` |
| Enchuna CMS v2 應用程式 | `q0kcgo0gs8w4c08wowowg4ss` |
