Web Server - OpenHV/ladder GitHub Wiki
The entire architecture can be set up in a containerized environment using Docker images.
The following instructions only cover the Ladder and tournament website services. If you want to run an OpenHV game server with additional convenience features, check out the game server docs.
Build
docker build -t openhv/ladder:latest -f Dockerfile .
Run
Run the ladder web service with the following commands:
docker run --name ladder_webserver -dit -p 8001:8000 -v $HOME/.config/openra/Replays/:/replays/:ro openhv/ladder:latest
Starts at http://127.0.0.1:8001
Reverse Proxy
Using Nginx we can redirect traffic with the following /etc/nginx/nginx.conf
:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name ladder.openhv.net;
location / {
proxy_pass http://127.0.0.1:8001;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
Database
To update the database files, you can use docker exec
as follows for the
ladder
container:
docker exec -it ladder_webserver venv/bin/openhv-ladder -d instance/db-hv-all.sqlite3 /replays
docker exec -it ladder_webserver venv/bin/openhv-ladder -d instance/db-hv-2m.sqlite3 -p 2m /replays
Requires
docker restart ladder_webserver
Cron
To automate, add the following to crontab -e
:
# don't log into local mailbox
MAILTO=''
# update databases every minute
* * * * * docker exec ladder_webserver venv/bin/openhv-ladder -d instance/db-hv-all.sqlite3 /replays > $HOME/logs/db-hv-all.log 2>&1
* * * * * docker exec ladder_webserver venv/bin/openhv-ladder -d instance/db-hv-2m.sqlite3 -p 2m /replays > $HOME/logs/db-hv-2m.log 2>&1
# update player profiles
@daily docker exec ladder_webserver rm -f instance/*.sqlite3 > $HOME/logs/db-purge.log 2>&1
This will update the database every minute with new games played. Every day, we remove the cached databases so that the next update causes a full reconstruction of the databases. Player information is updated less frequently to reduce load on the OpenRA user account service.