Environment Variable Patterns

Database Connection Pattern:

environment:
  # PostgreSQL
  POSTGRES_HOST: postgres
  POSTGRES_USER: admin
  POSTGRES_PASSWORD: [SECRET]
  POSTGRES_DB: database_name
  
  # MariaDB
  DB_HOST: mariadb
  DB_USERNAME: username
  DB_PASSWORD: [SECRET]
  DB_DATABASE: database_name

Application Configuration Pattern:

environment:
  # Application settings
  APP_URL: https://service.domain.me
  TZ: America/New_York
  
  # User/Group settings (LinuxServer containers)
  PUID: 1000
  PGID: 1000
  
  # Feature toggles
  ENABLE_REGISTRATION: false
  DEBUG_MODE: false

Security Configuration Pattern:

environment:
  # Secret keys
  SECRET_KEY: [SECRET]
  APP_KEY: [SECRET]
  
  # Authentication
  OAUTH_CLIENT_ID: [SECRET]
  OAUTH_CLIENT_SECRET: [SECRET]

Secret and Config Management

Docker Secrets Implementation:

# Secret definition
secrets:
  cloudflare_api_token:
    file: /mnt/swarm-data/traefik/cloudflare_api_token.txt

# Secret usage in service
services:
  traefik:
    secrets:
      - cloudflare_api_token
    environment:
      - CF_DNS_API_TOKEN_FILE=/run/secrets/cloudflare_api_token

Configuration File Management:

# External configuration files
volumes:
  - /mnt/swarm-data/service/config.yml:/app/config.yml:ro
  - /mnt/swarm-data/nginx/nginx.conf:/etc/nginx/nginx.conf:ro

Environment-Specific Configurations:

# Production vs Development patterns
/mnt/swarm-data/
├── webservers/
│   ├── production/
│   │   └── nginx/
│   └── testing/
│       └── nginx/
└── webfiles/
    ├── production/
    └── testing/

Volume Mount Strategies

Bind Mount Best Practices:

# Read-only configuration
- type: bind
  source: /mnt/swarm-data/service/config
  target: /app/config
  read_only: true

# Read-write data
- type: bind
  source: /mnt/swarm-data/service/data
  target: /app/data
  read_only: false

# Named volume (managed by Docker)
volumes:
  - service_data:/app/data

Volume Naming Convention:

  • stackname_servicename_purpose
  • Examples:auth_authentik_media,paperless_paperless_data

Mount Point Standards:

  • Configuration:/app/config,/etc/service/
  • Data:/app/data,/var/lib/service/
  • Logs:/app/logs,/var/log/service/
  • Temporary:/tmp,/var/tmp/

Performance Considerations:

  • Use bind mounts for frequently accessed data
  • Use named volumes for database storage
  • Avoid nested mount points
  • Consider read-only mounts for configuration files

Backup-Friendly Structure:

# Centralized backup location
/mnt/swarm-data/
├── service1/
│   ├── data/     # Application data
│   ├── config/   # Configuration files
│   └── backup/   # Service-specific backups
└── service2/
    ├── data/
    ├── config/
    └── backup/