Skip to content

Commit 39f7413

Browse files
authored
Feat/docker compose example (#418)
* feat: docker-compose example * feat: consistent env vars
1 parent 9b1f22b commit 39f7413

35 files changed

+741
-273
lines changed

.env.sample

Lines changed: 126 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,147 @@
1-
# Tenant Configuration
1+
#######################################
2+
# Server
3+
#######################################
4+
SERVER_HOST=0.0.0.0
5+
SERVER_PORT=5000
6+
SERVER_ADMIN_PORT=5001
7+
SERVER_KEEP_ALIVE_TIMEOUT=61
8+
SERVER_HEADERS_TIMEOUT=65
9+
SERVER_REGION=region-of-where-your-service-is-running
10+
11+
12+
#######################################
13+
# Auth
14+
#######################################
15+
AUTH_JWT_SECRET=f023d3db-39dc-4ac9-87b2-b2be72e9162b
16+
AUTH_JWT_ALGORITHM=HS256
17+
AUTH_ENCRYPTION_KEY=encryptionkey
18+
19+
20+
#######################################
21+
# Single Tenant
22+
#######################################
23+
TENANT_ID=bjhaohmqunupljrqypxz
224
ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYxMzUzMTk4NSwiZXhwIjoxOTI5MTA3OTg1fQ.mqfi__KnQB4v6PkIjkhzfwWrYyF94MEbSC6LnuvVniE
325
SERVICE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoic2VydmljZV9yb2xlIiwiaWF0IjoxNjEzNTMxOTg1LCJleHAiOjE5MjkxMDc5ODV9.th84OKK0Iz8QchDyXZRrojmKSEZ-OuitQm_5DvLiSIc
4-
TENANT_ID=bjhaohmqunupljrqypxz
5-
PGRST_JWT_SECRET=f023d3db-39dc-4ac9-87b2-b2be72e9162b
626

7-
# Database configuration
27+
28+
#######################################
29+
# Multi Tenancy
30+
# uncomment MULTI_TENANT=true to enable multi tenancy
31+
# the [Single Tenant] configurations will be ignored
32+
#######################################
33+
# MULTI_TENANT=true
34+
DATABASE_MULTITENANT_URL=postgresql://postgres:[email protected]:5433/postgres
35+
REQUEST_X_FORWARDED_HOST_REGEXP=
36+
ADMIN_API_KEYS=apikey
37+
38+
39+
#######################################
40+
# Database
41+
#######################################
842
DATABASE_URL=postgresql://postgres:[email protected]/postgres
943
DATABASE_POOL_URL=postgresql://postgres:[email protected]:6453/postgres
44+
DATABASE_CONNECTION_TIMEOUT=3000
45+
DATABASE_SEARCH_PATH=
46+
47+
## When DATABASE_POOL_URL is SET the following params are ignored
48+
DATABASE_MAX_CONNECTIONS=20
49+
DATABASE_FREE_POOL_AFTER_INACTIVITY=60000
50+
51+
#######################################
52+
# Database - Migrations
53+
#######################################
54+
DB_INSTALL_ROLES=true
55+
DB_ANON_ROLE=anon
56+
DB_SERVICE_ROLE=service_role
57+
DB_AUTHENTICATED_ROLE=authenticated
58+
DB_SUPER_USER=postgres
59+
DB_ALLOW_MIGRATION_REFRESH=true
1060

11-
# Upload configuration
12-
FILE_SIZE_LIMIT=52428800
1361

14-
# Storage
62+
#######################################
63+
# Uploads
64+
#######################################
65+
UPLOAD_FILE_SIZE_LIMIT=524288000
66+
UPLOAD_FILE_SIZE_LIMIT_STANDARD=52428800
67+
UPLOAD_SIGNED_URL_EXPIRATION_TIME=60
68+
69+
TUS_URL_PATH=/upload/resumable
70+
TUS_URL_EXPIRY_MS=3600000
71+
72+
73+
#######################################
74+
# Storage Backend Driver
75+
# values: s3 | file
76+
#######################################
1577
STORAGE_BACKEND=s3
16-
GLOBAL_S3_BUCKET=name-of-your-s3-bucket
1778

18-
# S3 Configuration
19-
REGION=region-of-your-s3-bucket
20-
GLOBAL_S3_ENDPOINT=http://127.0.0.1:9000
21-
GLOBAL_S3_PROTOCOL=http
79+
#######################################
80+
# S3 Backend
81+
#######################################
82+
STORAGE_S3_BUCKET=name-of-your-s3-bucket
83+
STORAGE_S3_MAX_SOCKETS=200
84+
STORAGE_S3_ENDPOINT=http://127.0.0.1:9000
85+
STORAGE_S3_FORCE_PATH_STYLE=true
86+
STORAGE_S3_REGION=us-east-1
2287

23-
# Minio Configuration (if using Minio)
24-
GLOBAL_S3_FORCE_PATH_STYLE=true
2588
AWS_ACCESS_KEY_ID=supa-storage
2689
AWS_SECRET_ACCESS_KEY=secret1234
27-
AWS_DEFAULT_REGION=ap-southeast-1
28-
29-
# Local File Storage Configuration
30-
FILE_STORAGE_BACKEND_PATH=./data
3190

32-
# Multitenant
33-
IS_MULTITENANT=false
34-
MULTITENANT_DATABASE_URL=postgresql://postgres:[email protected]:5433/postgres
35-
X_FORWARDED_HOST_REGEXP=
36-
ADMIN_API_KEYS=apikey
37-
ENCRYPTION_KEY=encryptionkey
91+
#######################################
92+
# File Backend
93+
#######################################
94+
STORAGE_FILE_BACKEND_PATH=./data
3895

39-
# Logs
40-
LOGFLARE_ENABLED=false
41-
LOGFLARE_API_KEY=api_key
42-
LOGFLARE_SOURCE_TOKEN=source_token
4396

97+
#######################################
4498
# Image Transformation
45-
ENABLE_IMAGE_TRANSFORMATION=true
99+
#######################################
100+
IMAGE_TRANSFORMATION_ENABLED=true
101+
IMAGE_TRANSFORMATION_LIMIT_MIN_SIZE=0
102+
IMAGE_TRANSFORMATION_LIMIT_MAX_SIZE=2000
103+
46104
IMGPROXY_URL=http://localhost:50020
105+
IMGPROXY_REQUEST_TIMEOUT=15
106+
IMGPROXY_HTTP_MAX_SOCKETS=500
107+
108+
#######################################
109+
# Image Transformation - Rate Limiter
110+
# values: redis | memory
111+
#######################################
112+
RATE_LIMITER_ENABLED=false
113+
RATE_LIMITER_DRIVER=redis
114+
RATE_LIMITER_REDIS_URL=localhost:6379
115+
RATE_LIMITER_REDIS_CONNECT_TIMEOUT=5
116+
RATE_LIMITER_RENDER_PATH_MAX_REQ_SEC=5
117+
RATE_LIMITER_REDIS_COMMAND_TIMEOUT=2
118+
47119

120+
#######################################
48121
# Queue
122+
# When PG_QUEUE_CONNECTION_URL is not SET it will use the DATABASE_URL
123+
# or DB
124+
#######################################
125+
PG_QUEUE_ENABLE=false
126+
PG_QUEUE_DELETE_AFTER_DAYS=2
127+
PG_QUEUE_ARCHIVE_COMPLETED_AFTER_SECONDS=7200
128+
PG_QUEUE_RETENTION_DAYS=2
129+
PG_QUEUE_CONNECTION_URL=
130+
131+
132+
#######################################
133+
# Webhooks
134+
#######################################
49135
WEBHOOK_URL=
50-
ENABLE_QUEUE_EVENTS=false
136+
WEBHOOK_API_KEY=
51137

52-
# Rate Limiter
53-
ENABLE_RATE_LIMITER=true
54-
RATE_LIMITER_DRIVER=redis
55-
RATE_LIMITER_REDIS_URL=localhost:6379
138+
139+
#######################################
140+
# Monitoring
141+
#######################################
142+
DEFAULT_METRICS_ENABLED=true
143+
LOG_LEVEL=info
144+
145+
LOGFLARE_ENABLED=false
146+
LOGFLARE_API_KEY=api_key
147+
LOGFLARE_SOURCE_TOKEN=source_token

docker-compose-infra.yml

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
# docker-compose.yml
2+
3+
version: '3'
4+
services:
5+
6+
tenant_db:
7+
image: postgres:15
8+
ports:
9+
- '5432:5432'
10+
healthcheck:
11+
test: [ "CMD-SHELL", "pg_isready", "-d", "postgres" ]
12+
interval: 50s
13+
timeout: 60s
14+
retries: 5
15+
environment:
16+
POSTGRES_DB: postgres
17+
POSTGRES_USER: postgres
18+
POSTGRES_PASSWORD: postgres
19+
POSTGRES_PORT: 5432
20+
21+
multitenant_db:
22+
image: postgres:15
23+
ports:
24+
- '5433:5432'
25+
configs:
26+
- source: init.sql
27+
target: /docker-entrypoint-initdb.d/init.sql
28+
healthcheck:
29+
test: [ "CMD-SHELL", "pg_isready", "-d", "postgres" ]
30+
interval: 50s
31+
timeout: 60s
32+
retries: 5
33+
environment:
34+
POSTGRES_DB: postgres
35+
POSTGRES_USER: postgres
36+
POSTGRES_PASSWORD: postgres
37+
38+
pg_bouncer:
39+
image: bitnami/pgbouncer:latest
40+
ports:
41+
- 6453:6432
42+
environment:
43+
POSTGRESQL_USERNAME: postgres
44+
POSTGRESQL_HOST: tenant_db
45+
POSTGRESQL_PASSWORD: postgres
46+
PGBOUNCER_POOL_MODE: transaction
47+
PGBOUNCER_IGNORE_STARTUP_PARAMETERS: "extra_float_digits, options"
48+
PGBOUNCER_STATS_USERS: postgres
49+
50+
supavisor:
51+
image: supabase/supavisor:1.1.6
52+
depends_on:
53+
multitenant_db:
54+
condition: service_healthy
55+
tenant_db:
56+
condition: service_healthy
57+
ports:
58+
- 4000:4000
59+
- 5452:5452
60+
- 6543:6543
61+
healthcheck:
62+
test: ["CMD", "curl", "-f", "http://localhost:4000/api/health"]
63+
interval: 2s
64+
timeout: 10s
65+
retries: 5
66+
environment:
67+
PORT: 4000
68+
PROXY_PORT_SESSION: 5452
69+
PROXY_PORT_TRANSACTION: 6543
70+
DATABASE_URL: "ecto://postgres:postgres@multitenant_db:5432/postgres"
71+
CLUSTER_POSTGRES: "true"
72+
SECRET_KEY_BASE: "12345678901234567890121234567890123456789012345678903212345678901234567890123456789032123456789012345678901234567890323456789032"
73+
VAULT_ENC_KEY: "12345678901234567890123456789032"
74+
API_JWT_SECRET: "dev"
75+
METRICS_JWT_SECRET: "dev"
76+
REGION: "local"
77+
ERL_AFLAGS: -proto_dist inet_tcp
78+
command: sh -c "/app/bin/migrate && /app/bin/server"
79+
80+
supavisor_setup:
81+
image: supabase/supavisor:1.1.6
82+
command: |
83+
curl -X PUT \
84+
"http://supavisor:4000/api/tenants/bjhaohmqunupljrqypxz" \
85+
--header "Accept: application/json" \
86+
--header "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJvbGUiOiJhbm9uIiwiaWF0IjoxNjQ1MTkyODI0LCJleHAiOjE5NjA3Njg4MjR9.M9jrxyvPLkUxWgOYSf5dNdJ8v_eRrq810ShFRT8N-6M" \
87+
--header "Content-Type: application/json" \
88+
--data-raw "{
89+
\"tenant\": {
90+
\"db_host\": \"tenant_db\",
91+
\"db_port\": 5432,
92+
\"db_database\": \"postgres\",
93+
\"ip_version\": \"auto\",
94+
\"require_user\": true,
95+
\"upstream_ssl\": false,
96+
\"enforce_ssl\": false,
97+
\"default_max_clients\": 200,
98+
\"default_pool_size\": 15,
99+
\"users\": [
100+
{
101+
\"db_user\": \"postgres\",
102+
\"db_password\": \"postgres\",
103+
\"mode_type\": \"transaction\",
104+
\"pool_size\": 15,
105+
\"pool_checkout_timeout\": 100
106+
}
107+
]
108+
}
109+
}"
110+
depends_on:
111+
supavisor:
112+
condition: service_healthy
113+
114+
minio:
115+
image: minio/minio
116+
ports:
117+
- '9000:9000'
118+
- '9001:9001'
119+
healthcheck:
120+
test: timeout 5s bash -c ':> /dev/tcp/127.0.0.1/9000' || exit 1
121+
interval: 10s
122+
timeout: 5s
123+
retries: 2
124+
environment:
125+
MINIO_ROOT_USER: supa-storage
126+
MINIO_ROOT_PASSWORD: secret1234
127+
command: server --console-address ":9001" /data
128+
129+
minio_setup:
130+
image: minio/mc
131+
depends_on:
132+
minio:
133+
condition: service_healthy
134+
entrypoint: >
135+
/bin/sh -c "
136+
/usr/bin/mc alias set supa-minio http://minio:9000 supa-storage secret1234;
137+
/usr/bin/mc mb supa-minio/supa-storage-bucket;
138+
exit 0;
139+
"
140+
141+
imgproxy:
142+
image: darthsim/imgproxy
143+
ports:
144+
- '50020:8080'
145+
volumes:
146+
- ./data:/images/data
147+
environment:
148+
- IMGPROXY_WRITE_TIMEOUT=20
149+
- IMGPROXY_READ_TIMEOUT=20
150+
- IMGPROXY_REQUESTS_QUEUE_SIZE=24
151+
- IMGPROXY_LOCAL_FILESYSTEM_ROOT=/images
152+
- IMGPROXY_USE_ETAG=true
153+
- IMGPROXY_ENABLE_WEBP_DETECTION=true
154+
155+
# Optional for rate-limiting
156+
redis:
157+
image: redis:6.2-alpine
158+
restart: always
159+
ports:
160+
- '6379:6379'
161+
162+
configs:
163+
init.sql:
164+
content: |
165+
CREATE SCHEMA IF NOT EXISTS _supavisor;

0 commit comments

Comments
 (0)