infra: added orchestration and app bootstrap (.env)
This commit is contained in:
@@ -1,4 +1,20 @@
|
||||
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:
|
||||
@@ -8,47 +24,38 @@ services:
|
||||
PYTHON_VERSION_SHORT: ${PYTHON_VERSION_SHORT}
|
||||
RUNNER: ${RUNNER}
|
||||
depends_on:
|
||||
- librechat
|
||||
alfred-init:
|
||||
condition: service_completed_successfully
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
# LLM Configuration
|
||||
LLM_PROVIDER: ${LLM_PROVIDER:-deepseek}
|
||||
DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:-}
|
||||
|
||||
# Memory storage
|
||||
MEMORY_STORAGE_DIR: /data/memory
|
||||
|
||||
# External services
|
||||
TMDB_API_KEY: ${TMDB_API_KEY:-}
|
||||
QBITTORRENT_URL: ${QBITTORRENT_URL:-}
|
||||
QBITTORRENT_USERNAME: ${QBITTORRENT_USERNAME:-}
|
||||
QBITTORRENT_PASSWORD: ${QBITTORRENT_PASSWORD:-}
|
||||
- path: .env
|
||||
required: true
|
||||
volumes:
|
||||
- ./data/memory:/data/memory
|
||||
- ./logs:/data/logs
|
||||
# TODO: Development: mount code for hot reload (comment out in production)
|
||||
# - ./alfred:/app/alfred
|
||||
- ./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:
|
||||
- mongodb
|
||||
- meilisearch
|
||||
- rag_api
|
||||
alfred-init:
|
||||
condition: service_completed_successfully
|
||||
mongodb:
|
||||
condition: service_healthy
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- .env
|
||||
- path: .env
|
||||
required: true
|
||||
environment:
|
||||
- HOST=0.0.0.0
|
||||
- MONGO_URI=mongodb://mongodb:27017/LibreChat
|
||||
- MEILI_HOST=http://meilisearch:7700
|
||||
- RAG_PORT=${RAG_PORT:-8000}
|
||||
- RAG_API_URL=http://rag_api:${RAG_PORT:-8000}
|
||||
# Remap value name
|
||||
- SEARCH=${MEILI_ENABLED}
|
||||
ports:
|
||||
- "${LIBRECHAT_PORT:-3080}:3080"
|
||||
- "${PORT}:${PORT}"
|
||||
volumes:
|
||||
- ./data/librechat/images:/app/client/public/images
|
||||
- ./data/librechat/uploads:/app/client/uploads
|
||||
@@ -56,47 +63,144 @@ services:
|
||||
# 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/mongo:/data/db
|
||||
command: mongod --noauth
|
||||
command: mongod --quiet --setParameter logComponentVerbosity='{"network":{"verbosity":0}}'
|
||||
healthcheck:
|
||||
test: |
|
||||
mongosh --quiet --eval "db.adminCommand('ping')" || \
|
||||
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
|
||||
environment:
|
||||
- MEILI_NO_ANALYTICS=true
|
||||
env_file:
|
||||
- path: .env
|
||||
required: true
|
||||
volumes:
|
||||
- ./data/meili:/meili_data
|
||||
#profiles: ["meili", "full"]
|
||||
- ./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:
|
||||
- .env
|
||||
environment:
|
||||
- DB_HOST=vectordb
|
||||
- DB_PORT=5432
|
||||
- RAG_PORT=${RAG_PORT:-8000}
|
||||
- path: .env
|
||||
required: true
|
||||
ports:
|
||||
- "${RAG_PORT:-8000}:${RAG_PORT:-8000}"
|
||||
#profiles: ["rag", "full"]
|
||||
- "${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:
|
||||
- .env
|
||||
- path: .env
|
||||
required: true
|
||||
ports:
|
||||
- "${VECTOR_DB_PORT:-5432}:5432"
|
||||
- "${POSTGRES_PORT}:${POSTGRES_PORT}"
|
||||
volumes:
|
||||
- ./data/vectordb:/var/lib/postgresql/data
|
||||
#profiles: ["rag", "full"]
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user