Single-VM DevOps portfolio platform for shellr.net.
This repository contains the platform behind shellr.net: a public landing page, a legacy DMA workload, reverse proxying, TLS, CI/CD, monitoring, logging, backup, and technical documentation. The goal is not to imitate enterprise scale, but to show production-like engineering decisions on a small Hetzner VM with explicit runtime boundaries.
https://shellr.net- personal landing page and platform frontdoorhttps://dma.shellr.net- DMA applicationhttps://status.shellr.net- public uptime and service statushttps://docs.shellr.net- technical documentation on GitHub Pageshttps://grafana.shellr.net- protected monitoring surface
flowchart TD
Internet --> Nginx["Nginx reverse proxy"]
Nginx --> Shellr["shellr.net"]
Nginx --> DMA["dma.shellr.net"]
Nginx --> Status["status.shellr.net"]
Nginx --> Grafana["grafana.shellr.net"]
Shellr --> App["Portfolio app container"]
DMA --> DmaApp["DMA app container"]
DmaApp --> DB["MariaDB"]
Prom["Prometheus"] --> Grafana
Kuma["Uptime Kuma"] --> Prom
Loki["Loki"] --> Grafana
Docs["docs.shellr.net"] --> Pages["GitHub Pages"]
- Docker Compose runtime on a single Hetzner VM
- Nginx ingress with TLS termination and hostname-based routing
- PHP application workloads with MariaDB
- GitHub Actions deployment over SSH with health checks
- Monitoring through Prometheus, Grafana, Node Exporter, cAdvisor, and Uptime Kuma
- Logging through Loki and Promtail
- Backup and restore through database dumps, file archives, and explicit restore scripts
/projects/genesis
app/ shellr.net landing page
dma/ DMA application
infra/
compose/ main runtime stack
nginx/ reverse proxy and TLS config
monitoring/ Prometheus, Grafana, Kuma, cAdvisor
logging/ Loki and Promtail
backup/ backup artifacts and cron definitions
scripts/ deploy, backup, restore, and helper scripts
docs/ technical documentation and GitHub Pages source
docker network create genesis_frontend || true
docker network create genesis_backend || true
docker network create genesis_monitoring || truecp infra/compose/.env.example infra/compose/.env
cp infra/monitoring/.env.example infra/monitoring/.env
cp infra/logging/.env.example infra/logging/.envFill in real secrets before starting the platform.
docker compose \
--env-file infra/compose/.env \
-f infra/compose/docker-compose.yml \
up -d --builddocker compose \
--env-file infra/monitoring/.env \
-f infra/monitoring/docker-compose.monitoring.yml \
up -ddocker compose \
--env-file infra/logging/.env \
-f infra/logging/docker-compose.logging.yml \
up -d- Docs Index
- Projects
- Architecture
- Deployment Flow
- Monitoring
- Logging
- Routing and DNS
- Backup and Restore
- Lessons Learned
- GitHub Pages
docs.shellr.netis intentionally hosted on GitHub Pages, not on the VMgrafana.shellr.netis intentionally protected and not meant to be publicly browsable- retention is deliberately short to protect disk on a 40 GB host
- the platform is designed for maintainability and explainability over tool sprawl