x-app-common: &app-common networks: appnet: externalnet: deploy: placement: constraints: - node.labels.gpu != true volumes: - /root/rose-ash/_config/app-config.yaml:/app/config/app-config.yaml:ro x-app-env: &app-env DATABASE_URL_ACCOUNT: postgresql+asyncpg://postgres:change-me@pgbouncer:5432/db_account DATABASE_URL_FEDERATION: postgresql+asyncpg://postgres:change-me@pgbouncer:5432/db_federation SMTP_HOST: ${SMTP_HOST} SMTP_PORT: ${SMTP_PORT} MAIL_FROM: ${MAIL_FROM} SMTP_USER: ${SMTP_USER} SMTP_PASS: ${SMTP_PASS} GHOST_API_URL: ${GHOST_API_URL} GHOST_ADMIN_API_URL: ${GHOST_ADMIN_API_URL} GHOST_PUBLIC_URL: ${GHOST_PUBLIC_URL} GHOST_CONTENT_API_KEY: ${GHOST_CONTENT_API_KEY} GHOST_WEBHOOK_SECRET: ${GHOST_WEBHOOK_SECRET} GHOST_ADMIN_API_KEY: ${GHOST_ADMIN_API_KEY} REDIS_AUTH_URL: redis://redis-auth:6379/0 SECRET_KEY: ${SECRET_KEY} SUMUP_API_KEY: ${SUMUP_API_KEY} APP_URL_BLOG: https://blog.rose-ash.com APP_URL_MARKET: https://market.rose-ash.com APP_URL_CART: https://cart.rose-ash.com APP_URL_EVENTS: https://events.rose-ash.com APP_URL_FEDERATION: https://federation.rose-ash.com APP_URL_ACCOUNT: https://account.rose-ash.com APP_URL_ORDERS: https://orders.rose-ash.com APP_URL_RELATIONS: http://relations:8000 APP_URL_LIKES: http://likes:8000 APP_URL_SX: https://sx.rose-ash.com APP_URL_TEST: https://test.rose-ash.com APP_URL_ARTDAG: https://celery-artdag.rose-ash.com APP_URL_ARTDAG_L2: https://artdag.rose-ash.com INTERNAL_URL_BLOG: http://blog:8000 INTERNAL_URL_MARKET: http://market:8000 INTERNAL_URL_CART: http://cart:8000 INTERNAL_URL_EVENTS: http://events:8000 INTERNAL_URL_FEDERATION: http://federation:8000 INTERNAL_URL_ACCOUNT: http://account:8000 INTERNAL_URL_ORDERS: http://orders:8000 INTERNAL_URL_RELATIONS: http://relations:8000 INTERNAL_URL_LIKES: http://likes:8000 INTERNAL_URL_SX: http://sx_docs:8000 INTERNAL_URL_TEST: http://test:8000 INTERNAL_URL_ARTDAG: http://l1-server:8100 AP_DOMAIN: federation.rose-ash.com AP_DOMAIN_BLOG: blog.rose-ash.com AP_DOMAIN_MARKET: market.rose-ash.com AP_DOMAIN_EVENTS: events.rose-ash.com EXTERNAL_INBOXES: "artdag|https://celery-artdag.rose-ash.com/inbox" SX_BOUNDARY_STRICT: "1" SX_USE_REF: "1" SX_USE_OCAML: "1" SX_OCAML_BIN: "/app/bin/sx_server" services: blog: <<: *app-common image: registry.rose-ash.com:5000/blog:latest build: context: . dockerfile: blog/Dockerfile environment: <<: *app-env DATABASE_URL: postgresql+asyncpg://postgres:change-me@pgbouncer:5432/db_blog ALEMBIC_DATABASE_URL: postgresql+psycopg://postgres:change-me@db:5432/db_blog REDIS_URL: redis://redis:6379/0 DATABASE_HOST: db DATABASE_PORT: "5432" RUN_MIGRATIONS: "true" WORKERS: "1" market: <<: *app-common image: registry.rose-ash.com:5000/market:latest build: context: . dockerfile: market/Dockerfile volumes: - /root/rose-ash/_config/app-config.yaml:/app/config/app-config.yaml:ro - /root/rose-ash/_snapshot:/app/_snapshot environment: <<: *app-env DATABASE_URL: postgresql+asyncpg://postgres:change-me@pgbouncer:5432/db_market ALEMBIC_DATABASE_URL: postgresql+psycopg://postgres:change-me@db:5432/db_market REDIS_URL: redis://redis:6379/1 DATABASE_HOST: db DATABASE_PORT: "5432" RUN_MIGRATIONS: "true" WORKERS: "1" cart: <<: *app-common image: registry.rose-ash.com:5000/cart:latest build: context: . dockerfile: cart/Dockerfile environment: <<: *app-env DATABASE_URL: postgresql+asyncpg://postgres:change-me@pgbouncer:5432/db_cart ALEMBIC_DATABASE_URL: postgresql+psycopg://postgres:change-me@db:5432/db_cart REDIS_URL: redis://redis:6379/2 DATABASE_HOST: db DATABASE_PORT: "5432" RUN_MIGRATIONS: "true" WORKERS: "1" events: <<: *app-common image: registry.rose-ash.com:5000/events:latest build: context: . dockerfile: events/Dockerfile environment: <<: *app-env DATABASE_URL: postgresql+asyncpg://postgres:change-me@pgbouncer:5432/db_events ALEMBIC_DATABASE_URL: postgresql+psycopg://postgres:change-me@db:5432/db_events REDIS_URL: redis://redis:6379/3 DATABASE_HOST: db DATABASE_PORT: "5432" RUN_MIGRATIONS: "true" WORKERS: "1" federation: <<: *app-common image: registry.rose-ash.com:5000/federation:latest build: context: . dockerfile: federation/Dockerfile environment: <<: *app-env DATABASE_URL: postgresql+asyncpg://postgres:change-me@pgbouncer:5432/db_federation ALEMBIC_DATABASE_URL: postgresql+psycopg://postgres:change-me@db:5432/db_federation REDIS_URL: redis://redis:6379/4 DATABASE_HOST: db DATABASE_PORT: "5432" RUN_MIGRATIONS: "true" WORKERS: "1" account: <<: *app-common image: registry.rose-ash.com:5000/account:latest build: context: . dockerfile: account/Dockerfile environment: <<: *app-env DATABASE_URL: postgresql+asyncpg://postgres:change-me@pgbouncer:5432/db_account ALEMBIC_DATABASE_URL: postgresql+psycopg://postgres:change-me@db:5432/db_account REDIS_URL: redis://redis:6379/5 DATABASE_HOST: db DATABASE_PORT: "5432" RUN_MIGRATIONS: "true" WORKERS: "1" relations: <<: *app-common image: registry.rose-ash.com:5000/relations:latest build: context: . dockerfile: relations/Dockerfile environment: <<: *app-env DATABASE_URL: postgresql+asyncpg://postgres:change-me@pgbouncer:5432/db_relations ALEMBIC_DATABASE_URL: postgresql+psycopg://postgres:change-me@db:5432/db_relations REDIS_URL: redis://redis:6379/6 DATABASE_HOST: db DATABASE_PORT: "5432" RUN_MIGRATIONS: "true" WORKERS: "1" likes: <<: *app-common image: registry.rose-ash.com:5000/likes:latest build: context: . dockerfile: likes/Dockerfile environment: <<: *app-env DATABASE_URL: postgresql+asyncpg://postgres:change-me@pgbouncer:5432/db_likes ALEMBIC_DATABASE_URL: postgresql+psycopg://postgres:change-me@db:5432/db_likes REDIS_URL: redis://redis:6379/7 DATABASE_HOST: db DATABASE_PORT: "5432" RUN_MIGRATIONS: "true" WORKERS: "1" orders: <<: *app-common image: registry.rose-ash.com:5000/orders:latest build: context: . dockerfile: orders/Dockerfile environment: <<: *app-env DATABASE_URL: postgresql+asyncpg://postgres:change-me@pgbouncer:5432/db_orders ALEMBIC_DATABASE_URL: postgresql+psycopg://postgres:change-me@db:5432/db_orders REDIS_URL: redis://redis:6379/8 DATABASE_HOST: db DATABASE_PORT: "5432" RUN_MIGRATIONS: "true" WORKERS: "1" test: <<: *app-common image: registry.rose-ash.com:5000/test:latest build: context: . dockerfile: test/Dockerfile environment: <<: *app-env REDIS_URL: redis://redis:6379/9 WORKERS: "1" sx_docs: <<: *app-common image: registry.rose-ash.com:5000/sx_docs:latest build: context: . dockerfile: sx/Dockerfile environment: <<: *app-env REDIS_URL: redis://redis:6379/10 WORKERS: "1" db: image: postgres:16 environment: POSTGRES_USER: ${POSTGRES_USER:-postgres} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-change-me} POSTGRES_DB: ${POSTGRES_DB:-appdb} volumes: - db_data_1:/var/lib/postgresql/data networks: appnet: deploy: placement: constraints: - node.labels.gpu != true pgbouncer: image: edoburu/pgbouncer:latest environment: DB_HOST: db DB_PORT: "5432" DB_USER: ${POSTGRES_USER:-postgres} DB_PASSWORD: ${POSTGRES_PASSWORD:-change-me} POOL_MODE: transaction DEFAULT_POOL_SIZE: "20" MAX_CLIENT_CONN: "300" MIN_POOL_SIZE: "5" AUTH_TYPE: plain networks: appnet: deploy: placement: constraints: - node.labels.gpu != true adminer: image: adminer networks: appnet: externalnet: deploy: placement: constraints: - node.labels.gpu != true redis: image: redis:7-alpine container_name: redis volumes: - redis_data:/data networks: appnet: command: redis-server --maxmemory 1gb --maxmemory-policy allkeys-lru deploy: placement: constraints: - node.labels.gpu != true redis-auth: image: redis:7-alpine volumes: - redis_auth_data:/data networks: appnet: command: redis-server --maxmemory 64mb --maxmemory-policy noeviction deploy: placement: constraints: - node.labels.gpu != true volumes: db_data_1: redis_data: redis_auth_data: networks: appnet: driver: overlay externalnet: driver: overlay external: true