Files
fluxer/.devcontainer/docker-compose.yml
T

403 lines
13 KiB
YAML
Raw Normal View History

name: fluxer-dev
services:
workspace:
build:
context: ..
dockerfile: .devcontainer/Dockerfile
command: sleep infinity
init: true
env_file:
- ../config/env/development.env
environment:
FLUXER_SEARCH_ENGINE: meilisearch
FLUXER_SEARCH_URL: http://meilisearch:7700
FLUXER_SEARCH_API_KEY: fluxer-dev-meilisearch
FLUXER_POSTGRES_HOST: postgres
FLUXER_SELF_HOSTED: "true"
DOCKER_HOST: unix:///var/run/docker.sock
volumes:
- ..:/workspaces/fluxer:cached
- type: volume
source: root-node-modules
target: /workspaces/fluxer/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-api-node-modules
target: /workspaces/fluxer/fluxer_api/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-app-node-modules
target: /workspaces/fluxer/fluxer_app/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-desktop-node-modules
target: /workspaces/fluxer/fluxer_desktop/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-admin-node-modules
target: /workspaces/fluxer/fluxer_admin/node_modules
volume:
nocopy: true
- type: volume
source: package-config-node-modules
target: /workspaces/fluxer/packages/config/node_modules
volume:
nocopy: true
- type: volume
source: package-constants-node-modules
target: /workspaces/fluxer/packages/constants/node_modules
volume:
nocopy: true
- type: volume
source: package-date-utils-node-modules
target: /workspaces/fluxer/packages/date_utils/node_modules
volume:
nocopy: true
- type: volume
source: package-errors-node-modules
target: /workspaces/fluxer/packages/errors/node_modules
volume:
nocopy: true
- type: volume
source: package-geo-utils-node-modules
target: /workspaces/fluxer/packages/geo_utils/node_modules
volume:
nocopy: true
- type: volume
source: package-hono-node-modules
target: /workspaces/fluxer/packages/hono/node_modules
volume:
nocopy: true
- type: volume
source: package-hono-types-node-modules
target: /workspaces/fluxer/packages/hono_types/node_modules
volume:
nocopy: true
- type: volume
source: package-i18n-node-modules
target: /workspaces/fluxer/packages/i18n/node_modules
volume:
nocopy: true
- type: volume
source: package-instance-bootstrap-node-modules
target: /workspaces/fluxer/packages/instance_bootstrap/node_modules
volume:
nocopy: true
- type: volume
source: package-ip-utils-node-modules
target: /workspaces/fluxer/packages/ip_utils/node_modules
volume:
nocopy: true
- type: volume
source: package-limits-node-modules
target: /workspaces/fluxer/packages/limits/node_modules
volume:
nocopy: true
- type: volume
source: package-logger-node-modules
target: /workspaces/fluxer/packages/logger/node_modules
volume:
nocopy: true
- type: volume
source: package-openapi-node-modules
target: /workspaces/fluxer/packages/openapi/node_modules
volume:
nocopy: true
- type: volume
source: package-schema-node-modules
target: /workspaces/fluxer/packages/schema/node_modules
volume:
nocopy: true
- type: volume
source: package-snowflake-node-modules
target: /workspaces/fluxer/packages/snowflake/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-api-cache-node-modules
target: /workspaces/fluxer/fluxer_api/pkgs/cache/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-api-captcha-node-modules
target: /workspaces/fluxer/fluxer_api/pkgs/captcha/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-api-cassandra-node-modules
target: /workspaces/fluxer/fluxer_api/pkgs/cassandra/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-api-elasticsearch-search-node-modules
target: /workspaces/fluxer/fluxer_api/pkgs/elasticsearch_search/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-api-email-node-modules
target: /workspaces/fluxer/fluxer_api/pkgs/email/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-api-geoip-node-modules
target: /workspaces/fluxer/fluxer_api/pkgs/geoip/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-api-http-client-node-modules
target: /workspaces/fluxer/fluxer_api/pkgs/http_client/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-api-initialization-node-modules
target: /workspaces/fluxer/fluxer_api/pkgs/initialization/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-api-kv-client-node-modules
target: /workspaces/fluxer/fluxer_api/pkgs/kv_client/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-api-locale-node-modules
target: /workspaces/fluxer/fluxer_api/pkgs/locale/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-api-media-proxy-utils-node-modules
target: /workspaces/fluxer/fluxer_api/pkgs/media_proxy_utils/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-api-mime-utils-node-modules
target: /workspaces/fluxer/fluxer_api/pkgs/mime_utils/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-api-nats-node-modules
target: /workspaces/fluxer/fluxer_api/pkgs/nats/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-api-rate-limit-node-modules
target: /workspaces/fluxer/fluxer_api/pkgs/rate_limit/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-api-sms-node-modules
target: /workspaces/fluxer/fluxer_api/pkgs/sms/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-api-virus-scan-node-modules
target: /workspaces/fluxer/fluxer_api/pkgs/virus_scan/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-api-worker-node-modules
target: /workspaces/fluxer/fluxer_api/pkgs/worker/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-app-list-utils-node-modules
target: /workspaces/fluxer/fluxer_app/pkgs/list_utils/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-app-livekit-client-node-modules
target: /workspaces/fluxer/fluxer_app/pkgs/livekit-client/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-app-number-utils-node-modules
target: /workspaces/fluxer/fluxer_app/pkgs/number_utils/node_modules
volume:
nocopy: true
2026-08-12 13:21:50 +02:00
- type: volume
source: package-voice-engine-v2-node-modules
target: /workspaces/fluxer/packages/voice_engine_v2/node_modules
volume:
nocopy: true
- type: volume
source: fluxer-api-postgres-node-modules
target: /workspaces/fluxer/fluxer_api/pkgs/postgres/node_modules
volume:
nocopy: true
- pnpm-store:/home/vscode/.local/share/pnpm/store
- cargo-registry:/home/vscode/.cargo/registry
- cargo-git:/home/vscode/.cargo/git
- rust-target:/workspaces/fluxer/target
- type: bind
source: ${FLUXER_DOCKER_SOCKET:-/var/run/docker.sock}
target: /var/run/docker.sock
ports:
2026-08-12 13:21:50 +02:00
- "${FLUXER_DEV_DOCS_PORT:-8000}:8000"
- "${FLUXER_DEV_RSPACK_PORT:-3000}:3000"
- "${FLUXER_DEV_PROXY_PORT:-8088}:8088"
- "${FLUXER_DEV_APP_PROXY_PORT:-8080}:8080"
- "${FLUXER_DEV_API_PORT:-8771}:8771"
- "${FLUXER_DEV_GATEWAY_PORT:-8082}:8082"
- "${FLUXER_DEV_MARKETING_PORT:-3010}:3010"
- "${FLUXER_DEV_ADMIN_PORT:-3020}:3020"
- "${FLUXER_DEV_RUST_SERVICE_PORTS:-8100-8125}:8100-8125"
- "${FLUXER_DEV_SEAWEEDFS_S3_PORT:-3900}:8333"
- "${FLUXER_DEV_SEAWEEDFS_FILER_PORT:-8888}:8888"
- "${FLUXER_DEV_SEAWEEDFS_MASTER_PORT:-9333}:9333"
- "${FLUXER_DEV_SEAWEEDFS_VOLUME_PORT:-9340}:9340"
- "${FLUXER_DEV_SEAWEEDFS_ADMIN_PORT:-23646}:23646"
depends_on:
- postgres
- valkey
- nats
- livekit
- meilisearch
- mailpit
extra_hosts:
- "host.docker.internal:host-gateway"
cassandra:
image: cassandra:5.0.8
profiles:
- full
environment:
CASSANDRA_CLUSTER_NAME: fluxer-dev
CASSANDRA_DC: datacenter1
CASSANDRA_ENDPOINT_SNITCH: GossipingPropertyFileSnitch
HEAP_NEWSIZE: 128M
MAX_HEAP_SIZE: 768M
volumes:
- cassandra-data:/var/lib/cassandra
ports:
2026-08-12 13:21:50 +02:00
- "${FLUXER_DEV_CASSANDRA_PORT:-9042}:9042"
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: fluxer
POSTGRES_USER: fluxer
POSTGRES_PASSWORD: fluxer
volumes:
- postgres-data:/var/lib/postgresql/data
ports:
2026-08-12 13:21:50 +02:00
- "${FLUXER_DEV_POSTGRES_PORT:-5432}:5432"
valkey:
image: valkey/valkey:8.1.7-alpine
command: ["valkey-server", "--save", "", "--appendonly", "no"]
ports:
2026-08-12 13:21:50 +02:00
- "${FLUXER_DEV_VALKEY_PORT:-6379}:6379"
nats:
image: nats:2.14.2-alpine
command: ["-js", "-sd", "/data", "-m", "8222"]
volumes:
- nats-data:/data
ports:
2026-08-12 13:21:50 +02:00
- "${FLUXER_DEV_NATS_PORT:-4222}:4222"
- "${FLUXER_DEV_NATS_MONITOR_PORT:-8222}:8222"
livekit:
image: livekit/livekit-server:v1.12.0
command: ["--config", "/etc/livekit.yaml", "--bind", "0.0.0.0"]
volumes:
- ./livekit.yaml:/etc/livekit.yaml:ro
ports:
2026-08-12 13:21:50 +02:00
- "${FLUXER_DEV_LIVEKIT_PORT:-7880}:7880"
- "${FLUXER_DEV_LIVEKIT_TCP_PORT:-7881}:7881"
- "${FLUXER_DEV_LIVEKIT_UDP_PORTS:-7882-7892}:7882-7892/udp"
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:9.3.2
profiles:
- full
environment:
discovery.type: single-node
xpack.security.enabled: "true"
xpack.security.http.ssl.enabled: "false"
ELASTIC_PASSWORD: fluxer-dev-elasticsearch
ES_JAVA_OPTS: "-Xms512m -Xmx512m"
volumes:
- elasticsearch-data:/usr/share/elasticsearch/data
ports:
2026-08-12 13:21:50 +02:00
- "${FLUXER_DEV_ELASTICSEARCH_PORT:-9200}:9200"
meilisearch:
image: getmeili/meilisearch:v1.12
environment:
MEILI_NO_ANALYTICS: "true"
MEILI_MASTER_KEY: fluxer-dev-meilisearch
volumes:
- meilisearch-data:/meili_data
ports:
2026-08-12 13:21:50 +02:00
- "${FLUXER_DEV_MEILISEARCH_PORT:-7700}:7700"
mailpit:
image: axllent/mailpit:v1.30
environment:
MP_DATABASE: /data/mailpit.db
MP_MAX_MESSAGES: 5000
MP_SMTP_AUTH_ACCEPT_ANY: "1"
MP_SMTP_AUTH_ALLOW_INSECURE: "1"
MP_WEBROOT: devmail
volumes:
- mailpit-data:/data
volumes:
pnpm-store:
root-node-modules:
fluxer-api-node-modules:
fluxer-app-node-modules:
fluxer-desktop-node-modules:
fluxer-admin-node-modules:
package-config-node-modules:
package-constants-node-modules:
package-date-utils-node-modules:
package-errors-node-modules:
package-geo-utils-node-modules:
package-hono-node-modules:
package-hono-types-node-modules:
package-i18n-node-modules:
package-instance-bootstrap-node-modules:
package-ip-utils-node-modules:
package-limits-node-modules:
package-logger-node-modules:
package-openapi-node-modules:
package-schema-node-modules:
package-snowflake-node-modules:
fluxer-api-cache-node-modules:
fluxer-api-captcha-node-modules:
fluxer-api-cassandra-node-modules:
fluxer-api-elasticsearch-search-node-modules:
fluxer-api-email-node-modules:
fluxer-api-geoip-node-modules:
fluxer-api-http-client-node-modules:
fluxer-api-initialization-node-modules:
fluxer-api-kv-client-node-modules:
fluxer-api-locale-node-modules:
fluxer-api-media-proxy-utils-node-modules:
fluxer-api-mime-utils-node-modules:
fluxer-api-nats-node-modules:
fluxer-api-rate-limit-node-modules:
fluxer-api-sms-node-modules:
fluxer-api-virus-scan-node-modules:
fluxer-api-worker-node-modules:
fluxer-app-list-utils-node-modules:
fluxer-app-livekit-client-node-modules:
fluxer-app-number-utils-node-modules:
2026-08-12 13:21:50 +02:00
package-voice-engine-v2-node-modules:
fluxer-api-postgres-node-modules:
cargo-registry:
cargo-git:
rust-target:
cassandra-data:
nats-data:
elasticsearch-data:
meilisearch-data:
mailpit-data:
postgres-data: