39246-vm/docker-compose.yml
2026-03-20 02:38:40 +03:00

76 lines
2.0 KiB
YAML

# Ghost Node — Docker Compose
# One-command startup: docker compose up -d
#
# Services:
# ghostnode — FastAPI + Playwright scraper (port 7000)
# postgres — PostgreSQL 16 database
# redis — Redis 7 cache + pub/sub
#
# First run: docker compose up --build
# Stop: docker compose down
# Logs: docker compose logs -f ghostnode
# Shell: docker compose exec ghostnode bash
services:
ghostnode:
build: .
container_name: ghostnode
restart: unless-stopped
ports:
- "7000:7000"
environment:
# PostgreSQL — replaces SQLite when set
DATABASE_URL: postgresql://ghostnode:ghostnode@postgres:5432/ghostnode
# Redis — enables cache + pub/sub
REDIS_URL: redis://redis:6379/0
# Optional: pass Telegram token here instead of via Settings UI
# TELEGRAM_TOKEN: ""
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
volumes:
# Persist browser session cookies between restarts
- ghostnode_sessions:/app/sessions
shm_size: 512mb # Chromium needs shared memory
postgres:
image: postgres:16-alpine
container_name: ghostnode_postgres
restart: unless-stopped
environment:
POSTGRES_DB: ghostnode
POSTGRES_USER: ghostnode
POSTGRES_PASSWORD: ghostnode
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ghostnode -d ghostnode"]
interval: 5s
timeout: 5s
retries: 10
ports:
- "5432:5432" # expose for local tools (pgAdmin, DBeaver)
redis:
image: redis:7-alpine
container_name: ghostnode_redis
restart: unless-stopped
command: redis-server --appendonly yes --maxmemory 128mb --maxmemory-policy allkeys-lru
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 10
ports:
- "6379:6379" # expose for local Redis clients
volumes:
postgres_data:
redis_data:
ghostnode_sessions: