feat: add 18 AI/ML Portainer templates with gap analysis

This commit is contained in:
2026-03-10 14:30:02 -03:00
parent 199f5218bb
commit c2d54dd915
21 changed files with 1238 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
version: "3.8"
services:
chromadb:
image: chromadb/chroma:latest
container_name: chromadb
restart: unless-stopped
ports:
- "${CHROMA_PORT:-8000}:8000"
volumes:
- chroma_data:/chroma/chroma
environment:
- IS_PERSISTENT=TRUE
- PERSIST_DIRECTORY=/chroma/chroma
- ANONYMIZED_TELEMETRY=${TELEMETRY:-FALSE}
- CHROMA_SERVER_AUTHN_CREDENTIALS=${CHROMA_TOKEN:-}
- CHROMA_SERVER_AUTHN_PROVIDER=${CHROMA_AUTH_PROVIDER:-}
volumes:
chroma_data:

View File

@@ -0,0 +1,31 @@
version: "3.8"
services:
comfyui:
image: yanwk/comfyui-boot:latest
container_name: comfyui
restart: unless-stopped
ports:
- "${COMFYUI_PORT:-8188}:8188"
volumes:
- comfyui_data:/root
- comfyui_models:/root/ComfyUI/models
- comfyui_output:/root/ComfyUI/output
- comfyui_input:/root/ComfyUI/input
- comfyui_custom_nodes:/root/ComfyUI/custom_nodes
environment:
- CLI_ARGS=${CLI_ARGS:---listen 0.0.0.0 --port 8188}
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
comfyui_data:
comfyui_models:
comfyui_output:
comfyui_input:
comfyui_custom_nodes:

View File

@@ -0,0 +1,19 @@
version: "3.8"
services:
flowise:
image: flowiseai/flowise:latest
container_name: flowise
restart: unless-stopped
ports:
- "${FLOWISE_PORT:-3000}:3000"
volumes:
- flowise_data:/root/.flowise
environment:
- FLOWISE_USERNAME=${FLOWISE_USERNAME:-admin}
- FLOWISE_PASSWORD=${FLOWISE_PASSWORD:-changeme}
- APIKEY_PATH=/root/.flowise
- LOG_PATH=/root/.flowise/logs
volumes:
flowise_data:

View File

@@ -0,0 +1,26 @@
version: "3.8"
services:
jupyter:
image: quay.io/jupyter/pytorch-notebook:latest
container_name: jupyter-gpu
restart: unless-stopped
ports:
- "${JUPYTER_PORT:-8888}:8888"
volumes:
- jupyter_data:/home/jovyan/work
environment:
- JUPYTER_TOKEN=${JUPYTER_TOKEN:-changeme}
- JUPYTER_ENABLE_LAB=yes
- GRANT_SUDO=${GRANT_SUDO:-yes}
user: root
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
jupyter_data:

View File

@@ -0,0 +1,19 @@
version: "3.8"
services:
label-studio:
image: heartexlabs/label-studio:latest
container_name: label-studio
restart: unless-stopped
ports:
- "${LS_PORT:-8080}:8080"
volumes:
- label_studio_data:/label-studio/data
environment:
- LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=true
- LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=/label-studio/data/files
- LABEL_STUDIO_USERNAME=${LS_USER:-admin@example.com}
- LABEL_STUDIO_PASSWORD=${LS_PASSWORD:-changeme}
volumes:
label_studio_data:

View File

@@ -0,0 +1,18 @@
version: "3.8"
services:
langflow:
image: langflowai/langflow:latest
container_name: langflow
restart: unless-stopped
ports:
- "${LANGFLOW_PORT:-7860}:7860"
volumes:
- langflow_data:/app/langflow
environment:
- LANGFLOW_DATABASE_URL=sqlite:////app/langflow/langflow.db
- LANGFLOW_CONFIG_DIR=/app/langflow
- LANGFLOW_AUTO_LOGIN=${AUTO_LOGIN:-true}
volumes:
langflow_data:

View File

@@ -0,0 +1,33 @@
version: "3.8"
services:
litellm:
image: ghcr.io/berriai/litellm:main-latest
container_name: litellm
restart: unless-stopped
ports:
- "${LITELLM_PORT:-4000}:4000"
volumes:
- litellm_config:/app/config
environment:
- LITELLM_MASTER_KEY=${LITELLM_MASTER_KEY:-sk-master-key}
- LITELLM_LOG_LEVEL=${LOG_LEVEL:-INFO}
- DATABASE_URL=postgresql://${PG_USER:-litellm}:${PG_PASSWORD:-litellm}@litellm-db:5432/${PG_DB:-litellm}
command: --config /app/config/litellm_config.yaml --port 4000
depends_on:
- litellm-db
litellm-db:
image: postgres:16-alpine
container_name: litellm-db
restart: unless-stopped
environment:
- POSTGRES_USER=${PG_USER:-litellm}
- POSTGRES_PASSWORD=${PG_PASSWORD:-litellm}
- POSTGRES_DB=${PG_DB:-litellm}
volumes:
- litellm_pg_data:/var/lib/postgresql/data
volumes:
litellm_config:
litellm_pg_data:

View File

@@ -0,0 +1,25 @@
version: "3.8"
services:
localai:
image: localai/localai:latest-gpu-nvidia-cuda-12
container_name: localai
restart: unless-stopped
ports:
- "${LOCALAI_PORT:-8080}:8080"
volumes:
- localai_models:/build/models
environment:
- THREADS=${THREADS:-4}
- CONTEXT_SIZE=${CONTEXT_SIZE:-4096}
- MODELS_PATH=/build/models
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
localai_models:

View File

@@ -0,0 +1,20 @@
version: "3.8"
services:
mlflow:
image: ghcr.io/mlflow/mlflow:latest
container_name: mlflow
restart: unless-stopped
ports:
- "${MLFLOW_PORT:-5000}:5000"
volumes:
- mlflow_data:/mlflow
command: >
mlflow server
--host 0.0.0.0
--port 5000
--backend-store-uri sqlite:///mlflow/mlflow.db
--default-artifact-root /mlflow/artifacts
volumes:
mlflow_data:

View File

@@ -0,0 +1,20 @@
version: "3.8"
services:
n8n:
image: docker.n8n.io/n8nio/n8n:latest
container_name: n8n-ai
restart: unless-stopped
ports:
- "${N8N_PORT:-5678}:5678"
volumes:
- n8n_data:/home/node/.n8n
environment:
- N8N_BASIC_AUTH_ACTIVE=${N8N_AUTH:-true}
- N8N_BASIC_AUTH_USER=${N8N_USER:-admin}
- N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD:-changeme}
- WEBHOOK_URL=${WEBHOOK_URL:-http://localhost:5678/}
- N8N_AI_ENABLED=true
volumes:
n8n_data:

View File

@@ -0,0 +1,25 @@
version: "3.8"
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
ports:
- "${OLLAMA_PORT:-11434}:11434"
volumes:
- ollama_data:/root/.ollama
environment:
- OLLAMA_HOST=0.0.0.0
- OLLAMA_NUM_PARALLEL=${OLLAMA_NUM_PARALLEL:-4}
- OLLAMA_MAX_LOADED_MODELS=${OLLAMA_MAX_LOADED_MODELS:-2}
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
ollama_data:

View File

@@ -0,0 +1,39 @@
version: "3.8"
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: unless-stopped
ports:
- "${OPEN_WEBUI_PORT:-3000}:8080"
volumes:
- open_webui_data:/app/backend/data
environment:
- OLLAMA_BASE_URL=${OLLAMA_BASE_URL:-http://ollama:11434}
- WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY:-changeme}
- ENABLE_SIGNUP=${ENABLE_SIGNUP:-true}
depends_on:
- ollama
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
ports:
- "${OLLAMA_PORT:-11434}:11434"
volumes:
- ollama_data:/root/.ollama
environment:
- OLLAMA_HOST=0.0.0.0
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
open_webui_data:
ollama_data:

View File

@@ -0,0 +1,19 @@
version: "3.8"
services:
qdrant:
image: qdrant/qdrant:latest
container_name: qdrant
restart: unless-stopped
ports:
- "${QDRANT_HTTP_PORT:-6333}:6333"
- "${QDRANT_GRPC_PORT:-6334}:6334"
volumes:
- qdrant_data:/qdrant/storage
- qdrant_snapshots:/qdrant/snapshots
environment:
- QDRANT__SERVICE__API_KEY=${QDRANT_API_KEY:-}
volumes:
qdrant_data:
qdrant_snapshots:

View File

@@ -0,0 +1,25 @@
version: "3.8"
services:
stable-diffusion-webui:
image: universonic/stable-diffusion-webui:latest
container_name: stable-diffusion-webui
restart: unless-stopped
ports:
- "${SD_PORT:-7860}:7860"
volumes:
- sd_data:/data
- sd_output:/output
environment:
- CLI_ARGS=${CLI_ARGS:---listen --api --xformers}
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
sd_data:
sd_output:

View File

@@ -0,0 +1,35 @@
version: "3.8"
services:
text-gen-webui:
image: atinoda/text-generation-webui:default-nvidia
container_name: text-generation-webui
restart: unless-stopped
ports:
- "${WEBUI_PORT:-7860}:7860"
- "${API_PORT:-5000}:5000"
- "${STREAM_PORT:-5005}:5005"
volumes:
- tgw_characters:/app/characters
- tgw_loras:/app/loras
- tgw_models:/app/models
- tgw_presets:/app/presets
- tgw_prompts:/app/prompts
- tgw_extensions:/app/extensions
environment:
- EXTRA_LAUNCH_ARGS=${EXTRA_LAUNCH_ARGS:---listen --api}
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
tgw_characters:
tgw_loras:
tgw_models:
tgw_presets:
tgw_prompts:
tgw_extensions:

View File

@@ -0,0 +1,29 @@
version: "3.8"
services:
vllm:
image: vllm/vllm-openai:latest
container_name: vllm
restart: unless-stopped
ports:
- "${VLLM_PORT:-8000}:8000"
volumes:
- vllm_cache:/root/.cache/huggingface
environment:
- HUGGING_FACE_HUB_TOKEN=${HF_TOKEN:-}
command: >
--model ${MODEL_NAME:-meta-llama/Llama-3.1-8B-Instruct}
--max-model-len ${MAX_MODEL_LEN:-4096}
--gpu-memory-utilization ${GPU_MEM_UTIL:-0.90}
--tensor-parallel-size ${TENSOR_PARALLEL:-1}
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
ipc: host
volumes:
vllm_cache:

View File

@@ -0,0 +1,22 @@
version: "3.8"
services:
weaviate:
image: cr.weaviate.io/semitechnologies/weaviate:latest
container_name: weaviate
restart: unless-stopped
ports:
- "${WEAVIATE_HTTP_PORT:-8080}:8080"
- "${WEAVIATE_GRPC_PORT:-50051}:50051"
volumes:
- weaviate_data:/var/lib/weaviate
environment:
- QUERY_DEFAULTS_LIMIT=25
- AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=${ANON_ACCESS:-true}
- PERSISTENCE_DATA_PATH=/var/lib/weaviate
- DEFAULT_VECTORIZER_MODULE=${VECTORIZER:-none}
- CLUSTER_HOSTNAME=node1
- ENABLE_MODULES=${MODULES:-text2vec-transformers,generative-openai}
volumes:
weaviate_data:

View File

@@ -0,0 +1,19 @@
version: "3.8"
services:
whisper:
image: onerahmet/openai-whisper-asr-webservice:latest-gpu
container_name: whisper-asr
restart: unless-stopped
ports:
- "${WHISPER_PORT:-9000}:9000"
environment:
- ASR_MODEL=${ASR_MODEL:-base}
- ASR_ENGINE=${ASR_ENGINE:-openai_whisper}
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]