forked from alterminal/alterminal
實現 Dockerfile:多階段建置(golang:1.26-alpine → scratch)
- 建置階段:BUILDPLATFORM 原生執行、交叉編譯至目標平臺,BuildKit 快取掛載(go mod download / build cache)加速重複建置 - 執行階段:scratch+單一靜態執行檔(無 CGO、模板與樣式 go:embed 內嵌),以非 root UID 65532 執行,ENTRYPOINT 採 exec 形式直接接收訊號 - .dockerignore 排除 .git、tools/、Markdown 等非建置所需檔案 - README 增加 Docker 段落(建置、連資料庫容器、CLI 子指令用法) 實作 #1
This commit is contained in:
@@ -105,6 +105,40 @@ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o alterminal ./cmd/alterminal
|
||||
# ARM 伺服器改用 GOARCH=arm64
|
||||
```
|
||||
|
||||
### Docker
|
||||
|
||||
倉庫根目錄提供 `Dockerfile`(多階段建置:`golang:1.26-alpine` 編譯 → `scratch` 執行,無 CGO、以非 root UID 65532 執行、`ENTRYPOINT` 為 exec 形式可直接接收訊號)。建置與執行:
|
||||
|
||||
```bash
|
||||
# 建置映像(buildx 會依所在平臺自動交叉編譯;BuildKit 快取掛載加速重複建置)
|
||||
docker build -t alterminal .
|
||||
|
||||
# 讓資料庫容器(上節的 alterminal-db)與服務同網路,以容器名互連
|
||||
docker network create alterminal-net 2>/dev/null || true
|
||||
docker network connect alterminal-net alterminal-db
|
||||
|
||||
docker run -d --name alterminal \
|
||||
--network alterminal-net \
|
||||
-e DB_HOST=alterminal-db \
|
||||
-e DB_PORT=5432 \
|
||||
-e DB_USER=postgres \
|
||||
-e DB_PASSWORD=postgres \
|
||||
-e DB_NAME=alterminal \
|
||||
-e ISSUER=http://localhost:8080 \
|
||||
-p 8080:8080 \
|
||||
alterminal
|
||||
# 資料庫在 host 上(未容器化)時:Docker Desktop 用 -e DB_HOST=host.docker.internal;
|
||||
# Linux 加 --add-host=host.docker.internal:host-gateway
|
||||
|
||||
# 驗證
|
||||
docker exec alterminal /alterminal create-account -username alice -email alice@example.com -password '...(至少 8 字元)'
|
||||
curl http://localhost:8080/health # => ok
|
||||
```
|
||||
|
||||
- 環境變數同「環境變數」一節(`DB_*`、`ISSUER`;服務固定監聽 `:8080`,`PORT` 尚未支援,容器無須設定)
|
||||
- 映像為 `scratch`+單一靜態執行檔(模板與樣式已內嵌),不含 shell;CLI 子指令以 `docker exec <容器> /alterminal <子指令>` 執行
|
||||
- 建置脈絡以 `.dockerignore` 排除 `.git`、`tools/`、Markdown 等非建置所需檔案
|
||||
|
||||
- 編譯前建議先跑測試:`go test ./...`
|
||||
|
||||
### 帳號管理 CLI
|
||||
|
||||
Reference in New Issue
Block a user