No description
  • Python 32.6%
  • Shell 22.9%
  • CSS 21.5%
  • JavaScript 12.8%
  • HTML 10.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-16 05:09:09 +01:00
apache Initial FFXI operations dashboard 2026-08-06 14:10:33 +01:00
config Move FFXI controls to md0 checkout 2026-08-16 04:44:36 +01:00
docs Move FFXI controls to md0 checkout 2026-08-16 04:44:36 +01:00
fail2ban Adding failtoban coverage 2026-08-08 00:28:02 +01:00
public/dashboard Improve desktop dashboard rendering performance 2026-08-13 11:53:03 +01:00
runtime Adding themes layout and fixing UI bug 2026-08-08 00:48:11 +01:00
scripts Adding themes layout and fixing UI bug 2026-08-08 00:48:11 +01:00
sudoers Initial FFXI operations dashboard 2026-08-06 14:10:33 +01:00
systemd Initial FFXI operations dashboard 2026-08-06 14:10:33 +01:00
tests Theme overview 2026-08-08 12:24:18 +01:00
.gitignore Initial FFXI operations dashboard 2026-08-06 14:10:33 +01:00
CHANGELOG.md Theme overview 2026-08-08 12:24:18 +01:00
README.md Move FFXI controls to md0 checkout 2026-08-16 04:44:36 +01:00
VERSION Theme overview 2026-08-08 12:24:18 +01:00

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, and map.
  • Current characters from LandSandBoat's accounts_sessions table.
  • Recent connect, search, world, and map logs.
  • 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.