refactor progress
This commit is contained in:
166
dev/.env.example
166
dev/.env.example
@@ -1,166 +0,0 @@
|
||||
NODE_ENV=development
|
||||
|
||||
FLUXER_API_PUBLIC_ENDPOINT=http://127.0.0.1:8088/api
|
||||
FLUXER_API_CLIENT_ENDPOINT=
|
||||
FLUXER_APP_ENDPOINT=http://localhost:8088
|
||||
FLUXER_GATEWAY_ENDPOINT=ws://127.0.0.1:8088/gateway
|
||||
FLUXER_MEDIA_ENDPOINT=http://127.0.0.1:8088/media
|
||||
FLUXER_CDN_ENDPOINT=https://fluxerstatic.com
|
||||
FLUXER_MARKETING_ENDPOINT=http://127.0.0.1:8088
|
||||
FLUXER_ADMIN_ENDPOINT=http://127.0.0.1:8088
|
||||
FLUXER_INVITE_ENDPOINT=http://fluxer.gg
|
||||
FLUXER_GIFT_ENDPOINT=http://fluxer.gift
|
||||
FLUXER_API_HOST=api:8080
|
||||
|
||||
FLUXER_API_PORT=8080
|
||||
FLUXER_GATEWAY_WS_PORT=8080
|
||||
FLUXER_GATEWAY_RPC_PORT=8081
|
||||
FLUXER_MEDIA_PROXY_PORT=8080
|
||||
FLUXER_ADMIN_PORT=8080
|
||||
FLUXER_MARKETING_PORT=8080
|
||||
|
||||
FLUXER_PATH_GATEWAY=/gateway
|
||||
FLUXER_PATH_ADMIN=/admin
|
||||
FLUXER_PATH_MARKETING=/marketing
|
||||
|
||||
API_HOST=api:8080
|
||||
FLUXER_GATEWAY_RPC_HOST=
|
||||
FLUXER_GATEWAY_PUSH_ENABLED=false
|
||||
FLUXER_GATEWAY_PUSH_USER_GUILD_SETTINGS_CACHE_MB=1024
|
||||
FLUXER_GATEWAY_PUSH_SUBSCRIPTIONS_CACHE_MB=1024
|
||||
FLUXER_GATEWAY_PUSH_BLOCKED_IDS_CACHE_MB=1024
|
||||
FLUXER_GATEWAY_IDENTIFY_RATE_LIMIT_ENABLED=false
|
||||
|
||||
FLUXER_MEDIA_PROXY_HOST=
|
||||
MEDIA_PROXY_ENDPOINT=
|
||||
|
||||
VAPID_PUBLIC_KEY=
|
||||
VAPID_PRIVATE_KEY=
|
||||
VAPID_EMAIL=support@fluxer.app
|
||||
|
||||
SUDO_MODE_SECRET=
|
||||
PASSKEYS_ENABLED=true
|
||||
PASSKEY_RP_NAME=Fluxer
|
||||
PASSKEY_RP_ID=127.0.0.1
|
||||
PASSKEY_ALLOWED_ORIGINS=http://127.0.0.1:8088,http://localhost:8088
|
||||
|
||||
ADMIN_OAUTH2_CLIENT_ID=
|
||||
ADMIN_OAUTH2_CLIENT_SECRET=
|
||||
ADMIN_OAUTH2_AUTO_CREATE=false
|
||||
ADMIN_OAUTH2_REDIRECT_URI=http://127.0.0.1:8088/admin/oauth2_callback
|
||||
|
||||
RELEASE_CHANNEL=stable
|
||||
|
||||
DATABASE_URL=postgresql://postgres:postgres@postgres:5432/fluxer
|
||||
|
||||
REDIS_URL=redis://redis:6379
|
||||
|
||||
CASSANDRA_HOSTS=cassandra
|
||||
CASSANDRA_KEYSPACE=fluxer
|
||||
CASSANDRA_LOCAL_DC=datacenter1
|
||||
CASSANDRA_USERNAME=cassandra
|
||||
CASSANDRA_PASSWORD=cassandra
|
||||
|
||||
AWS_S3_ENDPOINT=http://minio:9000
|
||||
AWS_ACCESS_KEY_ID=minioadmin
|
||||
AWS_SECRET_ACCESS_KEY=minioadmin
|
||||
|
||||
AWS_S3_BUCKET_CDN=fluxer
|
||||
AWS_S3_BUCKET_UPLOADS=fluxer-uploads
|
||||
AWS_S3_BUCKET_DOWNLOADS=fluxer-downloads
|
||||
AWS_S3_BUCKET_REPORTS=fluxer-reports
|
||||
AWS_S3_BUCKET_HARVESTS=fluxer-harvests
|
||||
|
||||
R2_S3_ENDPOINT=http://minio:9000
|
||||
R2_ACCESS_KEY_ID=minioadmin
|
||||
R2_SECRET_ACCESS_KEY=minioadmin
|
||||
|
||||
METRICS_MODE=noop
|
||||
|
||||
CLICKHOUSE_URL=http://clickhouse:8123
|
||||
CLICKHOUSE_DATABASE=fluxer_metrics
|
||||
CLICKHOUSE_USER=fluxer
|
||||
CLICKHOUSE_PASSWORD=fluxer_dev
|
||||
|
||||
ANOMALY_DETECTION_ENABLED=true
|
||||
ANOMALY_WINDOW_SIZE=100
|
||||
ANOMALY_ZSCORE_THRESHOLD=3.0
|
||||
ANOMALY_CHECK_INTERVAL_SECS=60
|
||||
ANOMALY_COOLDOWN_SECS=300
|
||||
ANOMALY_ERROR_RATE_THRESHOLD=0.05
|
||||
ALERT_WEBHOOK_URL=
|
||||
|
||||
EMAIL_ENABLED=false
|
||||
SENDGRID_FROM_EMAIL=noreply@fluxer.app
|
||||
SENDGRID_FROM_NAME=Fluxer
|
||||
SENDGRID_API_KEY=
|
||||
SENDGRID_WEBHOOK_PUBLIC_KEY=
|
||||
|
||||
SMS_ENABLED=false
|
||||
TWILIO_ACCOUNT_SID=
|
||||
TWILIO_AUTH_TOKEN=
|
||||
TWILIO_VERIFY_SERVICE_SID=
|
||||
|
||||
CAPTCHA_ENABLED=true
|
||||
CAPTCHA_PRIMARY_PROVIDER=turnstile
|
||||
|
||||
HCAPTCHA_SITE_KEY=10000000-ffff-ffff-ffff-000000000001
|
||||
HCAPTCHA_PUBLIC_SITE_KEY=10000000-ffff-ffff-ffff-000000000001
|
||||
HCAPTCHA_SECRET_KEY=0x0000000000000000000000000000000000000000
|
||||
|
||||
TURNSTILE_SITE_KEY=1x00000000000000000000AA
|
||||
TURNSTILE_PUBLIC_SITE_KEY=1x00000000000000000000AA
|
||||
TURNSTILE_SECRET_KEY=1x0000000000000000000000000000000AA
|
||||
|
||||
SEARCH_ENABLED=true
|
||||
MEILISEARCH_URL=http://meilisearch:7700
|
||||
MEILISEARCH_API_KEY=masterKey
|
||||
|
||||
STRIPE_ENABLED=false
|
||||
STRIPE_SECRET_KEY=
|
||||
STRIPE_WEBHOOK_SECRET=
|
||||
|
||||
STRIPE_PRICE_ID_MONTHLY_USD=
|
||||
STRIPE_PRICE_ID_MONTHLY_EUR=
|
||||
STRIPE_PRICE_ID_YEARLY_USD=
|
||||
STRIPE_PRICE_ID_YEARLY_EUR=
|
||||
STRIPE_PRICE_ID_VISIONARY_USD=
|
||||
STRIPE_PRICE_ID_VISIONARY_EUR=
|
||||
STRIPE_PRICE_ID_GIFT_VISIONARY_USD=
|
||||
STRIPE_PRICE_ID_GIFT_VISIONARY_EUR=
|
||||
STRIPE_PRICE_ID_GIFT_1_MONTH_USD=
|
||||
STRIPE_PRICE_ID_GIFT_1_MONTH_EUR=
|
||||
STRIPE_PRICE_ID_GIFT_1_YEAR_USD=
|
||||
STRIPE_PRICE_ID_GIFT_1_YEAR_EUR=
|
||||
|
||||
CLOUDFLARE_PURGE_ENABLED=false
|
||||
CLOUDFLARE_ZONE_ID=
|
||||
CLOUDFLARE_API_TOKEN=
|
||||
CLOUDFLARE_TUNNEL_TOKEN=
|
||||
|
||||
VOICE_ENABLED=true
|
||||
LIVEKIT_API_KEY=
|
||||
LIVEKIT_API_SECRET=
|
||||
LIVEKIT_WEBHOOK_URL=http://api:8080/webhooks/livekit
|
||||
LIVEKIT_AUTO_CREATE_DUMMY_DATA=true
|
||||
|
||||
CLAMAV_ENABLED=false
|
||||
CLAMAV_HOST=clamav
|
||||
CLAMAV_PORT=3310
|
||||
|
||||
TENOR_API_KEY=
|
||||
YOUTUBE_API_KEY=
|
||||
|
||||
SECRET_KEY_BASE=
|
||||
GATEWAY_RPC_SECRET=
|
||||
GATEWAY_ADMIN_SECRET=
|
||||
ERLANG_COOKIE=fluxer_dev_cookie
|
||||
MEDIA_PROXY_SECRET_KEY=
|
||||
|
||||
SELF_HOSTED=false
|
||||
AUTO_JOIN_INVITE_CODE=
|
||||
FLUXER_VISIONARIES_GUILD_ID=
|
||||
FLUXER_OPERATORS_GUILD_ID=
|
||||
|
||||
GIT_SHA=dev
|
||||
BUILD_TIMESTAMP=
|
||||
@@ -1,59 +1,51 @@
|
||||
:8088 {
|
||||
encode zstd gzip
|
||||
|
||||
@api path /api/*
|
||||
handle @api {
|
||||
handle_path /api/* {
|
||||
reverse_proxy api:8080
|
||||
}
|
||||
}
|
||||
|
||||
@media path /media/*
|
||||
handle @media {
|
||||
handle_path /media/* {
|
||||
reverse_proxy media:8080
|
||||
}
|
||||
}
|
||||
|
||||
@s3 path /s3/*
|
||||
handle @s3 {
|
||||
handle_path /s3/* {
|
||||
reverse_proxy minio:9000
|
||||
}
|
||||
}
|
||||
|
||||
@admin path /admin /admin/*
|
||||
handle @admin {
|
||||
uri strip_prefix /admin
|
||||
reverse_proxy admin:8080
|
||||
}
|
||||
|
||||
@marketing path /marketing /marketing/*
|
||||
handle @marketing {
|
||||
uri strip_prefix /marketing
|
||||
reverse_proxy marketing:8080
|
||||
}
|
||||
|
||||
@gateway path /gateway /gateway/*
|
||||
handle @gateway {
|
||||
uri strip_prefix /gateway
|
||||
reverse_proxy gateway:8080
|
||||
}
|
||||
|
||||
@livekit path /livekit /livekit/*
|
||||
handle @livekit {
|
||||
handle_path /livekit/* {
|
||||
reverse_proxy livekit:7880
|
||||
}
|
||||
}
|
||||
|
||||
@metrics path /metrics /metrics/*
|
||||
handle @metrics {
|
||||
uri strip_prefix /metrics
|
||||
reverse_proxy metrics:8080
|
||||
}
|
||||
|
||||
handle {
|
||||
reverse_proxy host.docker.internal:3000
|
||||
}
|
||||
{
|
||||
auto_https off
|
||||
admin off
|
||||
}
|
||||
|
||||
:48763 {
|
||||
handle /_caddy_health {
|
||||
respond "OK" 200
|
||||
}
|
||||
|
||||
@gateway path /gateway /gateway/*
|
||||
handle @gateway {
|
||||
uri strip_prefix /gateway
|
||||
reverse_proxy 127.0.0.1:49107
|
||||
}
|
||||
|
||||
@marketing path /marketing /marketing/*
|
||||
handle @marketing {
|
||||
uri strip_prefix /marketing
|
||||
reverse_proxy 127.0.0.1:49531
|
||||
}
|
||||
|
||||
@server path /admin /admin/* /api /api/* /s3 /s3/* /queue /queue/* /media /media/* /_health /_ready /_live /.well-known/fluxer
|
||||
handle @server {
|
||||
reverse_proxy 127.0.0.1:49319
|
||||
}
|
||||
|
||||
@livekit path /livekit /livekit/*
|
||||
handle @livekit {
|
||||
uri strip_prefix /livekit
|
||||
reverse_proxy 127.0.0.1:7880
|
||||
}
|
||||
|
||||
redir /mailpit /mailpit/
|
||||
handle_path /mailpit/* {
|
||||
rewrite * /mailpit{path}
|
||||
reverse_proxy 127.0.0.1:49667
|
||||
}
|
||||
|
||||
handle {
|
||||
reverse_proxy 127.0.0.1:49427 {
|
||||
header_up Connection {http.request.header.Connection}
|
||||
header_up Upgrade {http.request.header.Upgrade}
|
||||
}
|
||||
}
|
||||
|
||||
log {
|
||||
output stdout
|
||||
format console
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,160 +0,0 @@
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:17
|
||||
environment:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: fluxer
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
|
||||
cassandra:
|
||||
image: scylladb/scylla:latest
|
||||
command: --smp 1 --memory 512M --overprovisioned 1 --developer-mode 1 --api-address 0.0.0.0
|
||||
ports:
|
||||
- '9042:9042'
|
||||
volumes:
|
||||
- scylla_data:/var/lib/scylla
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
healthcheck:
|
||||
test: ['CMD-SHELL', 'cqlsh -e "describe cluster"']
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
start_period: 90s
|
||||
|
||||
redis:
|
||||
image: valkey/valkey:latest
|
||||
volumes:
|
||||
- redis_data:/data
|
||||
command: valkey-server --save 60 1 --loglevel warning
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
|
||||
minio:
|
||||
image: minio/minio
|
||||
command: server /data --console-address ":9001"
|
||||
environment:
|
||||
MINIO_ROOT_USER: minioadmin
|
||||
MINIO_ROOT_PASSWORD: minioadmin
|
||||
volumes:
|
||||
- minio_data:/data
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
healthcheck:
|
||||
test: ['CMD', 'mc', 'ready', 'local']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
minio-setup:
|
||||
image: minio/mc
|
||||
depends_on:
|
||||
minio:
|
||||
condition: service_healthy
|
||||
entrypoint: >
|
||||
/bin/sh -c "
|
||||
mc alias set minio http://minio:9000 minioadmin minioadmin;
|
||||
mc mb --ignore-existing minio/fluxer-metrics;
|
||||
mc mb --ignore-existing minio/fluxer-uploads;
|
||||
exit 0;
|
||||
"
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: 'no'
|
||||
|
||||
clamav:
|
||||
image: clamav/clamav:latest
|
||||
volumes:
|
||||
- clamav_data:/var/lib/clamav
|
||||
environment:
|
||||
CLAMAV_NO_FRESHCLAMD: 'false'
|
||||
CLAMAV_NO_CLAMD: 'false'
|
||||
CLAMAV_NO_MILTERD: 'true'
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
healthcheck:
|
||||
test: ['CMD', '/usr/local/bin/clamdcheck.sh']
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
start_period: 300s
|
||||
|
||||
meilisearch:
|
||||
image: getmeili/meilisearch:v1.25.0
|
||||
volumes:
|
||||
- meilisearch_data:/meili_data
|
||||
environment:
|
||||
MEILI_ENV: development
|
||||
MEILI_MASTER_KEY: masterKey
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
|
||||
livekit:
|
||||
image: livekit/livekit-server:latest
|
||||
command: --config /etc/livekit.yaml --dev
|
||||
env_file:
|
||||
- ./.env
|
||||
volumes:
|
||||
- ./livekit.yaml:/etc/livekit.yaml:ro
|
||||
ports:
|
||||
- '7880:7880'
|
||||
- '7882:7882/udp'
|
||||
- '7999:7999/udp'
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
|
||||
clickhouse:
|
||||
image: clickhouse/clickhouse-server:24.8
|
||||
hostname: clickhouse
|
||||
profiles:
|
||||
- clickhouse
|
||||
environment:
|
||||
- CLICKHOUSE_DB=fluxer_metrics
|
||||
- CLICKHOUSE_USER=fluxer
|
||||
- CLICKHOUSE_PASSWORD=fluxer_dev
|
||||
- CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1
|
||||
volumes:
|
||||
- clickhouse_data:/var/lib/clickhouse
|
||||
- clickhouse_logs:/var/log/clickhouse-server
|
||||
networks:
|
||||
- fluxer-shared
|
||||
ports:
|
||||
- '8123:8123'
|
||||
- '9000:9000'
|
||||
restart: on-failure
|
||||
healthcheck:
|
||||
test: ['CMD', 'clickhouse-client', '--query', 'SELECT 1']
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
ulimits:
|
||||
nofile:
|
||||
soft: 262144
|
||||
hard: 262144
|
||||
|
||||
networks:
|
||||
fluxer-shared:
|
||||
name: fluxer-shared
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
scylla_data:
|
||||
redis_data:
|
||||
minio_data:
|
||||
clamav_data:
|
||||
meilisearch_data:
|
||||
clickhouse_data:
|
||||
clickhouse_logs:
|
||||
385
dev/compose.yaml
385
dev/compose.yaml
@@ -1,385 +0,0 @@
|
||||
services:
|
||||
caddy:
|
||||
image: caddy:2
|
||||
ports:
|
||||
- '8088:8088'
|
||||
volumes:
|
||||
- ./Caddyfile.dev:/etc/caddy/Caddyfile:ro
|
||||
- ../fluxer_app/dist:/app/dist:ro
|
||||
networks:
|
||||
- fluxer-shared
|
||||
extra_hosts:
|
||||
- 'host.docker.internal:host-gateway'
|
||||
restart: on-failure
|
||||
|
||||
cloudflared:
|
||||
image: cloudflare/cloudflared:latest
|
||||
command: tunnel --no-autoupdate run --token ${CLOUDFLARE_TUNNEL_TOKEN}
|
||||
env_file:
|
||||
- ./.env
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
|
||||
api:
|
||||
image: node:24-bookworm-slim
|
||||
working_dir: /workspace
|
||||
command: bash -lc "corepack enable pnpm && CI=true pnpm install && npx tsx watch --clear-screen=false src/App.ts"
|
||||
env_file:
|
||||
- ./.env
|
||||
environment:
|
||||
- CI=true
|
||||
- VAPID_PUBLIC_KEY=BJHAPp7Xg4oeN_D6-EVu0D-bDyPDwFFJiLn7CzkUjUvaG_F-keQGpA_-RiNugCosTPhhdvdrn4mEOh-_1Bt35V8
|
||||
- FLUXER_METRICS_HOST=metrics:8080
|
||||
volumes:
|
||||
- ../fluxer_api:/workspace
|
||||
- api_node_modules:/workspace/node_modules
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
|
||||
worker:
|
||||
image: node:24-bookworm-slim
|
||||
working_dir: /workspace
|
||||
command: bash -lc "corepack enable pnpm && CI=true pnpm install && npm run dev:worker"
|
||||
env_file:
|
||||
- ./.env
|
||||
environment:
|
||||
- CI=true
|
||||
- FLUXER_METRICS_HOST=metrics:8080
|
||||
volumes:
|
||||
- ../fluxer_api:/workspace
|
||||
- api_node_modules:/workspace/node_modules
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
depends_on:
|
||||
- postgres
|
||||
- redis
|
||||
- cassandra
|
||||
|
||||
media:
|
||||
build:
|
||||
context: ../fluxer_media_proxy
|
||||
dockerfile: Dockerfile
|
||||
target: build
|
||||
working_dir: /workspace
|
||||
command: >
|
||||
bash -lc "
|
||||
corepack enable pnpm &&
|
||||
CI=true pnpm install &&
|
||||
pnpm dev
|
||||
"
|
||||
user: root
|
||||
env_file:
|
||||
- ./.env
|
||||
environment:
|
||||
- CI=true
|
||||
- NODE_ENV=development
|
||||
- FLUXER_METRICS_HOST=metrics:8080
|
||||
volumes:
|
||||
- ../fluxer_media_proxy:/workspace
|
||||
- media_node_modules:/workspace/node_modules
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
|
||||
admin:
|
||||
build:
|
||||
context: ../fluxer_admin
|
||||
dockerfile: Dockerfile.dev
|
||||
working_dir: /workspace
|
||||
env_file:
|
||||
- ./.env
|
||||
environment:
|
||||
- PORT=8080
|
||||
- APP_MODE=admin
|
||||
- FLUXER_METRICS_HOST=metrics:8080
|
||||
volumes:
|
||||
- admin_build:/workspace/build
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
develop:
|
||||
watch:
|
||||
- action: rebuild
|
||||
path: ../fluxer_admin/src
|
||||
- action: rebuild
|
||||
path: ../fluxer_admin/tailwind.css
|
||||
|
||||
marketing:
|
||||
build:
|
||||
context: ../fluxer_marketing
|
||||
dockerfile: Dockerfile.dev
|
||||
working_dir: /workspace
|
||||
env_file:
|
||||
- ./.env
|
||||
environment:
|
||||
- PORT=8080
|
||||
- FLUXER_METRICS_HOST=metrics:8080
|
||||
volumes:
|
||||
- marketing_build:/workspace/build
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
develop:
|
||||
watch:
|
||||
- action: rebuild
|
||||
path: ../fluxer_marketing/src
|
||||
- action: rebuild
|
||||
path: ../fluxer_marketing/tailwind.css
|
||||
|
||||
docs:
|
||||
image: node:24-bookworm-slim
|
||||
working_dir: /workspace
|
||||
command: bash -lc "corepack enable pnpm && CI=true pnpm install && pnpm dev"
|
||||
env_file:
|
||||
- ./.env
|
||||
environment:
|
||||
- CI=true
|
||||
- NODE_ENV=development
|
||||
volumes:
|
||||
- ../fluxer_docs:/workspace
|
||||
- docs_node_modules:/workspace/node_modules
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
|
||||
gateway:
|
||||
image: erlang:28-slim
|
||||
working_dir: /workspace
|
||||
command: bash -c "apt-get update && apt-get install -y --no-install-recommends build-essential linux-libc-dev curl ca-certificates gettext-base git && curl -fsSL https://github.com/erlang/rebar3/releases/download/3.24.0/rebar3 -o /usr/local/bin/rebar3 && chmod +x /usr/local/bin/rebar3 && rebar3 compile && exec ./docker-entrypoint.sh"
|
||||
hostname: gateway
|
||||
env_file:
|
||||
- ./.env
|
||||
environment:
|
||||
- RELEASE_NODE=fluxer_gateway@gateway
|
||||
- LOGGER_LEVEL=debug
|
||||
- CLUSTER_NAME=fluxer_gateway
|
||||
- CLUSTER_DISCOVERY_DNS=gateway
|
||||
- NODE_COOKIE=fluxer_dev_cookie
|
||||
- VAPID_PUBLIC_KEY=BJHAPp7Xg4oeN_D6-EVu0D-bDyPDwFFJiLn7CzkUjUvaG_F-keQGpA_-RiNugCosTPhhdvdrn4mEOh-_1Bt35V8
|
||||
- VAPID_PRIVATE_KEY=Ze8J4aSmwV5B77zz9NzTU_IdyFyR1hMiKaYF2G61Y-E
|
||||
- VAPID_EMAIL=support@fluxer.app
|
||||
- FLUXER_METRICS_HOST=metrics:8080
|
||||
volumes:
|
||||
- ../fluxer_gateway:/workspace
|
||||
- gateway_build:/workspace/_build
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
|
||||
postgres:
|
||||
image: postgres:17
|
||||
environment:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: fluxer
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
|
||||
cassandra:
|
||||
image: scylladb/scylla:latest
|
||||
command: --smp 1 --memory 512M --overprovisioned 1 --developer-mode 1 --api-address 0.0.0.0
|
||||
ports:
|
||||
- '9042:9042'
|
||||
volumes:
|
||||
- scylla_data:/var/lib/scylla
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
healthcheck:
|
||||
test: ['CMD-SHELL', 'cqlsh -e "describe cluster"']
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
start_period: 90s
|
||||
|
||||
redis:
|
||||
image: valkey/valkey:latest
|
||||
volumes:
|
||||
- redis_data:/data
|
||||
command: valkey-server --save 60 1 --loglevel warning
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
|
||||
minio:
|
||||
image: minio/minio
|
||||
command: server /data --console-address ":9001"
|
||||
environment:
|
||||
MINIO_ROOT_USER: minioadmin
|
||||
MINIO_ROOT_PASSWORD: minioadmin
|
||||
volumes:
|
||||
- minio_data:/data
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
healthcheck:
|
||||
test: ['CMD', 'mc', 'ready', 'local']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
minio-setup:
|
||||
image: minio/mc
|
||||
depends_on:
|
||||
minio:
|
||||
condition: service_healthy
|
||||
entrypoint: >
|
||||
/bin/sh -c "
|
||||
mc alias set minio http://minio:9000 minioadmin minioadmin;
|
||||
mc mb --ignore-existing minio/fluxer-metrics;
|
||||
mc mb --ignore-existing minio/fluxer-uploads;
|
||||
exit 0;
|
||||
"
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: 'no'
|
||||
|
||||
clamav:
|
||||
image: clamav/clamav:latest
|
||||
volumes:
|
||||
- clamav_data:/var/lib/clamav
|
||||
environment:
|
||||
CLAMAV_NO_FRESHCLAMD: 'false'
|
||||
CLAMAV_NO_CLAMD: 'false'
|
||||
CLAMAV_NO_MILTERD: 'true'
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
healthcheck:
|
||||
test: ['CMD', '/usr/local/bin/clamdcheck.sh']
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
start_period: 300s
|
||||
|
||||
meilisearch:
|
||||
image: getmeili/meilisearch:v1.25.0
|
||||
volumes:
|
||||
- meilisearch_data:/meili_data
|
||||
environment:
|
||||
MEILI_ENV: development
|
||||
MEILI_MASTER_KEY: masterKey
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
|
||||
clickhouse:
|
||||
image: clickhouse/clickhouse-server:24.8
|
||||
hostname: clickhouse
|
||||
profiles:
|
||||
- clickhouse
|
||||
environment:
|
||||
- CLICKHOUSE_DB=fluxer_metrics
|
||||
- CLICKHOUSE_USER=fluxer
|
||||
- CLICKHOUSE_PASSWORD=fluxer_dev
|
||||
- CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1
|
||||
volumes:
|
||||
- clickhouse_data:/var/lib/clickhouse
|
||||
- clickhouse_logs:/var/log/clickhouse-server
|
||||
networks:
|
||||
- fluxer-shared
|
||||
ports:
|
||||
- '8123:8123'
|
||||
- '9000:9000'
|
||||
restart: on-failure
|
||||
healthcheck:
|
||||
test: ['CMD', 'clickhouse-client', '--query', 'SELECT 1']
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
ulimits:
|
||||
nofile:
|
||||
soft: 262144
|
||||
hard: 262144
|
||||
|
||||
metrics:
|
||||
build:
|
||||
context: ../fluxer_metrics
|
||||
dockerfile: Dockerfile
|
||||
env_file:
|
||||
- ./.env
|
||||
environment:
|
||||
- METRICS_PORT=8080
|
||||
- METRICS_MODE=${METRICS_MODE:-noop}
|
||||
- CLICKHOUSE_URL=http://clickhouse:8123
|
||||
- CLICKHOUSE_DATABASE=fluxer_metrics
|
||||
- CLICKHOUSE_USER=fluxer
|
||||
- CLICKHOUSE_PASSWORD=fluxer_dev
|
||||
- ANOMALY_DETECTION_ENABLED=true
|
||||
- FLUXER_ADMIN_ENDPOINT=${FLUXER_ADMIN_ENDPOINT:-}
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
|
||||
metrics-clickhouse:
|
||||
extends:
|
||||
service: metrics
|
||||
profiles:
|
||||
- clickhouse
|
||||
environment:
|
||||
- METRICS_MODE=clickhouse
|
||||
depends_on:
|
||||
clickhouse:
|
||||
condition: service_healthy
|
||||
|
||||
cassandra-migrate:
|
||||
image: debian:bookworm-slim
|
||||
command:
|
||||
[
|
||||
'bash',
|
||||
'-lc',
|
||||
'apt-get update && apt-get install -y dnsutils && sleep 30 && /cassandra-migrate --host cassandra --username cassandra --password cassandra up',
|
||||
]
|
||||
working_dir: /workspace
|
||||
volumes:
|
||||
- ../scripts/cassandra-migrate/target/release/cassandra-migrate:/cassandra-migrate
|
||||
- ../fluxer_devops/cassandra/migrations:/workspace/fluxer_devops/cassandra/migrations
|
||||
networks:
|
||||
- fluxer-shared
|
||||
depends_on:
|
||||
cassandra:
|
||||
condition: service_healthy
|
||||
restart: 'no'
|
||||
|
||||
livekit:
|
||||
image: livekit/livekit-server:latest
|
||||
command: --config /etc/livekit.yaml --dev
|
||||
env_file:
|
||||
- ./.env
|
||||
volumes:
|
||||
- ./livekit.yaml:/etc/livekit.yaml:ro
|
||||
ports:
|
||||
- '7880:7880'
|
||||
- '7882:7882/udp'
|
||||
- '7999:7999/udp'
|
||||
networks:
|
||||
- fluxer-shared
|
||||
restart: on-failure
|
||||
|
||||
networks:
|
||||
fluxer-shared:
|
||||
name: fluxer-shared
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
scylla_data:
|
||||
redis_data:
|
||||
minio_data:
|
||||
clamav_data:
|
||||
meilisearch_data:
|
||||
clickhouse_data:
|
||||
clickhouse_logs:
|
||||
api_node_modules:
|
||||
media_node_modules:
|
||||
admin_build:
|
||||
marketing_build:
|
||||
gateway_build:
|
||||
docs_node_modules:
|
||||
28
dev/livekit.template.yaml
Normal file
28
dev/livekit.template.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
port: 7880
|
||||
|
||||
keys:
|
||||
'{{API_KEY}}': '{{API_SECRET}}'
|
||||
|
||||
rtc:
|
||||
tcp_port: 7881
|
||||
port_range_start: 50000
|
||||
port_range_end: 50100
|
||||
use_external_ip: false
|
||||
node_ip: {{NODE_IP}}
|
||||
|
||||
turn:
|
||||
enabled: true
|
||||
domain: {{TURN_DOMAIN}}
|
||||
udp_port: 3478
|
||||
|
||||
webhook:
|
||||
api_key: '{{API_KEY}}'
|
||||
urls:
|
||||
- '{{WEBHOOK_URL}}'
|
||||
|
||||
room:
|
||||
auto_create: true
|
||||
max_participants: 100
|
||||
empty_timeout: 300
|
||||
|
||||
development: true
|
||||
Reference in New Issue
Block a user