Introduction
To test Tabunganku in a production environment, I build a home server. Why? Because I can experiment easier with more applications in the future. I also don’t have to worry about excessive bill unlike cloud providers. What I needed from the server is it should not take a lot of space and it should be powerful enough to do basic operations.
Home Server Spec
After searching for options, I bought a DeskMini X300 Series. It is small enough (smaller than a laptop actually) and relatively cheap in terms of price and electricity usage. Hardware specification for my home server is:
- RAM: 2x16 GB
- Storage: 1TB
- CPU: Ryzen 5600G
About Proxmox VE
Proxmox VE is a open source software to create and run Virtual Machines. I use it to run VMs, which will run Tabunganku and other applications later. To install Proxmox VE, follow the instructions to prepare the installation media and instructions to install Proxmox VE. Please note that the server machine’s storage content will be wiped upon installing Proxmox.
I choose Proxmox VE for several reasons. Learning about server is a new experience from me. Coming from web development background, managing a server is a different field from what I have learned. Learning it could open a new opportunity for me. It is also open source and free. There is an option to buy support subscription, but it is entirely optional to do that.
Proxmox VE Deplyoment
There are two types of deployment available in Proxmox: containers or virtual machines. Proxmox container is not the same as containers in Docker. A Proxmox container(or Linux Container) is a lightweight alternative of Virtual Machine. It uses kernel of the host system instead of emulating a full operating system. Characteristics of Linux container is:
- Consumes lighter resource than VMs
- Only able to run Linux distributions
- Cannot do live migration between clusters
When to use VM instead of container?
- If you want to use operating systems that are not supported by container (e.g: Windows)
- If you cannot afford any downtime when a migration is needed
- If you want to run Docker containers, it is better to use VM. Containers can achieve the same thing, but they need workarounds and unstable compared to using VM.
Deploying Tabunganku
I use a Debian 12 VM as a target deployment. Inside the VM, I install Docker, Git, and Java. First, I clone the repository using Git. Then I build the backend project using Java and Maven. To build the image, I run command docker compose up
in the project’s main directory.
To know the IP address of the server, run command ip a
. In browser, hit http://[ipaddress]:3000/ to access Tabunganku in the server.
Retrospective
This is what I’ve learned when I set the home server and deploy the application:
- x300 Deskmini doesn’t include a WiFi module so I use LAN cable instead. Proxmox doesn’t support Wifi either.
- pgAdmin is removed from docker compose script because it is not essential to run Tabunganku with it.
- I also found out that the validation had been implemented incorrectly. The
@Min
validation in add transaction function was set to0
instead of1
, so I could insert transactions with 0 amount before. - In the future, the deployment proceess can be simplified by simply pulling Docker images from a remote host.