diff --git a/cmd/api/main.go b/cmd/api/main.go index d02eca2..cfc5a57 100644 --- a/cmd/api/main.go +++ b/cmd/api/main.go @@ -1,8 +1,10 @@ package main import ( + "fmt" "net/http" + "github.com/gomodule/redigo/redis" "github.com/labstack/echo/v4" ) @@ -10,7 +12,24 @@ func main() { e := echo.New() // echo を利用する // GET リクエストでパスが `/` のとき第2引数の関数を実行する e.GET("/", func(c echo.Context) error { - return c.String(http.StatusOK, "Hello, World!") + key := "count" + conn, err := redis.Dial("tcp", "redis:6379") + if err != nil { + panic(err) + } + + _, err = conn.Do("INCR", key) + if err != nil { + panic(err) + } + + s, err := redis.String(conn.Do("GET", key)) + if err != nil { + panic(err) + } + defer conn.Close() + + return c.String(http.StatusOK, fmt.Sprintf("%s", s)) }) // 1323 ポートでリッスンを開始。 start がエラーを起こしたら Fatal を起こしてログに記録する diff --git a/docker-compose.yaml b/docker-compose.yaml index c0c4293..62e1034 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -8,4 +8,8 @@ services: ports: - 1323:1323 volumes: - - .:/go/src/app \ No newline at end of file + - .:/go/src/app + depends_on: + - redis + redis: + image: redis:6.2.6 \ No newline at end of file diff --git a/docker/app/Dockerfile.prod b/docker/app/Dockerfile.prod new file mode 100644 index 0000000..9c772b0 --- /dev/null +++ b/docker/app/Dockerfile.prod @@ -0,0 +1,14 @@ +FROM golang:1.17.6 as builder +WORKDIR /workspace +COPY . /workspace +# alpine でも実行できるように GOOS と CGO_ENABLED を指定 +RUN CGO_ENABLED=0 GOOS=linux go build -o main cmd/api/main.go && chmod +x ./main + +FROM alpine:3.15 +WORKDIR /app +RUN apk --no-cache add ca-certificates +# root ユーザだとなんでもできてしまうため appuser を作成する +RUN addgroup -S appgroup && adduser -S appuser -G appgroup +COPY --from=builder /workspace/main ./ +# コンテナを立ち上げたとき、勝手にWeb サーバーを立ち上げる +CMD ["./main"] \ No newline at end of file diff --git a/go.mod b/go.mod index 06cfb27..efe451b 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.17 require github.com/labstack/echo/v4 v4.6.3 require ( + github.com/gomodule/redigo v1.8.8 // indirect github.com/labstack/gommon v0.3.1 // indirect github.com/mattn/go-colorable v0.1.11 // indirect github.com/mattn/go-isatty v0.0.14 // indirect diff --git a/go.sum b/go.sum index 42776ae..1c49ec3 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/gomodule/redigo v1.8.8 h1:f6cXq6RRfiyrOJEV7p3JhLDlmawGBVBBP1MggY8Mo4E= +github.com/gomodule/redigo v1.8.8/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE= github.com/labstack/echo/v4 v4.6.3 h1:VhPuIZYxsbPmo4m9KAkMU/el2442eB7EBFFhNTTT9ac= github.com/labstack/echo/v4 v4.6.3/go.mod h1:Hk5OiHj0kDqmFq7aHe7eDqI7CUhuCrfpupQtLGGLm7A= github.com/labstack/gommon v0.3.1 h1:OomWaJXm7xR6L1HmEtGyQf26TEn7V6X88mktX9kee9o=