206 lines
5.2 KiB
YAML
206 lines
5.2 KiB
YAML
services:
|
|
# - CORE SERVICES -
|
|
# --- .ENV INIT ---
|
|
alfred-init:
|
|
container_name: alfred-init
|
|
build:
|
|
context: .
|
|
target: builder
|
|
args:
|
|
PYTHON_VERSION: ${PYTHON_VERSION}
|
|
PYTHON_VERSION_SHORT: ${PYTHON_VERSION_SHORT}
|
|
RUNNER: ${RUNNER}
|
|
command: python scripts/bootstrap.py
|
|
networks:
|
|
- alfred-net
|
|
|
|
# --- MAIN APPLICATION ---
|
|
alfred:
|
|
container_name: alfred-core
|
|
build:
|
|
context: .
|
|
args:
|
|
PYTHON_VERSION: ${PYTHON_VERSION}
|
|
PYTHON_VERSION_SHORT: ${PYTHON_VERSION_SHORT}
|
|
RUNNER: ${RUNNER}
|
|
depends_on:
|
|
alfred-init:
|
|
condition: service_completed_successfully
|
|
restart: unless-stopped
|
|
env_file:
|
|
- path: .env
|
|
required: true
|
|
volumes:
|
|
- ./data:/data
|
|
- ./logs:/logs
|
|
# TODO: Hot reload (comment out in production)
|
|
#- ./alfred:/home/appuser/alfred
|
|
networks:
|
|
- alfred-net
|
|
|
|
# --- FRONTEND LIBRECHAT ---
|
|
librechat:
|
|
container_name: alfred-librechat
|
|
image: ghcr.io/danny-avila/librechat:${LIBRECHAT_VERSION}
|
|
depends_on:
|
|
alfred-init:
|
|
condition: service_completed_successfully
|
|
mongodb:
|
|
condition: service_healthy
|
|
restart: unless-stopped
|
|
env_file:
|
|
- path: .env
|
|
required: true
|
|
environment:
|
|
# Remap value name
|
|
- SEARCH=${MEILI_ENABLED}
|
|
ports:
|
|
- "${PORT}:${PORT}"
|
|
volumes:
|
|
- ./data/librechat/images:/app/client/public/images
|
|
- ./data/librechat/uploads:/app/client/uploads
|
|
- ./logs:/app/api/logs
|
|
# Mount custom endpoint
|
|
- ./librechat/manifests:/app/manifests:ro
|
|
- ./librechat/librechat.yaml:/app/librechat.yaml:ro
|
|
networks:
|
|
- alfred-net
|
|
|
|
# --- DATABASE #1 - APP STATE ---
|
|
mongodb:
|
|
container_name: alfred-mongodb
|
|
image: mongo:latest
|
|
restart: unless-stopped
|
|
depends_on:
|
|
alfred-init:
|
|
condition: service_completed_successfully
|
|
env_file:
|
|
- path: .env
|
|
required: true
|
|
environment:
|
|
# Remap value name
|
|
- MONGO_INITDB_ROOT_USERNAME=${MONGO_USER}
|
|
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_PASSWORD}
|
|
ports:
|
|
- "${MONGO_PORT}:${MONGO_PORT}"
|
|
volumes:
|
|
- ./data/mongodb:/data/db
|
|
- ./mongod.conf:/etc/mongod.conf:ro
|
|
command: ["mongod", "--config", "/etc/mongod.conf"]
|
|
healthcheck:
|
|
test: mongosh --quiet -u "${MONGO_USER}" -p "${MONGO_PASSWORD}" --authenticationDatabase admin --eval "db.adminCommand('ping')"
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
networks:
|
|
- alfred-net
|
|
|
|
# --- OLLAMA - LOCAL LLM ENGINE ---
|
|
ollama:
|
|
image: ollama/ollama:latest
|
|
container_name: alfred-ollama
|
|
depends_on:
|
|
alfred-init:
|
|
condition: service_completed_successfully
|
|
restart: unless-stopped
|
|
env_file:
|
|
- path: .env
|
|
required: true
|
|
volumes:
|
|
- ./data/ollama:/root/.ollama
|
|
networks:
|
|
- alfred-net
|
|
|
|
# - OPTIONAL SERVICES -
|
|
# --- SEARCH ENGINE SUPER FAST (Optional) ---
|
|
meilisearch:
|
|
container_name: alfred-meilisearch
|
|
image: getmeili/meilisearch:v1.12.3
|
|
depends_on:
|
|
alfred-init:
|
|
condition: service_completed_successfully
|
|
restart: unless-stopped
|
|
env_file:
|
|
- path: .env
|
|
required: true
|
|
volumes:
|
|
- ./data/meilisearch:/meili_data
|
|
profiles: ["meili", "full"]
|
|
networks:
|
|
- alfred-net
|
|
|
|
# --- RETRIEVAL AUGMENTED GENERATION SYSTEM (Optional) ---
|
|
rag_api:
|
|
container_name: alfred-rag
|
|
image: ghcr.io/danny-avila/librechat-rag-api-dev-lite:${RAG_VERSION}
|
|
depends_on:
|
|
alfred-init:
|
|
condition: service_completed_successfully
|
|
vectordb:
|
|
condition: service_healthy
|
|
restart: unless-stopped
|
|
env_file:
|
|
- path: .env
|
|
required: true
|
|
ports:
|
|
- "${RAG_API_PORT}:${RAG_API_PORT}"
|
|
volumes:
|
|
- ./data/rag/uploads:/app/uploads
|
|
profiles: ["rag", "full"]
|
|
networks:
|
|
- alfred-net
|
|
|
|
# --- DATABASE #2 - Vector RAG (Optional) ---
|
|
vectordb:
|
|
container_name: alfred-vectordb
|
|
image: pgvector/pgvector:0.8.0-pg16-bookworm
|
|
depends_on:
|
|
alfred-init:
|
|
condition: service_completed_successfully
|
|
restart: unless-stopped
|
|
env_file:
|
|
- path: .env
|
|
required: true
|
|
ports:
|
|
- "${POSTGRES_PORT}:${POSTGRES_PORT}"
|
|
volumes:
|
|
- ./data/vectordb:/var/lib/postgresql/data
|
|
profiles: ["rag", "full"]
|
|
healthcheck:
|
|
test: [ "CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-alfred} -d ${POSTGRES_DB_NAME:-alfred}" ]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
networks:
|
|
- alfred-net
|
|
|
|
# --- QBITTORENT (Optional) ---
|
|
qbittorrent:
|
|
image: lscr.io/linuxserver/qbittorrent:latest
|
|
container_name: alfred-qbittorrent
|
|
depends_on:
|
|
alfred-init:
|
|
condition: service_completed_successfully
|
|
restart: unless-stopped
|
|
env_file:
|
|
- path: .env
|
|
required: true
|
|
environment:
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- TZ=Europe/Paris
|
|
- WEBUI_PORT=${QBITTORRENT_PORT}
|
|
volumes:
|
|
- ./data/qbittorrent/config:/config
|
|
- ./data/qbittorrent/downloads:/downloads
|
|
profiles: ["qbittorrent", "full"]
|
|
ports:
|
|
- "${QBITTORRENT_PORT}:${QBITTORRENT_PORT}"
|
|
networks:
|
|
- alfred-net
|
|
|
|
networks:
|
|
alfred-net:
|
|
name: alfred-internal
|
|
driver: bridge
|