2026-08-26 22:48:49 +05:45
2026-08-26 22:48:49 +05:45
2026-08-10 13:53:48 +05:45
2026-04-11 21:16:37 +05:45
2026-04-06 22:27:08 +05:45

Hetzner VPS Infrastructure

This repository contains the configuration and orchestration files for my personal VPS hosted on Hetzner. The infrastructure is entirely containerized using Docker and Docker Compose, with Caddy acting as a dynamic reverse proxy.

🏗 Architecture Overview

  • Orchestration: Docker Compose is used to manage all services. To keep things clean, the main docker-compose.yml imports individual service definitions from the services/ directory using the include directive.
  • Reverse Proxy: Caddy routes all incoming HTTP/HTTPS traffic to the correct containers. We use a custom Caddy build that includes the Cloudflare DNS plugin. This allows Caddy to automatically provision SSL certificates via DNS challenges, even for services not exposed to the public internet.
  • Security & Access Model: Access to services is split into two distinct tiers:
    • Public Services: (e.g., Gitea, Immich, public websites) Accessible from the open web.
    • Private/VPN Services: (e.g., Portainer, Vaultwarden, Filebrowser) Within the Caddyfile, these are explicitly bound to a private VPN IP (Tailscale/Netbird, e.g., 100.81.85.182). These services are completely hidden from the public internet and can only be accessed while connected to the VPN.

📂 Directory Structure

.
├── docker-compose.yml  # Main entrypoint that includes all modular services
├── services/           # Individual service compose configurations (*.yml)
├── caddy/              # Custom Caddy Dockerfile and main Caddyfile configuration
├── data/               # Persistent data storage for all running containers
└── .env                # Environment variables and secrets (Cloudflare tokens, DB passwords, etc.)

🛠 Included Services

The stack currently runs a variety of self-hosted tools:

  • Infrastructure: Caddy (Proxy), Portainer (Container UI), Uptime Kuma (Monitoring)
  • Development: Gitea (Git Server), Woodpecker (CI/CD Pipeline)
  • Productivity: Vaultwarden (Passwords), Memos (Notes), Docmost (Wiki), Actual (Budgeting)
  • Media & Files: Immich (Photos), Syncthing (File Sync), Filebrowser (Web File Manager)
  • Automation: n8n (Workflow Automation)

🚀 Deployment

  1. Ensure Docker and Docker Compose are installed on the server.
  2. Clone this configuration repository to your VPS.
  3. Create a .env file in the root directory containing your necessary secrets:
    CLOUDFLARE_API_TOKEN=your_token_here
    # Add other required database passwords and variables here
    
  4. Start up the entire stack:
    docker compose up -d
    
  5. To view logs for a specific service (e.g., Gitea) to troubleshoot startup:
    docker compose logs --tail=100 -f gitea
    
Description
No description provided
Readme 71 KiB
Languages
Dockerfile 100%