CASE-0010 · MISSION REPORT任務報告
FEATUREDMaintained

space-server

Self-hosted personal infrastructure — 15+ containerized services on a Hetzner VPS, behind Traefik, with full mail server.

space-server screenshot
KEY FEATURES
  • 15+ self-hosted services on a single Hetzner VPS — mail, blog, portfolio, monitoring, logs
  • Full mail server (docker-mailserver + Roundcube) with SPF, DKIM, DMARC configured
  • Traefik v3.6 fronts everything with automatic Let's Encrypt SSL, DNS-validated
  • Documented migration: 12 minutes total downtime moving 15+ services laptop → VPS
OVERVIEW

stars last commit license

Self-hosted personal infrastructure — from old laptop to Hetzner VPS

space-server is the entire stack that powers my online presence — mail server, Ghost blog, portfolio, monitoring, logs — orchestrated with Docker Compose and fronted by Traefik. The repo also documents the migration: 30+ commits debugging the mail server, automated migration scripts, 12 minutes of total downtime moving 15+ services from a laptop to a VPS.

Why I built it

I was tired of depending on third-party services for basic things — email, hosting, backups. I wanted full control over my data and to learn how modern web infrastructure actually works in practice (not in a course). So I turned an old laptop into a home server, broke it a hundred times, learned Traefik and DKIM and DMARC and Docker volumes the hard way, and eventually migrated everything to a Hetzner VPS when the laptop couldn't keep up.

What it does

  • 15+ containerized services — full mail server (docker-mailserver + Roundcube), Ghost blog (with MySQL), personal portfolio (React + Laravel API), Grafana + Prometheus + Uptime Kuma for monitoring, Dozzle for centralized logs.
  • Traefik v3.6 as the edge — automatic SSL via Let's Encrypt, DNS-validated for everything.
  • docker-mailserver with full SPF, DKIM, and DMARC configured (and 30+ commits' worth of bug stories).
  • Documented migration — automated scripts, blog post walkthroughs, and lessons learned (Hetzner blocks port 25, migrated Docker volumes can have wrong permissions, Docker networks aren't portable).
  • Production hardware — Hetzner VPS (8GB RAM, Intel Xeon, Ubuntu 24.04).

Stack

Docker + Docker Compose, Traefik v3.6, docker-mailserver, Roundcube, Ghost 5, MySQL 8, Grafana, Prometheus, Uptime Kuma, Dozzle, Let's Encrypt.

Status

Live in production. Hosts every service I run — including the Ghost blog and portfolio you're reading.

cativo.dev API·checking…·自家管理
--:--:--·UTC-6 SV
GitHub·LinkedIn·X·© 2026