Decher IT-Services GmbH

BVMS Easy Up

Installation packages and container image for the protected BVMS event server with user accounts, event roles and passkey login.

Version __VERSION__ · Docker

Installation and Startup

Download and fully extract the Linux package. Start it with ./bvms.

Node.js and pnpm are not required. Detailed platform-specific instructions are included as README.txt in every package.

A system administrator must be registered on first startup. By default, setup is accessible only directly on the server through localhost. Afterward, login is required for all use.

Docker

The Linux x64 image for version __VERSION__ is available in the GitLab Container Registry. Since the project is private, downloading requires a GitLab account or a deploy token with read_registry permission.

docker login __CONTAINER_REGISTRY__
docker pull __CONTAINER_IMAGE__:__VERSION__
mkdir -p data logs
docker run --name bvms --restart unless-stopped --user "$(id -u):$(id -g)" -p 3000:3000 -v "$PWD/data:/app/data" -v "$PWD/logs:/app/logs" __CONTAINER_IMAGE__:__VERSION__

BVMS is then accessible at http://localhost:3000 and through the Docker host’s IP address on the trusted network.

Docker Compose · Version __VERSION__

Save the following file as compose.yml. It uses release version __VERSION__ by default.

# Authenticate once with: docker login __CONTAINER_REGISTRY__
name: bvms

services:
  bvms:
    image: __CONTAINER_IMAGE__:${BVMS_IMAGE_TAG:-__VERSION__}
    platform: linux/amd64
    user: "${BVMS_UID:-1000}:${BVMS_GID:-1000}"
    restart: unless-stopped
    ports:
      - "${BVMS_PORT:-3000}:3000"
    environment:
      NODE_ENV: production
      PORT: "3000"
      TZ: "${TZ:-Europe/Zurich}"
      BVMS_LOG_LEVELS: "${BVMS_LOG_LEVELS:-verbose,debug,log,warn,error,fatal}"
      BVMS_ALLOW_REMOTE_SETUP: "${BVMS_ALLOW_REMOTE_SETUP:-false}"
      BVMS_PUBLIC_ORIGIN: "${BVMS_PUBLIC_ORIGIN:-}"
      BVMS_PASSKEY_RP_NAME: "${BVMS_PASSKEY_RP_NAME:-BVMS Easy Up}"
      BVMS_TRUSTED_PROXIES: "${BVMS_TRUSTED_PROXIES:-}"
    volumes:
      - ./data:/app/data
      - ./logs:/app/logs
    stop_grace_period: 30s

The container runs without root privileges. On Linux, its UID and GID therefore need write access to the mounted directories. Your values are shown by id -u and id -g respectively; enter them in the .env file as BVMS_UID and BVMS_GID.

mkdir -p data logs
sudo chown -R "$(id -u):$(id -g)" data logs
chmod -R u+rwX data logs

Event data, exports and logs therefore remain visible directly alongside the Compose file and can be backed up as regular files. user: root and global write permissions through chmod 777 are neither required nor recommended.

Optional .env File

On Linux, use this file to enter the local user’s UID and GID. Save bvms.env.example as .env and copy the output of id -u and id -g. The image version, port and time zone can also be adjusted there without changing the Compose file.

BVMS_IMAGE_TAG=__VERSION__
BVMS_PORT=3000
BVMS_UID=1000
BVMS_GID=1000
TZ=Europe/Zurich
BVMS_LOG_LEVELS=verbose,debug,log,warn,error,fatal
BVMS_ALLOW_REMOTE_SETUP=false
# For an HTTPS reverse proxy and passkeys:
# BVMS_PUBLIC_ORIGIN=https://bvms.live-scoring.ch
# BVMS_PASSKEY_RP_NAME=BVMS Easy Up
# BVMS_TRUSTED_PROXIES=172.20.0.0/16

For initial setup through Docker or a reverse proxy, temporarily set BVMS_ALLOW_REMOTE_SETUP=true. Immediately after creating the first administrator, set it back to false and recreate the container.

Behind an HTTPS reverse proxy, also set BVMS_PUBLIC_ORIGIN=https://bvms.live-scoring.ch and specify the proxy’s Docker subnet, for example as BVMS_TRUSTED_PROXIES=172.20.0.0/16. This makes BVMS use secure cookies, enables passkeys for this domain and correctly interprets the client IP forwarded by the trusted proxy.

Logged-in users register Face ID, a fingerprint, Windows Hello or a device PIN under Security in their profile. Multiple devices are supported; lost passkeys can be removed there or fully revoked by a system administrator.

All log levels are shown by default. For quieter operation, the selection can later be restricted, for example to BVMS_LOG_LEVELS=log,warn,error,fatal. After a change, recreate the container with docker compose up -d --force-recreate.

mkdir -p data logs
docker compose pull
docker compose up -d

Testing on the Network

At startup, the launcher displays the local URL and all detected LAN addresses. On a second computer on the same network, open one of the displayed addresses, such as http://192.168.1.25:3000.

Security: Internet access must go through a correctly configured HTTPS reverse proxy. Do not expose port 3000 directly to the internet; BVMS_PUBLIC_ORIGIN must exactly match the public address.