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.
- Languages
- 0Code breakdown
- 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.
- 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
- Install Docker and Docker Compose, then clone the repository.
- Edit .env: set TZ, PUID, PGID, ROOT (for example /media/MediaBox) and PLEX_CLAIM.
- Run docker-compose up -d from the repository root.
- Open Prowlarr on port 9696 and Sonarr on port 8989 to connect indexers and the download client.
- 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 up -d4. 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
- Install Docker and Docker Compose on your system.
- Clone or download this repository to your system.
Configuration and usage
4.2. Usage
README.md
- Navigate to the cloned/downloaded directory.
- Customize the configuration files in the config directory to your needs.
- Run the following command to start the containers:
- Access the web interfaces for the services by navigating to the URLs mentioned below.
Development and contributions
4.3. Contributing
README.md
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.
Compose service definitions
Download containers
Media-management containers
Shared host storage
Mermaid Interactive diagram
System overview of the components and connections verified in the repository.

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
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
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
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
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.

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"]:::svcText 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
| Service | Image or build | Published ports | Startup | Storage |
|---|---|---|---|---|
| plex | plexinc/pms-docker | 32400:32400 | /media -> /data/movies | |
| wireguard | linuxserver/wireguard | 51820:51820/udp | /config bind mount | |
| whisper | local build / compose | 9000:9000 | Audio buffer volume | |
| portainer | portainer/portainer-ce | 9443:9443 | /var/run/docker.sock | |
| samba | dperson/samba | 139:139, 445:445 | Shared 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
- antoinebou12. (2026, November 5). MediaBoxDockerCompose. [Software repository] github.com.
- antoinebou12. (2026, November 5). MediaBoxDockerCompose: README. [Repository documentation] github.com.
- antoinebou12. (2026, November 5). docker-compose.yml. [Source file] github.com.
- antoinebou12. (2026, November 5). README.md. [Source file] github.com.
- Boucher, A. (2021, September 6). Networking evolution — building a home network lab. [Project article] antoineboucher.info.
- Boucher, A. (2024, March 15). MediaBox homelab — what I run in Docker (and what stayed a bookmark). [Project article] antoineboucher.info.
- Boucher, A. (2024, January 1). MediaBoxDockerCompose. [Project article] antoineboucher.info.
- 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.
Project facts