84 lines
1.6 KiB
Go
84 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
"embed"
|
|
|
|
"git.tavo.one/tavo/axiom/database"
|
|
"git.tavo.one/tavo/axiom/handlers"
|
|
"git.tavo.one/tavo/axiom/storage"
|
|
"git.tavo.one/tavo/axiom/config"
|
|
"git.tavo.one/tavo/axiom/views"
|
|
)
|
|
|
|
// //go:embed static/*
|
|
// var publicFS embed.FS
|
|
|
|
//go:embed views/*
|
|
var viewFS embed.FS
|
|
|
|
func init() {
|
|
needed := []string{
|
|
"PRODUCTION",
|
|
"PORT",
|
|
"APP_DATA_DIR",
|
|
"DB_CONNDVR",
|
|
"DB_CONNSTR",
|
|
}
|
|
|
|
for _, v := range needed {
|
|
if os.Getenv(v) == "" {
|
|
log.Fatalf("missing environment varialbe: %s", v)
|
|
}
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
err := views.Init(viewFS, config.ViewMap, config.FuncMap)
|
|
if err != nil {
|
|
log.Fatalf("failed to initialize templates: %v", err)
|
|
}
|
|
|
|
db, err := database.Init(os.Getenv("DB_CONNDVR"), os.Getenv("DB_CONNSTR"))
|
|
if err != nil {
|
|
log.Fatalf("failed to initialize database: %v", err)
|
|
}
|
|
defer db.Close()
|
|
|
|
s3, err := storage.New(os.Getenv("APP_DATA_DIR"), 4<<20)
|
|
if err != nil {
|
|
log.Fatalf("failed to initialize storage: %v", err)
|
|
}
|
|
|
|
handlerConfig := handlers.Config{
|
|
Production: os.Getenv("PRODUCTION") == "1",
|
|
Views: nil,
|
|
DB: db,
|
|
S3: s3,
|
|
}
|
|
handler := handlers.New(handlerConfig)
|
|
|
|
router := http.NewServeMux()
|
|
router.HandleFunc("GET /", handler.SampleIndex)
|
|
|
|
stop := make(chan os.Signal, 1)
|
|
signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM)
|
|
|
|
port := os.Getenv("PORT")
|
|
|
|
go func() {
|
|
log.Printf("starting on :%s...", port)
|
|
|
|
if err := http.ListenAndServe(":"+port, router); err != nil {
|
|
log.Fatalf("fatal: failed to start on port %s: %v", port, err)
|
|
}
|
|
}()
|
|
|
|
<-stop
|
|
|
|
log.Printf("shutting down...")
|
|
}
|