mirror of
https://github.com/TronoSfera/Law.git
synced 2026-05-18 18:13:46 +03:00
135 lines
5.6 KiB
Text
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
|