♻️ Simplify optional environment configuration (#2417)

## AI Disclaimer

Using Codex with gpt-5.6-sol. Reviewed manually.
This commit is contained in:
Sebastián Ramírez
2026-08-10 18:17:29 +02:00
committed by GitHub
parent bda0325818
commit dd15054da0
7 changed files with 10 additions and 21 deletions
-7
View File
@@ -10,17 +10,12 @@ ENVIRONMENT=local
PROJECT_NAME="Full Stack FastAPI Project" PROJECT_NAME="Full Stack FastAPI Project"
# Backend
# Additional allowed CORS origins, separated by commas
BACKEND_CORS_ORIGINS=
SECRET_KEY=changethis SECRET_KEY=changethis
FIRST_SUPERUSER=admin@example.com FIRST_SUPERUSER=admin@example.com
FIRST_SUPERUSER_PASSWORD=changethis FIRST_SUPERUSER_PASSWORD=changethis
# Emails # Emails
SMTP_HOST=localhost SMTP_HOST=localhost
SMTP_USER=
SMTP_PASSWORD=
EMAILS_FROM_EMAIL=info@example.com EMAILS_FROM_EMAIL=info@example.com
SMTP_TLS=False SMTP_TLS=False
SMTP_PORT=1025 SMTP_PORT=1025
@@ -30,5 +25,3 @@ POSTGRES_SERVER=localhost
POSTGRES_DB=app POSTGRES_DB=app
POSTGRES_USER=postgres POSTGRES_USER=postgres
POSTGRES_PASSWORD=changethis POSTGRES_PASSWORD=changethis
SENTRY_DSN=
-1
View File
@@ -17,7 +17,6 @@ jobs:
- self-hosted - self-hosted
- production - production
env: env:
ENVIRONMENT: production
DOMAIN: ${{ secrets.DOMAIN }} DOMAIN: ${{ secrets.DOMAIN }}
SECRET_KEY: ${{ secrets.SECRET_KEY }} SECRET_KEY: ${{ secrets.SECRET_KEY }}
FIRST_SUPERUSER: ${{ secrets.FIRST_SUPERUSER }} FIRST_SUPERUSER: ${{ secrets.FIRST_SUPERUSER }}
-1
View File
@@ -17,7 +17,6 @@ jobs:
- self-hosted - self-hosted
- staging - staging
env: env:
ENVIRONMENT: staging
DOMAIN: ${{ secrets.DOMAIN }} DOMAIN: ${{ secrets.DOMAIN }}
SECRET_KEY: ${{ secrets.SECRET_KEY }} SECRET_KEY: ${{ secrets.SECRET_KEY }}
FIRST_SUPERUSER: ${{ secrets.FIRST_SUPERUSER }} FIRST_SUPERUSER: ${{ secrets.FIRST_SUPERUSER }}
+1 -1
View File
@@ -34,7 +34,7 @@ class Settings(BaseSettings):
# 60 minutes * 24 hours * 8 days = 8 days # 60 minutes * 24 hours * 8 days = 8 days
ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 8 ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 8
FRONTEND_HOST: str = "http://localhost:5173" FRONTEND_HOST: str = "http://localhost:5173"
ENVIRONMENT: Literal["local", "staging", "production"] = "local" ENVIRONMENT: Literal["local"] | None = None
BACKEND_CORS_ORIGINS: Annotated[ BACKEND_CORS_ORIGINS: Annotated[
list[AnyUrl] | str, BeforeValidator(parse_cors) list[AnyUrl] | str, BeforeValidator(parse_cors)
+5
View File
@@ -68,10 +68,15 @@ services:
volumes: volumes:
- ./backend/htmlcov:/app/backend/htmlcov - ./backend/htmlcov:/app/backend/htmlcov
environment: environment:
ENVIRONMENT: "local"
SMTP_HOST: "mailcatcher" SMTP_HOST: "mailcatcher"
SMTP_PORT: "1025" SMTP_PORT: "1025"
SMTP_TLS: "false" SMTP_TLS: "false"
prestart:
environment:
ENVIRONMENT: "local"
mailcatcher: mailcatcher:
image: schickling/mailcatcher image: schickling/mailcatcher
ports: ports:
+4 -5
View File
@@ -57,21 +57,20 @@ services:
condition: service_completed_successfully condition: service_completed_successfully
# The YAML anchor lets the prestart service reuse this environment mapping. # The YAML anchor lets the prestart service reuse this environment mapping.
environment: &backend-environment environment: &backend-environment
ENVIRONMENT: ${ENVIRONMENT}
PROJECT_NAME: ${PROJECT_NAME?Variable not set} PROJECT_NAME: ${PROJECT_NAME?Variable not set}
BACKEND_CORS_ORIGINS: ${BACKEND_CORS_ORIGINS} BACKEND_CORS_ORIGINS: ${BACKEND_CORS_ORIGINS:-}
SECRET_KEY: ${SECRET_KEY?Variable not set} SECRET_KEY: ${SECRET_KEY?Variable not set}
FIRST_SUPERUSER: ${FIRST_SUPERUSER?Variable not set} FIRST_SUPERUSER: ${FIRST_SUPERUSER?Variable not set}
FIRST_SUPERUSER_PASSWORD: ${FIRST_SUPERUSER_PASSWORD?Variable not set} FIRST_SUPERUSER_PASSWORD: ${FIRST_SUPERUSER_PASSWORD?Variable not set}
SMTP_HOST: ${SMTP_HOST} SMTP_HOST: ${SMTP_HOST}
SMTP_USER: ${SMTP_USER} SMTP_USER: ${SMTP_USER:-}
SMTP_PASSWORD: ${SMTP_PASSWORD} SMTP_PASSWORD: ${SMTP_PASSWORD:-}
EMAILS_FROM_EMAIL: ${EMAILS_FROM_EMAIL} EMAILS_FROM_EMAIL: ${EMAILS_FROM_EMAIL}
POSTGRES_SERVER: db POSTGRES_SERVER: db
POSTGRES_DB: ${POSTGRES_DB} POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER?Variable not set} POSTGRES_USER: ${POSTGRES_USER?Variable not set}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD?Variable not set} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD?Variable not set}
SENTRY_DSN: ${SENTRY_DSN} SENTRY_DSN: ${SENTRY_DSN:-}
healthcheck: healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/api/v1/utils/health-check/"] test: ["CMD", "curl", "-f", "http://localhost:8000/api/v1/utils/health-check/"]
-6
View File
@@ -46,12 +46,6 @@ Copy the content and use that as password / secret key. And run that again to ge
### Required Environment Variables ### Required Environment Variables
Set the `ENVIRONMENT`, by default `local` (for development), but when deploying to a server you would put something like `staging` or `production`:
```bash
export ENVIRONMENT=production
```
Set the `DOMAIN`, by default `localhost` (for development), but when deploying you would use your own domain, for example: Set the `DOMAIN`, by default `localhost` (for development), but when deploying you would use your own domain, for example:
```bash ```bash