Deployment Helper Skill
Production deployment configurations for elizaOS agents with Docker, monitoring, and scaling.
Deployment Patterns
- Single Agent Deployment
// src/index.ts import { AgentRuntime } from '@elizaos/core'; import { PGAdapter } from '@elizaos/adapter-postgresql'; import character from './character';
const runtime = new AgentRuntime({ databaseAdapter: new PGAdapter(process.env.DATABASE_URL), character, env: process.env });
await runtime.initialize();
// Health check endpoint app.get('/health', (req, res) => { res.json({ status: 'healthy', agent: character.name, uptime: process.uptime() }); });
// Graceful shutdown process.on('SIGTERM', async () => { await runtime.stop(); process.exit(0); });
- Docker Deployment
Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./ RUN npm ci --only=production
COPY . . RUN npm run build
EXPOSE 3000
CMD ["npm", "start"]
docker-compose.yml
version: '3.8'
services: agent: build: . ports: - "3000:3000" environment: - DATABASE_URL=postgresql://user:pass@db:5432/eliza - OPENAI_API_KEY=${OPENAI_API_KEY} depends_on: - db - redis restart: unless-stopped
db: image: postgres:15 volumes: - pgdata:/var/lib/postgresql/data environment: - POSTGRES_DB=eliza - POSTGRES_USER=user - POSTGRES_PASSWORD=pass
redis: image: redis:7-alpine volumes: - redisdata:/data
volumes: pgdata: redisdata:
- Multi-Agent Deployment
// agents/coordinator.ts const agents = [ { character: agent1, id: 'agent-1' }, { character: agent2, id: 'agent-2' }, { character: agent3, id: 'agent-3' } ];
const runtimes = await Promise.all( agents.map(async ({ character, id }) => { const runtime = new AgentRuntime({ databaseAdapter: new PGAdapter(DATABASE_URL), character, env: process.env }); await runtime.initialize(); return { id, runtime }; }) );
// Load balancing function selectAgent(message: string): AgentRuntime { const hash = hashCode(message); const index = hash % runtimes.length; return runtimes[index].runtime; }
Monitoring
// Metrics collection import { collectDefaultMetrics, register, Counter, Histogram } from 'prom-client';
collectDefaultMetrics();
const messageCounter = new Counter({ name: 'agent_messages_total', help: 'Total messages processed', labelNames: ['agent', 'status'] });
const responseTime = new Histogram({ name: 'agent_response_duration_seconds', help: 'Response time', buckets: [0.1, 0.5, 1, 2, 5] });
// Metrics endpoint app.get('/metrics', async (req, res) => { res.set('Content-Type', register.contentType); res.end(await register.metrics()); });
Production Checklist
-
Environment variables configured
-
Database migrations run
-
Health check endpoint working
-
Monitoring configured
-
Logging setup
-
Error tracking (Sentry)
-
Rate limiting enabled
-
HTTPS configured
-
Secrets secured
-
Backup strategy
-
Scaling plan
-
Rollback procedure