My set-up for some private, self-hosted services
  • Shell 88.7%
  • JavaScript 11.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-15 16:40:11 +02:00
activepieces feat(activepieces): add Activepieces and shared Redis stacks 2026-06-24 23:07:48 +02:00
backrest backrest: add shared_internal_net for Postfix access; backup /opt/sites 2026-04-02 17:35:58 +02:00
backup backup: fix vw-restore-test SMTP config error and postgres password reset 2026-04-02 22:52:24 +02:00
beszel docs: split install guide into per-service READMEs; add FreeScout 2026-06-13 17:05:09 +02:00
dockge first public release 2026-02-16 21:50:54 +01:00
forgejo forgeje registration info 2026-09-14 16:10:07 +02:00
freescout freescout postfix access 2026-09-15 16:40:11 +02:00
freshrss docs: split install guide into per-service READMEs; add FreeScout 2026-06-13 17:05:09 +02:00
glances docs: split install guide into per-service READMEs; add FreeScout 2026-06-13 17:05:09 +02:00
linkwarden docs: split install guide into per-service READMEs; add FreeScout 2026-06-13 17:05:09 +02:00
mariadb versions etc 2026-03-07 12:32:09 +01:00
matrix docs: split install guide into per-service READMEs; add FreeScout 2026-06-13 17:05:09 +02:00
nanoclaw docs(nanoclaw): add Matrix-driven deploy agent guide 2026-06-13 22:05:13 +02:00
obsidian-livesync obsidian-livesync 2026-09-08 11:04:00 +02:00
pangolin trust docker network for umami tracking 2026-03-25 21:32:22 +01:00
phpmyadmin docs: split install guide into per-service READMEs; add FreeScout 2026-06-13 17:05:09 +02:00
postfix add Postfix outbound SMTP relay stack 2026-02-25 19:41:57 +01:00
postgres move compose files into per-service folders, verify against live server 2026-02-26 20:17:33 +01:00
redis feat(activepieces): add Activepieces and shared Redis stacks 2026-06-24 23:07:48 +02:00
renovate renovate 2026-09-03 17:29:05 +02:00
umami docs: split install guide into per-service READMEs; add FreeScout 2026-06-13 17:05:09 +02:00
vaultwarden docs: split install guide into per-service READMEs; add FreeScout 2026-06-13 17:05:09 +02:00
woodpecker docs: split install guide into per-service READMEs; add FreeScout 2026-06-13 17:05:09 +02:00
woodpecker-github docs: split install guide into per-service READMEs; add FreeScout 2026-06-13 17:05:09 +02:00
.mcp.json feat: add Context7 MCP server config 2026-07-29 16:36:43 +02:00
AI.md feat: add Context7 MCP server config 2026-07-29 16:36:43 +02:00
BACKUP.md obsidian-livesync 2026-09-08 11:04:00 +02:00
INSTALL.md obsidian-livesync 2026-09-08 11:04:00 +02:00
LICENSE Initial commit 2026-02-16 21:50:27 +01:00
MAINTENANCE.md renovate 2026-09-03 17:29:05 +02:00
README.md obsidian-livesync 2026-09-08 11:04:00 +02:00

Self-hosted VPS with Pangolin

Configuration and documentation for running self-hosted services on a single VPS using Docker, managed through Dockge and exposed via a Pangolin reverse proxy with automatic HTTPS.

Prerequisites

  • A VPS (tested on Hetzner CX33, which handles the load with ease, but any provider will work)
  • A domain with a wildcard DNS A record pointing to the VPS
  • Docker Engine and Docker Compose v2
  • Basic familiarity with Docker and Linux

Services

Service URL Description
Pangolin pangolin.example.com Reverse proxy (Traefik + WireGuard tunnel)
Dockge Docker Compose management UI
MariaDB Shared database (internal only)
phpMyAdmin pma.example.com Database admin (behind Pangolin auth)
FreshRSS rss.example.com RSS reader
PostgreSQL Shared database (internal only)
Redis Shared queue/cache (internal only)
Linkwarden linkwarden.example.com Bookmark manager
Vaultwarden vault.example.com Password manager
Obsidian LiveSync sync.example.com CouchDB sync backend for the Obsidian Self-hosted LiveSync plugin (end-to-end encrypted)
Forgejo git.example.com Git forge (repos, issues, PRs) — SSH on port 2222
Woodpecker CI ci.example.com CI/CD with Codeberg integration (behind Pangolin auth)
Tuwunel matrix.example.com Matrix homeserver (federated)
Element Web chat.example.com Matrix web client
FreeScout support.<client>.com Help desk / shared inbox (one instance per client)
NanoClaw AI agent — Matrix-driven, edits a site and pushes staging for Woodpecker to deploy (outbound only)
Postfix Outbound SMTP relay (internal only)
Glances monitor.example.com System & container monitoring — real-time (behind Pangolin auth)
Beszel monitor.example.com System & container monitoring — historical + alerts (pick one)
Umami umami.example.com Privacy-friendly web analytics
Activepieces automate.example.com No-code/low-code workflow automation
Backrest backrest.example.com Restic backup web UI (behind Pangolin auth)
Renovate Dependency bot — opens update PRs on Forgejo (outbound only)

Documentation

  • INSTALL.md — Shared bootstrap (networks, Pangolin, Dockge, databases, Postfix) + index of per-service guides
  • BACKUP.md — Backup strategy (restic + rclone to Nextcloud)
  • MAINTENANCE.md — Recurring maintenance tasks and health checks
  • AI.md — AI usage policy and security guardrails

Each service directory contains its own README.md with install steps, .env keys, and the Pangolin resource to add.

Repo structure

├── pangolin/       # Pangolin stack: docker-compose, Traefik config
├── dockge/         # Dockge compose file
├── backup/         # Backup script and config templates
├── matrix/         # Tuwunel + Element Web compose stack
├── forgejo/        # Forgejo Git forge compose stack
├── woodpecker/     # Woodpecker CI compose stack
├── vaultwarden/    # Vaultwarden compose stack
├── linkwarden/     # Linkwarden compose stack
├── obsidian-livesync/ # CouchDB backend for the Obsidian LiveSync plugin
├── postgres/       # Shared PostgreSQL instance
├── redis/          # Shared Redis instance (queue/cache)
├── freshrss/       # FreshRSS compose stack
├── freescout/      # FreeScout help desk (instance-per-client)
├── nanoclaw/       # NanoClaw AI agent (Matrix-driven, deploys via Woodpecker)
├── phpmyadmin/     # phpMyAdmin compose stack
├── mariadb/        # Shared MariaDB instance
├── glances/        # Glances system monitoring stack (real-time)
├── beszel/         # Beszel system monitoring stack (historical + alerts)
├── postfix/        # Outbound SMTP relay stack
├── umami/          # Umami web analytics stack
├── activepieces/   # Activepieces workflow automation stack
├── backrest/       # Backrest restic UI stack
├── renovate/       # Renovate dependency bot (one-shot, host cron)
├── INSTALL.md      # Step-by-step installation guide
├── BACKUP.md       # Backup strategy documentation
├── MAINTENANCE.md  # Recurring maintenance checklist
├── AI.md           # AI usage policy
└── .mcp.json       # Context7 MCP server (up-to-date library docs for AI tooling)