Full production-ready docker-compose stack (db, kong, auth, rest, realtime, storage, imgproxy, meta, functions, studio) targeting api.caterium.ru, plus bootstrap script for a fresh Cloud Server, Caddy reverse-proxy config (HTTPS, WebSocket, upload limits), and dump/restore/verify/storage-sync scripts for moving off the managed Supabase project (cksuehzcimitsxmeloes). Does not touch public/ or any live runtime behavior — frontend cutover is documented separately in frontend-cutover.md and only applied after Etap 8 verification. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
93 lines
2.1 KiB
Plaintext
93 lines
2.1 KiB
Plaintext
# Copy to .env, fill in real values, `chmod 600 .env`. Never commit the real file.
|
|
# Generate secrets with: openssl rand -base64 32 (or -hex 32 for hex-only fields)
|
|
|
|
############
|
|
# Postgres #
|
|
############
|
|
POSTGRES_HOST=db
|
|
POSTGRES_PORT=5432
|
|
POSTGRES_DB=postgres
|
|
POSTGRES_PASSWORD=REPLACE_WITH_STRONG_RANDOM_PASSWORD
|
|
|
|
#######
|
|
# JWT #
|
|
#######
|
|
# 40+ char random string. New secret per README (old sessions invalidate; users log in again).
|
|
JWT_SECRET=REPLACE_WITH_openssl_rand_base64_40
|
|
JWT_EXPIRY=3600
|
|
# Derive ANON_KEY / SERVICE_ROLE_KEY from JWT_SECRET with the Supabase JWT generator
|
|
# (https://supabase.com/docs/guides/self-hosting/docker#generate-api-keys) — role: anon / service_role.
|
|
ANON_KEY=REPLACE_WITH_GENERATED_ANON_JWT
|
|
SERVICE_ROLE_KEY=REPLACE_WITH_GENERATED_SERVICE_ROLE_JWT
|
|
|
|
########
|
|
# Kong #
|
|
########
|
|
KONG_HTTP_PORT=8000
|
|
KONG_HTTPS_PORT=8443
|
|
|
|
#########
|
|
# Studio #
|
|
#########
|
|
STUDIO_DEFAULT_ORGANIZATION=Caterium
|
|
STUDIO_DEFAULT_PROJECT=caterium-selfhosted
|
|
STUDIO_PORT=3000
|
|
# Basic-auth in front of Studio via Caddy — separate from Supabase dashboard user below.
|
|
DASHBOARD_USERNAME=REPLACE_ME
|
|
DASHBOARD_PASSWORD=REPLACE_WITH_STRONG_RANDOM_PASSWORD
|
|
|
|
########
|
|
# API #
|
|
########
|
|
API_EXTERNAL_URL=https://api.caterium.ru
|
|
SUPABASE_PUBLIC_URL=https://api.caterium.ru
|
|
SITE_URL=https://app.caterium.ru
|
|
ADDITIONAL_REDIRECT_URLS=https://app.caterium.ru/**
|
|
|
|
#########
|
|
# Auth #
|
|
#########
|
|
DISABLE_SIGNUP=false
|
|
ENABLE_EMAIL_SIGNUP=true
|
|
ENABLE_EMAIL_AUTOCONFIRM=false
|
|
ENABLE_PHONE_SIGNUP=false
|
|
ENABLE_ANONYMOUS_USERS=false
|
|
|
|
########
|
|
# SMTP #
|
|
########
|
|
SMTP_ADMIN_EMAIL=noreply@caterium.ru
|
|
SMTP_HOST=REPLACE_ME
|
|
SMTP_PORT=587
|
|
SMTP_USER=REPLACE_ME
|
|
SMTP_PASS=REPLACE_ME
|
|
SMTP_SENDER_NAME=Caterium
|
|
|
|
###########
|
|
# Storage #
|
|
###########
|
|
STORAGE_BACKEND=file
|
|
FILE_SIZE_LIMIT=52428800
|
|
STORAGE_FILE_SIZE_LIMIT=52428800
|
|
|
|
###########
|
|
# Realtime #
|
|
###########
|
|
REALTIME_ENCRYPTION_KEY=REPLACE_WITH_openssl_rand_hex_16
|
|
REALTIME_SECRET_KEY_BASE=REPLACE_WITH_openssl_rand_base64_64
|
|
|
|
##############
|
|
# Functions #
|
|
##############
|
|
FUNCTIONS_VERIFY_JWT=false
|
|
|
|
##############
|
|
# pg_meta #
|
|
##############
|
|
PGMETA_PORT=8080
|
|
|
|
############
|
|
# Postgres image extras
|
|
############
|
|
POOLER_TENANT_ID=caterium
|