# Deployment

Copy as Markdown[View as Markdown](/docs/development/ask-your-architecture/slack-integration/deployment.md)

***

i

This feature is available on the

<!-- -->

[Scale](/pricing.md)

<!-- -->

[ plan](/pricing.md).

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[​](#docker "Direct link to Docker")

The simplest way to deploy is using Docker. The bot includes a Dockerfile and docker-compose configuration.

### Build the image[​](#build-the-image "Direct link to Build the image")

```
docker build -t eventcatalog-slack-bot .
```

### Run with docker-compose[​](#run-with-docker-compose "Direct link to Run with docker-compose")

```
docker compose up -d
```

### View logs[​](#view-logs "Direct link to 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[​](#docker-networking "Direct link to 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[​](#eventcatalog-on-localhost "Direct link to 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',
}
```

info

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[​](#eventcatalog-in-docker "Direct link to 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[​](#eventcatalog-at-public-url "Direct link to EventCatalog at public URL")

Use the public URL directly - no special configuration needed:

```
eventCatalog: {
  url: 'https://your-catalog.example.com',
}
```

## Other deployment options[​](#other-deployment-options "Direct link to Other deployment options")

Railway

Railway automatically detects the Dockerfile and deploys the bot.

1. Create a new project and connect your repository

2. Add environment variables in the Railway dashboard:

   <!-- -->

   * `EVENTCATALOG_SCALE_LICENSE_KEY`
   * `SLACK_BOT_TOKEN`
   * `SLACK_APP_TOKEN`
   * `SLACK_SIGNING_SECRET`
   * `ANTHROPIC_API_KEY` (or your chosen provider)

3. Add your `eventcatalog-bot.config.ts` to the repository

4. 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.

1. Create a new **Background Worker** (not a Web Service)
2. Connect your repository
3. 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`

4. Add environment variables in the Render dashboard
5. 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
