diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3666c19 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM golang:1.22 as build + +RUN apt-get update && apt-get upgrade -y +RUN apt-get install make sqlite3 -y + +WORKDIR /app +ENV DB_PATH=/data/db.db + +RUN go install github.com/a-h/templ/cmd/templ@latest + +COPY . . +RUN go mod download +RUN make -B + +CMD ["./bin/server"] diff --git a/README.md b/README.md index e8189ba..90361b8 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ Available env variables: - WEB_SERVER_PORT - MAIL_SERVER_PORT - MAIL_SERVER_DOMAIN + - DB_PATH ```sh ./bin/server diff --git a/cmd/server/main.go b/cmd/server/main.go index c3accb8..6de538c 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -5,29 +5,42 @@ import ( "github.com/GRFreire/nthmail/pkg/mail_server" "github.com/GRFreire/nthmail/pkg/web_server" "log" + "os" "sync" _ "github.com/mattn/go-sqlite3" ) func main() { - db, err := sql.Open("sqlite3", "./db.db") + dbPath, exists := os.LookupEnv("DB_PATH") + if !exists { + dbPath = "./db.db" + } + + db, err := sql.Open("sqlite3", dbPath) if err != nil { log.Fatal(err) } defer db.Close() + log.Println("Openning sqlite db at", dbPath) var wg sync.WaitGroup wg.Add(1) go func(db *sql.DB) { defer wg.Done() - mail_server.Start(db) + err = mail_server.Start(db) + if err != nil { + log.Fatal(err) + } }(db) wg.Add(1) go func(db *sql.DB) { defer wg.Done() - web_server.Start(db) + err = web_server.Start(db) + if err != nil { + log.Fatal(err) + } }(db) wg.Wait() diff --git a/go.mod b/go.mod index 8a091d7..206c855 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/GRFreire/nthmail go 1.21.6 require ( - github.com/a-h/templ v0.2.598 // indirect + github.com/a-h/templ v0.2.747 // indirect github.com/aymerick/douceur v0.2.0 // indirect github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21 // indirect github.com/emersion/go-smtp v0.20.2 // indirect diff --git a/go.sum b/go.sum index a844e4e..5c623fb 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,8 @@ github.com/a-h/templ v0.2.543 h1:8YyLvyUtf0/IE2nIwZ62Z/m2o2NqwhnMynzOL78Lzbk= github.com/a-h/templ v0.2.543/go.mod h1:jP908DQCwI08IrnTalhzSEH9WJqG/Q94+EODQcJGFUA= github.com/a-h/templ v0.2.598 h1:6jMIHv6wQZvdPxTuv87erW4RqN/FPU0wk7ZHN5wVuuo= github.com/a-h/templ v0.2.598/go.mod h1:SA7mtYwVEajbIXFRh3vKdYm/4FYyLQAtPH1+KxzGPA8= +github.com/a-h/templ v0.2.747 h1:D0dQ2lxC3W7Dxl6fxQ/1zZHBQslSkTSvl5FxP/CfdKg= +github.com/a-h/templ v0.2.747/go.mod h1:69ObQIbrcuwPCU32ohNaWce3Cb7qM5GMiqN1K+2yop4= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21 h1:OJyUGMJTzHTd1XQp98QTaHernxMYzRaOasRir9hUlFQ= diff --git a/pkg/mail_server/main.go b/pkg/mail_server/main.go index 888d2c7..3d03cb6 100644 --- a/pkg/mail_server/main.go +++ b/pkg/mail_server/main.go @@ -108,7 +108,7 @@ func Start(db *sql.DB) error { port = 1025 } - server.Addr = fmt.Sprintf("%s:%d", domain, port) + server.Addr = fmt.Sprintf(":%d", port) server.Domain = domain server.WriteTimeout = 60 * time.Second server.ReadTimeout = 60 * time.Second @@ -116,7 +116,7 @@ func Start(db *sql.DB) error { server.MaxRecipients = 50 server.AllowInsecureAuth = true - log.Println("Starting server at", server.Addr) + log.Println("Starting mail server at", server.Addr) if err := server.ListenAndServe(); err != nil { return err } diff --git a/pkg/web_server/main.go b/pkg/web_server/main.go index 34532bb..eae4c19 100644 --- a/pkg/web_server/main.go +++ b/pkg/web_server/main.go @@ -44,7 +44,7 @@ func Start(db *sql.DB) error { router := server.Routes() - log.Println("Listening on port", port) + log.Println("Starting web server at port", port) err = http.ListenAndServe(fmt.Sprintf(":%d", port), router) if err != nil { return err