Files
cms/cmd/server/main.go
T
2026-05-31 20:51:41 -05:00

73 lines
1.4 KiB
Go

package main
import (
"context"
"log"
"os"
"os/signal"
"strconv"
"syscall"
"time"
"github.com/Henelik/cms/internal/content"
"github.com/Henelik/cms/pkg/config"
"github.com/Henelik/cms/pkg/database"
"github.com/Henelik/cms/web/public"
"github.com/gofiber/fiber/v2"
)
func main() {
cfgPath := os.Getenv("CONFIG")
if cfgPath == "" {
cfgPath = "./config.yaml"
}
cfg, err := config.Load(cfgPath)
if err != nil {
log.Panic(err.Error())
}
db, err := database.NewDB(cfg.DBDriver, cfg.DBConnString)
if err != nil {
log.Panic(err.Error())
}
if err := database.Migrate(db, cfg.SuperUser); err != nil {
log.Panic(err.Error())
}
app := fiber.New()
content.RegisterRoutes(app)
public.RegisterRoutes(app)
go func() {
if err := app.Listen(":" + strconv.Itoa(cfg.ServerPort)); err != nil {
log.Panic(err.Error())
}
}()
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
log.Println("shutting down server...")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := app.ShutdownWithContext(ctx); err != nil {
log.Printf("server forced to shutdown: %v", err)
}
if sqlDB, err := db.DB(); err == nil {
if err := sqlDB.Close(); err != nil {
log.Printf("failed to close database: %v", err)
}
} else {
log.Printf("failed to get underlying sql.DB: %v", err)
}
log.Println("server exited")
}