# Dev override: bind-mount source code + auto-reload # Usage: docker compose -f docker-compose.yml -f docker-compose.dev.yml up [service...] # # Changes from production: # - Source code bind-mounted (edit code → auto-reload) # - Hypercorn runs with --reload # - No deploy constraints (runs locally, not Swarm) # - Ports exposed to host for direct access x-dev-env: &dev-env RELOAD: "true" WORKERS: "1" x-sibling-models: &sibling-models # Every app needs all sibling __init__.py + models/ for cross-domain SQLAlchemy imports - ./blog/__init__.py:/app/blog/__init__.py:ro - ./blog/models:/app/blog/models:ro - ./market/__init__.py:/app/market/__init__.py:ro - ./market/models:/app/market/models:ro - ./cart/__init__.py:/app/cart/__init__.py:ro - ./cart/models:/app/cart/models:ro - ./events/__init__.py:/app/events/__init__.py:ro - ./events/models:/app/events/models:ro - ./federation/__init__.py:/app/federation/__init__.py:ro - ./federation/models:/app/federation/models:ro - ./account/__init__.py:/app/account/__init__.py:ro - ./account/models:/app/account/models:ro services: blog: ports: - "8001:8000" environment: <<: *dev-env volumes: - /root/rose-ash/_config/app-config.yaml:/app/config/app-config.yaml:ro - ./shared:/app/shared - ./blog/alembic.ini:/app/blog/alembic.ini:ro - ./blog/alembic:/app/blog/alembic:ro - ./blog/app.py:/app/app.py - ./blog/bp:/app/bp - ./blog/services:/app/services - ./blog/templates:/app/templates - ./blog/models:/app/models - ./blog/path_setup.py:/app/path_setup.py - ./blog/entrypoint.sh:/usr/local/bin/entrypoint.sh # sibling models - ./market/__init__.py:/app/market/__init__.py:ro - ./market/models:/app/market/models:ro - ./cart/__init__.py:/app/cart/__init__.py:ro - ./cart/models:/app/cart/models:ro - ./events/__init__.py:/app/events/__init__.py:ro - ./events/models:/app/events/models:ro - ./federation/__init__.py:/app/federation/__init__.py:ro - ./federation/models:/app/federation/models:ro - ./account/__init__.py:/app/account/__init__.py:ro - ./account/models:/app/account/models:ro market: ports: - "8002:8000" environment: <<: *dev-env volumes: - /root/rose-ash/_config/app-config.yaml:/app/config/app-config.yaml:ro - /root/rose-ash/_snapshot:/app/_snapshot - ./shared:/app/shared - ./market/alembic.ini:/app/market/alembic.ini:ro - ./market/alembic:/app/market/alembic:ro - ./market/app.py:/app/app.py - ./market/bp:/app/bp - ./market/services:/app/services - ./market/templates:/app/templates - ./market/models:/app/models - ./market/path_setup.py:/app/path_setup.py - ./market/entrypoint.sh:/usr/local/bin/entrypoint.sh # sibling models - ./blog/__init__.py:/app/blog/__init__.py:ro - ./blog/models:/app/blog/models:ro - ./cart/__init__.py:/app/cart/__init__.py:ro - ./cart/models:/app/cart/models:ro - ./events/__init__.py:/app/events/__init__.py:ro - ./events/models:/app/events/models:ro - ./federation/__init__.py:/app/federation/__init__.py:ro - ./federation/models:/app/federation/models:ro - ./account/__init__.py:/app/account/__init__.py:ro - ./account/models:/app/account/models:ro cart: ports: - "8003:8000" environment: <<: *dev-env volumes: - /root/rose-ash/_config/app-config.yaml:/app/config/app-config.yaml:ro - ./shared:/app/shared - ./cart/alembic.ini:/app/cart/alembic.ini:ro - ./cart/alembic:/app/cart/alembic:ro - ./cart/app.py:/app/app.py - ./cart/bp:/app/bp - ./cart/services:/app/services - ./cart/templates:/app/templates - ./cart/models:/app/models - ./cart/path_setup.py:/app/path_setup.py - ./cart/entrypoint.sh:/usr/local/bin/entrypoint.sh # sibling models - ./blog/__init__.py:/app/blog/__init__.py:ro - ./blog/models:/app/blog/models:ro - ./market/__init__.py:/app/market/__init__.py:ro - ./market/models:/app/market/models:ro - ./events/__init__.py:/app/events/__init__.py:ro - ./events/models:/app/events/models:ro - ./federation/__init__.py:/app/federation/__init__.py:ro - ./federation/models:/app/federation/models:ro - ./account/__init__.py:/app/account/__init__.py:ro - ./account/models:/app/account/models:ro events: ports: - "8004:8000" environment: <<: *dev-env volumes: - /root/rose-ash/_config/app-config.yaml:/app/config/app-config.yaml:ro - ./shared:/app/shared - ./events/alembic.ini:/app/events/alembic.ini:ro - ./events/alembic:/app/events/alembic:ro - ./events/app.py:/app/app.py - ./events/bp:/app/bp - ./events/services:/app/services - ./events/templates:/app/templates - ./events/models:/app/models - ./events/path_setup.py:/app/path_setup.py - ./events/entrypoint.sh:/usr/local/bin/entrypoint.sh # sibling models - ./blog/__init__.py:/app/blog/__init__.py:ro - ./blog/models:/app/blog/models:ro - ./market/__init__.py:/app/market/__init__.py:ro - ./market/models:/app/market/models:ro - ./cart/__init__.py:/app/cart/__init__.py:ro - ./cart/models:/app/cart/models:ro - ./federation/__init__.py:/app/federation/__init__.py:ro - ./federation/models:/app/federation/models:ro - ./account/__init__.py:/app/account/__init__.py:ro - ./account/models:/app/account/models:ro federation: ports: - "8005:8000" environment: <<: *dev-env volumes: - /root/rose-ash/_config/app-config.yaml:/app/config/app-config.yaml:ro - ./shared:/app/shared - ./federation/alembic.ini:/app/federation/alembic.ini:ro - ./federation/alembic:/app/federation/alembic:ro - ./federation/app.py:/app/app.py - ./federation/bp:/app/bp - ./federation/services:/app/services - ./federation/templates:/app/templates - ./federation/models:/app/models - ./federation/path_setup.py:/app/path_setup.py - ./federation/entrypoint.sh:/usr/local/bin/entrypoint.sh # sibling models - ./blog/__init__.py:/app/blog/__init__.py:ro - ./blog/models:/app/blog/models:ro - ./market/__init__.py:/app/market/__init__.py:ro - ./market/models:/app/market/models:ro - ./cart/__init__.py:/app/cart/__init__.py:ro - ./cart/models:/app/cart/models:ro - ./events/__init__.py:/app/events/__init__.py:ro - ./events/models:/app/events/models:ro - ./account/__init__.py:/app/account/__init__.py:ro - ./account/models:/app/account/models:ro account: ports: - "8006:8000" environment: <<: *dev-env volumes: - /root/rose-ash/_config/app-config.yaml:/app/config/app-config.yaml:ro - ./shared:/app/shared - ./account/alembic.ini:/app/account/alembic.ini:ro - ./account/alembic:/app/account/alembic:ro - ./account/app.py:/app/app.py - ./account/bp:/app/bp - ./account/services:/app/services - ./account/templates:/app/templates - ./account/models:/app/models - ./account/path_setup.py:/app/path_setup.py - ./account/entrypoint.sh:/usr/local/bin/entrypoint.sh # sibling models - ./blog/__init__.py:/app/blog/__init__.py:ro - ./blog/models:/app/blog/models:ro - ./market/__init__.py:/app/market/__init__.py:ro - ./market/models:/app/market/models:ro - ./cart/__init__.py:/app/cart/__init__.py:ro - ./cart/models:/app/cart/models:ro - ./events/__init__.py:/app/events/__init__.py:ro - ./events/models:/app/events/models:ro - ./federation/__init__.py:/app/federation/__init__.py:ro - ./federation/models:/app/federation/models:ro networks: appnet: driver: bridge externalnet: driver: bridge volumes: db_data_1: redis_data: redis_auth_data: