PROJECTS

My IT projects.

Current infrastructure, earlier builds and cybersecurity learning. Each section makes clear whether the work is running, a past exercise or a planned deployment.

CORE INFRASTRUCTURE
PROJECT 01

Proxmox Cluster

I use Proxmox to create Debian guests, assign resources and manage each VM through its lifecycle.

The cluster gives me a common management interface. The physical connections, node roles and quorum design are documented on the Homelab page.

PLATFORM Proxmox VE · two-node cluster
PROXMOX NODES 2 · server1 + server2
MANAGEMENT Proxmox UI + SSH
QUORUM DEVICE Raspberry Pi · external vote

VM setup and management

  • Created Debian guests with CPU, memory and storage allocations for their workloads.
  • Managed guest start, stop and restart actions through the Proxmox interface.
  • Reviewed resource use to understand what each workload consumes.
proxmox-dashboard.png
My Proxmox homelab dashboard
nginx-status.png
Nginx service running on my Debian web server
SELF-HOSTED
PROJECT 02

Nginx Web Server

Nginx serves the static files that make up this portfolio.

I deployed the HTML, CSS, JavaScript and images to a dedicated Debian VM. The web root is /var/www/html.

Next, I plan to add Nginx Proxy Manager for HTTPS and web reverse proxying. The existing Nginx instance will continue serving the website files.

OS Debian
WEB SERVER Nginx
MANAGEMENT SSH / Linux CLI
WEB ROOT /var/www/html

What I configured

  • Installed Nginx and managed its service with systemd.
  • Organised website assets into CSS, JavaScript and image directories.
  • Transferred updates using SCP and checked ownership when an upload failed.
  • Used Nginx logs and service status to investigate serving problems.

Troubleshooting: SCP permission denied

An SCP upload to /var/www/html failed with this error:

Permission denied

SSH connected successfully, but my Linux user didn't have write permission in the Nginx web root. That explained why I could log in but couldn't upload the image there.

I uploaded the image to my home directory, then used sudo on the server to move it into the website images folder.

$ scp image.png user@server:~/

$ sudo mv ~/image.png /var/www/html/images/
DEPLOYED · SERVER1
PROJECT 03

PaperMC Game Server

A Debian VM hosting a PaperMC server, with ongoing Java and service-configuration practice.

The aim is to take a game server from its initial Java setup to a managed service, then document how it behaves under player activity.

PLATFORM server1 · Proxmox VM
OS Debian
SERVER PaperMC
STATUS Deployment and ongoing configuration

Server setup and configuration

  • Create a dedicated Debian VM and install the required Java version.
  • Deploy PaperMC, then configure server.properties and world settings.
  • Set Java memory allocation within the VM’s resource limits.
  • Test required plugins and record configuration changes.

Linux service management

I plan to configure PaperMC as a systemd service so it runs independently of an SSH session. These are the commands I will use to manage the service and read its logs.

$ sudo systemctl status minecraft

$ sudo systemctl start minecraft

$ sudo systemctl stop minecraft

$ sudo journalctl -u minecraft

If the service fails to start, I will check its status and logs, then verify the Java command, file permissions and working directory in the systemd unit.

Remote administration

Administration will use SSH over private VPN access. Players will connect through the Minecraft game port.

Performance tuning and verification

After deployment, I will compare gameplay responsiveness with CPU and Java memory use as player activity increases.

  • Record a quiet-server baseline before increasing activity.
  • Track tick performance alongside CPU and memory use.
  • Note connection problems and configuration changes during each test.
papermc.png
PaperMC Minecraft server project
PROJECT 04
ALWAYS-ON SERVICES

Infrastructure Services

Container deployment, service dashboards, a Pi-hole configuration issue and the information I get from availability checks.

DEVICES Raspberry Pi + server2
CONTAINERS Docker / Docker Compose
RASPBERRY PI Pi-hole + Uptime Kuma + QDevice
PLANNED ON SERVER2 Prometheus + Grafana
04.1 / DOCKER

A repeatable container setup

I use Docker Compose to define and start the Pi-hole and Uptime Kuma containers. Here is how I prepare the directory for Uptime Kuma.

Compose files live under /opt/docker/, with each application in its own directory.

$ sudo mkdir -p /opt/docker/uptime-kuma

$ sudo chown -R $USER:$USER /opt/docker/uptime-kuma

$ cd /opt/docker/uptime-kuma

$ nano compose.yml

$ docker compose up -d

The configuration file records the image, settings and storage used when the container starts.

WHAT I MANAGE

Images, settings and storage.

I manage application settings through environment variables and keep persistent data separate from the container image.

pihole.png
Pi-hole dashboard running on my Raspberry Pi
04.2 / PI-HOLE

DNS filtering for my network

Pi-hole filters DNS queries from clients configured to use it. I review its dashboard for queries, blocked domains and active clients.

Troubleshooting: Pi-hole password settings

When I tried to change the web-interface password inside Pi-hole, the change didn't take effect as expected.

I found that a Docker environment variable was setting the password and overriding the change inside Pi-hole.

The fix depended on the deployment configuration, not just the setting visible inside the application.

04.3 / AVAILABILITY & METRICS

Metrics, dashboards and availability

Uptime Kuma records whether configured endpoints respond, giving me a timeline to compare with service logs.

Planned next: Prometheus will collect resource metrics and Grafana will display trends, adding context to a simple reachable/unreachable result.

MINECRAFT Planned availability check
WEB SERVER Nginx availability
PROXMOX Hypervisor availability
PI-HOLE Application + DNS checks

Troubleshooting with monitoring history

Checks have reported refused connections, certificate verification problems and application errors.

I use the error and timestamp to choose which service logs to inspect first.

kuma.png
Uptime Kuma dashboard monitoring my homelab services
04.4 / DASHBOARD DEPLOYMENT

Homarr on a Debian VM

I deployed Homarr using Docker Compose in a Debian VM and verified that its web interface was reachable on port 7575.

This earlier deployment gave me practice with container ports, Compose configuration and checking that a service is accessible after it starts. Its placement is not assigned in the current cluster plan.

LEARNING ENVIRONMENT
PROJECT 05

Linux & Bash Lab

A dedicated Debian VM for Linux and Bash exercises.

I practise changes to accounts, files and services here before applying similar ideas to hosted workloads.

OS Debian
INTERFACE Linux CLI
SCRIPTING Bash
PURPOSE Safe learning environment

Linux administration practice

  • Create users and groups, then check which files they can access.
  • Change ownership and permissions, and explain the resulting access.
  • Inspect a process or service and find its relevant log entries.
  • Combine commands with pipes and redirection to extract useful output.

Bash scripting

I’m learning to combine commands with variables, conditions and loops. The goal is a script whose output and failure cases I can explain.

Next, I want to turn a repeatable manual task into a small script and document the result.

BASH EXERCISE NOTES Exercise notes and examples in progress.
PROJECT 06 / SECURITY LEARNING

Learning how systems are exposed.

Practical platform exercises and independent research support my interest in cybersecurity.

Platform practice

TryHackMe: content discovery

I have practised finding information through robots.txt, sitemap.xml, hidden files and directories, subdomains and virtual hosts.

The exercise is about understanding what an application exposes before choosing the next investigation step.

TryHackMe ↗
Ongoing learning

Hack The Box

I also use Hack The Box for cybersecurity learning. My focus is building confidence with Linux, networking and web fundamentals before taking on more complex assessments.

These are learning exercises; I am continuing to develop the skills needed for independent security work.

Hack The Box ↗
Earlier CTF exercise

Subrion 4.2.1 report

I worked on a CTF exercise involving Subrion 4.2.1 and reverse-shell access, then wrote a report and conclusion describing the exercise.

The reporting practice was useful alongside the technical work: explain the steps, record the evidence and make the outcome understandable.

Independent research

Understanding WannaCry

I researched the ransomware’s kill-switch mechanism and how researchers investigate compiled malware. I also explored ways to study a sample without executing it.

This is research into malware-analysis concepts. I am still developing my understanding of static inspection, reverse engineering and safe analysis environments.

PROJECT 07 / EARLIER EXPERIENCE

The builds that came first.

Earlier hands-on work that contributed to my current skills. These are separate from the live layout shown on the Homelab page.

Network storage

Raspberry Pi NAS

I built a NAS on a Raspberry Pi 5 with external storage and used Tailscale for remote access. It gave me an introduction to running a useful network service and accessing it remotely.

Web hosting

Apache on Raspberry Pi

I configured an Apache web server on the Pi before moving my portfolio hosting to Debian and Nginx. That earlier work helped me understand the relationship between a server process, its files and network access.

Operating systems

Installs & VMware

I installed Linux and Windows systems and practised virtualisation with VMware. Those builds gave me experience setting up an OS and working with virtual machines before my current Proxmox setup.

NEXT STEPS

More evidence as the work develops.

I will add further configuration examples, screenshots, scripts and lab notes as I complete them.