init devops repo

Mirrors cipherdolls/devops layout. Hostinger Swarm stacks for the t4t
hosted-gateway and local docker-compose for development + e2e tests.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Felix FaerberandClaude Opus 4.7 committed 2026-05-27 10:31:30 +03:00
commit 032a22b6ee
16 files changed
+1444

No files matched your search

+108
View File
@@ -0,0 +1,108 @@
# Local dev stack for the hosted gateway. Brings up everything the gateway
# needs to serve `/v1/chat/completions` end-to-end against a forked Gnosis
# chain + a real t4t-provider talking to a mock Ollama.
#
# Run from `devops/local/`: `make dev-up` / `docker compose up`.
services:
postgres:
image: postgres:16
env_file: [.env]
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 3s
timeout: 3s
retries: 30
networks: [dev]
redis:
image: redis:7
ports:
- "6379:6379"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 3s
retries: 30
networks: [dev]
anvil:
image: ghcr.io/foundry-rs/foundry:latest
pull_policy: always
command:
- anvil
- --host=0.0.0.0
- --port=8545
- --chain-id=100
- --fork-url=${GNOSIS_RPC_URL_UPSTREAM:-https://rpc.gnosischain.com}
- --block-time=1
environment:
ANVIL_IP_ADDR: "0.0.0.0"
expose:
- "8545"
ports:
- "8545:8545"
healthcheck:
test: ["CMD-SHELL", "cast block-number --rpc-url http://localhost:8545 >/dev/null 2>&1"]
interval: 3s
timeout: 3s
retries: 60
start_period: 30s
networks: [dev]
bee:
image: ethersphere/bee:latest
command: dev
ports:
- "1633:1633"
networks: [dev]
# Prisma migration step — runs once on `up`, then exits.
prisma:
build:
context: ../../hosted-gateway
command: ["sh", "-c", "bunx prisma migrate deploy"]
env_file: [.env]
depends_on:
postgres: { condition: service_healthy }
networks: [dev]
api:
build:
context: ../../hosted-gateway
command: ["bun", "run", "src/api.ts"]
env_file: [.env]
ports:
- "8080:8080"
depends_on:
postgres: { condition: service_healthy }
redis: { condition: service_healthy }
anvil: { condition: service_healthy }
bee: { condition: service_started }
prisma: { condition: service_completed_successfully }
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://localhost:8080/health || exit 1"]
interval: 5s
timeout: 3s
retries: 30
start_period: 15s
networks: [dev]
worker:
build:
context: ../../hosted-gateway
command: ["bun", "run", "src/worker.ts"]
env_file: [.env]
depends_on:
postgres: { condition: service_healthy }
redis: { condition: service_healthy }
anvil: { condition: service_healthy }
bee: { condition: service_started }
prisma: { condition: service_completed_successfully }
networks: [dev]
networks:
dev:
driver: bridge