docs: rewrite README with structured overview and quick start guide
Replaces the minimal project description with a comprehensive README including a component overview table, quick start instructions, common Ansible operations, and links to detailed documentation. Aligns with Red Panda Approval™ standards.
This commit is contained in:
393
ansible/anythingllm/docker-compose.yml
Normal file
393
ansible/anythingllm/docker-compose.yml
Normal file
@@ -0,0 +1,393 @@
|
||||
networks:
|
||||
frontend:
|
||||
driver: bridge
|
||||
backend:
|
||||
driver: bridge
|
||||
monitoring:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
anythingllm_data:
|
||||
driver: local
|
||||
postgres_data:
|
||||
driver: local
|
||||
prometheus_data:
|
||||
driver: local
|
||||
loki_data:
|
||||
driver: local
|
||||
grafana_data:
|
||||
driver: local
|
||||
|
||||
services:
|
||||
# ============================================
|
||||
# PostgreSQL with pgvector Extension
|
||||
# ============================================
|
||||
postgres:
|
||||
image: pgvector/pgvector:pg17
|
||||
container_name: anythingllm-postgres
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_DB: ${POSTGRES_DB:-anythingllm}
|
||||
POSTGRES_USER: ${POSTGRES_USER:-anythingllm}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required}
|
||||
POSTGRES_INITDB_ARGS: "-E UTF8"
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
- ./scripts/init-pgvector.sql:/docker-entrypoint-initdb.d/init-pgvector.sql:ro
|
||||
networks:
|
||||
- backend
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-anythingllm}"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 2G
|
||||
reservations:
|
||||
memory: 1G
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
labels: "service=postgres"
|
||||
|
||||
# ============================================
|
||||
# AnythingLLM Application
|
||||
# ============================================
|
||||
anythingllm:
|
||||
image: mintplexlabs/anythingllm:latest
|
||||
container_name: anythingllm
|
||||
restart: unless-stopped
|
||||
cap_add:
|
||||
- SYS_ADMIN
|
||||
environment:
|
||||
# Server Configuration
|
||||
SERVER_PORT: 3001
|
||||
JWT_SECRET: ${JWT_SECRET:?JWT_SECRET is required}
|
||||
SIG_KEY: ${SIG_KEY:?SIG_KEY is required}
|
||||
SIG_SALT: ${SIG_SALT:?SIG_SALT is required}
|
||||
STORAGE_DIR: /app/server/storage
|
||||
|
||||
# PostgreSQL Configuration
|
||||
VECTOR_DB: "pgvector"
|
||||
PGVECTOR_CONNECTION_STRING: "postgresql://${POSTGRES_USER:-anythingllm}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB:-anythingllm}"
|
||||
|
||||
# LLM Provider - Generic OpenAI (for llama-cpp)
|
||||
LLM_PROVIDER: "generic-openai"
|
||||
GENERIC_OPEN_AI_BASE_PATH: ${LLAMACPP_BASE_URL:?LLAMACPP_BASE_URL is required}
|
||||
GENERIC_OPEN_AI_MODEL_PREF: ${LLAMACPP_MODEL:-llama-3-8b}
|
||||
GENERIC_OPEN_AI_MODEL_TOKEN_LIMIT: ${LLAMACPP_TOKEN_LIMIT:-8192}
|
||||
GENERIC_OPEN_AI_API_KEY: ${LLAMACPP_API_KEY:-not-needed}
|
||||
|
||||
# AWS Bedrock Configuration (optional - uncomment if using)
|
||||
# LLM_PROVIDER: "bedrock"
|
||||
# AWS_BEDROCK_LLM_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
|
||||
# AWS_BEDROCK_LLM_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
|
||||
# AWS_BEDROCK_LLM_REGION: ${AWS_REGION:-us-east-1}
|
||||
# AWS_BEDROCK_LLM_MODEL_PREFERENCE: ${BEDROCK_MODEL:-anthropic.claude-3-sonnet-20240229-v1:0}
|
||||
# AWS_BEDROCK_LLM_MODEL_TOKEN_LIMIT: 200000
|
||||
|
||||
# Embedding Configuration
|
||||
EMBEDDING_ENGINE: ${EMBEDDING_ENGINE}
|
||||
EMBEDDING_MODEL_PREF: ${EMBEDDING_MODEL_PREF}
|
||||
EMBEDDING_MODEL_MAX_CHUNK_LENGTH: ${EMBEDDING_MODEL_MAX_CHUNK_LENGTH}
|
||||
EMBEDDING_BASE_PATH: ${EMBEDDING_BASE_PATH}
|
||||
GENERIC_OPEN_AI_EMBEDDING_API_KEY: ${GENERIC_OPEN_AI_EMBEDDING_API_KEY}
|
||||
GENERIC_OPEN_AI_EMBEDDING_MAX_CONCURRENT_CHUNKS: ${GENERIC_OPEN_AI_EMBEDDING_MAX_CONCURRENT_CHUNKS}
|
||||
GENERIC_OPEN_AI_EMBEDDING_API_DELAY_MS: ${GENERIC_OPEN_AI_EMBEDDING_API_DELAY_MS}
|
||||
|
||||
# Whisper Configuration
|
||||
WHISPER_PROVIDER: "local"
|
||||
|
||||
# TTS Configuration
|
||||
TTS_PROVIDER: "native"
|
||||
|
||||
# Security
|
||||
DISABLE_TELEMETRY: "true"
|
||||
|
||||
# Logging (JSON format for Loki)
|
||||
NODE_ENV: production
|
||||
|
||||
# Optional: Enable HTTP logging
|
||||
# ENABLE_HTTP_LOGGER: "true"
|
||||
# ENABLE_HTTP_LOGGER_TIMESTAMPS: "true"
|
||||
volumes:
|
||||
- anythingllm_data:/app/server/storage
|
||||
- anythingllm_data:/app/collector/hotdir
|
||||
- anythingllm_data:/app/collector/outputs
|
||||
networks:
|
||||
- frontend
|
||||
- backend
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3001/api/ping"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 4G
|
||||
reservations:
|
||||
memory: 2G
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "50m"
|
||||
max-file: "5"
|
||||
labels: "service=anythingllm"
|
||||
|
||||
# ============================================
|
||||
# HAProxy - Reverse Proxy & Load Balancer
|
||||
# ============================================
|
||||
haproxy:
|
||||
image: haproxy:2.9-alpine
|
||||
container_name: anythingllm-haproxy
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
- "8404:8404" # HAProxy stats
|
||||
volumes:
|
||||
- ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
|
||||
- ./haproxy/certs:/etc/haproxy/certs:ro
|
||||
- ./haproxy/errors:/etc/haproxy/errors:ro
|
||||
networks:
|
||||
- frontend
|
||||
- monitoring
|
||||
depends_on:
|
||||
- anythingllm
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8404/stats"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 512M
|
||||
reservations:
|
||||
memory: 256M
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
labels: "service=haproxy"
|
||||
|
||||
# ============================================
|
||||
# Prometheus - Metrics Collection
|
||||
# ============================================
|
||||
prometheus:
|
||||
image: prom/prometheus:latest
|
||||
container_name: anythingllm-prometheus
|
||||
restart: unless-stopped
|
||||
command:
|
||||
- '--config.file=/etc/prometheus/prometheus.yml'
|
||||
- '--storage.tsdb.path=/prometheus'
|
||||
- '--storage.tsdb.retention.time=30d'
|
||||
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
|
||||
- '--web.console.templates=/usr/share/prometheus/consoles'
|
||||
- '--web.enable-lifecycle'
|
||||
volumes:
|
||||
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
|
||||
- ./prometheus/alerts.yml:/etc/prometheus/alerts.yml:ro
|
||||
- prometheus_data:/prometheus
|
||||
networks:
|
||||
- monitoring
|
||||
- backend
|
||||
ports:
|
||||
- "9090:9090"
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:9090/-/healthy"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 2G
|
||||
reservations:
|
||||
memory: 1G
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
labels: "service=prometheus"
|
||||
|
||||
# ============================================
|
||||
# Postgres Exporter - Database Metrics
|
||||
# ============================================
|
||||
postgres-exporter:
|
||||
image: prometheuscommunity/postgres-exporter:latest
|
||||
container_name: anythingllm-postgres-exporter
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
DATA_SOURCE_NAME: "postgresql://${POSTGRES_USER:-anythingllm}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB:-anythingllm}?sslmode=disable"
|
||||
networks:
|
||||
- backend
|
||||
- monitoring
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 256M
|
||||
reservations:
|
||||
memory: 128M
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "5m"
|
||||
max-file: "2"
|
||||
labels: "service=postgres-exporter"
|
||||
|
||||
# ============================================
|
||||
# cAdvisor - Container Metrics
|
||||
# ============================================
|
||||
cadvisor:
|
||||
image: gcr.io/cadvisor/cadvisor:latest
|
||||
container_name: anythingllm-cadvisor
|
||||
restart: unless-stopped
|
||||
privileged: true
|
||||
volumes:
|
||||
- /:/rootfs:ro
|
||||
- /var/run:/var/run:ro
|
||||
- /sys:/sys:ro
|
||||
- /var/lib/docker/:/var/lib/docker:ro
|
||||
- /dev/disk/:/dev/disk:ro
|
||||
networks:
|
||||
- monitoring
|
||||
ports:
|
||||
- "8080:8080"
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 512M
|
||||
reservations:
|
||||
memory: 256M
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "5m"
|
||||
max-file: "2"
|
||||
labels: "service=cadvisor"
|
||||
|
||||
# ============================================
|
||||
# Loki - Log Aggregation
|
||||
# ============================================
|
||||
loki:
|
||||
image: grafana/loki:latest
|
||||
container_name: anythingllm-loki
|
||||
restart: unless-stopped
|
||||
command: -config.file=/etc/loki/loki-config.yml
|
||||
volumes:
|
||||
- ./loki/loki-config.yml:/etc/loki/loki-config.yml:ro
|
||||
- loki_data:/loki
|
||||
networks:
|
||||
- monitoring
|
||||
ports:
|
||||
- "3100:3100"
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3100/ready"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 2G
|
||||
reservations:
|
||||
memory: 1G
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
labels: "service=loki"
|
||||
|
||||
# ============================================
|
||||
# Grafana Alloy - Log Collection
|
||||
# ============================================
|
||||
alloy:
|
||||
image: grafana/alloy:latest
|
||||
container_name: anythingllm-alloy
|
||||
restart: unless-stopped
|
||||
command:
|
||||
- run
|
||||
- /etc/alloy/config.alloy
|
||||
- --server.http.listen-addr=0.0.0.0:12345
|
||||
- --storage.path=/var/lib/alloy/data
|
||||
volumes:
|
||||
- ./alloy/config.alloy:/etc/alloy/config.alloy:ro
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- /var/lib/docker/containers:/var/lib/docker/containers:ro
|
||||
networks:
|
||||
- monitoring
|
||||
ports:
|
||||
- "12345:12345"
|
||||
depends_on:
|
||||
- loki
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 512M
|
||||
reservations:
|
||||
memory: 256M
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
labels: "service=alloy"
|
||||
|
||||
# ============================================
|
||||
# Grafana - Visualization Dashboard
|
||||
# ============================================
|
||||
grafana:
|
||||
image: grafana/grafana:latest
|
||||
container_name: anythingllm-grafana
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
GF_SECURITY_ADMIN_USER: ${GRAFANA_ADMIN_USER:-admin}
|
||||
GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_ADMIN_PASSWORD:?GRAFANA_ADMIN_PASSWORD is required}
|
||||
GF_INSTALL_PLUGINS: grafana-clock-panel,grafana-simple-json-datasource
|
||||
GF_SERVER_ROOT_URL: ${GRAFANA_ROOT_URL:-http://localhost:3000}
|
||||
GF_USERS_ALLOW_SIGN_UP: "false"
|
||||
volumes:
|
||||
- grafana_data:/var/lib/grafana
|
||||
- ./grafana/provisioning:/etc/grafana/provisioning:ro
|
||||
- ./grafana/dashboards:/var/lib/grafana/dashboards:ro
|
||||
networks:
|
||||
- monitoring
|
||||
- frontend
|
||||
ports:
|
||||
- "3000:3000"
|
||||
depends_on:
|
||||
- prometheus
|
||||
- loki
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/api/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 1G
|
||||
reservations:
|
||||
memory: 512M
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
labels: "service=grafana"
|
||||
Reference in New Issue
Block a user