Personal Ubuntu VPS lab: Ansible playbooks, reusable GitHub Actions, and nginx templates for sites I run on my own servers (apps on one host, monitoring on another).
Companion repo for day-to-day server scripts: linux-server-utils.
Start here: docs/getting-started.md - bootstrap, deploy keys, Bedrock provision, first deploy.
- Bootstrap / hardening for fresh VPS hosts (
ansible/playbooks/bootstrap-server.yml) - Bedrock WordPress site shell +
reusable-deploy-bedrock.yml - Laravel deploy via
reusable-deploy-laravel.yml(nginx vhost setup is still manual; see getting started) - Ops scripts on hosts via
site-ops.yml(clonelinux-server-utils, cron, local config templates) - Utils repo auto-sync via
reusable-sync-linux-server-utils.yml(called from linux-server-utils on push; seedocs/linux-server-utils-sync.md) - Multi-host inventory pattern (app server + monitoring server)
- CI-friendly deploy keys documented in getting started
- Not a product, shared framework, or copy-paste “platform team” stack
- Not employer or client production automation - personal lab only
- Not complete IaC: no Terraform module here yet; no Kubernetes
- Not every app type: Laravel nginx via Ansible (
site-nginx.yml) is still a stub
| Path | Purpose |
|---|---|
ansible/ |
Playbooks, roles, inventory examples |
.github/workflows/ |
Reusable workflows (app deploy + linux-server-utils sync) |
docs/getting-started.md |
Operator runbook for this lab |
docs/linux-server-utils-sync.md |
Push-to-server sync for linux-server-utils |
docs/testing-changes.md |
Staging vs ephemeral Hetzner VPS for playbook tests |
MIT