2026年5月12日 星期二

用 Go 語言,使用 Gin 開發 Docker 的 Web 應用

我要做一個範例,請 Claude 幫我生成。

很簡單,使用Docker,用 GO 語言,儘量用 1.25 版。然後 Docker 基底可以使用 alpine 或 Ubuntu。Docker 有一個 volume,可以放 SQLite 資料庫。

然後用 Gin 寫一個 Web 應用,曝露 port 是 8080。

程式很簡單,有一個簡單的首頁,讓你輸入帳號和密碼。資料庫也很簡單,三個欄位:1. id:自動新增的 int,2. name : varchar(20),3. password:varchar,存加密後的密碼。

底下有一個 URL,跳到另一個畫面:新增帳號,有三個輸入方塊:帳帳和兩個密碼。

程式要讓兩個密碼相同才能接受,然後自動跳到首頁。

密碼要加密。

首頁只做一件事,從資料庫中查找帳號、密碼(不用解碼,也可像用 MD5 對照)是否在其中。符合就跳出一個畫面,上面只有四個字在正中央:歡迎光臨。

然後必須把 Docker file 也做好。如果有 Docker Compose File 更好了。

結果呢,Claude 生成程式碼的能力是很強,但是,要它像個 AI Agent 一樣,幫你把目錄結構弄好,檔案部署到檔案它該放置的地方,它還是做不到的。所以呢,這件事就由我自己來做。

我們先查看 Claude 幫我們生成的應用架構:

goapp/

├── main.go               ← Gin 路由 + DB + 密碼加密

├── go.mod                ← 模組定義

├── Dockerfile            ← 多階段建置

├── docker-compose.yml    ← 一鍵啟動

└── templates/

    ├── index.html        ← 登入首頁

    ├── register.html     ← 新增帳號

    └── welcome.html      ← 歡迎光臨

所以呢,這兩層的目錄結構就由自己建立並且將生成的程式,手動部署到它該自己放的地方。

先把這七個檔案上傳上來。只需要下載即可。

https://drive.google.com/file/d/1ccc1oB6J4Y6VMzsD97CpxRfVYsR0Q6Wu/view?usp=sharing


再來

# 下載所有套件、產生 go.sum
go mod tidy



ls -l go.sum

有!

go build -o server .

OK 後

現在進 Docker 階段:

第一步:建立 Docker Image

docker build -t goapp .





藍色的字,好傷眼。
這會跑一段時間(第一次要下載 alpine base image)。

其實喔,只要 GO 程式 build 過後,Docker Compose 就能執行了。




看到 container goapp started 綠字出現,其實就代表 Docker Compose 成功了。我們可以確認一下:

然後,打開瀏覽器,一開始不是請 Claude 建立一個曝露 port 8080 的 WEB 應月嗎?



第一次使用,沒有帳號,按下下方的「還沒有帳號?立即註冊 →」。


這只是測試帳號


成功。其實這是一張動畫,我只取擷圖。



成功!
接著,我們來看看 Claude 幫我們生成的七個檔案,go.sum 是 GO 編譯器生成的,我們就不列了:

main.go



go.mod


Dockerfile


docker-compose.yml


index.html


register.html


welcome.html

最後,我們來觀察一下 Docker 生成的資料庫。
Docker 的 Volume 會開在 /var/lib/docker/volumes/goapp_sqlite_data/_data/
注意: /var/lib/docker 之內,必須要有 root 權限才能存取。
所以要打開我們的資料庫 app.db,要用 sudo sqlitebrowser 才有辦法打開。
我們用 DB Browser fir SQLite 來打開資料庫:


密碼的確編碼過了。

沒有留言:

張貼留言

用 Go 語言,使用 Gin 開發 Docker 的 Web 應用

我要做一個範例,請 Claude 幫我生成。 很簡單,使用Docker,用 GO 語言,儘量用 1.25 版。然後 Docker 基底可以使用 alpine 或 Ubuntu。Docker 有一個 volume,可以放 SQLite 資料庫。 然後用 Gin 寫一個 Web 應用...