Deployment
Deploy the EventCatalog Slack Bot to your infrastructure. The bot uses Socket Mode, so it maintains an outbound connection to Slack without requiring a public URL, load balancer, or SSL certificates.
Docker
The simplest way to deploy is using Docker. The bot includes a Dockerfile and docker-compose configuration.
Build the image
docker build -t eventcatalog-slack-bot .
Run with docker-compose
docker compose up -d
View logs
docker compose logs -f
The docker-compose.yml file mounts your config and reads environment variables from .env:
services:
eventcatalog-slack-bot:
build: .
container_name: eventcatalog-slack-bot
restart: unless-stopped
env_file:
- .env
volumes:
- ./eventcatalog-bot.config.ts:/app/eventcatalog-bot.config.ts:ro
environment:
- NODE_ENV=production
Docker networking
When running the bot in Docker, the container needs network access to your EventCatalog server. Configuration depends on where EventCatalog runs.
EventCatalog on localhost
Docker containers cannot use localhost to reach the host machine. Use one of these approaches:
Option 1: Use host.docker.internal (recommended)
Update your config to use the special Docker hostname:
eventCatalog: {
url: 'http://host.docker.internal:3000',
}
Your EventCatalog server must bind to all interfaces (0.0.0.0), not just localhost. Check your EventCatalog startup logs. If it shows localhost:3000, you may need to start it with a --host 0.0.0.0 flag.
Option 2: Run the bot outside Docker
For local development, skip Docker and run the bot directly:
- npm
- pnpm
npm install
npm run dev
pnpm install
pnpm dev
This avoids networking complexity during development.
EventCatalog in Docker
Put both containers on the same Docker network and use the container name as hostname:
services:
eventcatalog:
# your EventCatalog config
networks:
- app-network
eventcatalog-slack-bot:
build: .
env_file:
- .env
volumes:
- ./eventcatalog-bot.config.ts:/app/eventcatalog-bot.config.ts:ro
networks:
- app-network
networks:
app-network:
Configure the bot to use the container name:
eventCatalog: {
url: 'http://eventcatalog:3000',
}
EventCatalog at public URL
Use the public URL directly - no special configuration needed:
eventCatalog: {
url: 'https://your-catalog.example.com',
}
Other deployment options
Railway
Railway automatically detects the Dockerfile and deploys the bot.
- Create a new project and connect your repository
- Add environment variables in the Railway dashboard:
EVENTCATALOG_SCALE_LICENSE_KEYSLACK_BOT_TOKENSLACK_APP_TOKENSLACK_SIGNING_SECRETANTHROPIC_API_KEY(or your chosen provider)
- Add your
eventcatalog-bot.config.tsto the repository - Deploy - Railway detects the Dockerfile automatically
Fly.io
Deploy to Fly.io using their CLI.
Initialize:
fly launch --no-deploy
Set secrets:
fly secrets set EVENTCATALOG_SCALE_LICENSE_KEY=your-key
fly secrets set SLACK_BOT_TOKEN=xoxb-...
fly secrets set SLACK_APP_TOKEN=xapp-...
fly secrets set SLACK_SIGNING_SECRET=...
fly secrets set ANTHROPIC_API_KEY=sk-ant-...
Deploy:
fly deploy
Render
Deploy as a Background Worker on Render.
- Create a new Background Worker (not a Web Service)
- Connect your repository
- Set the build and start commands:
- npm
- pnpm
- Build command:
npm install && npm run build - Start command:
npm start
- Build command:
pnpm install && pnpm build - Start command:
pnpm start
- Add environment variables in the Render dashboard
- Deploy
AWS, GCP, or Azure
Deploy as a container or long-running process. The bot requires:
- Outbound HTTPS/WSS connections to Slack
- No inbound connections (Socket Mode handles communication)
- No load balancers or public endpoints needed
Suitable services include:
- AWS: ECS, EKS, EC2
- GCP: Cloud Run (always running), GKE, Compute Engine
- Azure: Container Instances, AKS, Virtual Machines
Ensure the process stays running and can make outbound connections to:
slack.com(Socket Mode connection)- Your EventCatalog instance
- Your AI provider API