135 lines
7.5 KiB
Markdown
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
|