Server Setup and Running
There are two ways to start the server: manually configuring it or using a Docker container.
To set up and run the back-end server manually, follow the steps below.
Locally Configure the Server
Create a virtual environment
python -m venv venv
Then activate the virtual environment:
On macOS/Linux:
source venv/bin/activate
On Windows:
.\venv\Scripts\activate
Install and prepare PostgreSQL database
2.1. Visit: https://www.enterprisedb.com/downloads/postgres-postgresql-downloads Select and download your preferred version of PostgreSQL.
2.2. Go to the download location and double-click the .exe file. Follow the installation steps and keep track of: - Installation directory - Superuser (usually
postgres
) - Port (usually5432
) - Password (save this)2.3. Ensure pgAdmin is installed during setup.
2.4. Restart your computer.
2.5. Open pgAdmin, access the Server, and enter your password if needed.
2.6. Right-click Databases, click Create, and create a new database, preferably named
measurements
.Note
Tables will be created once the back-end server runs, so no need to create them now.
Create a `.env` file in the root directory:
# needed for back-end (server) DB_NAME=measurements DB_USER=postgres DB_PASSWORD=postgres DB_HOST=db DB_PORT=5432 ripe_api_token={ripe API with permission to perform measurements} ripe_account_email={email of your ripe account} ACCOUNT_ID={geolite account id} LICENSE_KEY={geolite key} UPDATE_CRON_SCHEDULE=0 0 * * * CLIENT_URL=http://localhost:5173 # needed for front-end (client) DOCKER_NETWORK_SUBNET=2001:db8:1::/64 DOCKER_NETWORK_GATEWAY=2001:db8:1::1 VITE_CLIENT_HOST=localhost VITE_CLIENT_PORT=5173 VITE_SERVER_HOST_ADDRESS=http://localhost:8000 VITE_STATUS_THRESHOLD=1000
Additionally, the configuration file server/server_config.yaml contains editable variables:
ntp: version: 4 timeout_measurement_s: 7 number_of_measurements_for_calculating_jitter: 8 server_timeout: 60 edns: mask_ipv4: 24 mask_ipv6: 56 default_order_of_edns_servers: - "8.8.8.8" - "1.1.1.1" - "2001:4860:4860::8888" edns_timeout_s: 3 ripe_atlas: timeout_per_probe_ms: 4000 packets_per_probe: 3 number_of_probes_per_measurement: 3 bgp_tools: anycast_prefixes_v4_url: "https://raw.githubusercontent.com/bgptools/anycast-prefixes/master/anycatch-v4-prefixes.txt" anycast_prefixes_v6_url: "https://raw.githubusercontent.com/bgptools/anycast-prefixes/master/anycatch-v6-prefixes.txt" max_mind: path_city: "GeoLite2-City.mmdb" path_country: "GeoLite2-Country.mmdb" path_asn: "GeoLite2-ASN.mmdb"
Note
Make sure PostgreSQL is running and accessible with the provided credentials. The server will inform you if any variables are missing or misconfigured.
Install backend dependencies
cd server pip install -r requirements.txt
Download MaxMind and BGP Tools databases and schedule updates
To initialize and schedule database updates (run from the root directory):
cd .. crontab -e 0 1 * * * /bin/bash /full_path_to/update_geolite_and_bgptools_dbs.sh >> /full_path_to/update_geolite_and_bgptools_dbs.log 2>&1
Replace
/full_path_to
with the output of:pwd
Or to download once without scheduling:
./update_geolite_and_bgptools_dbs.sh
Common Errors
Windows-style line endings in .env may break Linux/WSL scripts. Use:
dos2unix .env
For bad interpreter error on WSL/Linux:
Convert CRLF to LF using VS Code or:
dos2unix update_geolite_and_bgptools_dbs.sh
Geolite downloads are limited per account per day.
Note
Update the databases regularly for accurate results.
Run the server
From the root directory, run:
uvicorn server.app.main:create_app --reload --factory
The server should now be running!