← Back to portfolio

PROJECT 03 • INFRASTRUCTURE • SELF-HOSTED

Personal Home Server

A practical self-hosted environment built around Synology, Docker, networking and secure remote access — used as the foundation for applications and data projects such as the household receipt system.

SynologyDockerTailscaleReverse ProxySSL/TLSNetworking

Why I built it

I wanted to better understand how the services I use every day actually work behind the scenes. Building my own server gave me a place to configure, break, troubleshoot and improve real services instead of learning infrastructure only in theory.

What I worked on

Containers & services

Deploy and maintain self-hosted applications with Docker while learning container networking, persistent storage and configuration.

Networking

Work through DNS, routing, ports, HTTPS and reverse-proxy behavior to make services reachable in controlled ways.

Remote access

Use Tailscale and other controlled access paths rather than exposing management services directly to the public Internet.

Web hosting

Host this portfolio and learn how document roots, certificates, HTTPS redirects, security headers and custom error pages work in practice.

Troubleshooting

Trace application, DNS, routing, certificate and configuration problems across several layers instead of assuming the first visible error is the root cause.

Foundation for data projects

Use the infrastructure as the platform for PostgreSQL, document processing, workflow automation and other household/data experiments.

Public-site security work

Because the portfolio is served from the NAS, I separated its public document root from Docker application data and hardened the public site without exposing administration services.

  • Public portfolio files are isolated from Docker application/configuration directories.
  • The Web Station service only needs read access to the static site.
  • HTTP redirects permanently to HTTPS; HSTS is enabled after validating the redirect.
  • A restrictive Content Security Policy blocks inline scripts/styles, third-party scripts and browser-side connections.
  • connect-src 'none' prevents the public portfolio from making browser-side API/WebSocket connections to NAS services.
  • Custom error pages avoid exposing server or infrastructure details.

Security boundary

The public case study intentionally describes the technologies and design choices without publishing private IP addresses, management URLs, credentials, container identifiers, internal hostnames or sensitive configuration details.

What I learned

Working across storage, containers, DNS, routing, certificates, access controls and application configuration made troubleshooting much more systematic. It also gave me a better understanding of how application projects depend on infrastructure decisions underneath them.

Skills demonstrated

DockerSynologyNetworkingTailscaleSSL/TLSWeb HostingReverse ProxySecurity HardeningTroubleshootingSelf-Hosting