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