Full production stack via docker compose:
- Caddy reverse proxy with Cloudflare DNS-01 TLS certs
- warzone-server (featherChat API + web UI)
- wzp-relay (QUIC audio SFU)
- wzp-web (browser WS ↔ QUIC bridge)
Architecture:
Internet → Caddy (443/TLS) → voip.manko.yoga
/* → warzone-server:7700
/audio/* → wzp-web:8080
Files:
- docker-compose.yml: main stack (4 services)
- docker-compose.ipv6.yml: IPv6 overlay
- Caddyfile: Cloudflare DNS challenge + reverse proxy
- Dockerfile.server: featherChat multi-stage build
- Dockerfile.wzp: wzp-relay + wzp-web multi-stage build
- .env.example: DNS records for dev/staging/prod
- test-stack.sh: smoke test (8 checks)
- .dockerignore: excludes target/, .git/, etc.
Deployment targets:
dev: 172.16.81.135
ipv6: 2a0d:3344:692c:2500:14f2:5885:d73c:b0a1
prod: 63.250.54.239 / 2602:ff16:9:0:1:3d9:0:1
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
31 lines
858 B
Docker
31 lines
858 B
Docker
# featherChat server — multi-stage build
|
|
# Build context: featherChat repo root (../../..)
|
|
FROM rust:1.83-bookworm AS builder
|
|
|
|
WORKDIR /build
|
|
|
|
# Copy warzone workspace
|
|
COPY warzone/Cargo.toml warzone/Cargo.lock ./warzone/
|
|
COPY warzone/crates ./warzone/crates
|
|
|
|
# Build server
|
|
WORKDIR /build/warzone
|
|
RUN cargo build --release --bin warzone-server
|
|
|
|
# Build WASM (for embedded web client)
|
|
RUN cargo install wasm-pack && \
|
|
wasm-pack build crates/warzone-wasm --target web --out-dir /build/wasm-pkg 2>&1 || true
|
|
|
|
# Runtime
|
|
FROM debian:bookworm-slim
|
|
RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
|
|
|
|
COPY --from=builder /build/warzone/target/release/warzone-server /usr/local/bin/
|
|
COPY --from=builder /build/wasm-pkg /srv/wasm-pkg
|
|
|
|
WORKDIR /data
|
|
EXPOSE 7700
|
|
|
|
ENTRYPOINT ["warzone-server"]
|
|
CMD ["--bind", "0.0.0.0:7700"]
|