Homelab Personal Project

A personally built server from scratch used for hosting websites, game servers, managing files (personal cloud), managing databases.

solar panel monitoring system image

Team

1 Person (Me)

Timeframe

Ongoing

My Role

Hosting websites, Creating and managing databases, Hosting personal files manager, Hosting computer games servers

Tools

Debian 12 OS, Docker and Docker Compose, VirtualBox, MariaDB/MySQL, MongoDB, Nextcloud

1. How it Started?

At first i wanted to host a Minecraft server to play with my friends. I did a research on how to do it and I managed with ease, i hosted the Minecraft server on my laptop using Ubuntu and docker-compose. However, while doing the research I stumbled on couple of youtube videos that were all about how you can turn your old PC into a server and not only you can host computer games servers on it, but you can also host websites, turn it into your personal cloud storage, etc. I got really into that idea because i was already into computers and was an opportunity to learn a new skill - networking.

2. Building the Server

I had my 10 year-old PC collecting dust so I decided to disassemble it and buy new parts to assemble the server except for the power supply and the computer box. I bought the new parts and one by one I constructed it with ease. After everything was into place I decided to install Debain as it was based on Ubuntu, which is the easiest linux distribution to start with. I didn't want to risk installing RHEL or a hyper-visor like VMware or Proxmox as i was new to this and at that time I didn't know they even existed.




3. Projects

3.1 First experiments

The first thing I did after everything was set up was to transfer my Minecraft server from my laptop to the server I built. Even though it sounds silly, I learned my first secure transfer commands like scp and rsync, but also wget, curl, and mv. Keep in mind that I have done everything I mentioned with the Linux terminal and not the GUI (graphical user interface).

3.2 Hosting a File Manager

After the first experiments, I hosted my first file manager so I could use the server as a personal cloud, instead of using OneDrive, Google Drive, DropBox, etc. I started with SeaFile, but after trying to back up my files and images, I accidentally deleted the directories of the Linux OS, so I had to start all over again. Now I use Nextcloud, which I find easier to use, but this is how I learned to be careful with the command line and how to properly back up my data.

3.3 Hosting Websites

The first website I hosted was my friend's portfolio website ("Elizabet Aleksieva"). To host it I used docker-compose, which was the second time using it, however, this time for running a website. I learned how to construct a short docker-compose file and transfer files such as HTML, CSS, JavaScript files, and images.

Visit "Elizabet Aleksieva"

The second is the React WebApp - CollaboGreen. It was harder to write the correct parameters for a docker-compose file, as I couldn't find an image for it and because it was a web application with more data than a simple static website. I started with docker files to create my images and then run it in a container but it didn't work after a lot of tries. In the end, I figured out the mistake on my own and managed to host the web application without a problem. This portfolio is also hosted on my server.

Visit "CollaboGreen"

Another project I hosted is a Pokédex app. This Pokédex application was built with React. The application uses the PokeAPI to fetch data about the Pokemons (e.g. Stats, Abilities, etc.), and also the Pokemons themselves. By clicking on a Pokemon card you will get the stats for the specific Pokemon. With the buttons, 'Previous' and 'Next' you can switch between different pages to see other Pokemons. If you would like to see the source code and host it for yourself visit my GitHub page https://github.com/Plo4i/Pokedex.

Visit "Pokédex"


3.4 Other Systems

I also need to monitor my server and what I host on it, so I installed and hosted a monitoring system that tells me if my domains, apps, or websites are down, what is their uptime and how they perform.

I also wanted to make a virtual private server (VPS), so that's why I also installed VirtualBox as a hyper-visor. Even though I have a couple of virtual machines were created with it, I have not yet used them for hosting so this portfolio will be the first project to be hosted on one of my VPS.

I also have hosted a remote desktop gateway to work on my server without using the terminal, if, for example, I have to work on something that requires visuals.

4. Next Steps

What I would like to do next is make a web application for my server so instead of having to use the command prompt to host websites, servers, etc. I would make it an easier and user-friendly process. In this way not only me but my friends and family would use it with withe ease if they want to host something or just store their files.

I would also like to expand my hardware and would actually purchase real servers with more storage and memory, so I can have more websites and applications, but mostly because I would like to expand my knowledge in networking.