# ๐Ÿณ 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