fix: Caddy and woodpecker for new stuff
This commit is contained in:
50
README.md
Normal file
50
README.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user