Files
aethera/backend/cmd/main.go
Evan Reichard 0dc3add8ff feat(backend): add environment variable configuration support
Add AETHERA_ prefixed env vars for server configuration:
- AETHERA_DATA_DIR: data directory path
- AETHERA_LISTEN: listen address
- AETHERA_PORT: listen port

Env vars take precedence over defaults but CLI flags override both.
2026-02-20 22:35:13 -05:00

51 lines
1.3 KiB
Go

package main
import (
"os"
"path"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"reichard.io/aethera/internal/server"
"reichard.io/aethera/internal/store"
)
var (
params = cliParams{
ListenAddr: getEnvOrDefault("LISTEN", "localhost"),
ListenPort: getEnvIntOrDefault("PORT", 8080),
DataDir: getEnvOrDefault("DATA_DIR", "./data"),
}
rootCmd = &cobra.Command{Use: "aethera"}
)
func init() {
rootCmd.PersistentFlags().StringVar(&params.DataDir, "data-dir", params.DataDir, "Directory to store generated images (env: AETHERA_DATA_DIR)")
rootCmd.PersistentFlags().StringVar(&params.ListenAddr, "listen", params.ListenAddr, "Address to listen on (env: AETHERA_LISTEN)")
rootCmd.PersistentFlags().IntVar(&params.ListenPort, "port", params.ListenPort, "Port to listen on (env: AETHERA_PORT)")
}
func main() {
// Validate Params
if err := params.Validate(); err != nil {
logrus.Fatalf("failed to validate parameters: %v", err)
}
// Initialize Store
fileStore, err := store.NewFileStore(path.Join(params.DataDir, "settings.json"))
if err != nil {
logrus.Fatalf("failed to create store: %v", err)
}
// Start Server
rootCmd.Run = func(cmd *cobra.Command, args []string) {
server.StartServer(fileStore, params.DataDir, params.ListenAddr, params.ListenPort)
}
if err := rootCmd.Execute(); err != nil {
logrus.Fatal(err)
os.Exit(1)
}
}