- Python 32.6%
- Shell 22.9%
- CSS 21.5%
- JavaScript 12.8%
- HTML 10.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| apache | ||
| config | ||
| docs | ||
| fail2ban | ||
| public/dashboard | ||
| runtime | ||
| scripts | ||
| sudoers | ||
| systemd | ||
| tests | ||
| .gitignore | ||
| CHANGELOG.md | ||
| README.md | ||
| VERSION | ||
Vana'diel Operations dashboard
A private, self-hosted operations dashboard for the LandSandBoat Compose stack
at /mnt/md0/configs/games/ffxi/server.
The production dashboard is served by a small Python standard-library service
on 127.0.0.1:8766. Apache publishes it as:
https://ffxi.dwaynelowson.co.uk
That hostname can continue to be used by XiLoader. Web browsers connect on HTTPS port 443, while FFXI uses its own game ports; DNS does not need a separate record.
Features
- Overall realm health and uptime.
- Per-service state, CPU, and memory for
database,connect,search,world, andmap. - Current characters from LandSandBoat's
accounts_sessionstable. - Recent
connect,search,world, andmaplogs. - Fixed start, graceful stop, and game-service restart actions.
- A separate application login, rate limiting, signed sessions, CSRF checks, and HTTPS-only cookies.
- Fail2ban protection for repeated login failures, read from the dashboard's systemd journal.
- Responsive Vana'diel-inspired interface with no external fonts, scripts, or network image dependencies.
- Bundled realm artwork, a luminous violet crystal, translucent deep-plum panels, parchment, and antique-gold detailing preserve the established layout while giving the dashboard a much stronger game-specific identity.
- A responsive mobile layout keeps status metadata and uptime in normal flow, while sharper asymmetric panels, ornamental gold framing, and a vertical faceted crystal give the interface a more deliberate, regal silhouette.
There is deliberately no update, pull, build, recreate, delete, compose down,
or volume action. A stop preserves every existing container and volume. Restart
leaves MariaDB running and restarts only the four game services.
Install from a fresh host
Follow docs/FRESH-INSTALL.md. The short path, once
Docker, LandSandBoat, Apache, DNS, and the TLS certificate exist, is:
cd /mnt/md0/configs/games/ffxi/server/system/ffxi-dashboard
python3 ./tests/test_server.py
bash ./tests/test_control_boundary.sh
bash ./tests/test_helper_integration.sh
sudo bash ./scripts/install.sh
Fail2ban must already be installed. The installer validates the host's existing
configuration, installs and activates the ffxi-dashboard journal jail, and
rolls back its service-specific files if validation fails. The default policy
bans an address after five failures within ten minutes for one hour.
After restarting Fail2ban, the installer waits for its control socket and the
FFXI jail for up to 30 seconds before reporting a genuine failure.
The installer interactively creates the first operator account. The real password hash and session secret are stored only in:
/etc/ffxi-dashboard.env
Repository layout
ffxi-dashboard/
├── apache/ Apache HTTPS reverse-proxy virtual host
├── config/ Non-secret Compose helper configuration
├── docs/ Fresh install, security, and recovery guides
├── fail2ban/ Login-failure journal filter and jail
├── public/dashboard/ Production HTML, CSS, and browser JavaScript
├── runtime/ Python service and fixed root helper
├── scripts/ Installer and uninstaller
├── sudoers/ Exact allowed helper invocations
├── systemd/ Dashboard service
└── tests/ Authentication/status and boundary tests
The app/ and Node metadata in the design workspace are only the local visual
preview harness. They are not required on Ubuntu and are excluded from the
release archive.
Routine updates
Repository updates never change credentials unless explicitly requested:
cd /mnt/md0/configs/games/ffxi/server
git pull --ff-only
sudo bash ./system/ffxi-dashboard/scripts/install.sh
Reset the dashboard account and invalidate existing sessions with:
sudo bash ./system/ffxi-dashboard/scripts/install.sh --reconfigure-auth
Uninstall
The normal uninstall removes the dashboard application, controls, and its service-specific Fail2ban filter and jail, but keeps the authentication file for a later reinstall:
sudo bash ./scripts/uninstall.sh
For an explicit complete dashboard purge, including authentication files,
backups, and the ffxi-dashboard service account:
sudo bash ./scripts/uninstall.sh -a
# --all is equivalent
The uninstaller never removes or modifies the LandSandBoat Compose project,
containers, database, or volumes. The older --purge-auth option remains
available when only the dashboard authentication files should also be removed.
Operational checks
systemctl status ffxi-dashboard.service --no-pager
sudo journalctl -u ffxi-dashboard.service -n 100 --no-pager
sudo apache2ctl configtest
sudo fail2ban-client status ffxi-dashboard
curl -H 'Host: ffxi.dwaynelowson.co.uk' http://127.0.0.1:8766/healthz
See docs/SECURITY.md for the control boundary and
docs/TROUBLESHOOTING.md for recovery steps.