From b0b11413fb19f9d8bed502d183e85a879cc8a7b7 Mon Sep 17 00:00:00 2001 From: imterah Date: Mon, 23 Dec 2024 22:37:28 -0500 Subject: [PATCH] feature: Adds production support. --- backend/Dockerfile | 10 ++++++++++ backend/api/dbcore/db.go | 9 +++++++++ backend/backends.prod.json | 6 ++++++ backend/build.sh | 6 +++--- backend/go.mod | 6 ++++++ backend/go.sum | 12 ++++++++++++ 6 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 backend/Dockerfile create mode 100644 backend/backends.prod.json diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..457fccf --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,10 @@ +FROM golang:latest AS build +WORKDIR /build +COPY . /build +RUN bash build.sh +FROM scratch AS run +WORKDIR /app +COPY --from=build /build/backends.prod.json /app/backends.json +COPY --from=build /build/api/api /app/hermes +COPY --from=build /build/sshbackend/sshbackend /app/sshbackend +ENTRYPOINT ["/app/hermes", "--backends-path", "/app/backends.json"] diff --git a/backend/api/dbcore/db.go b/backend/api/dbcore/db.go index 57d7583..b5e0676 100644 --- a/backend/api/dbcore/db.go +++ b/backend/api/dbcore/db.go @@ -4,6 +4,7 @@ import ( "fmt" "os" + "gorm.io/driver/postgres" "gorm.io/driver/sqlite" "gorm.io/gorm" ) @@ -83,6 +84,14 @@ func InitializeDatabaseDialector() (gorm.Dialector, error) { } return sqlite.Open(filePath), nil + case "postgresql": + postgresDSN := os.Getenv("HERMES_POSTGRES_DSN") + + if postgresDSN == "" { + return nil, fmt.Errorf("postgres DSN not specified (missing HERMES_POSTGRES_DSN)") + } + + return postgres.Open(postgresDSN), nil case "": return nil, fmt.Errorf("no database backend specified in environment variables (missing HERMES_DATABASE_BACKEND)") default: diff --git a/backend/backends.prod.json b/backend/backends.prod.json new file mode 100644 index 0000000..9a9a09e --- /dev/null +++ b/backend/backends.prod.json @@ -0,0 +1,6 @@ +[ + { + "name": "ssh", + "path": "./sshbackend" + } +] diff --git a/backend/build.sh b/backend/build.sh index a397359..8753daf 100755 --- a/backend/build.sh +++ b/backend/build.sh @@ -1,11 +1,11 @@ #!/usr/bin/env bash pushd sshbackend -go build . +CGO_ENABLED=0 GOOS=linux go build . strip sshbackend popd pushd dummybackend -go build . +CGO_ENABLED=0 GOOS=linux go build . strip dummybackend popd @@ -15,6 +15,6 @@ strip externalbackendlauncher popd pushd api -go build . +CGO_ENABLED=0 GOOS=linux go build . strip api popd diff --git a/backend/go.mod b/backend/go.mod index 9a70c61..360d142 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -20,6 +20,10 @@ require ( github.com/go-playground/validator/v10 v10.23.0 // indirect github.com/goccy/go-json v0.10.4 // indirect github.com/golang-jwt/jwt/v5 v5.2.1 // indirect + github.com/jackc/pgpassfile v1.0.0 // indirect + github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect + github.com/jackc/pgx/v5 v5.7.2 // indirect + github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/json-iterator/go v1.1.12 // indirect @@ -44,10 +48,12 @@ require ( golang.org/x/crypto v0.31.0 // indirect golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect golang.org/x/net v0.33.0 // indirect + golang.org/x/sync v0.10.0 // indirect golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.21.0 // indirect google.golang.org/protobuf v1.36.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + gorm.io/driver/postgres v1.5.11 // indirect gorm.io/driver/sqlite v1.5.7 // indirect gorm.io/gorm v1.25.12 // indirect ) diff --git a/backend/go.sum b/backend/go.sum index 819c0c6..8b2b29b 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -36,6 +36,14 @@ github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PU github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= +github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx/v5 v5.7.2 h1:mLoDLV6sonKlvjIEsV56SkWNCnuNv531l94GaIzO+XI= +github.com/jackc/pgx/v5 v5.7.2/go.mod h1:ncY89UGWxg82EykZUwSpUKEfccBGGYq1xjrOpsbsfGQ= +github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= +github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= @@ -104,6 +112,8 @@ golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -119,6 +129,8 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gorm.io/driver/postgres v1.5.11 h1:ubBVAfbKEUld/twyKZ0IYn9rSQh448EdelLYk9Mv314= +gorm.io/driver/postgres v1.5.11/go.mod h1:DX3GReXH+3FPWGrrgffdvCk3DQ1dwDPdmbenSkweRGI= gorm.io/driver/sqlite v1.5.7 h1:8NvsrhP0ifM7LX9G4zPB97NwovUakUxc+2V2uuf3Z1I= gorm.io/driver/sqlite v1.5.7/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4= gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=