96 lines
3.4 KiB
YAML
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:
|