GitHub Actions Self-Hosted Runner on Linux: Setup Guide
When my GitHub Actions minutes ran out, I made a Linux server a self-hosted runner: dedicated user, SHA256 check, systemd, labels and security trade-offs.
When my GitHub Actions minutes ran out, I made a Linux server a self-hosted runner: dedicated user, SHA256 check, systemd, labels and security trade-offs.
When my GitHub account was suspended I moved my repos and Jekyll blog to GitLab, then came back. How GitLab CI and GitHub Actions differed, and what I kept.
Event streaming on Kafka 4 without ZooKeeper (KRaft): partition sizing, a no-loss producer, offset commits and rebalance tuning, with confluent-kafka in Python.
Git branching strategies compared: GitFlow, trunk-based development, merge queues, squash merges, Conventional Commits, pre-commit hooks and git bisect.
Object storage with MinIO: stateless apps, boto3 and presigned URLs, erasure coding, object lock, and what to run now that the community edition is archived.
Prometheus and Grafana monitoring in practice: avoiding cardinality blowups, PromQL for the golden signals, recording rules, Alertmanager routing, Thanos.
Full-text search with Elasticsearch 8/9 and the Python client: strict mappings, language analyzers, zero-downtime reindexing with aliases, shards, pagination.
Nginx as reverse proxy and load balancer: micro-caching, rate limiting, HTTP/2 and HTTP/3, security headers and JSON logs. A practical guide for nginx 1.30.
What to get right before running Kubernetes in production: resources and QoS, probes, CrashLoopBackOff debugging, Gateway API, Secrets, HPA and pod security.
Python logging best practices: stdlib logging rules, JSON logs with structlog, request IDs, redacting secrets, OpenTelemetry trace IDs, common mistakes.
Graceful shutdown for Python services: catching SIGTERM in plain Python and asyncio, the Docker PID 1 trap, Kubernetes preStop and systemd services.
Self-hosted monitoring with Uptime Kuma 2: Docker setup, reverse proxy, keyword and push monitors, Telegram and webhook alerts, hardening and backups.
A practical Traefik v3 setup for Docker: label-based routing, automatic Let's Encrypt SSL, middlewares, sticky sessions, canary releases and v2 migration traps.
How I dockerize Python apps: a multi-stage Dockerfile with uv, a non-root user, a healthcheck without curl, Docker Compose for local dev and SHA image tags.