docker-compose.yml•4.24 kB
volumes:
redis_data:
driver: local
kc_postgres_data: {}
networks:
snaknet:
driver: bridge
services:
postgres:
image: pgvector/pgvector:pg17
container_name: 'postgresql'
networks: [snaknet]
ports:
- '5432:5432'
env_file:
- .env
volumes:
- ./packages/database/initdb:/docker-entrypoint-initdb.d
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U $${POSTGRES_USER}']
interval: 10s
timeout: 5s
retries: 5
command: >
postgres
-c logging_collector=on
-c log_directory=/etc/postgresql/log
-c log_file_mode=0664
-c log_filename='postgresql-%Y-%m-%d_%H:%M:%S.log'
restart: unless-stopped
redis:
image: redis:7-alpine
container_name: 'snak_redis'
networks: [snaknet]
ports:
- '127.0.0.1:6379:6379'
volumes:
- redis_data:/data
env_file:
- .env
command:
[
'redis-server',
'--appendonly',
'yes',
'--requirepass',
'${REDIS_PASSWORD:?REDIS_PASSWORD is required}',
]
healthcheck:
test:
[
'CMD',
'redis-cli',
'-a',
'${REDIS_PASSWORD:?REDIS_PASSWORD is required}',
'ping',
]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
snak-api:
build:
context: .
dockerfile: packages/server/Dockerfile
container_name: 'snak-api'
networks: [snaknet]
ports:
- '3002:3002'
env_file:
- .env
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
restart: on-failure
traefik:
image: traefik:v3.1
container_name: traefik
restart: always
command:
- --entrypoints.websecure.address=:443
- --providers.file.directory=/etc/traefik/dynamic
- --api.dashboard=true
- --log.level="DEBUG"
ports:
- '443:443'
- '8081:8080' # dashboard
volumes:
- ./keycloak/traefik/dynamic.yml:/etc/traefik/dynamic/dynamic.yml:ro
- ./keycloak/traefik/certs:/certs:ro
networks: [snaknet]
# kc_postgres:
# image: postgres:15
# container_name: kc_postgres
# restart: always
# env_file:
# - keycloak/.env.keycloak
# healthcheck:
# test: ['CMD-SHELL', 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}']
# interval: 5s
# timeout: 3s
# retries: 30
# volumes:
# - kc_postgres_data:/var/lib/postgresql/data
# networks: [snaknet]
# keycloak:
# image: quay.io/keycloak/keycloak:26.0.2
# container_name: keycloak
# command: ["start", "--import-realm"]
# restart: always
# depends_on:
# kc_postgres:
# condition: service_healthy
# volumes:
# - ./keycloak/realm.json:/opt/keycloak/data/import/realm.json:ro
# env_file:
# - keycloak/.env.keycloak
# networks: [snaknet]
# ports:
# - "8080:8080"
# - "9000:9000"
# oauth2-proxy:
# image: quay.io/oauth2-proxy/oauth2-proxy:v7.6.0
# container_name: oauth2_proxy
# restart: always
# depends_on:
# - keycloak
# env_file:
# - keycloak/.env.keycloak
# networks: [snaknet]
# ports:
# - "4180:4180"
# - "44180:44180"
# snak-frontend:
# build:
# context: ../snak-app/frontend
# dockerfile: Dockerfile
# container_name: 'snak-frontend'
# env_file:
# - ../snak-app/frontend/.env
# networks: [snaknet]
# ports:
# - '3000:3000'
# snak-bff:
# build:
# context: ../snak-app/backend
# dockerfile: Dockerfile
# container_name: 'snak-bff'
# env_file:
# - ../snak-app/backend/.env
# networks: [snaknet]
# ports:
# - '3001:3001'
# snak-frontend:
# image: ghcr.io/kasarlabs/snak-app/snak-frontend:latest
# container_name: 'snak-frontend'
# env_file:
# - .env.snak-frontend
# networks: [snaknet]
# ports:
# - '3000:3000'
# snak-bff:
# image: ghcr.io/kasarlabs/snak-app/snak-bff:latest
# container_name: 'snak-bff'
# env_file:
# - .env.snak-bff
# networks: [snaknet]
# ports:
# - '3001:3001'