Freym Setup
Docker Compose
Using this Docker Compose file, you can quickly set up a local development environment for Fr[ae]ym.
This setup includes all the necessary components to get started with Fr[ae]ym:
Credentials
Don't forget to login to our currently private docker registry using: docker login ghcr.io
name: fraeym-dev
services:
sync:
image: ghcr.io/fraeym/sync:v1.0.0
restart: unless-stopped
healthcheck: &healthcheck
test: ["CMD", "/health"]
interval: 5s
timeout: 2s
retries: 3
start_period: 5s
ports:
- 127.0.0.1:9101:9000
- 127.0.0.1:3101:3000
environment:
- APP_ENV=development
- LOG_LEVEL=info
streams:
image: ghcr.io/fraeym/streams:v1.0.0
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
restart: true
sync:
condition: service_healthy
restart: true
healthcheck: *healthcheck
ports:
- 127.0.0.1:9102:9000
- 127.0.0.1:3102:3000
environment:
- APP_ENV=development
- LOG_LEVEL=info
- AUTH_SECRET=change-me
- SYNC_CLIENT_ADDRESS=sync:9000
- SYNC_CLIENT_APP_PREFIX=streams
- POSTGRES_CONNECTION=postgres://postgres:change-me@postgres:5432?pool_max_conns=10&pool_min_conns=1
projections:
image: ghcr.io/fraeym/projections:v1.0.0
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
restart: true
sync:
condition: service_healthy
restart: true
streams:
condition: service_healthy
restart: true
healthcheck: *healthcheck
ports:
- 127.0.0.1:9103:9000
- 127.0.0.1:3103:3000
environment:
- APP_ENV=development
- LOG_LEVEL=info
- CORS_ALLOW_ORIGINS=*
- PROJECTION_TASK_INTERVAL=3000
- POSTGRES_CONNECTION=postgres://postgres:change-me@postgres:5432?pool_max_conns=10&pool_min_conns=1
- SYNC_CLIENT_ADDRESS=sync:9000
- SYNC_CLIENT_APP_PREFIX=projections
- STREAMS_CLIENT_ADDRESS=streams:9000
- STREAMS_CLIENT_GROUP_ID=projections
- AUTH_SECRET=change-me
crud:
image: ghcr.io/fraeym/crud:v1.0.0
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
restart: true
sync:
condition: service_healthy
restart: true
streams:
condition: service_healthy
restart: true
projections:
condition: service_healthy
restart: true
s3:
condition: service_healthy
restart: true
imgproxy:
condition: service_healthy
restart: true
healthcheck: *healthcheck
ports:
- 127.0.0.1:9104:9000
- 127.0.0.1:3104:3000
environment:
- APP_ENV=development
- LOG_LEVEL=info
- POSTGRES_CONNECTION=postgres://postgres:change-me@postgres:5432?pool_max_conns=10&pool_min_conns=1
- SYNC_CLIENT_ADDRESS=sync:9000
- SYNC_CLIENT_APP_PREFIX=crud
- STREAMS_CLIENT_ADDRESS=streams:9000
- STREAMS_CLIENT_GROUP_ID=crud
- PROJECTIONS_CLIENT_ADDRESS=projections:9000
- AUTH_SECRET=change-me
- HTTP_REQUEST_BODY_LIMIT=50
- S3_ENDPOINT=s3:9000
- S3_ACCESS_KEY=root
- S3_SECRET_KEY=change-me
- S3_SSL=false
- S3_BUCKET=crud
deployments:
image: ghcr.io/fraeym/deployments:v1.0.0
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
restart: true
sync:
condition: service_healthy
restart: true
streams:
condition: service_healthy
restart: true
projections:
condition: service_healthy
restart: true
crud:
condition: service_healthy
restart: true
healthcheck: *healthcheck
ports:
- 127.0.0.1:9105:9000
- 127.0.0.1:3105:3000
environment:
- APP_ENV=development
- LOG_LEVEL=info
- API_TOKEN=change-me
- SYNC_CLIENT_ADDRESS=sync:9000
- SYNC_CLIENT_APP_PREFIX=deployments
- AUTH_CLIENT_ADDRESS=auth:9000
- CRUD_CLIENT_ADDRESS=crud:9000
- PROJECTIONS_CLIENT_ADDRESS=projections:9000
- POSTGRES_CONNECTION=postgres://postgres:change-me@postgres:5432?pool_max_conns=10&pool_min_conns=1
auth:
image: ghcr.io/fraeym/auth:v1.0.0
restart: unless-stopped
depends_on:
sync:
condition: service_healthy
restart: true
streams:
condition: service_healthy
restart: true
crud:
condition: service_healthy
restart: true
deployments:
condition: service_healthy
restart: true
healthcheck: *healthcheck
ports:
- 127.0.0.1:9106:9000
- 127.0.0.1:3106:3000
environment:
- APP_ENV=development
- LOG_LEVEL=info
- AUTH_SECRET=change-me
- AUTH_SECRET_INITIAL_PW=change-me
- CRUD_CLIENT_ADDRESS=crud:9000
- STREAMS_CLIENT_ADDRESS=streams:9000
- STREAMS_CLIENT_GROUP_ID=auth
- SYNC_CLIENT_ADDRESS=sync:9000
- SYNC_CLIENT_APP_PREFIX=auth
- DEPLOYMENTS_CLIENT_ADDRESS=deployments:9000
- DEPLOYMENTS_NAMESPACE=FraymAuth
postgres:
image: postgres:17.5-alpine
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready", "-d", "db_prod"]
interval: 30s
timeout: 60s
retries: 5
start_period: 80s
ports:
- 127.0.0.1:5433:5432
volumes:
- ./.data/postgresql/data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=change-me
command:
- postgres
- -c
- log_statement=none
- -c
- log_connections=off
- -c
- log_disconnections=off
- -c
- log_min_messages=panic
s3:
image: quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z
restart: unless-stopped
healthcheck:
test: ["CMD", "mc", "ready", "local"]
interval: 5s
timeout: 5s
retries: 5
environment:
- MINIO_ROOT_USER=root
- MINIO_ROOT_PASSWORD=change-me
command: server /data --console-address ":9001"
volumes:
- ./.data/s3/data:/data
imgproxy:
image: darthsim/imgproxy:v3.30.1
restart: unless-stopped
depends_on:
s3:
condition: service_healthy
restart: true
healthcheck:
test: ["CMD", "imgproxy", "health"]
timeout: 10s
interval: 10s
retries: 3
environment:
- IMGPROXY_MAX_SRC_RESOLUTION=50.0
- IMGPROXY_ALLOWED_SOURCES=s3://
- IMGPROXY_USE_S3=true
- IMGPROXY_S3_ENDPOINT=http://s3:9000
- AWS_ACCESS_KEY_ID=root
- AWS_SECRET_ACCESS_KEY=change-meSecrets
The configuration will use the following secrets:
| Secret | Value |
|---|---|
| JWT Secret | example256bitlongsecretforjwtgen |
| Management API Token | example-management-token |
| Postgres User | postgres |
| Postgres Password | example |
Exposed ports
The configuration will expose the following ports on your local machine:
| Service | Port |
|---|---|
| Postgres | 5432 |
| Streams | 3001 |
| Projections | 3002 |
| CRUD | 3003 |
| Auth | 3004 |
| Deployments | 3005 |