Installation
Run Vectana on your own server with Docker Compose and create the first administrator.
Vectana runs from the image published on Docker Hub, heki0824/vectana (linux/amd64 and linux/arm64), with Docker Compose.
Requirements
- A Linux server with Docker and Docker Compose v2 (1 GB of memory or more recommended)
- Outbound HTTPS from the server (Vectana queries
api.osv.devandendoflife.date) - A domain and a way to serve it over HTTPS, such as a reverse proxy or Cloudflare Tunnel (see Publishing)
- An SMTP server for invitation and notification emails (optional to start; see Email)
What runs
One image runs as four containers, each with its own job.
| Service | Job |
|---|---|
db |
PostgreSQL 18. Data lives in the db-data volume |
migrate |
Brings the database schema up to date on start, then exits |
app |
The web app and API, listening on 127.0.0.1:8000 |
worker |
Checks every package on start and then periodically, and sends notifications |
Install
Get the files
Create a directory on the server and download compose.prod.yaml and the settings template.
mkdir -p /srv/vectana && cd /srv/vectana
curl -fsSLo compose.yaml https://raw.githubusercontent.com/techolve/vectana/main/compose.prod.yaml
curl -fsSLo .env https://raw.githubusercontent.com/techolve/vectana/main/.env.example
chmod 600 .envEdit .env
At minimum, set these values.
VECTANA_VERSION=1.0.0
POSTGRES_PASSWORD=(a random string)
SECRET_KEY=(output of openssl rand -hex 32)
WEB_URL=https://vectana.example.com
GROUP_NAME=Example GroupGenerate random values with:
openssl rand -hex 24 # for POSTGRES_PASSWORD
openssl rand -hex 32 # for SECRET_KEYapp refuses to start without SECRET_KEY. See Email for mail and Configuration for every setting.
Start it
docker compose up -d
docker compose psYou’re good when db is healthy, migrate has exited with code 0, and app and worker are running.
curl http://127.0.0.1:8000/api/health
# {"status":"ok","version":"1.0.0"}Create the first administrator
Create a group admin. You’ll be asked for a password.
docker compose exec app python -m app.cli create-admin \
--email you@example.com --name "Admin" --company "Example Inc."With --company, a parent company with that name is created too, and the admin belongs to it.
Publish it and log in
Point your WEB_URL domain at 127.0.0.1:8000 as described in Publishing, open it in a browser and log in. Then create companies and departments under Organization and invite your users.
Logs
docker compose logs -f app # web app and API
docker compose logs -f worker # scheduled checks and notifications ("Scanned ... package(s)")
To run a check once, right now:
docker compose run --rm worker python -m app.worker --once