Files
docker-compose/README.md
T
2026-08-15 15:30:59 +02:00

138 lines
5.4 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-composes/
├── 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
├── rtc_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
├── navidrome2_compose.yaml
└── arcane_compose.yaml
```
---
## Services
### Elitedesk — Primary Server
| Compose File | Service | Port | Public URL | Description |
|---|---|---|---|---|
| `gitea_compose.yaml` | **Gitea** | 3000 | [git.jrodriiguezg.link](https://git.jrodriiguezg.link) | Self-hosted Git service |
| `homeassistant_compose.yaml` | **Home Assistant** | 8123 | [hamaca.jrodriiguezg.link](https://hamaca.jrodriiguezg.link) | Home automation platform |
| `jellyfin_compose.yaml` | **Jellyfin** | 8096 | [jellyfin.jrodriiguezg.link](https://jellyfin.jrodriiguezg.link) | Media server |
| `odoo_compose.yaml` | **Odoo** | 8072 | [jotarcloud.jrodriiguezg.link](https://jotarcloud.jrodriiguezg.link) | ERP / test instance |
| `synapse_compose.yaml` | **Synapse** | 8008 | [macarron.jrodriiguezg.link](https://macarron.jrodriiguezg.link) | Matrix homeserver |
| `jwt_compose.yaml` | **JWT** | 8083 | [jwt.jrodriiguezg.link](https://jwt.jrodriiguezg.link) | JWT auth service (Synapse calls) |
| `navidrome_compose.yaml` | **Navidrome** | 4533 | [navidrome.jrodriiguezg.link](https://navidrome.jrodriiguezg.link) | Music streaming server |
| `rtc_compose.yaml` | **RTC** | 8083 | [rtc.jrodriiguezg.link](https://rtc.jrodriiguezg.link) | WebRTC service (Matrix coturn) |
| `kroki_compose.yaml` | **Kroki** | 8079 | — | Diagram-as-code rendering |
| `drawio_compose.yaml` | **Draw.io** | 8091 | [drawio.jrodriiguezg.link](https://drawio.jrodriiguezg.link) | Self-hosted diagram editor |
| `excalidraw_compose.yaml` | **Excalidraw** | 8071 | [excal.jrodriiguezg.link](https://excal.jrodriiguezg.link) | Collaborative whiteboard |
| `guacamole_compose.yaml` | **Guacamole** | 8087 | — | Browser-based remote desktop gateway |
| `element_compose.yaml` | **Element Web** | 8086 | — | Matrix web client |
| `picard_compose.yaml` | **Picard Web** | 80 | — | MusicBrainz Picard web UI |
| `lidarr_compose.yaml` | **Lidarr** | 8686 | — | Music collection manager |
| `beets_compose.yaml` | **Beets** | 8337 | — | Music library organizer |
| `transmission_compose.yaml` | **Transmission** | 9091 | — | BitTorrent client |
| `vaultwarden_compose.yaml` | **Vaultwarden** | 8383 | [vauwar.jrodriiguezg.link](https://vauwar.jrodriiguezg.link) | Self-hosted Bitwarden-compatible vault |
### Raspberry Pi 4B — Secondary Node
| Compose File | Service | Port | Public URL | Description |
|---|---|---|---|---|
| `npm_compose.yaml` | **Nginx Proxy Manager** | 81 | — | Reverse proxy management UI |
| `homarr_compose.yaml` | **Homarr** | 7575 | [hmrr.jrodriiguezg.link](https://hmrr.jrodriiguezg.link) | Home lab dashboard |
| `adguard_compose.yaml` | **AdGuard Home** | 4533 | — | Network-wide DNS ad blocker |
| `navidrome2_compose.yaml` | **Navidrome 2** | 7575 | — | Secondary Navidrome instance |
| `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://github.com/jrodriiguezg/docker-composes
cd docker-composes
# 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