- README, license section and architecture no longer point to the dashboard repositories - schema.sql is the schema for contributors; database changes only need schema.sql and a note in the PR - self-hosting: settings without a dashboard (SQL for security thresholds, beta settings, opted-in servers) - beta features, deployment and troubleshooting reworded for people who don't have the dashboard Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2.2 KiB
Deployment
Docker
The Dockerfile is a two-stage build: it compiles a static binary with Go, then copies it into a small Alpine image (with CA certificates and timezone data, which /timezone and scheduling need).
docker build -t velox-bot .
docker run --env-file .env velox-bot
The container reads its configuration from environment variables, exactly like a local run. See Getting started.
Docker Compose
docker-compose.yml defines two services:
db: PostgreSQL 16 with a named volume (velox_pgdata) and a health check.bot: the bot, built from this directory, started after the database is healthy. It takes.envthroughenv_file, and defaultsDB_HOSTto thedbservice andLAVALINK_HOSTtows://lavalink:2333if you have not set them.
docker compose up -d # database and bot
docker compose logs -f bot
Compose does not include Lavalink. Run it separately (or add a service) if you want music.
Change the default database password (velox_pwd) before exposing PostgreSQL to anything other than your own machine, and remove the published 5432 port if only the bot needs it.
Database changes
The bot does not run migrations. When a release adds tables, load schema.sql again before restarting the bot (it only creates what is missing, and is safe to repeat). A release that changes an existing table says so in its notes.
Updating
git pull
docker compose build bot
docker compose up -d bot
Slash commands are re-registered on every start, so new and changed commands appear after a restart. Commands you removed from the code are not deleted from Discord automatically, except for the beta server (see Beta features).
Backups
All state is in PostgreSQL. Back it up with pg_dump:
pg_dump "postgres://velox:velox_pwd@localhost:5432/velox" > velox-backup.sql
Raid mode, quarantines, lockdowns and ticket state live in the database, so the bot picks them up again after a restart.
Shutting down
Send SIGINT or SIGTERM (Docker does on docker stop). Slash commands stay registered in Discord while the bot is down, and are registered again (updated in place) on the next start.