# 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