Deployment
Visage can run standalone, but Docker is the recommended approach. There are no pre-built Docker images: Visage ships with a small build script that produces a Docker image locally.
Everything starts by cloning the Visage repository.
# Clone the repository
git clone https://github.com/butterhosting/visage.git
cd visage
# Specify a version or commit hash (optional)
git checkout 1.0.0Docker image
To create a Docker image, execute the following command in the project's root folder.
# This script only requires the availability of `docker`
./visage image createDocker examples
After successfully building a Visage image via ./visage image create, you can verify it starts correctly via this command:
docker run --rm -p 3000:3000 visage:latestA more realistic setup mounts a persistent volume for /opt/visage/data and /opt/visage/maxmind, so the SQLite database and the MaxMind GeoIP database survive container restarts:
services:
visage:
image: visage:latest
ports:
- "3000:3000"
volumes:
- ./.htpasswd:/opt/visage/.htpasswd:ro
- visage-data:/opt/visage/data
- visage-maxmind:/opt/visage/maxmind
environment:
VISAGE_TIMEZONE: "Europe/Amsterdam"
VISAGE_TRUST_PROXY: "true"
MAXMIND_ACCOUNT_ID: "<ACCOUNT_ID>"
MAXMIND_LICENSE_KEY: "XXXXXXXXXXXX"
volumes:
visage-data:
visage-maxmind:Standalone
To run Visage without Docker, please make sure Bun is installed on your system.
After cloning the respository, Visage can be started as follows.
# Install dependencies
bun install --production
# Build the tracker script
bun tracker:build
# Start the application on port 3000
bun start:prodEnvironment vars
When starting Visage, the following environment variables can be specified.
| Variable | Options | Description |
|---|---|---|
VISAGE_LOGGING | debug, info, warn, error (default info) | Specifies Visage's logging level |
VISAGE_TIMEZONE | IANA time zone (default UTC) | Specifies the timezone used for interface localization, log timestamps and stats bucketing |
VISAGE_TRUST_PROXY | true, false (default false) | Specifies whether the X-Forwarded-For request headers can be trusted to contain visitors' IP addresses |
VISAGE_SUPPORT_TOKEN | optional | Specifies a Visage support token; click here for more information |
MAXMIND_ACCOUNT_ID | optional | MaxMind account ID |
MAXMIND_LICENSE_KEY | optional | MaxMind license key |