# Dev mode for sx-pub (SX-based ActivityPub) # Starts as sx_docs clone — AP protocol built in SX from scratch # Accessible at pub.sx-web.org via Caddy on externalnet # Own DB + pgbouncer + IPFS node services: sx_pub: image: registry.rose-ash.com:5000/sx_docs:latest environment: SX_STANDALONE: "true" SECRET_KEY: "${SECRET_KEY:-pub-dev-secret}" REDIS_URL: redis://redis:6379/0 DATABASE_URL: postgresql+asyncpg://postgres:change-me@pgbouncer:5432/sx_pub ALEMBIC_DATABASE_URL: postgresql+psycopg://postgres:change-me@db:5432/sx_pub SX_PUB_DOMAIN: pub.sx-web.org WORKERS: "1" ENVIRONMENT: development RELOAD: "true" SX_USE_REF: "1" SX_USE_OCAML: "1" SX_OCAML_BIN: "/app/bin/sx_server" SX_BOUNDARY_STRICT: "1" SX_DEV: "1" OCAMLRUNPARAM: "b" IPFS_API: http://ipfs:5001 ports: - "8014:8000" volumes: - /root/sx-pub/_config/dev-sh-config.yaml:/app/config/app-config.yaml:ro - ./shared:/app/shared - ./sx/app.py:/app/app.py - ./sx/sxc:/app/sxc - ./sx/bp:/app/bp - ./sx/services:/app/services - ./sx/content:/app/content - ./sx/sx:/app/sx - ./sx/path_setup.py:/app/path_setup.py - ./sx/entrypoint.sh:/usr/local/bin/entrypoint.sh - ./sx/__init__.py:/app/__init__.py:ro # Spec + web SX files - ./spec:/app/spec:ro - ./web:/app/web:ro # OCaml SX kernel binary - ./hosts/ocaml/_build/default/bin/sx_server.exe:/app/bin/sx_server:ro # sibling 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 - ./relations/__init__.py:/app/relations/__init__.py:ro - ./relations/models:/app/relations/models:ro - ./likes/__init__.py:/app/likes/__init__.py:ro - ./likes/models:/app/likes/models:ro - ./orders/__init__.py:/app/orders/__init__.py:ro - ./orders/models:/app/orders/models:ro depends_on: - pgbouncer - redis - ipfs networks: - externalnet - default restart: unless-stopped db: image: postgres:16 environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: change-me POSTGRES_DB: sx_pub volumes: - db_data:/var/lib/postgresql/data restart: unless-stopped pgbouncer: image: edoburu/pgbouncer:latest environment: DB_HOST: db DB_PORT: "5432" DB_USER: postgres DB_PASSWORD: change-me POOL_MODE: transaction DEFAULT_POOL_SIZE: "10" MAX_CLIENT_CONN: "100" AUTH_TYPE: plain depends_on: - db restart: unless-stopped ipfs: image: ipfs/kubo:latest volumes: - ipfs_data:/data/ipfs restart: unless-stopped redis: image: redis:7-alpine restart: unless-stopped volumes: db_data: ipfs_data: networks: externalnet: external: true