Skip to main content

Manual Installation Steps

Follow the steps below to install VisionAlert On-premises with Docker Compose.

danger

For the files below, make sure to replace YOUR_LICENSE_KEY with your License Key and YOUR_API_TOKEN with your API Token. Get your token and license key. Use On-premises Licenses.

List of Docker Images​

The Docker images are available for the linux/amd64 architecture. The docker-compose.yml file pulls them for you:

ImageService
platerecognizer/vision-alertweb, worker, scheduler, bridge
postgres:16db
drakkan/sftpgo:v2.6.6sftpgo

To see the list of VisionAlert tags, select the VisionAlert image from Docker Hub and then click "Tags". The compose file uses latest.

Installation​

Abbreviated installation steps are below. For detailed instructions, see Install Docker Engine on Linux and the associated FAQ.

  1. Sign up and log in.

  2. Get a VisionAlert On-premises license from the VisionAlert page or contact us.

  3. Install Docker and the Docker Compose plugin on your server. See requirements.

  4. Download the Docker Compose bundle. On the VisionAlert page, open the dropdown of your On-premises license and click Download Docker Compose. Copy vision-alert.zip to the server and unzip it:

    Unzip the Docker Compose bundle
    unzip vision-alert.zip
    cd vision-alert

    The vision-alert folder contains two files:

    • docker-compose.yml defines the services, ports, and volumes.
    • .env holds your settings. It is a hidden file, so use ls -a to see it.
  5. Edit .env and set ADMIN_PASSWORD. This is the password of the first administrator account. LICENSE_KEY, TOKEN, ADMIN_EMAIL, and SFTPGO_ADMIN_PASSWORD are already filled in. The complete file looks like this:

    .env
    LICENSE_KEY=YOUR_LICENSE_KEY
    TOKEN=YOUR_API_TOKEN
    ADMIN_EMAIL=YOUR_ADMIN_EMAIL
    ADMIN_PASSWORD=YOUR_ADMIN_PASSWORD
    SFTPGO_ADMIN_PASSWORD=YOUR_RANDOM_STRING
    SFTP_PASSWORD=
    • Replace YOUR_ADMIN_EMAIL and YOUR_ADMIN_PASSWORD with the credentials for the first administrator account. The downloaded file uses your Plate Recognizer account email.
    • Replace YOUR_RANDOM_STRING with a random string. VisionAlert uses it internally to manage the SFTP server. Set it once before the first start and never change it.
    • Leave SFTP_PASSWORD empty to let VisionAlert generate the password cameras use to upload, or set your own.
    • See Docker Configuration for all available options.
  6. Edit docker-compose.yml and add SITE_URL to the environment list of the web service. Webhook payloads use it to build the image links, so it must be the address users reach the server on:

    docker-compose.yml
      web:
    <<: &app-config
    image: platerecognizer/vision-alert
    restart: unless-stopped
    volumes:
    - user_data:/user-data
    environment:
    - LICENSE_KEY=${LICENSE_KEY:?Set LICENSE_KEY in .env}
    # ... existing entries ...
    - SITE_URL=http://YOUR_SERVER_IP:8080

    Replace YOUR_SERVER_IP with the IP address or hostname of the server. See SITE_URL for details.

  7. Start the services:

    Start VisionAlert
    docker compose up -d

    If a required value is missing from .env, Docker Compose refuses to start and names the variable, for example Set ADMIN_PASSWORD in .env.

  8. Check that the services started:

    Check service status
    docker compose ps
    docker compose logs -f web

    The first start downloads the images and runs database migrations, so the web service can take a couple of minutes to become healthy.

tip

All Docker commands shown in this documentation do not include sudo. On Linux systems, it may be necessary to prefix Docker commands with sudo. See How to run Docker without sudo on Linux? if you'd like to avoid using sudo.


Open the Dashboard​

Open http://YOUR_SERVER_IP:8080 in a browser and sign in with the ADMIN_EMAIL and ADMIN_PASSWORD from your .env file. Replace YOUR_SERVER_IP with the IP address or hostname of the server. This login is local to your on-premises instance and does not need to match your Plate Recognizer account password.

The on-premises instance serves the same endpoints as the VisionAlert API. Replace https://api.platerecognizer.com/v1/ with http://YOUR_SERVER_IP:8080/v1/ in the examples, and create an API token at http://YOUR_SERVER_IP:8080/accounts/tokens/.


Connect Your Cameras​

The on-premises edition currently supports cameras that push snapshots over SFTP to the bundled SFTP server on port 2022. Plain FTP is not available. Any camera or VMS that can upload images to an SFTP server is supported. Direct integrations with Cisco Meraki, Nx Witness, and OpenEye are only available in VisionAlert Cloud.

  1. Point your cameras or VMS at the SFTP server. Some clients need the sftp:// prefix in the host field.

    SettingValue
    HostYOUR_SERVER_IP
    Port2022
    UsernameThe ADMIN_EMAIL from your .env file.
    PasswordThe SFTP_PASSWORD from your .env file. If you left it empty, find the generated password on the API Tokens page of your on-premises dashboard.

    The on-premises Configure page of your license shows the same connection details.

  2. Upload each camera's snapshots to its own folder. The last folder name is used as the camera ID, and the camera is created automatically on the first upload. To link a camera to a tag, add the tag name as the parent folder.

    vision-alert/CAMERA_ID/snapshot.jpg
    vision-alert/TAG_NAME/CAMERA_ID/snapshot.jpg

    Files uploaded outside a camera folder are rejected. See the FTP Configuration Guide for examples of the folder structure.

Keep these limits in mind:

  • Each upload must be 3.5 MB or smaller. The SFTP server rejects larger files with denying write due to space limit.
  • Each camera is limited to one uploaded log every 15 minutes. Extra uploads within that window are ignored with the message Camera already uploaded a log recently.
  • Clients that upload to a temporary name and then rename the file, such as WinSCP with "Transfer to temporary filename" enabled, are supported.

Alerts are delivered through webhooks.