PSA/docs/security/config/DOCKER_SECRET_PROVIDER_CONFIG.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

166 lines
4.8 KiB
Markdown

# Docker Secret Provider Configuration
This document explains the secret provider configuration for Docker and Docker Compose deployments.
## Overview
The application now uses a composite secret provider system that allows for flexible secret management across different deployment environments. The system supports:
- **Environment Variables** (`env` provider)
- **Filesystem Secrets** (`filesystem` provider)
- **HashiCorp Vault** (`vault` provider)
## Configuration Variables
### `SECRET_READ_CHAIN`
Comma-separated list of providers to try for reading secrets, in order.
**Examples:**
- `env,filesystem` - Try environment variables first, then filesystem
- `env,filesystem,vault` - Try env vars, then filesystem, then Vault
- `filesystem` - Only use filesystem secrets
### `SECRET_WRITE_PROVIDER`
Single provider to use for writing/updating secrets.
**Examples:**
- `filesystem` - Write secrets to filesystem
- `vault` - Write secrets to Vault
## Default Configurations by Environment
### Development (docker-compose.yaml)
```yaml
SECRET_READ_CHAIN: env,filesystem
SECRET_WRITE_PROVIDER: filesystem
```
This allows developers to override secrets via environment variables while falling back to filesystem secrets.
### Production (docker-compose.prod.yaml)
```yaml
SECRET_READ_CHAIN: env,filesystem,vault
SECRET_WRITE_PROVIDER: filesystem
```
Production environments can use all three providers, with Vault as the final fallback for reads.
### Community Edition (docker-compose.ce.yaml)
```yaml
SECRET_READ_CHAIN: env,filesystem
SECRET_WRITE_PROVIDER: filesystem
```
CE edition focuses on simple deployment with environment variables and filesystem secrets.
### Enterprise Edition (docker-compose.ee.yaml)
```yaml
SECRET_READ_CHAIN: env,filesystem,vault
SECRET_WRITE_PROVIDER: filesystem
```
EE edition includes Vault support for enterprise secret management.
## Overriding Configuration
You can override the secret provider configuration in several ways:
### 1. Environment Variables
Set `SECRET_READ_CHAIN` and `SECRET_WRITE_PROVIDER` environment variables before running docker-compose:
```bash
export SECRET_READ_CHAIN="env,vault"
export SECRET_WRITE_PROVIDER="vault"
docker-compose up
```
### 2. .env File
Add to your `.env` file:
```
SECRET_READ_CHAIN=env,filesystem,vault
SECRET_WRITE_PROVIDER=vault
```
### 3. docker-compose.override.yaml
Create a `docker-compose.override.yaml` file:
```yaml
version: '3.8'
services:
server:
environment:
SECRET_READ_CHAIN: env,vault
SECRET_WRITE_PROVIDER: vault
```
## Vault Configuration
When using the `vault` provider, ensure these environment variables are set:
- `VAULT_ADDR` - Vault server URL (e.g., `https://vault.example.com`)
- `VAULT_TOKEN` - Authentication token for Vault
- `VAULT_APP_SECRET_PATH` - Path for application secrets (default: `kv/data/app/secrets`)
- `VAULT_TENANT_SECRET_PATH_TEMPLATE` - Path template for tenant secrets (default: `kv/data/tenants/{tenantId}/secrets`)
## Migration from Legacy Configuration
The legacy `SECRET_PROVIDER_TYPE` environment variable is still supported for backward compatibility:
- `SECRET_PROVIDER_TYPE=filesystem``SECRET_READ_CHAIN=filesystem SECRET_WRITE_PROVIDER=filesystem`
- `SECRET_PROVIDER_TYPE=vault``SECRET_READ_CHAIN=vault SECRET_WRITE_PROVIDER=vault`
However, the new composite system is recommended for new deployments.
## Examples
### Local Development with Environment Overrides
```bash
# Override database password via environment variable
export DB_PASSWORD_SERVER="my-local-password"
docker-compose up
```
### Production with Vault Integration
```yaml
# docker-compose.prod.override.yaml
version: '3.8'
services:
server:
environment:
SECRET_READ_CHAIN: env,filesystem,vault
SECRET_WRITE_PROVIDER: vault
VAULT_ADDR: https://vault.company.com
VAULT_TOKEN: ${VAULT_TOKEN}
```
### Kubernetes with ConfigMap Overrides
```yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: secret-provider-config
data:
SECRET_READ_CHAIN: "env,filesystem,vault"
SECRET_WRITE_PROVIDER: "vault"
VAULT_ADDR: "https://vault.company.com"
```
## Troubleshooting
### Check Current Configuration
The application logs will show the secret provider configuration at startup:
```
INFO: Building composite secret provider. Read chain: [env, filesystem], Write provider: filesystem
```
### Common Issues
1. **Vault connection errors** - Check `VAULT_ADDR` and `VAULT_TOKEN`
2. **Missing filesystem secrets** - Ensure secret files exist in `/run/secrets/`
3. **Permission errors** - Check file permissions on secret files (should be 600)
### Validation Errors
The system validates configuration at startup and will show descriptive error messages:
```
Error: Invalid provider types in SECRET_READ_CHAIN: invalid. Supported types: env, filesystem, vault
Error: VAULT_ADDR environment variable is required when using vault provider
```