First run
After installing bunny, follow these steps once per server or container.
1. Create a Discord bot (recommended)
Bunny integrates with Discord for threads, slash commands, and approvals.
- Create an application in the Discord Developer Portal.
- Add a bot and copy the token.
- Invite the bot to your server.
Full walkthrough: Discord application and server setup.
You can skip Discord during bunny configure and run bunny discord setup later.
2. Configure the agent
See Configure the server for the full guide (config files, network, systemd).
bunny configure
This creates the owner account, sets up MFA (recommended), and optionally runs Discord setup.
Inside Docker, run via exec:
docker compose exec -it bunny bunny configure
3. Start the agent
bunny run
Inside Docker the agent must listen on all interfaces:
bunny run --host 0.0.0.0 --port 7681
Or set BUNNY_SERVER__BIND_HOST=0.0.0.0 in your compose file.
4. Connect from your laptop
Remote server or container (recommended)
When bunny runs on a VPS or managed container, open it with the server's IP or URL — not 127.0.0.1 on your laptop:
http://203.0.113.5:7681 # public IP
http://bunny.internal:7681 # hostname on your LAN/VPN
https://your-host.example.com # reverse proxy (recommended in production)
Requirements:
- Bunny listens on
0.0.0.0(step 3 — required in Docker). - Port
7681is published and reachable (7681:7681in compose, firewall open if needed). server.public_urlin~/.config/bunny/config.yamlmatches that same base URL.
server:
public_url: "https://your-host.example.com" # or http://203.0.113.5:7681
bunny configure asks for this URL (or pass --public-url). You can also set BUNNY_SERVER__PUBLIC_URL.
This matters for Discord watch links: /bunny stream_browser_start posts URLs like {public_url}/watch/<token>. If public_url is http://127.0.0.1:7681, only someone with an SSH tunnel on that machine can open them — teammates clicking the link in Discord will not reach the stream.
Use MFA and prefer HTTPS in production. See Install on Linux.
Local trial (Docker on your laptop)
When the container runs on the same machine as your browser:
http://127.0.0.1:7681
public_url can stay http://127.0.0.1:7681 for local Discord dev.
SSH tunnel (solo admin access only)
Use when bunny (or Docker's port publish) listens only on localhost of the remote host and you do not want port 7681 on the network. Fine for your own Web UI access; not for shared Discord streams or OAuth.
ssh -L 7681:127.0.0.1:7681 user@your-server
Then open http://127.0.0.1:7681 on your laptop while the tunnel is active.
Laptop Remote server
┌─────────┐ SSH tunnel ┌──────────────────┐
│ Browser │ ─────────────► │ bunny :7681 │
│ :7681 │ -L 7681:... │ (127.0.0.1) │
└─────────┘ └──────────────────┘
5. Verify
bunny doctor
Checks Chromium, Xvfb, Node, sidecars, web UI, tmux, and git.
6. Secrets vault (optional)
For API keys and credentials injected into terminals:
bunny secrets init
bunny secrets set OPENAI_API_KEY --scope system
export BUNNY_SECRETS_PASSPHRASE='your-vault-passphrase'
See Security for scopes and CLI reference.
Troubleshooting
| Problem | Fix |
|---|---|
| UI not loading | Check public_url, port mapping 7681, firewall |
| Discord watch link broken | Set server.public_url to a URL reachable from browsers (not 127.0.0.1 on a remote host) |
| Browser tab missing | Run full install (not --minimal); check bunny doctor |
| Discord bridge fails | Verify bot token; check outbound DNS from container |