Law/.env.production
2026-03-02 16:22:07 +03:00

135 lines
5.6 KiB
Text

# ============================================================================
# Production environment template for Legal Case Tracker
# Copy to ".env" on production host and replace ALL placeholder values.
# Never commit real secrets.
# ============================================================================
# ----------------------------------------------------------------------------
# Core
# ----------------------------------------------------------------------------
APP_ENV=prod
PRODUCTION_ENFORCE_SECURE_SETTINGS=true
APP_NAME=legal-case-tracker
# ----------------------------------------------------------------------------
# JWT / Cookies / Origin checks
# ----------------------------------------------------------------------------
PUBLIC_JWT_TTL_DAYS=7
ADMIN_JWT_TTL_MINUTES=240
ADMIN_JWT_SECRET=REPLACE_WITH_LONG_RANDOM_ADMIN_JWT_SECRET_64PLUS
PUBLIC_JWT_SECRET=REPLACE_WITH_LONG_RANDOM_PUBLIC_JWT_SECRET_64PLUS
PUBLIC_COOKIE_NAME=public_jwt
PUBLIC_COOKIE_SECURE=true
PUBLIC_COOKIE_SAMESITE=lax
PUBLIC_STRICT_ORIGIN_CHECK=true
PUBLIC_ALLOWED_WEB_ORIGINS=https://ruakb.online,https://www.ruakb.online
CORS_ORIGINS=https://ruakb.online,https://www.ruakb.online
CORS_ALLOW_METHODS=GET,POST,PUT,PATCH,DELETE,OPTIONS
CORS_ALLOW_HEADERS=Authorization,Content-Type,X-Requested-With,X-Request-ID
CORS_ALLOW_CREDENTIALS=true
# ----------------------------------------------------------------------------
# Database / Redis
# Keep DATABASE_URL and POSTGRES_* password in sync.
# ----------------------------------------------------------------------------
POSTGRES_USER=postgres
POSTGRES_PASSWORD=REPLACE_WITH_STRONG_POSTGRES_PASSWORD
POSTGRES_DB=legal
DATABASE_URL=postgresql+psycopg://postgres:REPLACE_WITH_STRONG_POSTGRES_PASSWORD@db:5432/legal
REDIS_URL=redis://redis:6379/0
# ----------------------------------------------------------------------------
# Storage (S3 / MinIO)
# ----------------------------------------------------------------------------
S3_ENDPOINT=https://minio:9000
S3_ACCESS_KEY=REPLACE_WITH_STRONG_MINIO_ACCESS_KEY
S3_SECRET_KEY=REPLACE_WITH_STRONG_MINIO_SECRET_KEY
S3_BUCKET=legal-files
S3_REGION=us-east-1
S3_USE_SSL=true
S3_VERIFY_SSL=true
S3_CA_CERT_PATH=/etc/ssl/minio/ca.crt
MAX_FILE_MB=25
MAX_CASE_MB=250
MINIO_ROOT_USER=REPLACE_WITH_NON_DEFAULT_MINIO_USER
MINIO_ROOT_PASSWORD=REPLACE_WITH_STRONG_MINIO_ROOT_PASSWORD
MINIO_TLS_ENABLED=true
# ----------------------------------------------------------------------------
# Data encryption
# ----------------------------------------------------------------------------
DATA_ENCRYPTION_ACTIVE_KID=k202603
DATA_ENCRYPTION_KEYS=k202603=REPLACE_WITH_LONG_RANDOM_DATA_KID_SECRET_64PLUS
CHAT_ENCRYPTION_ACTIVE_KID=k202603
CHAT_ENCRYPTION_KEYS=k202603=REPLACE_WITH_LONG_RANDOM_CHAT_KID_SECRET_64PLUS
DATA_ENCRYPTION_SECRET=REPLACE_WITH_LONG_RANDOM_DATA_ENCRYPTION_SECRET_64PLUS
CHAT_ENCRYPTION_SECRET=REPLACE_WITH_LONG_RANDOM_CHAT_ENCRYPTION_SECRET_64PLUS
INTERNAL_SERVICE_TOKEN=REPLACE_WITH_LONG_RANDOM_INTERNAL_SERVICE_TOKEN_64PLUS
# ----------------------------------------------------------------------------
# OTP / Public auth mode
# PUBLIC_AUTH_MODE: sms | email | sms_or_email | totp
# ----------------------------------------------------------------------------
PUBLIC_AUTH_MODE=sms_or_email
OTP_DEV_MODE=false
OTP_AUTOTEST_FORCE_MOCK_SMS=true
OTP_RATE_LIMIT_WINDOW_SECONDS=300
OTP_SEND_RATE_LIMIT=8
OTP_VERIFY_RATE_LIMIT=20
# ----------------------------------------------------------------------------
# SMS provider
# SMS_PROVIDER: dummy | smsaero
# ----------------------------------------------------------------------------
SMS_PROVIDER=smsaero
SMSAERO_EMAIL=REPLACE_WITH_SMSAERO_ACCOUNT_EMAIL
SMSAERO_API_KEY=REPLACE_WITH_SMSAERO_API_KEY
OTP_SMS_TEMPLATE=Ваш код подтверждения: {code}
OTP_SMS_MIN_BALANCE=20
# ----------------------------------------------------------------------------
# Email OTP / fallback
# EMAIL_PROVIDER: dummy | smtp | service
# ----------------------------------------------------------------------------
EMAIL_PROVIDER=service
EMAIL_SERVICE_URL=http://email-service:8010
OTP_EMAIL_FALLBACK_ENABLED=true
OTP_EMAIL_SUBJECT_TEMPLATE=Код подтверждения: {code}
OTP_EMAIL_TEMPLATE=Ваш код подтверждения: {code}
# SMTP mode settings (only if EMAIL_PROVIDER=smtp)
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=no-reply@example.com
SMTP_PASSWORD=REPLACE_WITH_SMTP_PASSWORD
SMTP_FROM=no-reply@example.com
SMTP_USE_TLS=true
SMTP_USE_SSL=false
# ----------------------------------------------------------------------------
# Admin auth / bootstrap
# ADMIN_BOOTSTRAP_ENABLED must be false in production.
# ----------------------------------------------------------------------------
ADMIN_AUTH_MODE=password_totp_required
TOTP_ISSUER=Правовой Трекер
ADMIN_BOOTSTRAP_ENABLED=false
ADMIN_BOOTSTRAP_EMAIL=admin@example.com
ADMIN_BOOTSTRAP_PASSWORD=REPLACE_WITH_TEMP_BOOTSTRAP_PASSWORD
ADMIN_BOOTSTRAP_NAME=Администратор системы
# ----------------------------------------------------------------------------
# Telegram notifications
# ----------------------------------------------------------------------------
TELEGRAM_BOT_TOKEN=REPLACE_WITH_TELEGRAM_BOT_TOKEN
TELEGRAM_CHAT_ID=REPLACE_WITH_TELEGRAM_CHAT_ID
# ----------------------------------------------------------------------------
# Attachment security scan (ClamAV)
# ----------------------------------------------------------------------------
ATTACHMENT_SCAN_ENABLED=true
ATTACHMENT_SCAN_ENFORCE=true
ATTACHMENT_ALLOWED_MIME_TYPES=application/pdf,image/jpeg,image/png,video/mp4,text/plain
CLAMAV_ENABLED=true
CLAMAV_HOST=clamav
CLAMAV_PORT=3310
CLAMAV_TIMEOUT_SECONDS=20