`main.go` only ever loaded `.env`; the `APP_ENV` switch described in `.env.local` / `.env.production` did not exist, and a missing variable surfaced one restart at a time as a log.Fatalf inside db.Connect. config.Load now picks `.env.<APP_ENV>` (default local) then `.env`, with real environment winning, reads every setting into one typed Config and reports everything missing in one message. Production insists on a POS signing secret; local warns when DB_HOST is not a local address. db, redis and the image store take the Config instead of reading env themselves. Also: - livehub read MQTT_USERNAME while everything else uses MQTT_USER, so the console stream connected to the broker unauthenticated. Both accepted. - .dockerignore: `COPY . .` was baking .env.production into the image. Dockerfile sets APP_ENV=production. - Drop utils/config.go (dead viper loader) and create_table.go (unused, hardcoded production DSN); go mod tidy removes viper. - .env.example lists every variable the code reads; docs/ENVIRONMENT.md. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
20 lines
421 B
Plaintext
20 lines
421 B
Plaintext
# Nothing in here reaches the image.
|
|
#
|
|
# `.env*` most of all: the Dockerfile does `COPY . .`, and the production
|
|
# credentials in `.env.production` were being baked into every image built
|
|
# from this folder. The running container gets its environment from the
|
|
# platform (Dokploy / Kubernetes), never from a file.
|
|
.env
|
|
.env.*
|
|
!.env.example
|
|
|
|
.git
|
|
.claude
|
|
.DS_Store
|
|
docs
|
|
scratch
|
|
init
|
|
nearle
|
|
server
|
|
docker-compose.local.yml
|