Skip to content
Table of contents

MediaBoxDockerCompose: A media stack connected by volumes and networks

MediaBoxDockerCompose brings several homelab services together in Docker Compose. Service definitions, shared filesystem paths and network connections describe how they work together.

Configuration and automation Docker
  • Updated
  • 11
  • MIT
Docker ComposeWireGuard VPNWhisper AIPortainer
Documented components
2Explore modules
Source documents
1Read the instructions
Repository languages

Shares calculated from GitHub Linguist bytes.

GitHub reports no language bytes for this repository.

1. Overview

1.1. Why it exists

Comprehensive GitOps container stack combining WireGuard VPN tunnel networking with 15+ homelab automation services.

1.2. Best fit

Automated, isolated private cloud media server with remote access and encrypted traffic routing.

2. Use cases

Docker Compose stack for a home media server: download automation, Plex/Jellyfin, admin tools and a Caddy proxy.

Use-case diagram for MediaBoxDockerCompose: Start the media stack; Automate media downloads; Watch or request media; Monitor and browse the host; Publish services via Caddy; Add optional extrasMediaBoxDockerComposeStart the media stackAutomate media downloadsWatch or request mediaMonitor and browse the hostPublish services via CaddyAdd optional extrasHomelab adminMedia viewer«system»Docker host
People on the left, external systems on the right; each oval is a use case backed by the files cited below.
Start the media stack
Homelab adminDocker host

docker-compose.yml defines about twenty containers that share PUID, PGID, TZ and ROOT from .env; docker-compose up -d starts them all.

Automate media downloads
Homelab adminDocker host

Sonarr, Radarr, Lidarr and Bazarr handle TV, movies, music and subtitles, fed by Jackett, Prowlarr or NZBHydra2 and sent to Deluge or NZBGet, all under ${ROOT}.

Watch or request media
Media viewerDocker host

Plex (port 32400) and Jellyfin (port 8096) serve the library; Ombi and Jellyseerr take requests and Tautulli reports Plex activity.

Monitor and browse the host
Homelab adminDocker host

Netdata (port 19999) shows host metrics, FileBrowser gives web file access and Dashmachine (port 5000) is a start page configured by dashmachine/config.ini.

Publish services via Caddy
Homelab admin

caddy/Caddyfile maps subdomains such as sonarr.{$DOMAIN} to local ports with logging, rate limiting, an IP allowlist and basic auth taken from caddy/.env.

Add optional extras
Homelab adminDocker host

Separate compose files under extra/ add Samba shares, a WireGuard access server and Portainer; whisper/docker-compose.yml runs a Whisper ASR web service on port 9000.

2.1. Scenario: Bring up a TV and movie server on one machine

  1. Install Docker and Docker Compose, then clone the repository.
  2. Edit .env: set TZ, PUID, PGID, ROOT (for example /media/MediaBox) and PLEX_CLAIM.
  3. Run docker-compose up -d from the repository root.
  4. Open Prowlarr on port 9696 and Sonarr on port 8989 to connect indexers and the download client.
  5. Point Plex (port 32400) or Jellyfin (port 8096) at the completed folders under ROOT and start watching.

Files readREADME.mddocker-compose.yml.envcaddy/Caddyfilecaddy/.envdashmachine/config.iniextra/samba/docker-compose.ymlextra/wireguard-access-server/docker-compose.ymlextra/portainer/docker-compose.ymlwhisper/docker-compose.yml

3. Getting started

These commands come from the repository documentation. They were not run during this review.

docker-compose.yml · Docker
docker-compose up -d

4. Repository references

Excerpts from the repository’s guides, in their original language. Links open the inspected source revision.

Prerequisites and first run

4.1. Installation

README.md

  1. Install Docker and Docker Compose on your system.
  2. Clone or download this repository to your system.
Read the full instructions ↗
Configuration and usage

4.2. Usage

README.md

  1. Navigate to the cloned/downloaded directory.
  2. Customize the configuration files in the config directory to your needs.
  3. Run the following command to start the containers:
  4. Access the web interfaces for the services by navigating to the URLs mentioned below.
Read the full instructions ↗
Development and contributions

4.3. Contributing

README.md

Pull requests and suggestions are welcome. For major changes, please open an issue first to discuss what you would like to change.
Read the full instructions ↗
Source documentation

1 documents read from 1 candidates.

5. Features and components 2

Service roles
The compose file includes download clients and media-management services such as Deluge, Jackett, Sonarr and Radarr. Each container has its own image and configuration. README service links should be distinguished from services actually enabled in Compose.
Persistent paths
Volume mappings connect container paths to host storage. A path used by one service must agree with the path seen by another when files move between them. Networking and persistence solve different integration problems.

6. Architecture

Expand a component to follow its connections, or explore the full diagram.

System components Context
Mermaid Interactive diagram

System overview of the components and connections verified in the repository.

Static architecture view for MediaBoxDockerCompose
Static preview. The interactive diagram replaces it after Mermaid loads.
flowchart LR
  n0["Compose service definitions"]
  n1["Download containers"]
  n2["Media-management containers"]
  n3["Shared host storage"]
  n0 --> n1
  n0 --> n2
  n1 --> n3
  n2 --> n3
Text version of the diagram
  • Compose service definitions → Download containers
  • Compose service definitions → Media-management containers
  • Download containers → Shared host storage
  • Media-management containers → Shared host storage
Follow one path through the code

Choose one service and compare its mounted download and library paths with the service that consumes them. Then check its network and port settings. Two healthy containers can still disagree about where a file exists.

7. Technical dossier

Built from the source at commit 57d930a (7 files). Each item comes from a pattern match in the code, so open the linked file before relying on it.

7.1. Layers and modules

Folders are sorted into layers by name, from the user interface down to data access. Because the sorting uses names only, the diagram says nothing about calls between layers.

Mermaid Layered view
flowchart TB
  subgraph L_hosting["Build, CI and hosting"]
    direction TB
    hosting_0["extra<br/>3 files"]
    hosting_1[".github<br/>2 files"]
    hosting_2["(root)<br/>1 file"]
    hosting_3["whisper<br/>1 file"]
  end

7.2. C4 model

From system context to code declarations. Each level reflects the available source evidence.

UML 1 · System context
1 · System context

The widest C4 view: who uses the project and which outside systems and data stores it relies on. Rendered with uml-mcp.

PlantUML source
@startuml
!include <C4/C4_Context>
LAYOUT_LEFT_RIGHT()
System(SYS, "MediaBoxDockerCompose", "MediaBoxDockerCompose brings several homelab services together in Doc…")
@enduml
UML 2 · Containers
2 · Containers

One level closer: the parts that run separately inside the project, their main language and how calls flow between them. Rendered with uml-mcp.

PlantUML source
@startuml
!include <C4/C4_Container>
LAYOUT_LEFT_RIGHT()
System_Boundary(SYS, "MediaBoxDockerCompose") {
  Container(C0, "portainer", "Docker")
  Container(C1, "samba", "Docker")
  Container(C2, "wg-access-server", "Docker")
  Container(C3, "whisper-asr", "Docker")
}
@enduml
UML 3 · Components and layers
3 · Components and layers

Modules grouped by source-layer classification. Boundaries show organization, not runtime isolation or call relationships. Rendered with uml-mcp.

PlantUML source
@startuml
!include <C4/C4_Component>
LAYOUT_TOP_DOWN()
System_Boundary(SYS, "MediaBoxDockerCompose") {
Boundary(L0, "Build, CI and hosting", "layer") {
Component(M0_0, "extra", ".yml", "3 files")
Component(M0_1, ".github", ".md", "2 files")
Component(M0_2, "(root)", ".yml", "1 files")
Component(M0_3, "whisper", ".yml", "1 files")
}
}
@enduml

Level 4: the available sources do not support this view.

7.3. CI/CD pipeline

No CI/CD pipeline in the repository. The code is built and run by hand, as described above.

7.4. Deployment

Mermaid Deployment diagram
flowchart LR
  repo[("GitHub repository")]
  subgraph compose["Docker Compose"]
    svc_portainer["portainer"]
    svc_samba["samba"]
    svc_wg_access_server["wg-access-server"]
    svc_whisper_asr["whisper-asr"]
  end
  repo -->|"docker compose up"| compose
UML Deployment
Deployment

The outer node is where the code runs. Each base image points to what it builds, solid arrows lead to databases and dashed ones to outside services. Rendered with uml-mcp.

PlantUML source
@startuml
skinparam backgroundColor transparent
skinparam shadowing false
skinparam roundCorner 10
skinparam defaultFontName Arial
skinparam defaultFontSize 13
skinparam ArrowColor #4e6070
skinparam ArrowFontColor #3d4f5f
skinparam titleFontSize 14
skinparam actorBorderColor #006a62
skinparam actorBackgroundColor #e9f3f4
skinparam usecaseBorderColor #006a62
skinparam usecaseBackgroundColor #e9f3f4
skinparam componentBorderColor #006a62
skinparam componentBackgroundColor #e9f3f4
skinparam interfaceBorderColor #006a62
skinparam interfaceBackgroundColor #ffffff
skinparam nodeBorderColor #4e6070
skinparam nodeBackgroundColor #f4f8fb
skinparam databaseBorderColor #006a62
skinparam databaseBackgroundColor #ffffff
skinparam cloudBorderColor #4e6070
skinparam cloudBackgroundColor #f0f5fa
skinparam artifactBorderColor #006a62
skinparam artifactBackgroundColor #ffffff
skinparam rectangleBorderColor #b0c2d3
skinparam activityBorderColor #006a62
skinparam activityBackgroundColor #e9f3f4
skinparam partitionBorderColor #b0c2d3
skinparam stereotypeCBackgroundColor #ffffff
node "Docker Compose" as H {
  node "portainer" as N0 <<container>>
  node "samba" as N1 <<container>>
  node "wg-access-server" as N2 <<container>>
  node "whisper-asr" as N3 <<container>>
}
@enduml

Where it runs

7.5. Security

Supply chain

The available sources do not document the remaining sections.

8. Deployment and operations

The ports, storage, and startup relationships below come from the repository configuration. depends_on records startup order, not service readiness.

Network. Isolated Docker bridge network routed through WireGuard VPN gateway.

Deployment map

Compose topology of documented services, ports, and startup dependencies.

Static architecture view for MediaBoxDockerCompose
flowchart LR
  classDef svc fill:#1b3040,stroke:#6fdbd0,color:#edf4fb
  plex["plex<br/>32400:32400"]:::svc
  wireguard["wireguard<br/>51820:51820/udp"]:::svc
  whisper["whisper<br/>9000:9000"]:::svc
  portainer["portainer<br/>9443:9443"]:::svc
  samba["samba<br/>139:139, 445:445"]:::svc
Text version of the diagram
  • plex — plexinc/pms-docker · 32400:32400
  • wireguard — linuxserver/wireguard · 51820:51820/udp
  • whisper — local build / compose · 9000:9000
  • portainer — portainer/portainer-ce · 9443:9443
  • samba — dperson/samba · 139:139, 445:445
ServiceImage or buildPublished portsStartupStorage
plexplexinc/pms-docker32400:32400/media -> /data/movies
wireguardlinuxserver/wireguard51820:51820/udp/config bind mount
whisperlocal build / compose9000:9000Audio buffer volume
portainerportainer/portainer-ce9443:9443/var/run/docker.sock
sambadperson/samba139:139, 445:445Shared ZFS pool

9. Reference

6 / 6 eligible files read (22 in the tree); 0 oversized, 0 failed reads and 0 syntax diagnostics.

What the scan covers

Known dependency/build folders, credential files and binaries are excluded. The scan covers READMEs, recognized manifests and parser-supported source files.

Linguist statistics cover the whole repository and may include other languages.

11. Files to read 2

12. Glossary

Repository

The versioned source files, configuration, and history of a project.

README

The repository’s entry document, usually covering its purpose and initial setup.

Dependency

A library, tool, or service that another component needs to build or run.

Container

An isolated process environment created from an image. Persistent data needs storage outside the container’s disposable filesystem.

Docker Compose

A configuration format and tool for starting related containers, networks, and volumes. Startup order alone does not guarantee service readiness.

Volume and bind mount

A volume is storage managed by the container platform; a bind mount exposes a chosen host path inside a container.

Published port

A host port mapped to a service’s container port. Publishing a port can expose that service beyond its container network.

13. References

  1. antoinebou12. (2026, November 5). MediaBoxDockerCompose. [Software repository] github.com.
  2. antoinebou12. (2026, November 5). MediaBoxDockerCompose: README. [Repository documentation] github.com.
  3. antoinebou12. (2026, November 5). docker-compose.yml. [Source file] github.com.
  4. antoinebou12. (2026, November 5). README.md. [Source file] github.com.
  5. Boucher, A. (2021, September 6). Networking evolution — building a home network lab. [Project article] antoineboucher.info.
  6. Boucher, A. (2024, March 15). MediaBox homelab — what I run in Docker (and what stayed a bookmark). [Project article] antoineboucher.info.
  7. Boucher, A. (2024, January 1). MediaBoxDockerCompose. [Project article] antoineboucher.info.
  8. Boucher, A. (2026, October 23). MediaBoxDockerCompose: A media stack connected by volumes and networks. [Project article] antoineboucher.info.

Sources without a publication date show the date they were last checked, November 5, 2026. File links retain the inspected revision where available.