Pulumi Basics: Infrastructure as Code With Real Languages
Get started with Pulumi: infrastructure in TypeScript or Python, projects and stacks, self-managed S3 state, secrets, preview and up, vs Terraform.
Blog
Docker, Kubernetes, CI/CD, Git and automation for deploying and running software on servers.
Get started with Pulumi: infrastructure in TypeScript or Python, projects and stacks, self-managed S3 state, secrets, preview and up, vs Terraform.
A GitLab CI/CD pipeline that tests, builds and deploys to your VPS over SSH, with protected variables, known_hosts and manual production deploys.
Use git stash to shelve uncommitted work: messages, untracked files, list, apply vs pop, partial stashes, branching from a stash, and recovering dropped ones.
Build and push Docker images with GitHub Actions: buildx, GHCR, version and SHA tags, caching, multi-arch builds, scanning, and deploying to a VPS.
Install the Docker Compose v2 plugin on Linux via apt or manually, understand docker compose vs docker-compose, migrate old projects and fix common errors.
Use semantic versioning (MAJOR.MINOR.PATCH) for apps and APIs: what to bump when, pre-releases, Git tags, changelogs, automated releases and image tagging.
Install and register a self-hosted GitLab Runner on Linux with the Docker executor: tokens, config.toml tuning, concurrency, caching, security and cleanup.
Use git cherry-pick to copy commits between branches: backporting fixes, picking ranges, resolving conflicts, -x for traceability, and when not to use it.
Set up rootless Docker on Ubuntu or Debian: prerequisites, install, the systemd user service, DOCKER_HOST, low ports and limitations.
Keep Docker containers updated with Watchtower: schedules, monitor-only mode, opt-in labels, notifications, and when not to auto-update.
Install Docker Engine and Docker Compose on Debian from the official repository, configure log limits, run without sudo and avoid the UFW pitfall.
Automate checks with Git hooks: pre-commit and commit-msg, sharing hooks with core.hooksPath or the pre-commit framework, and post-receive deploys.
Structure Ansible with roles: directory layout, tasks, handlers and templates, defaults vs vars, using roles in playbooks, Galaxy dependencies, and Molecule.
What cloud-init does on VPS and cloud images, user-data with cloud-config examples for users, SSH keys, packages and files, debugging logs, and disabling it.
Undo the last Git commit safely: amend it, reset soft, mixed or hard, revert a pushed commit, recover with reflog, and fix commits on the wrong branch.
Write and use Terraform modules: variables and outputs, local and registry modules, version pinning, for_each instances, composition, testing, and pitfalls.
Run PostgreSQL with Docker Compose properly: volumes, secrets, init scripts, health checks, tuning, pg_dump backups and major version upgrades.
Understand git merge and git rebase: how history looks, fast-forward and merge commits, interactive rebase, conflicts, the golden rule, and team workflows.
Host your own Docker registry: TLS via Nginx, authentication, pushing and pulling images, storage, garbage collection and a Docker Hub mirror.
Learn HashiCorp Packer: HCL templates, builders and provisioners, a hardened Ubuntu image, versioning, and when golden images beat boot-time setup.
Fix permission denied on /var/run/docker.sock: docker group, new login sessions, rootless Docker and the security trade-off of each fix.
Use Vagrant for disposable development and test VMs: Vagrantfile basics, boxes, providers, synced folders, networking and Ansible provisioning.
Install Git from distro packages or the latest version via PPA, configure identity and defaults, set up credentials or SSH, and verify everything works.
Set CPU and memory limits for Docker containers with docker run and Compose, understand OOM kills and swap, reservations, live updates and monitoring usage.