Get started on my own blog

This commit is contained in:
Lol3rrr
2026-02-17 00:09:09 +01:00
commit 12bf8b7ef8
12 changed files with 186 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
public/

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "themes/radion"]
path = themes/radion
url = https://github.com/micahkepe/radion.git

9
Dockerfile Normal file
View File

@@ -0,0 +1,9 @@
FROM ghcr.io/getzola/zola:v0.22.1 as zola
COPY . /project
WORKDIR /project
RUN ["zola", "build"]
FROM ghcr.io/static-web-server/static-web-server:2
WORKDIR /
COPY --from=zola /project/public /public

5
content/_index.md Normal file
View File

@@ -0,0 +1,5 @@
+++
title = "List of blog posts"
sort_by = "date"
paginate_by = 10
+++

View File

@@ -0,0 +1,12 @@
+++
title = "Ceph Benchmarking"
date = 2026-03-01
description = "The results of some of my recent ceph benchmarks"
draft = true
[taxonomies]
categories = ["Homelab"]
tags = ["Homelab", "Ceph"]
+++
TODO

View File

@@ -0,0 +1,20 @@
+++
title = "Homelab - IPv4 Expose"
date = 2026-02-16
description = "How I expose my IPv6 only Homelab for IPv4 clients"
draft = true
[taxonomies]
categories = ["Homelab"]
tags = ["Homelab", "IPv4", "IPv6"]
+++
## Current Setup
Currently I am renting a VPS which runs a custom proxy, that loads the configuration from consul based on tags and then accepts traffic on the proper ports and forwards it manually.
## Plan
Services that need to be exposed get their own virtual IPv6 address using keepalived. The active/master node will be forced to the node on which the service is currently running using priorities.
On my external server setup Jool with SIIT-DC and iptable rules.
1. Everything coming in at the given port for the service (for example HTTP, Teamspeak, etc.) is redirected to a different internal IPv4 address using iptables
2. Jool listens on the internal IPv4 address and performs SIIT-DC or SIIT-EAM forwarding to the correct virtual IPv6 address

View File

@@ -0,0 +1,10 @@
+++
title = "Homelab - Monitoring"
date = 2026-02-16
description = "My current homelab monitoring setup"
draft = true
[taxonomies]
categories = ["Homelab"]
tags = ["Homelab"]
+++

View File

@@ -0,0 +1,53 @@
+++
title = "Homelab - Overview"
date = 2026-02-16
description = "A quick and rough overview of my Homelab setup"
draft = true
[taxonomies]
categories = ["Homelab"]
tags = ["Homelab", "Ceph", "Vault", "Nomad", "Consul"]
+++
The goal of this post to give a quick high-level overview of my current Homelab setup, to avoid having to re-explain everything on every following post that focuses on one part of it.
## Hardware
- Unifi Network setup
- Normal and Management traffic over 1GbE
- Cluster networking using 10GbE
- 3 Servers
- 4-8 Cores (8-16 Threads)
- 64GB RAM
- APC UPS
## Internet
For my internet connection I only have normal residential internet with 250Mb down and 50Mb up.
This means I have no public IPv4 address, but have a /48 IPv6 Prefix, which is not ideal but at least the IPv6 forces me to learn it and use "newer" technologies (if you consider IPv6 "new").
## Infrastructure
Getting to the more interesting bits now.
The foundational setup consists of Consul, Nomad, Vault and Ceph.
Vault is responsible for all my secret management and runs mostly independent of anything else. For this purpose it is running as 3-node cluster, with automatic unsealing using GCP KMS and using the integrated raft storage backend.
This should ensure that apart from unsealing, my vault cluster is always operational and does not depend on anything else, which might complicate setup during a cold-start / entire cluster restart.
Consul is my service discovery and service mesh of choice and also acts as a simple KV store for some minor things, to help orchestrate things.
Nomad is setup on top of consul and is my container/application orchestrator of choice. This is also integrated with vault to provide easy secret management, for any service that might need it.
Basically everything that I deploy to my cluster is deployed to nomad for easier management.
The last foundational piece is my 3-node Ceph cluster, which provides the persistent storage for all of my deployed services.
For this purpose it provides both S3 compatible storage using cephs' RGW and also provides block storage using RBD to my containers using the ceph-csi plugin.
In the future I also plan to try out using ceph to provide storage for my desktop using RBD directly on linux or use iSCSI or NvmeoF for windows, but that is still in the planning/draft stage.
## Ingress Traffic - IPv6
For HTTP/HTTPS traffic, I have a single traefik instance deployed, which handles all the routing to the different services.
Traefik itself dynamically loads the configuration from consul, looking for services with specific tags.
Other TCP traffic is usually forwarded to the correct service directly, like for minecraft servers or teamspeak. I plan to improve this a bit, but currently this work fine and thus there is little urgency for me to fix this.
## Ingress Traffic - IPv4
As previously mentioned, I do not have a public routable IPv4 address, which makes this setup a bit more complex.
Over time I had a lot of different setups for this, but currently I settled on having a custom proxy, which dynamically loads the services that should be exposed from consul and then forwards the traffic on the ports accordingly.
This setup is definetly not ideal and I want to move towards a better more scalable approach, with something like SIIT but I will have to see.

View File

@@ -0,0 +1,12 @@
+++
title = "Quickfacts - Part 1"
date = 2026-03-01
description = "The first part of a series about my Quickfacts project"
draft = true
[taxonomies]
categories = ["Programming"]
tags = ["Factorio", "Rust"]
+++
TODO

View File

@@ -0,0 +1,12 @@
+++
title = "Quickfacts - Intro"
date = 2026-03-01
description = "An introduction to my Quickfacts project"
draft = true
[taxonomies]
categories = ["Programming"]
tags = ["Factorio", "Rust"]
+++
TODO

1
themes/radion Submodule

Submodule themes/radion added at 76aaf58d60

48
zola.toml Normal file
View File

@@ -0,0 +1,48 @@
# The URL the site will be built for
base_url = "https://personal.lol3r.com"
# Whether to automatically compile all Sass files in the sass directory
compile_sass = true
# Whether to build a search index to be used later on by a JavaScript library
build_search_index = true
theme = "radion"
taxonomies = [
# You can enable/disable RSS
{ name = "categories", feed = true },
{ name = "tags", feed = true },
]
author = "Leon"
generate_feeds = true
[search]
index_format = "elasticlunr_json"
[markdown]
[markdown.highlighting]
theme = "catppuccin-mocha"
[extra]
# Put all your custom variables here
enable_search = true
taxonomies = [
# You can enable/disable RSS
{ name = "categories", feed = true },
{ name = "tags", feed = true },
]
radion_title = "Leon's Personal Blog"
radion_menu = [
{ url = "$BASE_URL", name = "Home" },
{ url = "$BASE_URL/categories", name = "Categories" },
{ url = "$BASE_URL/tags", name = "Tags" },
]
theme = "toggle" # options: {light, dark, auto, toggle}
toc = true
comments = false
codeblock = true