Files
skillhub/docker-compose.yml
airano 97b427831a Initial release v1.0.0
Open-source marketplace for AI Agent skills.

Features:
- Next.js 15 web app with i18n (en/fa)
- CLI tool for skill installation (npx skillhub)
- GitHub crawler/indexer with multi-strategy discovery
- Security scanning for all indexed skills
- Self-hostable with Docker

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 06:42:07 +03:30

130 lines
3.5 KiB
YAML

services:
# Next.js Web Application
web:
build:
context: .
dockerfile: apps/web/Dockerfile
container_name: skillhub-web
ports:
- '3000:3000'
environment:
DATABASE_URL: postgresql://postgres:postgres@db:5432/skillhub
REDIS_URL: redis://redis:6379
MEILI_URL: http://meilisearch:7700
MEILI_MASTER_KEY: ${MEILI_MASTER_KEY:-skillhub-dev-key}
GITHUB_TOKEN: ${GITHUB_TOKEN}
NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-http://localhost:3000}
# NextAuth (GitHub OAuth)
GITHUB_CLIENT_ID: ${GITHUB_CLIENT_ID}
GITHUB_CLIENT_SECRET: ${GITHUB_CLIENT_SECRET}
AUTH_SECRET: ${AUTH_SECRET}
AUTH_URL: ${AUTH_URL:-http://localhost:3000}
# Email (Resend) - optional for development
RESEND_API_KEY: ${RESEND_API_KEY:-}
RESEND_FROM_EMAIL: ${RESEND_FROM_EMAIL:-}
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
restart: unless-stopped
healthcheck:
test: ['CMD', 'curl', '-sf', 'http://localhost:3000/api/health']
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
# GitHub Skills Indexer
indexer:
build:
context: .
dockerfile: services/indexer/Dockerfile
container_name: skillhub-indexer
environment:
DATABASE_URL: postgresql://postgres:postgres@db:5432/skillhub
REDIS_URL: redis://redis:6379
MEILI_URL: http://meilisearch:7700
MEILI_MASTER_KEY: ${MEILI_MASTER_KEY:-skillhub-dev-key}
GITHUB_TOKEN: ${GITHUB_TOKEN}
GITHUB_TOKENS: ${GITHUB_TOKENS}
GITHUB_TOKEN_NAMES: ${GITHUB_TOKEN_NAMES}
INDEXER_CONCURRENCY: ${INDEXER_CONCURRENCY:-5}
INDEXER_MIN_STARS: ${INDEXER_MIN_STARS:-0}
# Outreach email sending
RESEND_API_KEY: ${RESEND_API_KEY:-}
RESEND_FROM_EMAIL: ${RESEND_FROM_EMAIL:-}
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
meilisearch:
condition: service_healthy
restart: unless-stopped
# PostgreSQL database
db:
image: postgres:17-alpine
container_name: skillhub-db
ports:
- '5432:5432'
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
POSTGRES_DB: skillhub
volumes:
- postgres_data:/var/lib/postgresql/data
- ./scripts/init-db.sql:/docker-entrypoint-initdb.d/init.sql:ro
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U postgres']
interval: 5s
timeout: 5s
retries: 5
restart: unless-stopped
# Redis cache and job queue
redis:
image: redis:7-alpine
container_name: skillhub-redis
ports:
- '6379:6379'
command: redis-server --appendonly yes
volumes:
- redis_data:/data
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 5s
timeout: 5s
retries: 5
restart: unless-stopped
# Meilisearch for full-text search
meilisearch:
image: getmeili/meilisearch:v1.6
container_name: skillhub-search
ports:
- '7700:7700'
environment:
MEILI_MASTER_KEY: ${MEILI_MASTER_KEY:-skillhub-dev-key}
MEILI_ENV: ${MEILI_ENV:-development}
volumes:
- meilisearch_data:/meili_data
healthcheck:
test: ['CMD-SHELL', 'curl -sf http://localhost:7700/health || exit 1']
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
restart: unless-stopped
volumes:
postgres_data:
redis_data:
meilisearch_data:
networks:
default:
name: skillhub-network