Files
2026-08-15 16:11:27 +02:00

135 lines
7.5 KiB
Markdown

# 🐳 Self-Hosted Docker Composes
A collection of Docker Compose files for every service running across my home lab infrastructure. Each file is standalone and ready to deploy.
**Infrastructure:** 2 nodes — HP EliteDesk (primary) · Raspberry Pi 4B (secondary)
**Reverse Proxy:** Nginx Proxy Manager (NPM)
**Tunnel:** Cloudflare Tunnel → public `*.jrodriiguezg.link` domains
---
## Repository Structure
```
docker-compose/
├── README.md
├── # ── Elitedesk (primary server) ──────────────────────────
├── gitea_compose.yaml
├── homeassistant_compose.yaml
├── jellyfin_compose.yaml
├── odoo_compose.yaml
├── synapse_compose.yaml
├── jwt_compose.yaml
├── navidrome_compose.yaml
├── kroki_compose.yaml
├── drawio_compose.yaml
├── excalidraw_compose.yaml
├── guacamole_compose.yaml
├── element_compose.yaml
├── picard_compose.yaml
├── lidarr_compose.yaml
├── beets_compose.yaml
├── transmission_compose.yaml
├── vaultwarden_compose.yaml
└── # ── Raspberry Pi 4B (secondary node) ────────────────────
├── npm_compose.yaml
├── homarr_compose.yaml
├── adguard_compose.yaml
└── arcane_compose.yaml
```
---
## Services
### 🖥️ Elitedesk — Primary Server
| Compose File | Service | Port | Public URL | Description |
|---|---|---|---|---|
| [`gitea_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/gitea_compose.yaml) | **Gitea** | 3000 | [git.jrodriiguezg.link](https://git.jrodriiguezg.link) | Self-hosted Git service |
| [`homeassistant_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/homeassistant_compose.yaml) | **Home Assistant** | 8123 | [hamaca.jrodriiguezg.link](https://hamaca.jrodriiguezg.link) | Home automation platform |
| [`jellyfin_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/jellyfin_compose.yaml) | **Jellyfin** | 8096 | [jellyfin.jrodriiguezg.link](https://jellyfin.jrodriiguezg.link) | Media server |
| [`odoo_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/odoo_compose.yaml) | **Odoo** | 8072 | [jotarcloud.jrodriiguezg.link](https://jotarcloud.jrodriiguezg.link) | ERP / test instance |
| [`synapse_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/synapse_compose.yaml) | **Synapse** | 8008 | [macarron.jrodriiguezg.link](https://macarron.jrodriiguezg.link) | Matrix homeserver |
| [`jwt_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/jwt_compose.yaml) | **JWT + RTC** | 8083 | [jwt.jrodriiguezg.link](https://jwt.jrodriiguezg.link) · [rtc.jrodriiguezg.link](https://rtc.jrodriiguezg.link) | JWT auth + WebRTC/coturn (Matrix auxiliaries) |
| [`navidrome_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/navidrome_compose.yaml) | **Navidrome** | 4533 | [navidrome.jrodriiguezg.link](https://navidrome.jrodriiguezg.link) | Music streaming server |
| [`kroki_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/kroki_compose.yaml) | **Kroki** | 8079 | — | Diagram-as-code rendering |
| [`drawio_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/drawio_compose.yaml) | **Draw.io** | 8091 | [drawio.jrodriiguezg.link](https://drawio.jrodriiguezg.link) | Self-hosted diagram editor |
| [`excalidraw_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/excalidraw_compose.yaml) | **Excalidraw** | 8071 | [excal.jrodriiguezg.link](https://excal.jrodriiguezg.link) | Collaborative whiteboard |
| [`guacamole_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/guacamole_compose.yaml) | **Guacamole** | 8087 | — | Browser-based remote desktop gateway |
| [`element_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/element_compose.yaml) | **Element Web** | 8086 | — | Matrix web client |
| [`picard_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/picard_compose.yaml) | **Picard Web** | 80 | — | MusicBrainz Picard web UI |
| [`lidarr_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/lidarr_compose.yaml) | **Lidarr** | 8686 | — | Music collection manager |
| [`beets_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/beets_compose.yaml) | **Beets** | 8337 | — | Music library organizer |
| [`transmission_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/transmission_compose.yaml) | **Transmission** | 9091 | — | BitTorrent client |
| [`vaultwarden_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/vaultwarden_compose.yaml) | **Vaultwarden** | 8383 | [vauwar.jrodriiguezg.link](https://vauwar.jrodriiguezg.link) | Self-hosted Bitwarden-compatible vault |
| ['vscode_docker_compose.yaml'](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/vscode_docker_compose.yaml) | **Vscode + Docker in Docker** | 8443 | Visual studio code web with docker |
### 🍓 Raspberry Pi 4B — Secondary Node
| Compose File | Service | Port | Public URL | Description |
|---|---|---|---|---|
| [`npm_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/npm_compose.yaml) | **Nginx Proxy Manager** | 81 | — | Reverse proxy management UI |
| [`homarr_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/homarr_compose.yaml) | **Homarr** | 7575 | [hmrr.jrodriiguezg.link](https://hmrr.jrodriiguezg.link) | Home lab dashboard |
| [`adguard_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/adguard_compose.yaml) | **AdGuard Home** | 4533 | — | Network-wide DNS ad blocker |
| [`arcane_compose.yaml`](https://git.jrodriiguezg.link/jrodriiguezg/docker-compose/src/branch/main/arcane_compose.yaml) | **Arcane** | 9443 | — | — |
---
## Infrastructure Overview
```
Internet
Cloudflare Tunnel
Nginx Proxy Manager (RPI :81)
├──► Elitedesk services (192.168.1.135)
└──► RPI services (192.168.1.229)
```
| Node | Hardware | LAN IP | VPN IP |
|---|---|---|---|
| Elitedesk | HP EliteDesk | 192.168.1.135 | 100.85.176.113 |
| Raspberry Pi 4B | RPi 4B | 192.168.1.229 | 100.75.198.29 |
---
## Usage
Each compose file is self-contained. Clone the repo and run any service individually:
```bash
git clone https://git.jrodriiguezg.link/jrodriiguezg/docker-compose
cd docker-compose
# Example: start Gitea
docker compose -f gitea_compose.yaml up -d
# Example: start NPM on the RPI
docker compose -f npm_compose.yaml up -d
```
> [!NOTE]
> Some services require environment variables or volume paths adjusted to your system. Check the comments inside each compose file before deploying.
> [!WARNING]
> Files may reference Cloudflare Tunnel tokens, secrets, or local paths. Never commit real credentials — use `.env` files and add them to `.gitignore`.
---
## Author
**Juan Raul Rodriguez Gil** — SysAdmin & Infrastructure Engineer
[jrodriiguezg.link](https://jrodriiguezg.link) · [GitHub](https://github.com/jrodriiguezg)
---
© 2026 Juan Raul Rodriguez Gil