RTC
nl en
Automatiseer installatie, configuratie en beheer van infrastructuur
Afgewerkt op
iaas

Doel

Vooreerst wil ik mijn publieke website een meer professionele look-en-feel geven.

Vervolgens wil ik mijn documentatie beter organiseren en mijn kennis beter beheren.

Het beheer van mijn infrastructuur wil ik automatiseren via scripts.

Ik wil ook beginnen met de aanmaak van een applicatie-development en-deployment omgeving op mijn home-server.
Voorlopig wil ik hierop enkel een Git repository manager voor source code, een build server en een registry voor binaries als centrale tools voorzien.


Resultaat

1 - Upgrade van publieke website naar professionele look-en-feel

Professional look

Ik begon met de layout van vele bestaande websites op het internet te bekijken en vergelijken.
Ook las ik vele reviews die website-layouts bespreken en vergelijken,
en leerde ik de in gebruik zijnde presentatie-standaarden voor publieke sites op pc en mobile.
De 2 belangrijke eigenschappen voor publieke layouts zijn volgens mij:

  • makkelijk bruikbare functionaliteit (easy usable)
  • visuele attractiviteit (beautiful)

Ik opteerde voor een layout zoals die van de VRT NWS website.
Deze layout heeft een frisse, niet te beladen look en is tevens gemakkelijk te bedienen op desktop en mobile.

Vervolgens zocht ik informatie om deze look-en-feel te implementeren.
Vooral op het vlak van visuele attractiviteit moest ik nog veel bijleren:

  • een meer gevorderd gebruik van css en tailwind css:
    responsive positionering en dimensionering van elementen,
    gebruik van absolute, relatieve en flexbox layout,
    dynamische styling met calc() in css,
    gebruik van clipping, overflow en aspect ratio voor images en videos
  • het beschikken over royalty-free video’s, foto’s, illustraties en backgrounds:
    ik heb nu een lijst van gratis sites die deze bruikbare elementen verzamelen
  • betere organisatie-mogelijkheden van Hugo layouts en shortcodes
    (het onderhoud van mijn site werd hierdoor veel eenvoudiger)

Omdat veel bezoekers dikwijls “https://robertthecoder.org” als url gebruiken in plaats van “https://www.robertthecoder.org”,
heb ik deze kortere naam toegevoegd als CNAME-record op Cloudflare (als DNS-registrar).
Beide namen verwijzen voortaan naar dezelfde url locatie.

Web Analytics

Ten slotte heb ik ook beschikbare services bekeken om het bezoek van websites te kunnen analyseren en opvolgen.
Dikwijls wordt voor “Google Analytics” of “Umami” gekozen als gratis oplossing.
Omdat ik mijn website reeds heb gehost op Cloudflare, koos ik uiteindelijk voor de gratis “Web Analytics” service van Cloudflare.
Na configuratie van deze service kan ik nu volgende metrieken gemakkelijk opvolgen via een dashboard:
historiek van aantal page-views, toestel-os-browser gebruikt door bezoekers, enz.

2 - Vereenvoudig het beheer van kennis en documentatie

Oblivian

Bij het uitvoeren van mijn computer-projecten leerde ik zeer veel bij over computer-technology.
De meeste informatie vond ik door te zoeken via google search en via youtube video’s.
Al de referenties voor de goede informatiebronnen hield ik bij en eigen documentatie maakte ik aan via markdown files.
Doordat de informatie-hoeveelheid erg groot wordt en tevens moeilijk te structureren is in files,
is het onderhouden/uitbreiden ervan en het terugvinden van info erg moeilijk geworden.

Ik zocht daarom een andere aanpak met software ondersteuning om kennis-beheer en documentatie-aanmaak te vereenvoudigen.
Ik bracht daarom alle reeds beschikbare informatie eerst samen in categorieën.
Dit koste heel veel tijd en inspanning.

Na grondig ondezoek opteerde ik voor de “Obsidian” software (vs Notion, Capacities).
De meest gebruikte standaard-aanpak door onderzoekers is de “Zettelkasten” methode.
Echter developers en devops gebruiken eerder een persoonlijke aanpak met eigen structuur in Obsidian.
Voor mij is dit kennisbeheer volledig nieuw en kies ik om te starten met een eigen aanpak.
Ik maakte daarom 2 Obsidian kennisbanken of “vaults” (afgekort “OV”):

  • “OV-ComputerTech”:
    bevat algemene info over computer-technology die ik kan delen met anderen
  • “OV-MyHomeLab”:
    bevat specifieke info over eigen software, computers en netwerk-configuratie die enkel voor mij toegankelijk is

3 - Vereenvoudig de installatie van server-software

Ansible

Op mijn Home-server heb ik in vorige projecten manueel Proxmox als OS geinstalleerd.
Daarna installeerde ik ook de lxc “nas-fileserver” en de virtual machine “LinuxMint” op deze “proxmox01” node.
In dit project wil ik verschillende nieuwe lxc’s met allerlei software installeren,
die later o.a. voor de development en deployment van zelfgemaakte applicaties zullen gebruikt worden:
“home-utilityserver”, “home-devdepserver”, “home-testappserver” en “home-prodappserver”.
Later zal ik ook de nu bestaande “proxmox01”, “nas-fileserver” en “LinuxMint” reorganiseren,
en hernoemen naar “home-pve” en “home-backupserver”.
Ik zal een agile aanpak hanteren in volgende posts, om een IDP (Internal Developer Platform) uit te werken.
Dit zal gebeuren in kleine stappen die direct waarde toevoegen.
Zie Architecture of my home server voor de situatie na deze post.

Omdat dit erg repetitief werk is, zocht ik een manier om de installatie van software te vereenvoudigen en te automatiseren.
Hiertoe leerde ik eerst de syntax en mogelijkheden van “Bash Scripting” en “Ansible”.
Ik leerde hierbij tevens “ansible-pull” en “ansible-playbook”, waarbij de playbooks in een git repository kunnen worden opgeslagen.
Ik bestudeerde ook de proxmox commands (vooral “pct”) en de “Proxmox VE Helper-Scripts”.

Ansible

Na deze studie maakte ik bash-scripts om een ​​lxc te creëren, te verwijderen en te klonen.
Omdat bijna alle lxc servers behoefte hebben aan dezelfde instellingen en basis software,
implementeerde ik eerst een LXC Template “templ-ubuntu”.
In “templ-ubuntu” installeerde ik software “Screenfetch”, “Fresh”, “Curl”, “Docker”, “Stow”, “Git” en “Zsh” via nieuwe bash install-scripts.
Deze template server gebruikte ik dan bij de aanmaak van alle andere lxc servers.

Waarom is de volgende software geïnstalleerd op alle lxc servers?

  • Ubuntu Server”, “UFW” en “SSH”:
    het Ubuntu OS gebruik ik als basis voor al mijn lxc servers en heeft UFW en SSH automatisch reeds geinstalleerd;
    ik creeerde ook een admin user “myadmin” met sudo en ssh rechten voor remote access;
    UFW (Uncomplicated Firewall) is de standaard firewallbeheertool voor op Debian gebaseerde Linux-systemen,
    ontworpen om de configuratie van iptables of nftables te vereenvoudigen.
  • Screenfetch”, “Fresh en “Zsh”:
    Screenfetch is een lichtgewicht systeeminfotool die details over besturingssysteem, hardware en software in de terminal weergeeft;
    Fresh is een lichtgewicht, snelle en krachtige teksteditor voor de terminal voor Linux, macOS en Windows (beter dan Nano);
    Zsh is een shell en programmeertaal voor de unix/linux command line (compatibel met de Bourne/Bash shell);
    Zsh is geweldig voor interactief gebruik, met geavanceerde autocomplete functies, ingebouwde history manipulatie, enz.
  • cURL” en “Docker”:
    Curl is een command-linetool voor het downloaden of uploaden van gegevens met verschillende protocollen;
    Docker wordt gebruikt om softwarepakketten te downloaden en in isolatie uit te voeren als ‘containers’;
    beide softwares worden dikwijls gebruikt voor de installatie van andere software (naast apt als package manager)
  • Git” en “GNU Stow”:
    Git is een gedistribueerd versiebeheersysteem en kan gebruikt worden om broncode te distribueren;
    Stow is een symbolische linkbeheerder die ervoor zorgt dat verschillende softwarepakketten,
    die zich in aparte mappen op het bestandssysteem bevinden, lijken te zijn geïnstalleerd op dezelfde locatie;
    beide softwares worden dikwijls gebruikt om software settings en data te distribueren en synchroniseren

Vervolgens gebruikte ik deze template lxc om de “home-devdepserver” server aan te maken.
Deze server zal ik later gebruiken en uitbouwen voor de development en deployment van eigen applicaties.
Ik installeerde daarna bijkomend de “Ansible” software op deze lxc via scripts.

4 - Vereenvoudig het refereren naar services en applicaties in thuisnetwerk

Homarr

Als eerste wou ik servers in mijn thuisnetwerk een logische hostnaam geven om er gemakkelijk naar te kunnen refereren.
Omdat ik zelf geen eigen DNS-server wou hosten, heb ik hiervoor subdomeinen van mijn geregistreerde publieke domeinnaam gebruikt.
Voor mijn geregistreerde domeinnaam “robertthecoder.org”, koppelde ik subdomeinen als logische hostnaam aan privé-IP-adressen.
Aangezien dit privé-IP-adressen zijn, zijn deze hostnamen enkel toegankelijk binnen mijn lokale netwerk.
Om deze subdomeinen voor privé-IP-adressen gemakkelijk te kunnen onderscheiden van andere subdomeinen,
geef ik ze altijd de prefix “home-”.
Zo maakte ik een nieuw A-record aan op Cloudflare (als DNS-registrar) met de naam “home-devdepserver.robertthecoder.org”,
en een privaat IPv4-adres voor mijn “home-devdepserver”-server.

Om op een eenvoudige manier toegang te hebben tot al mijn services en applicaties,
maakte ik een eigen homelab dashboard/portal aan.
Dit web dashboard bevat widgets en links die in groepen ingedeeld werden.
Voor de implementatie koos ik voor de populaire en gratis “Homarr” software,
op een nieuwe lxc container “home-utilityserver” (vs Homer, Heimdall, Glance, Homepage, Dashy).
Ik gaf deze server ook de DNS-naam “home-utilityserver.robertthecoder.org”,
en voegde een Inbound rule toe aan de host-firewall om toegang tot homarr toe te staan.

Bitwarden

De meeste services en applicaties vereisen een paswoord om toegang te hebben.
Om deze paswoorden te beheren, gebruikte ik tot nog toe de gratis versie van “Bitwarden” (vs “Passbolt”, “LastPass”).
Deze tools worden online password managers genoemd, omdat een netwerk connectie noodzakelijk is voor gebruik.
Er bestaan ook offline gui password managers (bv “KeePass”) en offline console password managers (bv “password-store”).
Tevens installeerde ik KeePassXC op mijn Windows/Linux machines en Keepass2Android op mijn Android smartphone.
Ik maakte de “KD-MySecrets” database aan op mijn lokale Windows pc.
Vervolgens copieerde ik manueel deze “KD-MySecrets” database-file ook naar mijn Linux desktop en Android smartphone.
Ik leerde dan het gebruik van deze software op mijn Windows pc, Linux laptop en Android smartphone.

5 - Server tools voor development en deployment van web apps

Op mijn windows development pc werd reeds “Git”, “VSCode” met “Git Graph” en “MSEdit” geïnstalleerd.
Ik installeerde nu bijkomend “Docker”, “Podman” en “Portainer” op mijn windows pc.

In vorige projecten maakte ik voor de deployment van mijn website reeds gebruik van de publieke github.com site.
Voor de development en deployment van eigen applicaties wil gebruik ook maken van een git repository manager.
Omdat ik deze git repository manager zelf wil hosten op mijn eigen home server,
vergeleek ik hiervoor populaire softwares: “GitLab - Community Edition” en “Gitea - Free Edition”.

Ik leerde eerst de gitlab-basis op de publieke gitlab.com site.
Ik leerde hier niet enkel de basis Git-commando’s, maar ook de bijkomende Gitlab functionaliteit.
Een eenvoudige HelloWorld-applicatie werd aangemaakt en opgeslagen, gebruikmakend van een Gitlab CI pipeline.
Via Docker werd voor deze voorbeeld-applicatie een container image aangemaakt,
die dan werd opgeslagen in de Gitlab Container Registry.

Gitea

Omdat deze GitLab software veel resources vergt en voor mij te uitgebreide functionaliteit bevat,
koos ik uiteindelijk voor de “Gitea” software.
Gitea is een lightweight GitHub alternatief, speciaal gemaakt voor self-hosting en bevat:

  • “Gitea” (vs “GitLab”, “GitHub”) als repository voor source code
  • “Gitea Actions” (“GitHub Actions” alternatief, vs “Gitlab CI & Runners”, “Jenkins”) als build server
  • “Gitea Package Registry” (vs “Gitlab Registry”, “Nexus”) als registry voor binaries en oci images

Ik installeerde nu hier bijkomend de laatste free versie van Gitea.
Op de lokale Gitea-server heb ik eerst drie “organization”-s aangemaakt:
“robertthecoder-app”, “robertthecoder-util” en “robertthecoder-example”.
Repositories zullen voortaan altijd in een van deze “organization”-s aangemaakt worden.
In deze sectie installeerde ik dus de Gitea software naast Ansible op “home-devdepserver”.

In het vorige gedeelte heb ik mappen aangemaakt op mijn lokale Windows-machine:
de map ‘dotfiles’ voor Stow, de database ‘KD-MySecrets’ voor KeePass, en de kluizen ‘OV-ComputerTech’ en ‘OV-MyHomeLab’ voor Obsidian.
Om deze mappen overal toegankelijk te maken en back-ups te bewaren,
heb ik er git-repositories voor aangemaakt in Gitea.
Nieuwe kennis zal voortaan daarom in deze Obsidian vaults bijgehouden worden,
en reeds bestaande informatie zal gradueel ook opgenomen worden in deze vaults.

6 - Installatie JetKVM

JetKVM

De IP based KVM van JetKVM werd nu pas geleverd (zie blog-post van 01-10-2025).
Deze KVM werd gekoppeld aan mijn home-server en uitgetest.
De JetKVM ga ik later gebruiken om de bestaande “proxmox01” en “nas-fileserver” volledig opnieuw te installeren
als “home-pve” en “home-backupserver” via script files.