A personal corner of the internet

Hi, I’m Alau.
I build things
that keep running.

DevOps engineer. Software developer. Homelab tinkerer.

From .NET applications to the infrastructure behind them, I enjoy turning moving parts into reliable systems.

Built by me. Hosted at home.
MY TOOLBOX.NET / C#AzureDockerGitHub ActionsTerraformCloudflareArgoCDLinux

GitHub

Source control & Actions CI/CD for every push

Terraform

Infrastructure as code for Azure and the homelab

ArgoCD

GitOps delivery for Kubernetes workloads

Cloudflare

Tunnels and DNS in front of everything I host

Docker

Packaging for the site, the sandbox and the lab

Azure

AKS, PostgreSQL and identity for the sandbox

01 / Sandbox

A place to run things.

Infrastructure, experiments
and useful side projects.

Infrastructure / Azure / v4

Azure platform sandbox

Build the expensive parts for a session. Destroy them when the work is done.

A small Azure learning environment for Kubernetes experiments. Terraform keeps one folder per resource group, while GitHub Actions creates the session resources and clears the largest costs every morning.

  • Terraform
  • AKS
  • PostgreSQL
  • GitHub Actions
  • Azure RBAC
  • Key Vault
  • ACR
Explore the infrastructure source
Planning estimate
$20–35 USD, before tax
Session target
~10% of the month active
Terraform states
One per folder in Azure Blob Storage
01 / Architecture

One folder. One resource group.

  1. StateBootstrap
    • State resource group
    • Blob Storage backend
    • Separate state per module
    Created once
  2. Always availableFoundation
    • Network + subnets
    • Storage + Key Vault
    • Dashboard + ACR
    Low idle cost
  3. Session resourcesCompute + database
    • One AKS D2s v3 node
    • Private PostgreSQL
    • AKS-managed node group
    Created and destroyed on demand
Each Terraform module owns one Azure resource group. AKS creates its node resource group and manages its contents.

Private database

PostgreSQL uses a delegated subnet and private DNS inside the virtual network. AKS has its own subnet and managed node group.

Simple state

Every module writes an isolated state blob. GitHub Actions supplies the shared Azure name and region as repository variables.

02 / Lifecycle

Start a session. Clear the cost.

  1. 01 / PushDeploy a module

    Each folder has its own workflow.

  2. 02 / StartCreate database + AKS

    Bring up the expensive session resources.

  3. 03 / UseRun the experiment

    Connect to Kubernetes and test workloads.

  4. 04 / DestroyRemove expensive resources

    AKS first, PostgreSQL second.

The session workflow supports manual start or destroy. Scheduled cleanup runs at 08:00 UTC.

Workflow-driven

GitHub Actions applies each resource-group module independently. The backend state lock protects concurrent changes.

Destroy, do not stop

Destroying AKS removes its node VMSS, load balancer, public IP, disk and node resource-group contents. Destroying PostgreSQL ends its compute charge.

03 / At a glance

The important numbers.

Planning estimate

$20–35 before tax if AKS and PostgreSQL are active around 10% of the month. Pricing is a planning estimate, not a bill or spending cap.

What it provides

AKS, private PostgreSQL, Blob Storage, Key Vault, Azure Container Registry, managed identities and focused GitHub Actions automation.

The estimate is a planning range, not a spending cap. Azure budget alerts notify but do not stop resources.

04 / Full flow

From change to session.

flowchart LR
    Dev["Developer push"] --> GH["GitHub Actions"]
    GH --> State["Azure Blob state"]
    GH --> Network["Network module"]
    GH --> Session["Database + AKS"]
    Session --> AKS["AKS sandbox"]
    Clock["08:00 UTC"] --> Destroy["Destroy expensive resources"]
    Destroy --> Session
                
Each change is applied through a focused workflow; scheduled cleanup removes the costly session resources.

Other projects

WEB / PLATFORM01

This little corner of the web

A lightweight personal website built with HTML, CSS, and JavaScript. Served by Nginx and deployed to my home server through GitHub Actions.

  • HTML / CSS / JS
  • Docker
  • CI/CD
Explore the source
MUSIC / PERSONAL02

A change of pace

A collection of music I keep coming back to. Pick something from the collection, or let a random selection take the lead.

  • Curated collection
  • Random discovery
Find your next track

02 / Behind the scenes

Less cloud.
More living room.

This site lives on my own Ubuntu server. The homelab is where I experiment, automate, and get hands-on with the systems that make software work.

Every update follows the same path: build an image, publish it, and deploy it at home.

See the deployment workflow
THE PATH TO PRODUCTION
  1. 01

    Push & build

    GitHub Actions packages the static site.

    CI
  2. 02

    Package & publish

    Docker image stored in GitHub Container Registry.

    GHCR
  3. 03

    Bring it home

    Docker Compose runs Nginx on Ubuntu.

    HOST
  4. 04

    Hello, internet

    Cloudflare Tunnel connects you to this site.

    EDGE

03 / A bit about me

Curious by default.
An engineer by practice.

I’m Alau Bolatov, a DevOps engineer and software developer working with .NET, Azure, and infrastructure automation. I like understanding how things fit together, from the code to the container to the machine it runs on.

When the terminal closes, the music starts

Off the clock / On repeat

A soundtrack for the side projects.

Some familiar favorites. A few new directions. Pick a video or see where shuffle takes you.

Your collection / To go

A link. A music file.

Paste a YouTube video link to save its audio as an MP3 on the home server. Download it to listen in your favorite music player.

Use the key configured on your server. It is not stored by this website.

One video at a time, up to one hour and 150 MB. Use videos you own or have permission to download.

Saved audio

Enter your access key to load files saved on your server.