Compare commits

..

2 Commits

Author SHA1 Message Date
93b5c3f110 refactor(docker): use environment variables instead of hardcoded CMD args
All checks were successful
continuous-integration/drone/push Build is passing
Replace hardcoded CMD arguments with ENV directives:
- AETHERA_LISTEN=0.0.0.0
- AETHERA_PORT=8080
- AETHERA_DATA_DIR=/app/data

This allows runtime configuration via docker run -e or compose files.
2026-02-20 22:36:23 -05:00
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
3 changed files with 32 additions and 9 deletions

View File

@@ -61,8 +61,10 @@ RUN mkdir -p /app/data
# Expose the default port # Expose the default port
EXPOSE 8080 EXPOSE 8080
# Set environment variable defaults
ENV AETHERA_LISTEN=0.0.0.0
ENV AETHERA_PORT=8080
ENV AETHERA_DATA_DIR=/app/data
# Set the entrypoint # Set the entrypoint
ENTRYPOINT ["./aethera"] ENTRYPOINT ["./aethera"]
# Default command with recommended production settings
CMD ["--listen", "0.0.0.0", "--port", "8080", "--data-dir", "/app/data"]

View File

@@ -4,8 +4,11 @@ import (
"fmt" "fmt"
"os" "os"
"path" "path"
"strconv"
) )
const envPrefix = "AETHERA_"
type cliParams struct { type cliParams struct {
ListenAddr string ListenAddr string
ListenPort int ListenPort int
@@ -13,6 +16,24 @@ type cliParams struct {
SettingsFile string SettingsFile string
} }
// getEnvOrDefault returns the value of an environment variable or a default value
func getEnvOrDefault(key, defaultValue string) string {
if value := os.Getenv(envPrefix + key); value != "" {
return value
}
return defaultValue
}
// getEnvIntOrDefault returns the integer value of an environment variable or a default value
func getEnvIntOrDefault(key string, defaultValue int) int {
if value := os.Getenv(envPrefix + key); value != "" {
if intVal, err := strconv.Atoi(value); err == nil {
return intVal
}
}
return defaultValue
}
func (p *cliParams) Validate() error { func (p *cliParams) Validate() error {
// Ensure Generated Directories // Ensure Generated Directories
imgDir := path.Join(p.DataDir, "generated/images") imgDir := path.Join(p.DataDir, "generated/images")

View File

@@ -13,17 +13,17 @@ import (
var ( var (
params = cliParams{ params = cliParams{
ListenAddr: "localhost", ListenAddr: getEnvOrDefault("LISTEN", "localhost"),
ListenPort: 8080, ListenPort: getEnvIntOrDefault("PORT", 8080),
DataDir: "./data", DataDir: getEnvOrDefault("DATA_DIR", "./data"),
} }
rootCmd = &cobra.Command{Use: "aethera"} rootCmd = &cobra.Command{Use: "aethera"}
) )
func init() { func init() {
rootCmd.PersistentFlags().StringVar(&params.DataDir, "data-dir", "data", "Directory to store generated images") rootCmd.PersistentFlags().StringVar(&params.DataDir, "data-dir", params.DataDir, "Directory to store generated images (env: AETHERA_DATA_DIR)")
rootCmd.PersistentFlags().StringVar(&params.ListenAddr, "listen", "localhost", "Address to listen on") rootCmd.PersistentFlags().StringVar(&params.ListenAddr, "listen", params.ListenAddr, "Address to listen on (env: AETHERA_LISTEN)")
rootCmd.PersistentFlags().IntVar(&params.ListenPort, "port", 8080, "Port to listen on") rootCmd.PersistentFlags().IntVar(&params.ListenPort, "port", params.ListenPort, "Port to listen on (env: AETHERA_PORT)")
} }
func main() { func main() {