sha256:c9c385b55985926f2223190c1a24ee52fd84db64da6e28d8796e0b9a2e380258
Last pushed
25 days by harlenalvarez
Type
Compose
Manifest digest
sha256:c9c385b55985926f2223190c1a24ee52fd84db64da6e28d8796e0b9a2e380258
name: huddle
services:
postgres:
image: docker.io/${DOCKER_HUB_NAMESPACE:-local}/huddle-postgres:${HUDDLE_IMAGE_TAG:-dev}
environment:
DATABASE_URL: ${DATABASE_URL:?DATABASE_URL is required}
POSTGRES_ALLOWED_HOSTS: postgres
volumes:
- postgres_data:/var/lib/postgresql
networks:
- backend
healthcheck:
# Check the private listener without assuming a role from DATABASE_URL;
# the custom entrypoint may initialize any configured username.
test:
[
"CMD",
"python3",
"-c",
"import socket; connection = socket.create_connection(('127.0.0.1', 5432), 3); connection.close()",
]
interval: 5s
timeout: 5s
retries: 20
start_period: 15s
restart: unless-stopped
redis:
image: redis:8-alpine
command: ["redis-server", "--appendonly", "yes"]
volumes:
- redis_data:/data
networks:
- backend
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 20
restart: unless-stopped
api:
image: docker.io/${DOCKER_HUB_NAMESPACE:-local}/huddle-api:${HUDDLE_IMAGE_TAG:-dev}
environment:
DATABASE_URL: ${DATABASE_URL:?DATABASE_URL is required}
DATABASE_STARTUP_TIMEOUT: ${DATABASE_STARTUP_TIMEOUT:-120}
FERNET_KEY: ${FERNET_KEY:?FERNET_KEY is required}
HTTP_TIMEOUT: ${HTTP_TIMEOUT:-300}
HTTPX_MAX_CONNECTIONS: ${HTTPX_MAX_CONNECTIONS:-100}
HTTP_MAX_KEEPALIVE: ${HTTP_MAX_KEEPALIVE:-20}
VLLM_API_KEY: ${VLLM_API_KEY:-EMPTY}
EXA_API_KEY: ${EXA_API_KEY:-}
REDIS_HOST: redis:6379
REDIS_KEY_PREFIX: ${REDIS_KEY_PREFIX:-huddle:}
REDIS_MAX_CONNECTIONS: ${REDIS_MAX_CONNECTIONS:-10}
REDIS_SOCKET_CONNECT_TIMEOUT: ${REDIS_SOCKET_CONNECT_TIMEOUT:-10.0}
REDIS_SOCKET_TIMEOUT: ${REDIS_SOCKET_TIMEOUT:-30.0}
REDIS_SOCKET_KEEPALIVE: ${REDIS_SOCKET_KEEPALIVE:-true}
REDIS_SSL_ENABLED: "false"
REDIS_IS_CLUSTER: "false"
OAUTH_CLIENT_ID: ${OAUTH_CLIENT_ID:-}
OAUTH_CLIENT_SECRET: ${OAUTH_CLIENT_SECRET:-}
EBAY_ENVIRONMENT: ${EBAY_ENVIRONMENT:-sandbox}
EBAY_CLIENT_ID: ${EBAY_CLIENT_ID:-}
EBAY_CLIENT_SECRET: ${EBAY_CLIENT_SECRET:-}
EBAY_REDIRECT_URI: ${EBAY_REDIRECT_URI:-}
EBAY_ALLOW_PRODUCTION: ${EBAY_ALLOW_PRODUCTION:-false}
EBAY_SANDBOX_API_URL: ${EBAY_SANDBOX_API_URL:-https://api.sandbox.ebay.com}
EBAY_PRODUCTION_API_URL: ${EBAY_PRODUCTION_API_URL:-https://api.ebay.com}
EBAY_SANDBOX_INVENTORY_API_URL: ${EBAY_SANDBOX_INVENTORY_API_URL:-https://api.sandbox.ebay.com/sell/inventory/v1}
EBAY_PRODUCTION_INVENTORY_API_URL: ${EBAY_PRODUCTION_INVENTORY_API_URL:-https://api.ebay.com/sell/inventory/v1}
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
networks:
- backend
- frontend
healthcheck:
test:
[
"CMD",
"python",
"-c",
"import urllib.request; urllib.request.urlopen('http://127.0.0.1:9000/api/health', timeout=3)",
]
interval: 10s
timeout: 5s
retries: 12
start_period: 30s
restart: unless-stopped
web:
image: docker.io/${DOCKER_HUB_NAMESPACE:-local}/huddle-web:${HUDDLE_IMAGE_TAG:-dev}
networks:
- frontend
healthcheck:
test: ["CMD", "wget", "--quiet", "--output-document=/dev/null", "http://127.0.0.1/healthz"]
interval: 10s
timeout: 5s
retries: 12
restart: unless-stopped
caddy:
image: caddy:2-alpine
environment:
HUDDLE_HOSTNAME: ${HUDDLE_HOSTNAME:-localhost}
configs:
- source: caddyfile
target: /etc/caddy/Caddyfile
ports:
- name: http
target: 80
published: ${HUDDLE_HTTP_PORT:-80}
protocol: tcp
- name: https
target: 443
published: ${HUDDLE_HTTPS_PORT:-443}
protocol: tcp
- name: http3
target: 443
published: ${HUDDLE_HTTPS_PORT:-443}
protocol: udp
volumes:
- caddy_data:/data
- caddy_config:/config
depends_on:
api:
condition: service_healthy
web:
condition: service_healthy
networks:
- frontend
healthcheck:
test: ["CMD", "wget", "--quiet", "--output-document=/dev/null", "http://127.0.0.1:2019/config/"]
interval: 10s
timeout: 5s
retries: 12
restart: unless-stopped
configs:
caddyfile:
file: ./Caddyfile
networks:
frontend:
backend:
internal: true
volumes:
postgres_data:
redis_data:
caddy_data:
caddy_config:
services:
api:
image: docker.io/harlenalvarez/huddle-api:2026.08.28-1@sha256:9a7308254281c92bd16d8e45cbed8d8023eaca651a42370f206e3f0a841b1670
caddy:
image: docker.io/library/caddy:2-alpine@sha256:5f5c8640aae01df9654968d946d8f1a56c497f1dd5c5cda4cf95ab7c14d58648
postgres:
image: docker.io/harlenalvarez/huddle-postgres:2026.08.28-1@sha256:d683235cd722e364c1332dcda735bfa33fe40fd49a57caa638c3f780bc6519ee
redis:
image: docker.io/library/redis:8-alpine@sha256:becdda6c7f4b3fb42e42fd7f120bbf5c54c4caaaf16f26da24e4563d2c1f0576
web:
image: docker.io/harlenalvarez/huddle-web:2026.08.28-1@sha256:97e4a63274d7ec401abb7ea324284a8c1b467a775a5385a03c89e1a63dd1552a
docker compose -f oci://harlenalvarez/huddle-stack:latest upUse the above command to pull and run the Compose file. Learn more.
Redis is the world’s fastest data platform for caching, vector search, and NoSQL databases.
Pulls
1B+
Stars
13617
Last Updated
about 21 hours
Caddy 2 is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Go.
Pulls
500M+
Stars
986
Last Updated
4 days