Files
hetzner_server/README.md
2026-08-09 13:05:59 +05:45

51 lines
2.7 KiB
Markdown

# 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
```text
.
├── 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:
```env
CLOUDFLARE_API_TOKEN=your_token_here
# Add other required database passwords and variables here
```
4. Start up the entire stack:
```bash
docker compose up -d
```
5. To view logs for a specific service (e.g., Gitea) to troubleshoot startup:
```bash
docker compose logs --tail=100 -f gitea
```