From 85c684def7a2d826062ef2c98955b7f06b56bb42 Mon Sep 17 00:00:00 2001 From: Tim Wundenberg Date: Sun, 28 Jul 2024 15:07:19 +0200 Subject: [PATCH] #17 add dockerfile for api --- api/Dockerfile | 15 +++++++++++++++ api/context/context.go | 7 ------- api/go.mod | 1 - api/go.sum | 2 -- api/main.go | 17 ++++++----------- api/{ => src}/middleware/auth.go | 3 ++- api/{ => src}/middleware/cors.go | 0 api/{ => src}/middleware/logger.go | 0 api/{ => src}/utils/auth.go | 0 api/{context => src/utils}/db.go | 14 ++++++++------ api/{ => src}/utils/http-utils.go | 0 api/{ => src}/workout/workout.go | 5 +++-- 12 files changed, 34 insertions(+), 30 deletions(-) create mode 100644 api/Dockerfile delete mode 100644 api/context/context.go rename api/{ => src}/middleware/auth.go (97%) rename api/{ => src}/middleware/cors.go (100%) rename api/{ => src}/middleware/logger.go (100%) rename api/{ => src}/utils/auth.go (100%) rename api/{context => src/utils}/db.go (73%) rename api/{ => src}/utils/http-utils.go (100%) rename api/{ => src}/workout/workout.go (98%) diff --git a/api/Dockerfile b/api/Dockerfile new file mode 100644 index 0000000..27fca56 --- /dev/null +++ b/api/Dockerfile @@ -0,0 +1,15 @@ +FROM golang:1.22 as builder + +WORKDIR /app +COPY go.mod go.sum main.go ./ +COPY src src +RUN go build -o /bin/api ./main.go + + +FROM debian:stable-slim + +COPY --from=builder /bin/api /app/api +COPY migrations /migrations +EXPOSE 8080 +CMD ["/app/api"] + diff --git a/api/context/context.go b/api/context/context.go deleted file mode 100644 index 20c35d8..0000000 --- a/api/context/context.go +++ /dev/null @@ -1,7 +0,0 @@ -package context - -import "database/sql" - -type Context struct { - DB *sql.DB -} diff --git a/api/go.mod b/api/go.mod index 66fb915..cf407b1 100644 --- a/api/go.mod +++ b/api/go.mod @@ -5,7 +5,6 @@ go 1.22.5 require ( firebase.google.com/go v3.13.0+incompatible github.com/golang-migrate/migrate/v4 v4.17.1 - github.com/lib/pq v1.10.9 github.com/mattn/go-sqlite3 v1.14.22 google.golang.org/api v0.189.0 ) diff --git a/api/go.sum b/api/go.sum index dd49d28..77b06ca 100644 --- a/api/go.sum +++ b/api/go.sum @@ -75,8 +75,6 @@ github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= -github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/api/main.go b/api/main.go index 097b429..7d6ee1e 100644 --- a/api/main.go +++ b/api/main.go @@ -1,9 +1,9 @@ package main import ( - "api/context" - "api/middleware" - "api/workout" + "api/src/middleware" + "api/src/utils" + "api/src/workout" "database/sql" "log" @@ -13,14 +13,9 @@ import ( ) func main() { + log.Println("Starting server...") - context.InitializeDB() - - db, err := sql.Open("sqlite3", "./data.db") - if err != nil { - log.Fatal(err) - } - defer db.Close() + db := utils.InitializeDB() var router = getRouter(db) @@ -30,7 +25,7 @@ func main() { } log.Println("Starting server at", server.Addr) - err = server.ListenAndServe() + err := server.ListenAndServe() if err != nil { panic(err) } diff --git a/api/middleware/auth.go b/api/src/middleware/auth.go similarity index 97% rename from api/middleware/auth.go rename to api/src/middleware/auth.go index 6ae5ded..28fef74 100644 --- a/api/middleware/auth.go +++ b/api/src/middleware/auth.go @@ -1,7 +1,8 @@ package middleware import ( - "api/utils" + "api/src/utils" + "context" "net/http" ) diff --git a/api/middleware/cors.go b/api/src/middleware/cors.go similarity index 100% rename from api/middleware/cors.go rename to api/src/middleware/cors.go diff --git a/api/middleware/logger.go b/api/src/middleware/logger.go similarity index 100% rename from api/middleware/logger.go rename to api/src/middleware/logger.go diff --git a/api/utils/auth.go b/api/src/utils/auth.go similarity index 100% rename from api/utils/auth.go rename to api/src/utils/auth.go diff --git a/api/context/db.go b/api/src/utils/db.go similarity index 73% rename from api/context/db.go rename to api/src/utils/db.go index 905794e..5e10c30 100644 --- a/api/context/db.go +++ b/api/src/utils/db.go @@ -1,4 +1,4 @@ -package context +package utils import ( "database/sql" @@ -7,14 +7,13 @@ import ( "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database/sqlite3" _ "github.com/golang-migrate/migrate/v4/source/file" - _ "github.com/lib/pq" ) func InitializeDB() *sql.DB { db, err := sql.Open("sqlite3", "./data.db") if err != nil { - log.Fatal(err) + log.Fatal("Could not open Database data.db: ", err) } defer db.Close() @@ -26,7 +25,7 @@ func InitializeDB() *sql.DB { func runMigrations(db *sql.DB) { driver, err := sqlite3.WithInstance(db, &sqlite3.Config{}) if err != nil { - panic(err) + log.Fatal(err) } m, err := migrate.NewWithDatabaseInstance( @@ -34,8 +33,11 @@ func runMigrations(db *sql.DB) { "", driver) if err != nil { - panic(err) + log.Fatal("Could not create migrations instance: ", err) } - m.Up() + err = m.Up() + if err != nil { + log.Fatal("Could not run migrations: ", err) + } } diff --git a/api/utils/http-utils.go b/api/src/utils/http-utils.go similarity index 100% rename from api/utils/http-utils.go rename to api/src/utils/http-utils.go diff --git a/api/workout/workout.go b/api/src/workout/workout.go similarity index 98% rename from api/workout/workout.go rename to api/src/workout/workout.go index b4a47a8..b381991 100644 --- a/api/workout/workout.go +++ b/api/src/workout/workout.go @@ -1,8 +1,9 @@ package workout import ( - "api/middleware" - "api/utils" + "api/src/middleware" + "api/src/utils" + "database/sql" "net/http" "strconv"