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.