Skip to main content

Installation

Structure of vACDM

vACDM is designed, that every vACC is simply able to run their own instance in a docker container, in order to have full control over the system.

The vACDM Core System consists of two sub systems:

  • vACDM-API: for communication between ES-Plugin and the backend
  • vACDM-worker: for constant time calculations and optimizations

Here you can see an example docker-compose:

version: '3.7'

services:
api:
image: ghcr.io/vacdm/vacdm:latest
container_name: vacdm_api
environment:
- SERVER_NAME
- PORT
- ALLOW_OBS_MASTER
- ALLOW_SIM
- MONGO_URI
- ROLE=API
- CLIENT_ID
- CLIENT_SECRET
- PUBLIC_URL
- VATSIM_AUTH_URL
- JWT_SECRET
- EVENT_URL
- EVENT_PRIO
restart: unless-stopped
ports:
- 3000:3000
worker:
image: ghcr.io/vacdm/vacdm:latest
container_name: vacdm_worker
environment:
- MONGO_URI
- ROLE
- TIME_LAST_SEEN
- TIME_INACTIVE
- EVENT_URL
- EVENT_PRIO

restart: unless-stopped

Environment Variables

VariableDescription
SERVER_NAMEThe name of the vACDM instance
PORTPort of the API. Default Port is 3000
ALLOW_OBS_MASTER
(true/false. Default: false)
Defines if the backend allows Observers to set .vacdm master.
Not recommended for productive use
ALLOW_SIM
(true/false. Default: false)
Defines if the backend allows Controllers to set .vacdm master in sim sessions (i.e. sweatbox).
Not recommended for productive use
MONGO_URIURI of the Database
ROLE (API/WORKER)Both roles need to be defined. Each for every sub system
CLIENT_IDVATSIM AUTH Client ID
CLIENT_SECRETVATSIM AUTH Client Secret
PUBLIC_URLBase URL of the vACDM Frontend (i.e.: https://vacdm.vatsim-germany.org)
VATSIM_AUTH_URLVATSIM AUTH URL. Either auth.vatsim.net or auth-dev.vatsim.net
JWT_SECRETAny JWT token secret of your choice
EVENT_URLAPI URL of the booking system (i.e.: http://slots.vatsim-germany.org/api/events/)
EVENT_PRIOInitial priority of event flights. The higher priority, the less delay of flights
TIME_LAST_SEEN (default 5)Time in minutes until the flight gets marked as inactive in the database when no further update of the flight is received
TIME_INACTIVE (default 5)Time in minutes until inactive flights get deleted from the database

Sample ENV

With the following env you will be able to start the vACDM instance:

MONGO_URI=mongodb+srv://<user>:<password>@<url>/vacdm-dev?retryWrites=true&w=majority

ALLOW_SIM=false
ALLOW_OBS_MASTER=false
SERVER_NAME=vACDM Dev Server

CLIENT_ID=
CLIENT_SECRET=secret
PUBLIC_URL=
VATSIM_AUTH_URL=https://auth-dev.vatsim.net
JWT_SECRET=secret

BOOKING_URL=http://slots.vatsim-germany.org/api/events/
BOOKING_PRIO=5

Prerequisites

vACDM needs to connect to a mongoDb instance. We recommend to either set up a docker instance via the docker-compose or - even faster - create a mongoDb via Mongo Atlas.

vACDM needs a configuration for every airport where it's used.

Until we developed a proper administration UI, you have to send the configuration as the body via a PATCH/POST request to the API (/api/v1/airports)

A configuration looks like this:

{
"icao": "XXXX",
"standard_taxitime": 15,
"taxizones": [
{
"polygon": [
"N047.27.17.801:E008.33.17.541",
"N047.27.14.826:E008.33.20.075",
"N047.27.13.203:E008.33.41.744",
"N047.27.16.494:E008.33.42.145"
//...

],
"taxitimes": [
{
"rwy_designator": "28",
"minutes": 10
},
//...
//Every polygon needs taxitimes to every possible departure runway

],
"label": "A Gates",
"taxiout": false //Is this polygon a taxi out position or not
},
//...

],
"capacities": [
{
"rwy_designator": "28",
"capacity": 8, //number of departures every 10 minutes

"alias": ""
//if you have dependend departure runways, you can add an alias for them that vACDM counts both runways as one

},
//...

]
}

Use vACDM Frontend

After the creation of the docker instance and mongo database, you should be able to access the frontend via the PUBLIC_URL

You should see the login page

login

After successful login via VATSIM auth or auth-dev the user is updated in the users collection of the database.

Until we developed a proper administration UI, you have to set users as "atc" or "admin" manually. This ensures you to get full access on the fontend.

userscollection