Installation#
Public installation artifacts remain gated until stable v2. This page documents the release contract being validated; it is not a claim that the image or repository is available today.
Requirements#
- A Linux AMD64 or ARM64 host with Docker Engine and Docker Compose.
- A domain name with HTTPS and a reverse proxy such as Nginx.
- A persistent volume with enough room for member quotas and backups.
- A Discord application you control, including bot and OAuth credentials.
Stable-v2 install shape#
When public artifacts activate, the supported workflow will be:
mkdir vtune && cd vtune
# Download compose.release.yaml and .env.example from the stable-v2 release.
install -m 600 .env.example .env
# Add Discord credentials, allowed guilds, and PUBLIC_BASE_URL.
docker compose -f compose.release.yaml pull
docker compose -f compose.release.yaml run --rm --no-deps vtune \
node dist/scripts/doctor.js
docker compose -f compose.release.yaml run --rm --no-deps vtune \
node dist/scripts/invite-url.js
# Open the printed URL, add the bot only to an allowed server, then register commands.
docker compose -f compose.release.yaml run --rm --no-deps vtune \
node dist/scripts/register-commands.js allowed
docker compose -f compose.release.yaml up -d
docker compose -f compose.release.yaml logs --tail=100 vtune
The default doctor is a pre-start gate: it validates the complete application
configuration, runtime tools, persistent storage, and existing VTune data
without echoing configuration values or credentials. The --image-smoke mode
is reserved for secret-free release-image CI and does not establish that an
instance is configured or ready.
VTUNE_IMAGE_TAG is an exact container tag without the Git tag's leading v.
Stable v2.0.0 publishes 2.0.0, 2.0, 2, and latest; a prerelease such
as v2.0.0-alpha.1 publishes only 2.0.0-alpha.1. Keep production pinned to
the exact stable tag rather than a floating major, minor, or latest tag.
WEB_PORT is both the dashboard listener inside the container and the target
of its health check. VTUNE_BIND_PORT selects the host-loopback port exposed to
the reverse proxy. The defaults map 127.0.0.1:3000 to container port 3000.
Compose scopes the vtune-data volume to its project. Keep the installation
directory or explicit Compose project name stable across upgrades, and use a
different project name for every staging, test, or second production instance
on the same host. Before moving an installation, identify and back up its exact
<project>_vtune-data volume rather than assuming another project can reuse it.
Network boundary#
Bind the container to host loopback and publish only the reverse proxy. The data volume, SQLite files, media tree, and health endpoints must remain private. Uploaded media has no HTTP download route.
Before the first start#
- Complete Discord application setup.
- Copy
.env.exampleto.envand review Configuration. - Run the image-contained doctor and resolve every blocking check.
- Generate the invite URL from the published container and add the bot only to an allowed server.
- Register commands in the allowed servers from the published container.
- Create a persistent data volume and an operator-controlled backup target.
- Configure TLS and reverse proxying.
- Start the pinned service and follow First run.