rmm2/backend/config/config.go
cynfo3000 9d5f060cbd feat: Docker-Support (Compose + Dockerfiles)
- docker-compose.yml: db (timescaledb/pg17) + backend + frontend
- backend/Dockerfile: multi-stage (golang:1.24-alpine -> debian:bookworm-slim)
- frontend/Dockerfile: multi-stage (node:22-alpine -> nginx:alpine), Build-Args fuer VITE_*
- frontend/nginx.conf: SPA-Routing + Asset-Caching
- .env.example: BACKEND_HOST, DB_PASSWORD, JWT_SECRET, API_KEY
- backend/config/config.go: ENV-Var-Support vervollstaendigt (JWT_SECRET, API_KEY, DB_PORT, DB_USER, DB_NAME)
- backend/config.yaml.example: ENV-Var Kommentare ergaenzt
- README: Docker-Quickstart als empfohlener Einstieg (3 Befehle)
- .gitignore: .env zur ignore-Liste hinzugefuegt
2026-03-08 19:39:10 +01:00

84 lines
1.7 KiB
Go

package config
import (
"fmt"
"os"
"github.com/cynfo/rmm-backend/db"
"gopkg.in/yaml.v3"
)
type Config struct {
ListenAddr string `yaml:"listen_addr"`
TLSCert string `yaml:"tls_cert"`
TLSKey string `yaml:"tls_key"`
APIKeys []string `yaml:"api_keys"`
JWTSecret string `yaml:"jwt_secret"`
Database db.DBConfig `yaml:"database"`
}
func Load(path string) (*Config, error) {
cfg := &Config{
ListenAddr: ":8443",
TLSCert: "certs/server.crt",
TLSKey: "certs/server.key",
Database: db.DBConfig{
Host: "127.0.0.1",
Port: 5432,
User: "rmm",
Password: "",
DBName: "rmm",
SSLMode: "disable",
},
}
data, err := os.ReadFile(path)
if err != nil {
return nil, err
}
if err := yaml.Unmarshal(data, cfg); err != nil {
return nil, err
}
// Env overrides — alle Werte koennen via ENV ueberschrieben werden (z.B. Docker)
if v := os.Getenv("RMM_LISTEN_ADDR"); v != "" {
cfg.ListenAddr = v
}
if v := os.Getenv("RMM_TLS_CERT"); v != "" {
cfg.TLSCert = v
}
if v := os.Getenv("RMM_TLS_KEY"); v != "" {
cfg.TLSKey = v
}
if v := os.Getenv("RMM_JWT_SECRET"); v != "" {
cfg.JWTSecret = v
}
if v := os.Getenv("RMM_API_KEY"); v != "" {
cfg.APIKeys = append(cfg.APIKeys, v)
}
if v := os.Getenv("RMM_DB_HOST"); v != "" {
cfg.Database.Host = v
}
if v := os.Getenv("RMM_DB_PORT"); v != "" {
if port := 0; len(v) > 0 {
fmt.Sscanf(v, "%d", &port)
if port > 0 {
cfg.Database.Port = port
}
}
}
if v := os.Getenv("RMM_DB_USER"); v != "" {
cfg.Database.User = v
}
if v := os.Getenv("RMM_DB_PASSWORD"); v != "" {
cfg.Database.Password = v
}
if v := os.Getenv("RMM_DB_NAME"); v != "" {
cfg.Database.DBName = v
}
return cfg, nil
}