Files
WPSidekick/docker-compose.yml
2026-01-26 17:07:35 +01:00

96 lines
3.4 KiB
YAML

version: '3.8'
services:
seo-optimizer:
build: .
container_name: seo-optimizer
restart: unless-stopped
env_file:
- .env
ports:
- "8080:8080"
environment:
# WordPress credentials
- WP_APP_PASSWORD=${WP_APP_PASSWORD}
# LLM provider (claude or deepseek) - set LLM_PROVIDER to override config
# Claude API key
- CLAUDE_API_KEY=${CLAUDE_API_KEY:-}
# DeepSeek API key + base URL
- DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:-}
- DEEPSEEK_BASE_URL=${DEEPSEEK_BASE_URL:-https://api.deepseek.com}
# Optimization configuration
- OPTIMIZATION_INTERVAL_HOURS=${OPTIMIZATION_INTERVAL_HOURS:-2.5}
# Idea generation configuration
- IDEAS_ENABLED=${IDEAS_ENABLED:-true}
- IDEAS_INTERVAL_HOURS=${IDEAS_INTERVAL_HOURS:-24}
- IDEAS_SUBREDDIT=${IDEAS_SUBREDDIT:-kubernetes}
- IDEAS_LISTING=${IDEAS_LISTING:-top}
- IDEAS_TIME_RANGE=${IDEAS_TIME_RANGE:-day}
- IDEAS_MAX_REDDIT_POSTS=${IDEAS_MAX_REDDIT_POSTS:-20}
- IDEAS_MAX_IDEAS=${IDEAS_MAX_IDEAS:-5}
- IDEAS_STYLE_SAMPLES=${IDEAS_STYLE_SAMPLES:-3}
- IDEAS_MIN_SCORE=${IDEAS_MIN_SCORE:-25}
- IDEAS_MIN_COMMENTS=${IDEAS_MIN_COMMENTS:-5}
- IDEAS_STORAGE_PATH=${IDEAS_STORAGE_PATH:-/app/data/ideas}
# Outreach configuration
- OUTREACH_ENABLED=${OUTREACH_ENABLED:-true}
- OUTREACH_SUBREDDIT=${OUTREACH_SUBREDDIT:-kubernetes}
- OUTREACH_LISTING=${OUTREACH_LISTING:-top}
- OUTREACH_TIME_RANGE=${OUTREACH_TIME_RANGE:-day}
- OUTREACH_MAX_REDDIT_POSTS=${OUTREACH_MAX_REDDIT_POSTS:-20}
- OUTREACH_MAX_SUGGESTIONS=${OUTREACH_MAX_SUGGESTIONS:-5}
- OUTREACH_MIN_SCORE=${OUTREACH_MIN_SCORE:-25}
- OUTREACH_MIN_COMMENTS=${OUTREACH_MIN_COMMENTS:-5}
- OUTREACH_MAX_ARTICLES=${OUTREACH_MAX_ARTICLES:-50}
- OUTREACH_STORAGE_PATH=${OUTREACH_STORAGE_PATH:-/app/data/outreach}
# Newsletter configuration
- NEWSLETTER_ENABLED=${NEWSLETTER_ENABLED:-true}
- NEWSLETTER_INTERVAL_HOURS=${NEWSLETTER_INTERVAL_HOURS:-168}
- NEWSLETTER_FEED_URL=${NEWSLETTER_FEED_URL:-https://alexandre-vazquez.com/feed/}
- NEWSLETTER_SUBREDDIT=${NEWSLETTER_SUBREDDIT:-kubernetes}
- NEWSLETTER_LISTING=${NEWSLETTER_LISTING:-top}
- NEWSLETTER_TIME_RANGE=${NEWSLETTER_TIME_RANGE:-week}
- NEWSLETTER_MAX_FEED_ITEMS=${NEWSLETTER_MAX_FEED_ITEMS:-5}
- NEWSLETTER_MAX_REDDIT_POSTS=${NEWSLETTER_MAX_REDDIT_POSTS:-10}
- NEWSLETTER_MIN_SCORE=${NEWSLETTER_MIN_SCORE:-10}
- NEWSLETTER_MIN_COMMENTS=${NEWSLETTER_MIN_COMMENTS:-2}
- NEWSLETTER_STORAGE_PATH=${NEWSLETTER_STORAGE_PATH:-/app/data/newsletters}
# Dry-run mode
- DRY_RUN=${DRY_RUN:-false}
# Logging
- LOG_LEVEL=${LOG_LEVEL:-INFO}
# API port
- API_PORT=8080
# Optional webhook URL
- WEBHOOK_URL=${WEBHOOK_URL:-}
volumes:
# Mount config file (optional, can use env vars instead)
- ./configs/config.yaml:/app/configs/config.yaml:ro
# Persist data across restarts/upgrades
- seo-optimizer-data:/app/data
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8080/api/v1/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
volumes:
seo-optimizer-data: