Lucia is an open-source AI assistant for Home Assistant built on Microsoft Agent Framework.
1.3K
Last Updated: 2025-10-24
Status: Production Ready for Single-Node Deployments
Version: 1.0.0
This guide covers deploying Lucia Agent Host using Docker Compose for single-node deployments. Ideal for:
For high-availability production, see Kubernetes Deployment Guide
# Clone the repository
git clone https://github.com/seiggy/lucia-dotnet.git
cd lucia-dotnet
# Copy environment template
cp .env.example .env
# Edit configuration
nano .env
# Set required values:
# - HOMEASSISTANT_URL: your Home Assistant URL
# - HOMEASSISTANT_ACCESS_TOKEN: your HA access token
# - ConnectionStrings__chat-model: your LLM provider configuration
Edit .env with your values:
# Home Assistant
HOMEASSISTANT_URL=http://192.168.1.100:8123
HOMEASSISTANT_ACCESS_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
# OpenAI (recommended for MVP)
ConnectionStrings__chat-model=Endpoint=https://api.openai.com/v1;AccessKey=sk-proj-YOUR_KEY;Model=gpt-4o;Provider=openai
# Start all services in background
docker-compose up -d
# View logs
docker-compose logs -f lucia
# Wait for startup (typically 10-30 seconds)
sleep 30
# Check health
curl http://localhost:5000/health
# List running containers
docker-compose ps
# Check service health
docker-compose exec lucia curl http://localhost:8080/health
docker-compose exec redis redis-cli PING
# View Redis data
docker-compose exec redis redis-cli --raw KEYS "lucia:*"
# List available agents
curl http://localhost:5000/api/agents
# Send test message to Lucia
curl -X POST http://localhost:5000/api/chat \
-H "Content-Type: application/json" \
-d '{"message": "Turn on the living room lights", "sessionId": "test-123"}'
See Configuration Reference for all variables.
# Home Assistant
HOMEASSISTANT_URL=http://homeassistant:8123
HOMEASSISTANT_ACCESS_TOKEN=<your-token>
# LLM Provider (choose one)
ConnectionStrings__chat-model=Endpoint=...;AccessKey=...;Model=...;Provider=openai
# Redis
REDIS_CONNECTION_STRING=redis://redis:6379
ConnectionStrings__chat-model=Endpoint=https://api.openai.com/v1;AccessKey=sk-proj-YOUR_KEY;Model=gpt-4o;Provider=openai
Setup:
.envConnectionStrings__chat-model=Endpoint=http://ollama:11434;AccessKey=ollama;Model=llama3.2;Provider=ollama
Setup:
ollama pull llama3.2ollama serveConnectionStrings__chat-model=Endpoint=https://YOUR_RESOURCE.openai.azure.com/;AccessKey=YOUR_KEY;Model=gpt-4-deployment;Provider=azureopenai
Setup:
# Generate self-signed certificate
openssl req -x509 -newkey rsa:4096 -keyout ./certs/key.pem -out ./certs/cert.pem -days 365 -nodes
# Update .env
ENABLE_HTTPS=true
CERTIFICATE_PATH=/etc/lucia/certs/cert.pem
CERTIFICATE_KEY_PATH=/etc/lucia/certs/key.pem
# Restart services
docker-compose down
docker-compose up -d
Edit docker-compose.yml to increase resources:
services:
lucia:
deploy:
resources:
limits:
cpus: '4'
memory: 2G
reservations:
cpus: '2'
memory: 1G
Change Redis volume driver from tmpfs to local:
volumes:
redis-data:
driver: local
driver_opts:
type: none
o: bind
device: /data/lucia/redis
Perfect for testing features before production deployment.
# Setup
git clone https://github.com/seiggy/lucia-dotnet.git
cd lucia-dotnet
cp .env.example .env
# Edit .env with test values
# Start
docker-compose up
# Test
curl http://localhost:5000/health
# Cleanup (removes all data)
docker-compose down -v
Resources: 1GB RAM minimum
Storage: 5GB minimum
Time to running: 5-10 minutes
Single Home Assistant instance with persistent data.
# Setup with persistent volumes
# Edit docker-compose.yml to use local driver for redis-data volume
docker-compose up -d
# Verify startup
docker-compose logs -f lucia
# Monitor
docker stats
# Backup Redis data
docker run --rm -v lucia-redis-data:/data -v /backup:/backup \
redis:7-alpine cp -r /data/* /backup/
Resources: 2GB RAM, 4GB disk for Redis snapshots
Time to running: 10-15 minutes
Data persistence: Yes (survives container restart)
Test production configuration before deploying to production.
# Create separate .env.staging
cp .env.example .env.staging
# Configure for staging environment
# Run with staging config
docker-compose -f docker-compose.yml \
-f docker-compose.staging.yml up -d
# Test full automation flows
curl -X POST http://localhost:5000/api/automation \
-H "Content-Type: application/json" \
-d @tests/automation-scenario-1.json
# Validate logs
docker-compose logs lucia | grep ERROR
# All services
docker-compose logs
# Lucia only
docker-compose logs lucia
# Follow real-time (tail -f equivalent)
docker-compose logs -f lucia
# Last 100 lines
docker-compose logs --tail=100 lucia
# Since specific time
docker-compose logs --since 2024-10-24T10:00:00 lucia
# Check service status
docker-compose ps
# Lucia health endpoint
curl http://localhost:5000/health
# Redis connectivity
docker-compose exec redis redis-cli PING
# Full diagnostics
./infra/scripts/health-check.sh
# Restart Lucia (keeps Redis running)
docker-compose restart lucia
# Restart everything
docker-compose restart
# Full cycle (down/up)
docker-compose down
docker-compose up -d
# Export Redis data
docker-compose exec redis redis-cli --rdb /data/dump-backup.rdb
# Copy to host
docker cp lucia-redis:/data/dump-backup.rdb ./backups/
# Or backup entire volume
docker run --rm -v lucia-redis-data:/data -v /backups:/backups \
redis:7-alpine tar czf /backups/redis-$(date +%Y%m%d).tar.gz -C / data
# Stop services
docker-compose down
# Clear existing data
docker volume rm lucia-redis-data
# Restore from backup
docker run --rm -v lucia-redis-data:/data -v /backups:/backups \
redis:7-alpine tar xzf /backups/redis-20241024.tar.gz -C /
# Restart
docker-compose up -d
# Pull latest code
git pull origin main
# Rebuild image
docker-compose build --no-cache lucia
# Restart with new image
docker-compose down
docker-compose up -d
# Check logs
docker-compose logs lucia
# Verify configuration
./infra/scripts/validate-deployment.sh
# Common issues:
# - Missing .env file: cp .env.example .env
# - Invalid configuration values in .env
# - Port already in use: docker-compose up -p 5010:8080
# Check memory
docker stats
# Reduce LLM max tokens
# Edit .env: LLM_MAX_TOKENS=500
# Limit container memory
# Edit docker-compose.yml resources section
# Restart
docker-compose restart lucia
# Check Redis logs
docker-compose logs redis
# Verify Redis data
docker-compose exec redis redis-cli DBSIZE
# Clear Redis (destructive)
docker-compose exec redis redis-cli FLUSHALL
# Restart Redis
docker-compose restart redis
# Verify HA URL
curl http://192.168.1.100:8123
# Test token
curl -H "Authorization: Bearer YOUR_TOKEN" \
http://192.168.1.100:8123/api/
# Update .env with correct URL and token
# Restart: docker-compose restart lucia
# Test OpenAI connection
curl -H "Authorization: Bearer sk-proj-YOUR_KEY" \
https://api.openai.com/v1/models
# Check token validity and quotas
# Visit: https://platform.openai.com/account/billing/overview
# For Ollama, verify it's running
curl http://localhost:11434/api/tags
# Reduce LLM max tokens in .env
LLM_MAX_TOKENS=500
# Reduce agent concurrency
CHAT_MODEL_MAX_CONCURRENT_REQUESTS=2
# Reduce retry count
AGENT_MAX_RETRIES=2
# Check LLM provider response times
# Edit .env: LLM_TEMPERATURE=0.3 # More deterministic
# For Ollama, use smaller model
Model=phi3:mini # Smaller and faster than llama3.2
# Increase allocated memory
# docker-compose.yml: memory: 2G
# Monitor Redis stats
docker-compose exec redis redis-cli INFO stats
# Clear old data
docker-compose exec redis redis-cli EVAL "return redis.call('eval', \"return redis.call('del', unpack(redis.call('keys', 'lucia:*:expired'))))\", 0)"
# Resize maxmemory in redis.conf if needed
# Verify .env is ignored
git status # Should NOT show .env
# If accidentally committed, remove:
git rm --cached .env
echo ".env" >> .gitignore
git commit -m "Remove .env from version control"
# Current: 127.0.0.1:5000 (localhost only, safe)
# DO NOT change to 0.0.0.0:5000 without authentication
# For remote access, use:
# - nginx reverse proxy with authentication
# - VPN to Docker host
# - Cloudflare Tunnel
# Every 90 days:
# 1. Generate new Home Assistant token
# 2. Generate new OpenAI API key
# 3. Update .env
# 4. Restart: docker-compose restart lucia
See Kubernetes Deployment Guide for HA setup.
Content type
Image
Digest
sha256:a36d286d8…
Size
117.4 MB
Last updated
7 months ago
docker pull seiggy/lucia