generated from coulomb/repo-seed
feat(WP-0004): railiance deployment & service ops
- Dockerfile (multi-stage, uv-based, slim runtime) - .dockerignore - docker-compose.railiance.yml (Temporal + NATS + PG, no Elasticsearch) - GET /health endpoint (db + temporal probes, 200/503) - .env.example (complete env var reference) - Makefile: migrate, sync-all, dev-up/down, railiance-up/down, start-worker, start-api, start-event-router, help targets; extracted sync-event-types Python to scripts/sync_event_types.py - SIGTERM graceful shutdown in worker.py and event_router.py - docs/runbook.md: Railiance deployment section Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -213,6 +213,78 @@ uv run alembic history # show full migration history
|
||||
|
||||
---
|
||||
|
||||
## Railiance Deployment
|
||||
|
||||
### Pre-requisites
|
||||
- Docker ≥ 24 with Compose v2 (`docker compose` not `docker-compose`)
|
||||
- ≥ 4 GB RAM available (Temporal server takes ~1 GB)
|
||||
- Ports available: 4222 (NATS), 7233 (Temporal gRPC), 8010 (API), 8080 (Temporal UI),
|
||||
9090 (Prometheus metrics)
|
||||
|
||||
### First-time setup
|
||||
|
||||
```bash
|
||||
# 1. Copy and edit the env file — fill in all secrets and URLs
|
||||
cp .env.example .env
|
||||
|
||||
# 2. Build the image and start all services
|
||||
make railiance-up
|
||||
|
||||
# 3. Wait for health (retry until 200)
|
||||
curl -sf http://localhost:8010/health # → {"status":"ok","db":true,"temporal":true}
|
||||
|
||||
# 4. Register Temporal search attributes (one-time per namespace)
|
||||
docker exec actcore-temporal temporal operator search-attribute create \
|
||||
--name ActivityId --type Keyword \
|
||||
--name ActivityName --type Keyword \
|
||||
--address temporal:7233
|
||||
|
||||
# 5. Load event types and activity definitions
|
||||
make sync-all
|
||||
```
|
||||
|
||||
### Upgrade procedure
|
||||
|
||||
```bash
|
||||
git pull
|
||||
make railiance-up # rebuilds image, restarts changed services
|
||||
make migrate # apply any new migrations (safe to run when none pending)
|
||||
curl -sf http://localhost:8010/health
|
||||
```
|
||||
|
||||
### Health verification
|
||||
|
||||
```bash
|
||||
# API health (db + temporal probes)
|
||||
curl -s http://localhost:8010/health | python3 -m json.tool
|
||||
|
||||
# Temporal UI
|
||||
open http://localhost:8080
|
||||
|
||||
# Prometheus metrics
|
||||
curl -s http://localhost:9090/metrics | head -20
|
||||
```
|
||||
|
||||
### Common ops
|
||||
|
||||
```bash
|
||||
# Follow logs for one service
|
||||
docker compose -f docker-compose.railiance.yml logs -f actcore-worker
|
||||
|
||||
# Restart one service without bringing down others
|
||||
docker compose -f docker-compose.railiance.yml restart actcore-api
|
||||
|
||||
# Re-run migrations manually
|
||||
docker compose -f docker-compose.railiance.yml run --rm actcore-migrate
|
||||
|
||||
# Wipe and reset (DESTRUCTIVE — deletes all volumes including DB data)
|
||||
make railiance-down
|
||||
docker volume rm activity-core_temporal-db-data activity-core_app-db-data activity-core_nats-data
|
||||
make railiance-up
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Wipe and restart dev stack
|
||||
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user