Manual Installation Steps
Follow the steps below to install VisionAlert On-premises with Docker Compose.
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:
| Image | Service |
|---|---|
platerecognizer/vision-alert | web, worker, scheduler, bridge |
postgres:16 | db |
drakkan/sftpgo:v2.6.6 | sftpgo |
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.
-
Get a VisionAlert On-premises license from the VisionAlert page or contact us.
-
Install Docker and the Docker Compose plugin on your server. See requirements.
-
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.zipto the server and unzip it:Unzip the Docker Compose bundleunzip vision-alert.zip
cd vision-alertThe
vision-alertfolder contains two files:docker-compose.ymldefines the services, ports, and volumes..envholds your settings. It is a hidden file, so usels -ato see it.
-
Edit
.envand setADMIN_PASSWORD. This is the password of the first administrator account.LICENSE_KEY,TOKEN,ADMIN_EMAIL, andSFTPGO_ADMIN_PASSWORDare already filled in. The complete file looks like this:.envLICENSE_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_EMAILandYOUR_ADMIN_PASSWORDwith the credentials for the first administrator account. The downloaded file uses your Plate Recognizer account email. - Replace
YOUR_RANDOM_STRINGwith 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_PASSWORDempty to let VisionAlert generate the password cameras use to upload, or set your own. - See Docker Configuration for all available options.
- Replace
-
Edit
docker-compose.ymland addSITE_URLto theenvironmentlist of thewebservice. Webhook payloads use it to build the image links, so it must be the address users reach the server on:docker-compose.ymlweb:
<<: &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:8080Replace
YOUR_SERVER_IPwith the IP address or hostname of the server. SeeSITE_URLfor details. -
Start the services:
Start VisionAlertdocker compose up -dIf a required value is missing from
.env, Docker Compose refuses to start and names the variable, for exampleSet ADMIN_PASSWORD in .env. -
Check that the services started:
Check service statusdocker compose ps
docker compose logs -f webThe first start downloads the images and runs database migrations, so the
webservice can take a couple of minutes to become healthy.
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.
-
Point your cameras or VMS at the SFTP server. Some clients need the
sftp://prefix in the host field.Setting Value Host YOUR_SERVER_IPPort 2022Username The ADMIN_EMAILfrom your.envfile.Password The SFTP_PASSWORDfrom your.envfile. 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.
-
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.jpgFiles 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.