I thought I’d write this guide because I ran into some issues adapting https://www.smarthomebeginner.com/docker-home-media-server-2018-basic/ to my Windows 10 setup. Hopefully it helps folks out, but I won’t go through any of the details they already cover. I’m simply going to write the instructions to get a running media server on Windows 10 that has: Plex, Transmission-OpenVPN, Organizr, Portainer, Radarr, Sonarr, Jackett, and Watchtower.
First, here’s what each application does:
1. Organizr: Let’s you organize every app’s internal webpage into tabs on one dashboard. You now don’t have to memorize all of the IP addresses and port numbers.
2. Portainer: provides an overview of all the containers in a nice interface.
3. Sonarr & Radarr: for organizing and automatically downloading tv shows and movies, respectively.
4. Plex: I used to use Emby, going back to trying Plex as the media server.
5. Watchtower: helps keep docker images updated.
6. Transmission-OpenVPN: transmission torrent client with intergrated VPN support.
Instructions
Step 1: Install docker for Windows from the docker website. Ensure you have a Pro edition of Win 10. If you have a home edition, you can easily upgrade to Pro by using a Windows 8 Pro key or other Pro serials you may already have.
Step 2: Create a user account in Windows for docker to use, I use docker-user as the name. I am going to keep everything in C:\docker and make sure that docker-user has full access to that directory.
Step 2: Establish environment variables in Windows. Open ‘View advanced system settings’ go to the ‘Advanced’ tab, and click ‘Environment Variables’
Step 3: Add the following Environmental Variables:
COMPOSE_CONVERT_WINDOWS_PATHS=1
PGID=1000
PUID=1000
TZ="America/New_York"
USERDIR=C:\docker
Step 4: Within C:\docker create a file called docker-compose.yml with the following contents:
version: "3.7"
services:
#Portainer - WebUI for Containers
portainer:
image: portainer/portainer
hostname: portainer
container_name: portainer
restart: always
command: -H unix:///var/run/docker.sock
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ${USERDIR}/docker/portainer/data:/data
- ${USERDIR}/docker/shared:/shared
environment:
- TZ=${TZ}
# Organizer - Unified HTPC/Home Server Web Interface
organizr:
container_name: organizr
hostname: organizr
restart: always
image: lsiocommunity/organizr
volumes:
- ${USERDIR}/docker/organizr:/config
- ${USERDIR}/docker/shared:/shared
ports:
- "9001:80"
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
# Watchtower - Automatic Update of Containers/Apps
watchtower:
container_name: watchtower
hostname: watchtower
restart: always
image: v2tec/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --schedule "0 0 4 * * *" --cleanup
# Transmission with VPN – Bittorrent Downloader
transmission-vpn:
container_name: transmission-vpn
hostname: transmission
image: haugene/transmission-openvpn
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
restart: always
ports:
- "9091:9091"
dns:
- 8.8.8.8
- 8.8.4.4
volumes:
- /etc/localtime:/etc/localtime:ro
- ${USERDIR}/docker/transmission-vpn:/data
- ${USERDIR}/docker/shared:/shared
- ${USERDIR}/Downloads:/data/watch
- ${USERDIR}/Downloads/completed:/data/completed
- ${USERDIR}/Downloads/incomplete:/data/incomplete
environment:
- OPENVPN_PROVIDER=PIA
- OPENVPN_USERNAME=YourPIAUsername
- OPENVPN_PASSWORD=MyPIAPassword
- OPENVPN_OPTS=--inactive 3600 --ping 10 --ping-exit 60
- LOCAL_NETWORK=192.168.1.0/24
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- TRANSMISSION_RPC_AUTHENTICATION_REQUIRED=true
- TRANSMISSION_RPC_HOST_WHITELIST="127.0.0.1,192.168.*.*"
- TRANSMISSION_RPC_PASSWORD=password
- TRANSMISSION_RPC_USERNAME=admin
- TRANSMISSION_UMASK=002
- TRANSMISSION_RATIO_LIMIT=0.01
- TRANSMISSION_RATIO_LIMIT_ENABLED=true
- TRANSMISSION_SPEED_LIMIT_UP=30
- TRANSMISSION_SPEED_LIMIT_UP_ENABLED=true
- TRANSMISSION_INCOMPLETE_DIR=/data/incomplete
- TRANSMISSION_INCOMPLETE_DIR_ENABLED=true
- TRANSMISSION_WATCH_DIR=/data/watch
- TRANSMISSION_WATCH_DIR_ENABLED=true
- TRANSMISSION_DOWNLOAD_DIR=/data/completed
# Radarr – Movie Download and Management
radarr:
image: "linuxserver/radarr"
hostname: radarr
container_name: "radarr"
volumes:
- ${USERDIR}/docker/radarr:/config
- ${USERDIR}/Downloads/completed:/downloads
- ${USERDIR}/media/movies:/movies
- ${USERDIR}/docker/shared:/shared
ports:
- "7878:7878"
restart: always
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
# Sonarr – TV Show Download and Management
sonarr:
image: "linuxserver/sonarr"
hostname: sonarr
container_name: "sonarr"
volumes:
- ${USERDIR}/docker/sonarr:/config
- ${USERDIR}/Downloads/completed:/downloads
- ${USERDIR}/media/tvshows:/tv
- ${USERDIR}/docker/shared:/shared
ports:
- "8989:8989"
restart: always
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
# Plex Media Server
plexms:
container_name: plexms
hostname: plexms
restart: always
image: plexinc/pms-docker
volumes:
- ${USERDIR}/docker/plexms:/config
- ${USERDIR}/Downloads/plex_tmp:/transcode
- ${USERDIR}/media/tvshows:/tv
- ${USERDIR}/media/movies:/movies
- ${USERDIR}/docker/shared:/shared
ports:
- "32400:32400/tcp"
- "3005:3005/tcp"
- "8324:8324/tcp"
- "32469:32469/tcp"
- "1900:1900/udp"
- "32410:32410/udp"
- "32412:32412/udp"
- "32413:32413/udp"
- "32414:32414/udp"
environment:
- TZ=${TZ}
- HOSTNAME="Docker Plex"
- PLEX_CLAIM="claim-InsertYourClaimCode"
- PLEX_UID=${PUID}
- PLEX_GID=${PGID}
- ADVERTISE_IP="http://192.168.1.100:32400/"
# Jackett – Torrent Proxy
jackett:
image: "linuxserver/jackett"
hostname: jackett
container_name: "jackett"
volumes:
- ${USERDIR}/docker/jackett:/config
- ${USERDIR}/Downloads/completed:/downloads
- ${USERDIR}/docker/shared:/shared
ports:
- "9117:9117"
restart: always
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
Step 5: Open up a PowerShell with administrative privileges and do:
docker-compose -f docker-compose.yml up -d