Deploy elizaOS agents to production with best practices, monitoring, and scaling. Triggers on "deploy agent", "production setup", or "deploy elizaOS"
Production deployment configurations for elizaOS agents with Docker, monitoring, and scaling.
// 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);
});
# 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:
// 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;
}
// 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());
});
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer