Running a public server
To let other people connect to your server and play games, there are a few other things you will need to set up.
Recovering from a crash
Use nodemon to restart the server if it crashes. This also restarts the server if the software is updated.
nodemon server.js
Database & Backups
For best performance, you should turn on WAL mode on the database.
sqlite3 db "pragma journal_mode = wal"
You will want to backup your database periodically. This is easy to do with a single sqlite command. Schedule the following command using cron or something similar, and make sure to copy the resulting backup database to another machine!
sqlite3 db "vacuum into strftime('backup-%Y%m%d-%H%M.db')"
Customize settings
The server reads its settings from the .env file.
Expose the server to the internet
For simplicity, the server only talks plain HTTP on localhost. To expose the server to your LAN and/or WAN, either listen to 0.0.0.0 or use a reverse proxy server such as Nginx. To use SSL (HTTPS) you need a reverse proxy server.
Here is an example Nginx configuration:
server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name example.com www.example.com; ssl_certificate /path/to/ssl/certificate/fullchain.cer; ssl_certificate_key /path/to/ssl/certificate/example.com.key; root /path/to/server/public; location / { try_files $uri @rally; } location @rally { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 86400s; proxy_send_timeout 86400s; } }
Archive
Storing all the games ever played requires a lot of space. To keep the size of the main database down, you can delete and/or archive finished games periodically.
You can copy the game state and replay data for finished games to a separate archive database. Below are the tools to archive (and restore) the game state data. Run the archive and purge scripts as part of the backup cron job.
-
sqlite3 tools/archive.sql
- Copy game state data of finished games into archive database.
-
sqlite3 tools/purge.sql
- Delete game state data of finished games over a certain age.
-
bash tools/unarchive.sh game_id
- Restore archived game state.