iT邦幫忙

2026 iThome 鐵人賽

DAY 22
0
Vibe Coding

上岸用AI,看小白如何從無到有的用Vibe Codeing開發遊戲系列 第 22 篇

Day 22:生產環境建置與 CI/CD 自動化部署 —— Docker 多階段建置、GCP Cloud Run 與 Cloudflare CDN

  • 分享至 

  • xImage
  •  

歡迎來到第二十二天!今天我們進入「產品正式上線」第一步:搭建穩定且可彈性擴充的生產環境與 CI/CD 自動化部署管線。


1. Ktor 後端 Docker 多階段建置 (Multi-stage Build)

為了縮小容器 Image 體積並提升部署速度,我們採用 Docker 多階段建置:

# ===== 階段 1:Gradle 編譯打包 =====
FROM gradle:8.5-jdk17 AS builder
WORKDIR /app
COPY --chown=gradle:gradle . .
# 打包出包含所有相依套件的 Shadow JAR
RUN gradle shadowJar --no-daemon

# ===== 階段 2:Alpine 輕量化運行環境 =====
FROM eclipse-temurin:17-jre-alpine AS runner
WORKDIR /app

# 設定環境變數與容器 Port
ENV PORT=8080
EXPOSE 8080

# 僅複製編譯好的 JAR 檔 (體積從 800MB 縮小至 60MB!)
COPY --from=builder /app/build/libs/*-all.jar /app/game-backend.jar

# 建立非 Root 安全使用者
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/game-backend.jar"]

2. Nginx 反向代理與 HTTPS / SSL 憑證配置

LINE LIFF 與綠界 Webhook 強制要求 HTTPS (TLS 1.2+) 傳輸協定:

# /etc/nginx/conf.d/game_platform.conf
upstream ktor_backend {
    server 127.0.0.1:8080;
    keepalive 32;
}

server {
    listen 443 ssl http2;
    server_name api.yourstore.com;

    ssl_certificate /etc/letsencrypt/live/api.yourstore.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/api.yourstore.com/privkey.pem;

    location / {
        proxy_pass http://ktor_backend;
        proxy_http_version 1.1;
        
        # 支持 WebSocket 長連接升級
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

💡 鐵人賽小知識:為什麼 Multi-stage Build 能讓 Docker Image 體積縮小 80%?

Tech Tip:傳統 Dockerfile 會把 Gradle SDK、原始碼與編譯快取全留在最終 Image 中(常超過 1GB)。透過 Multi-stage Build,第一個階段完成 JAR 打包後,第二個階段僅需基於輕量 JRE Alpine 複製 .jar 檔,不但將 Image 壓至 60MB 左右,還能隔離原始碼,顯著提升安全性與 Cloud Run 冷啟動(Cold Start)速度!



上一篇
Day 21:階段三總結與 21 天心路歷程 —— 從跨界小白到 Vibe Coding 的破局之旅
系列文
上岸用AI,看小白如何從無到有的用Vibe Codeing開發遊戲 共 22 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言