fluxer/tests/integration/compose.yaml
2026-01-01 21:05:54 +00:00

277 lines
7.0 KiB
YAML

services:
cassandra:
image: scylladb/scylla:6.2
command: --smp 1 --memory 1G --overprovisioned 1 --developer-mode 1 --api-address 0.0.0.0
networks:
- fluxer-integration
healthcheck:
test: ['CMD-SHELL', 'cqlsh -e "describe cluster"']
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
volumes:
- cassandra-data:/var/lib/scylla
cassandra-migrate:
build:
context: ../..
dockerfile: scripts/cassandra-migrate/Dockerfile
command: ['--host', 'cassandra', '--username', 'cassandra', '--password', 'cassandra', 'up']
environment:
CASSANDRA_HOST: cassandra
CASSANDRA_USERNAME: cassandra
CASSANDRA_PASSWORD: cassandra
CASSANDRA_KEYSPACE: fluxer
depends_on:
cassandra:
condition: service_healthy
networks:
- fluxer-integration
postgres:
image: postgres:17
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: fluxer
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U postgres']
interval: 10s
timeout: 5s
retries: 5
networks:
- fluxer-integration
volumes:
- postgres-data:/var/lib/postgresql/data
valkey:
image: valkey/valkey:8.0
command: valkey-server --save 60 1 --loglevel warning
networks:
- fluxer-integration
volumes:
- valkey-data:/data
meilisearch:
image: getmeili/meilisearch:v1.25.0
environment:
MEILI_ENV: development
MEILI_MASTER_KEY: masterKey
networks:
- fluxer-integration
volumes:
- meilisearch-data:/meili_data
minio:
image: minio/minio:latest
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin
networks:
- fluxer-integration
volumes:
- minio-data:/data
healthcheck:
test: ['CMD', 'mc', 'ready', 'local']
interval: 5s
timeout: 5s
retries: 10
minio-setup:
image: minio/mc
depends_on:
minio:
condition: service_healthy
entrypoint: >
/bin/sh -c "
until mc alias set integration http://minio:9000 minioadmin minioadmin; do
echo 'Waiting for MinIO...' && sleep 2;
done &&
mc mb --ignore-existing integration/fluxer-cdn &&
mc mb --ignore-existing integration/fluxer-uploads &&
mc mb --ignore-existing integration/fluxer-reports &&
mc mb --ignore-existing integration/fluxer-harvests &&
mc mb --ignore-existing integration/fluxer-downloads
"
networks:
- fluxer-integration
clamav:
image: clamav/clamav:1.2.2
networks:
- fluxer-integration
healthcheck:
test: ['CMD', '/usr/local/bin/clamdcheck.sh']
interval: 30s
timeout: 10s
retries: 5
start_period: 120s
cloudflared:
image: cloudflare/cloudflared:latest
command: tunnel --no-autoupdate run --token ${CLOUDFLARE_TUNNEL_TOKEN}
env_file:
- ./env/secrets.env
networks:
- fluxer-integration
restart: on-failure
livekit:
image: livekit/livekit-server:latest
command: --config /etc/livekit.yaml --dev
volumes:
- ./livekit.yaml:/etc/livekit.yaml:ro
networks:
- fluxer-integration
restart: on-failure
healthcheck:
test: ['CMD', 'wget', '--spider', '-q', 'http://localhost:7880']
interval: 10s
timeout: 5s
retries: 5
media-proxy:
build:
context: ../../fluxer_media_proxy
environment:
NODE_ENV: production
FLUXER_MEDIA_PROXY_PORT: 8080
AWS_ACCESS_KEY_ID: minioadmin
AWS_SECRET_ACCESS_KEY: minioadmin
AWS_S3_ENDPOINT: http://minio:9000
AWS_S3_BUCKET_CDN: fluxer-cdn
AWS_S3_BUCKET_UPLOADS: fluxer-uploads
MEDIA_PROXY_SECRET_KEY: integration-media-secret
depends_on:
minio:
condition: service_started
networks:
- fluxer-integration
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:8080/_health']
interval: 10s
timeout: 5s
retries: 6
api:
build:
context: ../../fluxer_api
command: ['pnpm', 'start']
env_file:
- ./env/api.env
- ./env/secrets.env
environment:
CASSANDRA_KEYSPACE: fluxer
GATEWAY_RPC_SECRET: integration-gateway-secret
FLUXER_MEDIA_PROXY_HOST: media-proxy
MEDIA_PROXY_SECRET_KEY: integration-media-secret
depends_on:
cassandra-migrate:
condition: service_completed_successfully
postgres:
condition: service_healthy
valkey:
condition: service_started
meilisearch:
condition: service_started
minio:
condition: service_started
minio-setup:
condition: service_completed_successfully
media-proxy:
condition: service_healthy
livekit:
condition: service_healthy
cloudflared:
condition: service_started
networks:
- fluxer-integration
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:8080/_health']
interval: 10s
timeout: 5s
retries: 12
gateway:
build:
context: ../../fluxer_gateway
environment:
API_HOST: api:8080
GATEWAY_RPC_SECRET: integration-gateway-secret
FLUXER_GATEWAY_WS_PORT: 8080
FLUXER_GATEWAY_RPC_PORT: 8081
depends_on:
api:
condition: service_healthy
networks:
- fluxer-integration
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:8080/_health']
interval: 10s
timeout: 5s
retries: 12
worker:
build:
context: ../../fluxer_api
command: ['pnpm', 'start:worker']
env_file:
- ./env/api.env
environment:
CASSANDRA_KEYSPACE: fluxer
GATEWAY_RPC_SECRET: integration-gateway-secret
MEDIA_PROXY_SECRET_KEY: integration-media-secret
depends_on:
cassandra-migrate:
condition: service_completed_successfully
postgres:
condition: service_healthy
valkey:
condition: service_started
meilisearch:
condition: service_started
minio:
condition: service_started
media-proxy:
condition: service_healthy
gateway:
condition: service_healthy
networks:
- fluxer-integration
integration-tests:
build:
context: ../..
dockerfile: tests/integration/Dockerfile
environment:
FLUXER_INTEGRATION_API_URL: http://api:8080
FLUXER_INTEGRATION_GATEWAY_URL: ws://gateway:8080
FLUXER_TEST_TOKEN: integration-token
FLUXER_WEBAPP_ORIGIN: http://localhost:8088
GATEWAY_RPC_SECRET: integration-gateway-secret
REDIS_URL: redis://valkey:6379
depends_on:
api:
condition: service_healthy
gateway:
condition: service_healthy
media-proxy:
condition: service_healthy
worker:
condition: service_started
networks:
- fluxer-integration
networks:
fluxer-integration:
driver: bridge
volumes:
cassandra-data:
postgres-data:
valkey-data:
meilisearch-data:
minio-data: