Near idea, but a question...
I like that you're tying everything together, however for a lot of users this might be restrictive. I think the goal of the project is to make things easier for a complete stack, however I'm curious to know it's easily modifiable to add and remove components i have a highly customized stack already and would like to pick and choose. I appreciate any input you can give and also your efforts!
Sorry, typo, neat, not near. Also, I'm wondering about the long-term goal of the project, is meant to be a pluggable project or a complete stack? If this is a this is not the Droid you're seeking type of situation I completely understand and just wanted to clarify.
I was completely lost about 2 years ago on how to set up Docker and all the *ARR stacks and thought there must be an easier way for new users, and we started the project with one of the main objectives to simply make it easy for user users. IMO MediaStack is one of the easiet to use / set up for new starters, and we've also concentrated on security / privacy for any outbound / download connections, by routing them Gluetun VPN.
While the new configuration is contained in a single docker compose file, it should be treated as a reference design, so you can remove as many of the configurations out, as long as you keep the Gluetun VPN container, to provide privacy for the outbound security.
Additionally, you can very easily add new docker applications into the docker compose file, to further customise your home MediaStack.
For example, the other issue someone logged was to add Jackett into MediaStack - I posted the working configuration into the thread:
Issue: Please add jackett to mediastack
As long as the basic principles are used in the linked thread, you'll be able to add as many docker applications as you need.
Hope this helps.
That's exactly what I wondered about / hoped for.
I'm "working" (evaluating) on a script that will let you select options and containers from the MediaStack. It would be great if the containers could consist of multiple files again. A script could simply amalgamate all the necessary files.
I'm experimenting with the 'whiptail --checklist' command. Ideally, it would be called from within Python or call helper scripts, since shell scripts can quickly become messy and there are dependencies between containers. Options such as the outbound VPN complicate things a bit.. I thought about stripping away from the full blown stack.
I don't know if there is any interest in such an endeavour.
Maybe look at using includes in docker compose each include is it's own compose file.
This is docker-compose.yml each compose is in its own directory just for organization purposes you can flatten it completly into one directory if you want
#version: "3.9"
#Includes
include:
- gluetun/gluetun.yml
- compose1/compose1.yml
- compose2/compose2.yml
- ....
- .....
#Base services
#Network Definition
networks:
mediastack:
name: mediastack
driver: bridge
# enable_ipv6: true
ipam:
config:
- subnet: 172.25.0.0/16
gateway: 172.25.0.1
Maybe look at using includes in docker compose each include is it's own compose file.
Thanks for heads up on this, was unaware of Docker Includes, someone actually provided some details today in a Reddit thread.
I put all of the configs into a single compose file as the depends_on didn't work for the separate files, however they apparently work properly for include config, so this is a good thing.
However, the other issue we face with these configs, when using Gluetun changes the network stack between bridged mode, "service:gluetun", and "container:gluetun", and I would have to have 2 or 3 sets of each individual compose files to cater for the difference in network configuration, as I don't think new users are going to understand these more complex adjustments.
At the moment I'm leaning towards "teaching a man to fish", and should look at working on the Wiki documentation now this major update is out, as the Wiki needs lots of luvn.
Maybe look at using includes in docker compose each include is it's own compose file.
Thanks for heads up on this, was unaware of Docker Includes, someone actually provided some details today in a Reddit thread.
I put all of the configs into a single compose file as the depends_on didn't work for the separate files, however they apparently work properly for include config, so this is a good thing.
However, the other issue we face with these configs, when using Gluetun changes the network stack between bridged mode, "service:gluetun", and "container:gluetun", and I would have to have 2 or 3 sets of each individual compose files to cater for the difference in network configuration, as I don't think new users are going to understand these more complex adjustments.
At the moment I'm leaning towards "teaching a man to fish", and should look at working on the Wiki documentation now this major update is out, as the Wiki needs lots of luvn.
If you use the include method, the service:gluetun would be used for any container that goes through gluetun otherwise it will use the mediastack network.
Also had an ideal of wrapping this up in an ansible role if you are interested. That would allow the user to specify which packages he wants to install and then distribute it.
I put all of the configs into a single compose file as the depends_on didn't work for the separate files, however they apparently work properly for include config, so this is a good thing.
I'm not sure if that's even necessary. At least for the dependencies on gluetun.
Add network_mode: "service:gluetun" to your second container so that it uses the gluetun network stack. There is no need for depends_on.
The other dependencies should be easier to resolve in a modular environment.
BTW, could we use gluetun as a network? We could just change the network definition to enable / disable it.
https://docs.docker.com/reference/compose-file/networks/#external https://github.com/qdm12/gluetun-wiki/blob/main/setup/inter-containers-networking.md
I created a short demo script to show what I want to achieve. It has no functionality; it's just a mock-up.
#!/bin/bash
check_exit()
{
if [ $? != 0 ]; then
echo "Configuration cancelled by user."
exit
fi
}
##################################################
vpn_gui=(
whiptail
--title "MediaStack"
--radiolist "
Do you want to use an VPN for outbound traffic?
WARNING: This is _highly_ recommended for Torrent!"
0 0 0
"Full" "All outbound traffic is protected." "ON"
"Lite" "The outbound traffic is only protected for qBittorrent and SABnzbd." "OFF"
"None" "No protection. Not recommended if qBittorrent is used." "OFF"
)
vpn_selection=$("${vpn_gui[@]}" 3>&1 1>&2 2>&3)
check_exit
##################################################
if [ "$vpn_selection" != "None" ]; then
vpn_prov=$(whiptail --inputbox "Enter your VPN provider" 8 70 --title "MediaStack" 3>&1 1>&2 2>&3)
check_exit
vpn_user=$(whiptail --passwordbox "Enter your VPN username" 8 70 --title "MediaStack" 3>&1 1>&2 2>&3)
check_exit
vpn_pass=$(whiptail --passwordbox "Enter your VPN password" 8 70 --title "MediaStack" 3>&1 1>&2 2>&3)
check_exit
fi
##################################################
options_gui=(
whiptail
--title "MediaStack"
--checklist "Choose the services you want to use:"
0 0 0 # Auto adapt window size
"Jellyfin" "is a media server that organises, streams, and manages multimedia content for users" "ON"
"Flaresolverr" "bypasses Cloudflare protection, allowing automated access to websites for scripts and bots" "ON"
"Bazarr" "automates the downloading of subtitles for Movies and TV Shows" "ON"
"DDNS-Updater" "automatically updates dynamic DNS records when your home Internet changes IP address" "ON"
"Filebot" "is a tool for renaming and organising media files using online metadata sources" "ON"
"Heimdall" "provides a dashboard to easily access and organise web applications and services" "ON"
"Homarr" "is a self-hosted, customisable dashboard for managing and monitoring your server applications" "ON"
"Homepage" "is an alternate to Heimdall, providing a similar dashboard to easily access and organise web applications and services" "ON"
"Huntarr" "is an open-source tool that automates finding missing and upgrading media in *ARR libraries" "ON"
"Lidarr" "is a Library Manager, automating the management and meta data for your music media files" "ON"
"Mylar" "is a Library Manager, automating the management and meta data for your comic media files" "ON"
"Plex" "is a media server that organises, streams, and manages multimedia content across devices" "ON"
"Portainer" "provides a graphical interface for managing Docker environments, simplifying container deployment and monitoring" "ON"
"Prowlarr" "manages and integrates indexers for various media download applications, automating search and download processes" "ON"
"qBittorrent" "is a peer-to-peer file sharing application that facilitates downloading and uploading torrents" "ON"
"Radarr" "is a Library Manager, automating the management and meta data for your Movie media files" "ON"
"Readarr" "is a Library Manager, automating the management and meta data for your eBooks and Comic media files" "ON"
"SABnzbd" "is a Usenet newsreader that automates the downloading of binary files from Usenet" "ON"
"Sonarr" "is a Library Manager, automating the management and meta data for your TV Shows (series) media files" "ON"
"Tdarr" "automates the transcoding and management of media files to optimise storage and playback compatibility" "ON"
"Unpackerr" "extracts and moves downloaded media files to their appropriate directories for organisation and access" "ON"
"Whisparr" "is a Library Manager, automating the management and meta data for your Adult media files" "ON"
)
options_selected+=$("${options_gui[@]}" 3>&1 1>&2 2>&3)
check_exit
##########################################
if [[ $options_selected == *"Tdarr"* ]]; then
echo "Add tdarr-node"
fi
if [[ $options_selected == *"Guacamole"* ]]; then
echo "Add guacd"
echo "Add postgres"
fi
if [[ $vpn_selection != "None" ]]; then
echo "Add gluetun"
fi
if [[ $vpn_inbound ]]; then
echo "Add headscale"
echo "Add tailscale"
echo "Add headplane"
fi
if [[ $sso ]]; then
echo "Add authentik"
echo "Add authentik-worker"
echo "Add valkey"
echo "Add postgres"
fi
if [[ $crowdsec && $crowdsec_stats ]]; then
echo "Add prometheus"
echo "Add grafana"
fi
##########################################
echo $vpn_selection
echo $vpn_prov
echo $vpn_user
echo $vpn_pass
echo $options_selected
As someone who is new to all those services, and is sitting for the past 2 days making sense of it all, I would love some way to pick and choose.
I for one dont want authentic, but i dont know where to remove it, I would also like to use my existing duckdns dyn dns instead of cloudflare, but am a bit lost...