Objective
I want to start by creating an application development and deployment server environment on my home server (called “nas-devdepserver”).
For now, I only want to provide a source code repository, a build server, and a binary registry as central tools.
In addition, I want to develop an initial demonstration web application in Golang with a SQLite database,
using the central repository for source code storage.
The application then needs to be delivered as OCI container and stored in the central binary registry.
Next, an application execution server environment needs to be created on my home server (called “nas-appserver”).
The created containerized application and database needs to be deployed to this server environment.
Finally, I want to make this deployed web application publicly accessible via tunneling.
The application should be accessible via a link in the “Demo” page of my Cloudflare website.
Besides completing the outstanding work on my public website,
I also want to give my site a more professional look and feel.
With this project, I’m fully implementing all my ideas for the public website.
In the next project, I want to start further developing my ideas
regarding development tools, testing, security, CI/CD, Kubernetes, and app/infrastructure monitoring.
Result
1 - Upgrade public website to a professional look and feel
I started by examining and comparing the layouts of many existing websites.
I also read numerous reviews discussing and comparing website layouts,
and learned about the presentation standards used for public-facing websites on PCs and mobile devices.
In my opinion, the two most important qualities for public-facing layouts are:
- easy-to-use functionality
- visual appeal
I opted for a layout similar to that of the VRT NWS 👆 website.
This layout has a fresh, uncluttered look and is also easy to use on both desktop and mobile devices.
Next, I searched for information to implement this look and feel.
I still had a lot to learn, especially in the area of visual appeal:
- more advanced use of CSS and Tailwind CSS:
responsive positioning and sizing of elements,
use of absolute, relative, and flexbox layouts,
dynamic styling with calc() in CSS,
use of clipping, overflow, and aspect ratio for images and videos - use of DaisyUI:
this is a Tailwind CSS plugin that provides the designer with usable component class names - access to royalty-free videos, photos, illustrations, and backgrounds:
I now have a list of free sites that collect these useful elements - better organization options for Hugo layouts and shortcodes
(this made maintaining my site much easier)
Finally, I also explored available services for analyzing and tracking website traffic.
“Google Analytics” or “Umami” are often chosen as free solutions.
Because I already hosted my website on Cloudflare,
I ultimately chose Cloudflare’s free “Web Analytics” service.
After configuring this service, I can now easily track the following metrics via a dashboard:
page view history, device OS, and browser used by visitors, etc.
2 - Server tools for developing and deploying web apps
My Windows development PC already had “Git,” “VSCode” with “Git Graph,” and “MSEdit” installed.
I also installed “Docker,” “Podman,” and “Portainer” on my Windows PC.
In previous projects, I’ve used the public github.com site.
For the development and deployment of my own applications, I want to use the Git repository manager.
Because I want to host this Git repository manager myself on my home server,
I compared popular software: “GitLab - Community Edition” and “Gitea - Free Edition”.
I first learned the basics of GitLab on the public gitlab.com site.
There, I learned not only the basic Git commands but also the additional GitLab functionality.
A simple HelloWorld application was created and saved using a GitLab CI pipeline.
A container image was created for this example application using Docker,
which was then stored in the Gitlab Container Registry.
Because this GitLab software is resource-intensive and offers too extensive functionality for my needs,
I ultimately opted for the “Gitea” software.
Gitea is a lightweight GitHub alternative, specifically designed for self-hosting and includes:
- “Gitea” (vs. “GitLab”, “GitHub”) as a source code repository
- “Gitea Actions” (“GitHub Actions” alternative, vs. “Gitlab CI & Runners”, “Jenkins”) as a build server
- “Gitea Package Registry” (vs. “Gitlab Registry”, “Nexus”) as a registry for binaries and OCI images
In my “nas-devdepserver” environment on my home server I have installed “MSEdit”, “Docker”, “Podman” and “Portainer”.
I now also installed the latest free version of Gitea.
On the local Gitea server, I first created one group “robertthecoder” (my “company”) on the root level.
In this top group, I created 3 sub-groups: “app,” “util,” and “example”.
Projects will always be created in one of these sub-groups.
3 - Easy referencing of services and applications on home network
To easily access all my services and applications,
I created my own home dashboard/portal with links organized into groups.
For the implementation, I chose the popular “Homarr” software
(versus Homer, Heimdall, Glance, Homepage, Dashy).
Most services and applications require a password for access.
To manage these passwords, I’ve been using the free version of “Bitwarden” (vs. “KeePassXC”).
However, I’m now switching entirely to the free community version of “Passbolt”.
I installed Passbolt on my home server in my home network.
4 - Simplify knowledge and documentation management for HomeLab technology
While carrying out these projects, I learn a great deal about computer technology.
I find most of my information through Google search and YouTube videos.
I maintain all the references for good information sources and create my own documentation using Markdown files.
Because the volume of information is becoming very large and difficult to structure in files,
maintaining/expanding it and retrieving information has become very difficult.
Therefore, I sought a different approach with software support to simplify knowledge management and documentation creation.
After thorough research, I opted for the “Obsidian” software (versus Notion, Capacities).
The most commonly used standard approach by researchers is the “Zettelkasten” method.
However, developers and devops tend to use a more personalized approach with their own structure in Obsidian.
This knowledge management is completely new to me, and I choose to start with my own approach.
That’s why I created two Obsidian knowledge bases or “vaults” (abbreviated “OV”):
- “OV-ComputerTech”:
Contains general information about computer technology that I can share with others. - “OV-MyHomeLab”:
Contains specific information about my own software, computers, and network configurations that only I can access.
To make these Obsidian Vaults accessible everywhere and to maintain backups,
I created git repositories for these vaults in gitea.
New knowledge will henceforth be stored in these Obsidian vaults,
and existing information will gradually be incorporated into these vaults as well.
5 - Developing minimal demo web application in Go
6 - Deploying containerized web application on application server
7 - Making self hosted web application publicly accessible
8 - Automate backup of self hosted Gitea Repos and Registry
