Files
podcastic/docker-compose.yml
MichaelandClaude Opus 5.5 1028b7968c feat: rewrite backend in Rust (axum)
Replace the Node/Express backend with a Rust implementation that keeps
the same REST API, MongoDB collections and Redis cache keys, so existing
users, subscriptions and progress keep working.

- axum + mongodb + redis, bcrypt and HS256 JWT compatible with old data
- RSS parsing, iTunes discovery/trending, background sync (1h / 4h)
- Docker image now builds a static Rust binary on debian-slim
- CI runs cargo tests before publishing the image
- compose uses pull_policy: always so a restart picks up the new image

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 09:34:33 +02:00

64 lines
1.5 KiB
YAML

services:
mongodb:
image: mongo:8
container_name: podcastic-mongodb
restart: unless-stopped
volumes:
- mongodb_data:/data/db
networks:
- podcastic_net
healthcheck:
test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
interval: 10s
timeout: 5s
retries: 5
start_period: 20s
redis:
image: redis:7-alpine
container_name: podcastic-redis
restart: unless-stopped
volumes:
- redis_data:/data
networks:
- podcastic_net
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
app:
image: ghcr.io/r0m1k3/podcastic:latest
# Always fetch the newest image when the stack (re)starts
pull_policy: always
container_name: podcastic-app
restart: unless-stopped
ports:
- "${PORT:-3579}:3579"
environment:
RUST_LOG: podcastic=info,tower_http=warn
PORT: 3579
MONGODB_URI: mongodb://mongodb:27017/podcastic
REDIS_URL: redis://redis:6379
JWT_SECRET: ${JWT_SECRET:-change_me_in_production}
JWT_EXPIRES_IN: 7d
JWT_REFRESH_EXPIRES_IN: 30d
PODCAST_INDEX_API_KEY: ${PODCAST_INDEX_API_KEY:-}
PODCAST_INDEX_API_SECRET: ${PODCAST_INDEX_API_SECRET:-}
depends_on:
mongodb:
condition: service_healthy
redis:
condition: service_healthy
networks:
- podcastic_net
volumes:
mongodb_data:
redis_data:
networks:
podcastic_net:
driver: bridge