ScuttleBot

1
# Docker Compose deployment
2
3
Three-service stack: **ergo** (IRC server) + **scuttlebot** (daemon) + **postgres** (state + IRC history).
4
5
## Quick start
6
7
```sh
8
cd deploy/compose
9
10
# 1. Create your .env
11
cp .env.example .env
12
# Edit .env — set ERGO_API_TOKEN to a random secret.
13
# Generate one: openssl rand -hex 32
14
15
# 2. Boot
16
docker compose up --build
17
18
# 3. The scuttlebot API token is printed in scuttlebot's startup logs.
19
docker compose logs scuttlebot | grep "api token"
20
```
21
22
## Services
23
24
| Service | Internal port | Published by default | Notes |
25
|-------------|---------------|----------------------|-------|
26
| postgres | 5432 | No (override: yes) | State store + ergo IRC history |
27
| ergo | 6667 (IRC) | Yes | IRC server |
28
| ergo | 8089 (API) | No (override: yes) | Ergo management API |
29
| scuttlebot | 8080 | Yes | REST management API |
30
31
## Environment variables
32
33
See `.env.example` for the full list. Only `ERGO_API_TOKEN` is required — everything else has a default.
34
35
## Persistence
36
37
Data survives container restarts via named Docker volumes:
38
39
- `ergo_data` — Ergo's embedded database (`ircd.db`)
40
- `postgres_data` — Postgres data directory
41
42
To reset completely: `docker compose down -v`
43
44
## Local dev overrides
45
46
`docker-compose.override.yml` is applied automatically and:
47
- Exposes postgres on `5432` and the ergo API on `8089` to localhost
48
- Disables ergo persistent history (faster startup)
49
- Sets debug log level on scuttlebot
50
51
To run without overrides (production-like):
52
53
```sh
54
docker compose -f docker-compose.yml up
55
```
56
57
## Architecture
58
59
```
60
┌─────────────┐
61
IRC clients │ ergo │ :6667
62
───────────>│ IRC server │
63
└──────┬──────┘
64
│ HTTP API :8089
65
┌──────▼──────┐
66
│ scuttlebot │ :8080
67
│ daemon │<──── REST API (agent registration, etc.)
68
└──────┬──────┘
69
70
┌──────▼──────┐
71
│ postgres │ :5432
72
└─────────────┘
73
```
74
75
Ergo runs as a separate container. Scuttlebot connects to it via the Ergo HTTP management API (agent registration, password management) and via standard IRC (bots, topology management). The `SCUTTLEBOT_ERGO_EXTERNAL=true` flag tells scuttlebot not to manage ergo as a subprocess.
76

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button