youngtsai commited on
Commit
c826342
·
1 Parent(s): e4b7236

gcloud setting

Browse files
Files changed (4) hide show
  1. Dockerfile +26 -0
  2. Makefile +75 -0
  3. local_config_example.json +2 -0
  4. upload_secrets.sh +65 -0
Dockerfile ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.11-slim
2
+
3
+ WORKDIR /app
4
+
5
+ # 安裝系統依賴
6
+ RUN apt-get update && apt-get install -y \
7
+ ffmpeg \
8
+ && rm -rf /var/lib/apt/lists/*
9
+
10
+ # 複製應用程式檔案
11
+ COPY requirements.txt .
12
+ COPY *.py .
13
+ COPY *.json ./
14
+
15
+ # 安裝 Python 依賴
16
+ RUN pip install --no-cache-dir -r requirements.txt
17
+
18
+ # 設定環境變數
19
+ ENV PORT=8080
20
+ ENV IS_ENV_LOCAL=false
21
+
22
+ # 暴露連接埠
23
+ EXPOSE 8080
24
+
25
+ # 啟動應用程式
26
+ CMD exec python app.py
Makefile ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 從 local_config.json 讀取配置
2
+ PROJECT_ID := $(shell jq -r '.PROJECT_ID // "ai-square-463013"' local_config.json)
3
+ SERVICE_NAME := $(shell jq -r '.SERVICE_NAME // "vaitor2"' local_config.json)
4
+
5
+ # 檢查必要的環境變數
6
+ check-config:
7
+ @test -f local_config.json || (echo "錯誤:需要 local_config.json 文件" && exit 1)
8
+
9
+ # 專案相關變數
10
+ REGION := asia-east1
11
+ IMAGE_NAME := gcr.io/$(PROJECT_ID)/$(SERVICE_NAME)
12
+
13
+ # 確保有登入 gcloud
14
+ .PHONY: auth
15
+ auth: check-config
16
+ gcloud auth login
17
+ gcloud config set project $(PROJECT_ID)
18
+ gcloud auth configure-docker
19
+
20
+ # 上傳 secrets 到 Secret Manager
21
+ .PHONY: secrets
22
+ secrets: check-config
23
+ gcloud services enable secretmanager.googleapis.com
24
+ ./upload_secrets.sh
25
+
26
+ # 建立並推送 Docker image
27
+ .PHONY: docker
28
+ docker: check-config
29
+ docker build -t $(IMAGE_NAME) .
30
+ docker push $(IMAGE_NAME)
31
+
32
+ # 部署到 Cloud Run
33
+ .PHONY: deploy
34
+ deploy: check-config
35
+ gcloud run deploy $(SERVICE_NAME) \
36
+ --image $(IMAGE_NAME) \
37
+ --platform managed \
38
+ --region $(REGION) \
39
+ --allow-unauthenticated \
40
+ --memory 2Gi \
41
+ --cpu 2 \
42
+ --port=8080 \
43
+ --set-secrets="\
44
+ PASSWORD=$(SERVICE_NAME)-PASSWORD:latest,\
45
+ OPEN_AI_KEY=$(SERVICE_NAME)-OPEN_AI_KEY:latest,\
46
+ OPEN_AI_ASSISTANT_ID_GPT4_BOT1=$(SERVICE_NAME)-OPEN_AI_ASSISTANT_ID_GPT4_BOT1:latest,\
47
+ OPEN_AI_ASSISTANT_ID_GPT3_BOT1=$(SERVICE_NAME)-OPEN_AI_ASSISTANT_ID_GPT3_BOT1:latest,\
48
+ OPEN_AI_MODERATION_BOT1=$(SERVICE_NAME)-OPEN_AI_MODERATION_BOT1:latest,\
49
+ GROQ_API_KEY=$(SERVICE_NAME)-GROQ_API_KEY:latest,\
50
+ JUTOR_CHAT_KEY=$(SERVICE_NAME)-JUTOR_CHAT_KEY:latest,\
51
+ PERPLEXITY_API_KEY=$(SERVICE_NAME)-PERPLEXITY_API_KEY:latest,\
52
+ GOOGLE_APPLICATION_CREDENTIALS_JSON=$(SERVICE_NAME)-GOOGLE_APPLICATION_CREDENTIALS_JSON:latest"
53
+
54
+ # 一次執行所有步驟
55
+ .PHONY: all
56
+ all: auth secrets docker deploy
57
+
58
+ # 只更新 Docker image 和部署(不處理 secrets)
59
+ .PHONY: update
60
+ update: docker deploy
61
+
62
+ # 顯示說明
63
+ .PHONY: help
64
+ help:
65
+ @echo "可用的指令:"
66
+ @echo " make auth - 登入 Google Cloud"
67
+ @echo " make secrets - 上傳 secrets 到 Secret Manager"
68
+ @echo " make docker - 建立並推送 Docker image"
69
+ @echo " make deploy - 部署到 Cloud Run"
70
+ @echo " make all - 執行所有步驟(auth + secrets + docker + deploy)"
71
+ @echo " make update - 只更新 Docker image 和部署"
72
+ @echo ""
73
+ @echo "注意:請確保 local_config.json 中有以下設定:"
74
+ @echo " PROJECT_ID: \"$(PROJECT_ID)\""
75
+ @echo " SERVICE_NAME: \"$(SERVICE_NAME)\""
local_config_example.json CHANGED
@@ -1,4 +1,6 @@
1
  {
 
 
2
  "OUTPUT_PATH": "/Users/young/Downloads",
3
  "TRANSCRIPTS": [],
4
  "CURRENT_INDEX": 0,
 
1
  {
2
+ "PROJECT_ID": "xx-xxxx-xxx",
3
+ "SERVICE_NAME": "xxx",
4
  "OUTPUT_PATH": "/Users/young/Downloads",
5
  "TRANSCRIPTS": [],
6
  "CURRENT_INDEX": 0,
upload_secrets.sh ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ # 1. 讀取 local_config.json
4
+ CONFIG_FILE="local_config.json"
5
+ PREFIX="vaitor2"
6
+
7
+ # 不使用 TMP_DIR,直接在專案根目錄產生暫存檔
8
+
9
+ echo "開始處理 secrets 上傳..."
10
+
11
+ # 2. 需要處理的 key
12
+ KEYS=(
13
+ PASSWORD
14
+ OPEN_AI_KEY
15
+ OPEN_AI_ASSISTANT_ID_GPT4_BOT1
16
+ OPEN_AI_ASSISTANT_ID_GPT3_BOT1
17
+ OPEN_AI_MODERATION_BOT1
18
+ GROQ_API_KEY
19
+ JUTOR_CHAT_KEY
20
+ PERPLEXITY_API_KEY
21
+ GOOGLE_APPLICATION_CREDENTIALS_JSON
22
+ )
23
+
24
+ # 3. 逐一處理每個 key
25
+ for KEY in "${KEYS[@]}"; do
26
+ echo "\n==== 處理 $KEY ===="
27
+ FILENAME="${KEY}.txt"
28
+ VALUE=$(jq -c --raw-output ".${KEY}" "$CONFIG_FILE")
29
+
30
+ # 如果是 null 就跳過
31
+ if [[ "$VALUE" == "null" ]]; then
32
+ echo "Skip $KEY (null)"
33
+ continue
34
+ fi
35
+
36
+ # 如果是物件(GOOGLE_APPLICATION_CREDENTIALS_JSON),直接存成 JSON
37
+ if [[ "$KEY" == "GOOGLE_APPLICATION_CREDENTIALS_JSON" ]]; then
38
+ echo "$VALUE" > "$FILENAME"
39
+ echo "已將 $KEY 內容存成 JSON 檔 $FILENAME"
40
+ else
41
+ echo -n "$VALUE" > "$FILENAME"
42
+ echo "已將 $KEY 內容存成文字檔 $FILENAME"
43
+ fi
44
+
45
+ set -x
46
+ # 建立 secret(如果已存在會失敗,請自行決定是否要先刪除舊的)
47
+ echo "嘗試建立 secret: ${PREFIX}-${KEY}..."
48
+ gcloud secrets create "${PREFIX}-${KEY}" --data-file="$FILENAME" 2>/dev/null
49
+
50
+ # 如果已存在就更新
51
+ if [[ $? -ne 0 ]]; then
52
+ echo "Secret ${PREFIX}-${KEY} 已存在,改為 add new version..."
53
+ gcloud secrets versions add "${PREFIX}-${KEY}" --data-file="$FILENAME"
54
+ echo "已為 ${PREFIX}-${KEY} 新增版本"
55
+ else
56
+ echo "Secret ${PREFIX}-${KEY} 已建立"
57
+ fi
58
+ set +x
59
+
60
+ # 刪除暫存檔
61
+ rm "$FILENAME"
62
+ echo "$FILENAME 已刪除"
63
+ done
64
+
65
+ echo "\n所有 secrets 已處理完畢!"