From acb76e1ab17b84394cc0f04650aaa52846bbca26 Mon Sep 17 00:00:00 2001 From: Steven Tang Date: Fri, 19 Aug 2022 19:37:05 +1000 Subject: [PATCH 1/4] ref: simplify Dockerfile stages --- Dockerfile | 43 +++++++++++++++++-------------------------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/Dockerfile b/Dockerfile index 355289e..da2a441 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,24 +1,15 @@ -# To build locally: docker buildx build . -t wakapi --load - -# Preparation to save some time -FROM --platform=$BUILDPLATFORM golang:1.18-alpine AS prep-env -WORKDIR /src - -ADD ./go.mod . -RUN go mod download -ADD . . - -RUN wget "https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh" -O wait-for-it.sh && \ - chmod +x wait-for-it.sh - -# Build Stage FROM golang:1.18-alpine AS build-env +WORKDIR /src # Required for go-sqlite3 RUN apk add --no-cache gcc musl-dev -WORKDIR /src -COPY --from=prep-env /src . +RUN wget "https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh" -O wait-for-it.sh && \ + chmod +x wait-for-it.sh + +ADD ./go.mod ./go.sum ./ +RUN go mod download +ADD . . RUN go build -v -o wakapi @@ -41,16 +32,16 @@ WORKDIR /app RUN apk add --no-cache bash ca-certificates tzdata # See README.md and config.default.yml for all config options -ENV ENVIRONMENT prod -ENV WAKAPI_DB_TYPE sqlite3 -ENV WAKAPI_DB_USER '' -ENV WAKAPI_DB_PASSWORD '' -ENV WAKAPI_DB_HOST '' -ENV WAKAPI_DB_NAME=/data/wakapi.db -ENV WAKAPI_PASSWORD_SALT '' -ENV WAKAPI_LISTEN_IPV4 '0.0.0.0' -ENV WAKAPI_INSECURE_COOKIES 'true' -ENV WAKAPI_ALLOW_SIGNUP 'true' +ENV ENVIRONMENT=prod \ + WAKAPI_DB_TYPE=sqlite3 \ + WAKAPI_DB_USER='' \ + WAKAPI_DB_PASSWORD='' \ + WAKAPI_DB_HOST='' \ + WAKAPI_DB_NAME=/data/wakapi.db \ + WAKAPI_PASSWORD_SALT='' \ + WAKAPI_LISTEN_IPV4='0.0.0.0' \ + WAKAPI_INSECURE_COOKIES='true' \ + WAKAPI_ALLOW_SIGNUP='true' COPY --from=build-env /app . From ec10cc922c358cf519fad55a3f94558e44fdb2c2 Mon Sep 17 00:00:00 2001 From: Steven Tang Date: Fri, 19 Aug 2022 19:53:02 +1000 Subject: [PATCH 2/4] perf: strip binaries --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index da2a441..9586305 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,7 @@ ADD ./go.mod ./go.sum ./ RUN go mod download ADD . . -RUN go build -v -o wakapi +RUN go build -ldflags "-s -w" -v -o wakapi main.go WORKDIR /app RUN cp /src/wakapi . && \ From 037ad7b9b1d41446884acf1c126ca4a4c1d0f426 Mon Sep 17 00:00:00 2001 From: Steven Tang Date: Fri, 19 Aug 2022 21:48:03 +1000 Subject: [PATCH 3/4] fix: check database open --- main.go | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/main.go b/main.go index 804e015..a31ce0e 100644 --- a/main.go +++ b/main.go @@ -2,7 +2,6 @@ package main import ( "embed" - "github.com/muety/wakapi/migrations" "io/fs" "log" "net" @@ -11,28 +10,29 @@ import ( "strconv" "time" - "github.com/lpar/gzipped/v2" - "github.com/muety/wakapi/routes/relay" - "github.com/emvi/logbuch" "github.com/gorilla/handlers" - conf "github.com/muety/wakapi/config" - "github.com/muety/wakapi/repositories" - "github.com/muety/wakapi/routes/api" - "github.com/muety/wakapi/services/mail" - fsutils "github.com/muety/wakapi/utils/fs" - "gorm.io/gorm/logger" - "github.com/gorilla/mux" + "github.com/lpar/gzipped/v2" + + conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/middlewares" + "github.com/muety/wakapi/migrations" + "github.com/muety/wakapi/repositories" "github.com/muety/wakapi/routes" + "github.com/muety/wakapi/routes/api" shieldsV1Routes "github.com/muety/wakapi/routes/compat/shields/v1" wtV1Routes "github.com/muety/wakapi/routes/compat/wakatime/v1" + "github.com/muety/wakapi/routes/relay" "github.com/muety/wakapi/services" + "github.com/muety/wakapi/services/mail" + fsutils "github.com/muety/wakapi/utils/fs" + _ "gorm.io/driver/mysql" _ "gorm.io/driver/postgres" _ "gorm.io/driver/sqlite" "gorm.io/gorm" + "gorm.io/gorm/logger" ) // Embed version.txt @@ -121,6 +121,10 @@ func main() { // Connect to database var err error db, err = gorm.Open(config.Db.GetDialector(), &gorm.Config{Logger: gormLogger}) + if err != nil { + logbuch.Error(err.Error()) + logbuch.Fatal("could not open database") + } if config.Db.IsSQLite() { db.Exec("PRAGMA foreign_keys = ON;") } From df5fe6e623f543cf5ac4596d71563837ed63b318 Mon Sep 17 00:00:00 2001 From: Steven Tang Date: Fri, 19 Aug 2022 21:55:58 +1000 Subject: [PATCH 4/4] fix: initialise data/ dir in Docker --- Dockerfile | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9586305..94834f1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,12 +13,13 @@ ADD . . RUN go build -ldflags "-s -w" -v -o wakapi main.go -WORKDIR /app -RUN cp /src/wakapi . && \ - cp /src/config.default.yml config.yml && \ - sed -i 's/listen_ipv6: ::1/listen_ipv6: /g' config.yml && \ - cp /src/wait-for-it.sh . && \ - cp /src/entrypoint.sh . +WORKDIR /staging +RUN mkdir ./data ./app && \ + cp /src/wakapi app/ && \ + cp /src/config.default.yml app/config.yml && \ + sed -i 's/listen_ipv6: ::1/listen_ipv6: /g' app/config.yml && \ + cp /src/wait-for-it.sh app/ && \ + cp /src/entrypoint.sh app/ # Run Stage @@ -43,7 +44,7 @@ ENV ENVIRONMENT=prod \ WAKAPI_INSECURE_COOKIES='true' \ WAKAPI_ALLOW_SIGNUP='true' -COPY --from=build-env /app . +COPY --from=build-env /staging / EXPOSE 3000