On this page
Overview
This project meant designing, deploying, and maintaining a self-hosted, multi-server environment entirely from scratch.
The platform hosted game servers, but the technical work closely mirrors real-world systems administration and cybersecurity: virtualization, Linux administration, remote access, network configuration, software development, database integration, and team management.
I owned the full lifecycle: provisioning VMs, managing Linux servers remotely, writing and deploying custom software, configuring network exposure, reviewing logs for incidents, and leading a team of administrators.
Managing internet-facing services, configuring port forwarding and a DMZ, controlling access, analyzing logs, and maintaining availability are core security operations skills. This project gave me early, hands-on experience with the thinking cybersecurity requires: understanding systems, identifying weak points, monitoring behavior, and balancing functionality with security.
Infrastructure architecture
The environment ran on physical servers in a home lab, with XenServer as the virtualization platform to create and manage multiple CentOS virtual machines, each serving a different role.
Each server instance needed its own port assignment. BungeeCord acted as the proxy layer: players connected to a single public endpoint and were routed to the backend servers. That gave me hands-on experience with proxy services, backend segmentation, and multi-server application design.
Linux administration & remote management
Most server management happened on the Linux command line over SSH. My remote administration toolkit:
- SSH and PuTTY for remote terminal access to the CentOS VMs
- FTP and file transfer utilities for deploying configuration files, plugins, and updates
- Remote desktop for tasks that needed a GUI
Day-to-day operations included starting and stopping services, managing directories and permissions, editing configuration files, reviewing server logs for errors, and restarting services after configuration changes. That built practical experience with Linux process management, file permissions, service configuration, and operational support in a live environment.
# Review server logs for errors or crashes
tail -f /opt/server/logs/latest.log
# Check service status
systemctl status server-instance-1
# Deploy an updated plugin
scp plugins/myplugin.jar user@server:/opt/server/plugins/
# Restart the service after a change
systemctl restart server-instance-1Networking & external access
To allow external connections, I configured port forwarding rules that map external traffic to internal server ports, and set up a DMZ so the server environment could be reached from the public internet while staying partially isolated from the primary home network.
- Public vs. private IP addressing and NAT
- Port forwarding rules mapping external ports to internal service ports
- A DMZ: a partially isolated zone for public-facing services
- Firewall rules controlling which ports were accessible
- BungeeCord proxy configuration with port assignments for each backend server
Exposing services to the internet from a home network creates real attack surface. This gave me early awareness of the risks of public-facing services, such as unauthorized access attempts and DDoS-style disruption, and of the importance of exposing only what’s necessary. Those are the same risk decisions security teams make in production.
Java plugin development
To extend the environment beyond its default capabilities, I wrote custom Java plugins. That required:
- Working with a server-side Java API and its event-driven programming model
- Writing, compiling, and deploying Java classes and methods
- Reading console output and log files to debug stack traces
- Finding and resolving plugin conflicts and configuration issues
- Managing a configuration file for each plugin
Debugging in a live environment, where errors affected active users, taught me to read stack traces, isolate issues, and test fixes carefully before redeploying.
SQL & data persistence
Some plugins needed persistent storage for player information, permissions, and platform records, so I integrated SQL-backed storage for systems that track activity, manage roles, and keep plugin data across sessions.
- Configuring database connections for the Java plugins
- Understanding how application code interacts with SQL databases
- Keeping reads and writes reliable in a multi-user environment
- Troubleshooting database connectivity and permission issues
Configuration management
A large part of the work was configuration: server properties, BungeeCord settings, plugin configs, permissions files, port assignments, and database connection settings.
A small error in any of them could stop a server from starting, break player permissions, make a plugin fail, or block players from connecting. That made me careful about editing configuration and taught me to validate every change by testing the service after deploying it, which is the same discipline behind change management.
Troubleshooting & operations
Running a multi-server environment with real users meant continuous troubleshooting. Common incidents:
- Server crashes: investigated through log files to find Java exceptions or configuration errors
- Plugin errors: traced through stack traces to conflicting plugins or bad config files
- Connectivity problems: diagnosed by checking port forwarding, firewall rules, and NAT behavior
- Permission issues: reviewed and corrected across user, admin, and plugin permissions
That loop is the same methodology used in SOC analysis, incident response, and systems administration. I often had to make these calls under pressure, while players or staff were affected by downtime or bugs.
Leading the team
I managed a team of roughly 8 to 10 people who helped operate and build the community. Some built in-game environments; others served as administrators or moderators responsible for keeping order.
As the owner, I assigned responsibilities, managed access, coordinated tasks, set expectations, and made the final technical and administrative decisions. It was leadership experience in a technical environment where both infrastructure reliability and user experience mattered.
Cybersecurity relevance
- Internet-facing service management: understanding the implications of public exposure
- Access control: managing permissions for users, admins, and automated systems
- Log analysis: reviewing logs to identify errors, unusual behavior, and operational incidents
- Configuration management: small config errors can break services or create vulnerabilities
- Network attack surface: first-hand experience with the risks of hosting public services
- Availability and reliability: maintaining uptime while troubleshooting active issues