PSA/docs/getting-started/configuration_standards.md
Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

2.3 KiB

Configuration Standards

Module System

  • All JavaScript/TypeScript files use ES Modules
  • Use .js extension with ES Module syntax
  • Import statements should use the .js extension explicitly
  • No mixing of CommonJS and ES Modules

Environment Variables

Naming Convention

All environment variables must use SCREAMING_SNAKE_CASE format with clear category prefixes:

  • APP_: Application settings

    • APP_NAME
    • APP_ENV
    • APP_VERSION
    • APP_HOST
    • APP_PORT
  • DB_: Database settings

    • DB_HOST
    • DB_PORT
    • DB_NAME
    • DB_USER
    • DB_PASSWORD (managed via Docker secrets)
  • REDIS_: Redis settings

    • REDIS_HOST
    • REDIS_PORT
    • REDIS_PASSWORD (managed via Docker secrets)
  • EMAIL_: Email settings

    • EMAIL_HOST
    • EMAIL_PORT
    • EMAIL_USER
    • EMAIL_PASSWORD (managed via Docker secrets)
  • AUTH_: Authentication settings

    • AUTH_SECRET (replaces NEXTAUTH_SECRET)
    • AUTH_URL (replaces NEXTAUTH_URL)
    • AUTH_SESSION_EXPIRES
    • AUTH_GOOGLE_CLIENT_ID (managed via Docker secrets)
    • AUTH_GOOGLE_CLIENT_SECRET (managed via Docker secrets)
  • CRYPTO_: Cryptographic settings

    • CRYPTO_KEY (managed via Docker secrets)
    • CRYPTO_SALT_BYTES
    • CRYPTO_ITERATIONS
    • CRYPTO_KEY_LENGTH
    • CRYPTO_ALGORITHM

Variable Usage Guidelines

  1. Use descriptive names that clearly indicate purpose
  2. Group related variables with consistent prefixes
  3. Use boolean flags with IS_ or HAS_ prefix (e.g., IS_PRODUCTION, HAS_FEATURE_X)
  4. Sensitive values should be managed through Docker secrets
  5. Default values should be provided in .env.example
  6. Environment-specific values go in .env.development or .env.production

Configuration Files

  • Use .env files for environment variables
  • Use config.ini for application configuration
  • Use docker-compose.yaml for Docker configuration
  • Keep secrets in the secrets/ directory
  • Use consistent indentation (2 spaces) in all configuration files

Best Practices

  1. Never commit sensitive data to version control
  2. Document all configuration options
  3. Validate environment variables at startup
  4. Use strong typing for configuration objects
  5. Centralize configuration management
  6. Follow the principle of least privilege
  7. Use meaningful default values
  8. Keep configuration DRY (Don't Repeat Yourself)