[{"data":1,"prerenderedAt":2675},["ShallowReactive",2],{"navigation_docs_en":3,"-en-serveex-media-qbittorrent-":377,"-en-serveex-media-qbittorrent--surround":2670},[4,16,94,262,271,332],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":15},"About","i-noto-star","\u002Fen\u002Fabout","en\u002F1.about",[10],{"title":11,"path":12,"stem":13,"icon":14},"Welcome","\u002Fen\u002Fabout\u002Fwelcome","en\u002F1.about\u002F1.welcome","i-lucide-home",false,{"title":17,"icon":18,"path":19,"stem":20,"children":21,"page":15},"General","i-noto-open-book","\u002Fen\u002Fgeneral","en\u002F2.general",[22,26,44,58,76],{"title":17,"path":23,"stem":24,"icon":25},"\u002Fen\u002Fgeneral\u002Fsummary","en\u002F2.general\u002F1.summary","i-lucide-bookmark",{"title":27,"icon":28,"path":29,"stem":30,"children":31,"page":15},"Networking","i-lucide-network","\u002Fen\u002Fgeneral\u002Fnetworking","en\u002F2.general\u002F2.networking",[32,36,40],{"title":33,"path":34,"stem":35},"NAT & DHCP","\u002Fen\u002Fgeneral\u002Fnetworking\u002Fnat","en\u002F2.general\u002F2.networking\u002F1.nat",{"title":37,"path":38,"stem":39},"DNS Zone","\u002Fen\u002Fgeneral\u002Fnetworking\u002Fdns","en\u002F2.general\u002F2.networking\u002F2.dns",{"title":41,"path":42,"stem":43},"Samba","\u002Fen\u002Fgeneral\u002Fnetworking\u002Fsamba","en\u002F2.general\u002F2.networking\u002F3.samba",{"title":45,"icon":46,"path":47,"stem":48,"children":49,"page":15},"Storage","i-lucide-hard-drive","\u002Fen\u002Fgeneral\u002Fstorage","en\u002F2.general\u002F3.storage",[50,54],{"title":51,"path":52,"stem":53},"RAID","\u002Fen\u002Fgeneral\u002Fstorage\u002Fraid","en\u002F2.general\u002F3.storage\u002F1.raid",{"title":55,"path":56,"stem":57},"ZFS","\u002Fen\u002Fgeneral\u002Fstorage\u002Fzfs","en\u002F2.general\u002F3.storage\u002F2.zfs",{"title":59,"icon":60,"path":61,"stem":62,"children":63,"page":15},"Hardware","i-lucide-server","\u002Fen\u002Fgeneral\u002Fhardware","en\u002F2.general\u002F4.hardware",[64,68,72],{"title":65,"path":66,"stem":67},"The Basics","\u002Fen\u002Fgeneral\u002Fhardware\u002Fbasics","en\u002F2.general\u002F4.hardware\u002F1.basics",{"title":69,"path":70,"stem":71},"Network","\u002Fen\u002Fgeneral\u002Fhardware\u002Fnetwork","en\u002F2.general\u002F4.hardware\u002F2.network",{"title":73,"path":74,"stem":75},"The ProloNAS","\u002Fen\u002Fgeneral\u002Fhardware\u002Fprolonas","en\u002F2.general\u002F4.hardware\u002F3.prolonas",{"title":77,"icon":78,"path":79,"stem":80,"children":81,"page":15},"Linux tips for dummies","i-lucide-terminal","\u002Fen\u002Fgeneral\u002Flinux","en\u002F2.general\u002F5.linux",[82,86,90],{"title":83,"path":84,"stem":85},"Command line basics","\u002Fen\u002Fgeneral\u002Flinux\u002Fcli-basics","en\u002F2.general\u002F5.linux\u002F1.cli-basics",{"title":87,"path":88,"stem":89},"Folders and partitions","\u002Fen\u002Fgeneral\u002Flinux\u002Ffilesystem","en\u002F2.general\u002F5.linux\u002F2.filesystem",{"title":91,"path":92,"stem":93},"Handy CLI tools","\u002Fen\u002Fgeneral\u002Flinux\u002Fhandy-tools","en\u002F2.general\u002F5.linux\u002F3.handy-tools",{"title":95,"icon":96,"path":97,"stem":98,"children":99,"page":15},"Serveex","i-noto-microscope","\u002Fen\u002Fserveex","en\u002F3.serveex",[100,104,126,144,170,188,202,216,234,248],{"title":101,"path":102,"stem":103,"icon":25},"Introduction","\u002Fen\u002Fserveex\u002Fintroduction","en\u002F3.serveex\u002F1.introduction",{"title":105,"icon":106,"path":107,"stem":108,"children":109,"page":15},"Server core","i-lucide-server-cog","\u002Fen\u002Fserveex\u002Fcore","en\u002F3.serveex\u002F2.core",[110,114,118,122],{"title":111,"path":112,"stem":113},"Debian 13","\u002Fen\u002Fserveex\u002Fcore\u002Finstallation","en\u002F3.serveex\u002F2.core\u002F1.installation",{"title":115,"path":116,"stem":117},"Docker","\u002Fen\u002Fserveex\u002Fcore\u002Fdocker","en\u002F3.serveex\u002F2.core\u002F2.docker",{"title":119,"path":120,"stem":121},"Wireguard","\u002Fen\u002Fserveex\u002Fcore\u002Fwireguard","en\u002F3.serveex\u002F2.core\u002F3.wireguard",{"title":123,"path":124,"stem":125},"SWAG","\u002Fen\u002Fserveex\u002Fcore\u002Fswag","en\u002F3.serveex\u002F2.core\u002F4.swag",{"title":127,"icon":128,"path":129,"stem":130,"children":131,"page":15},"Security","i-lucide-shield","\u002Fen\u002Fserveex\u002Fsecurity","en\u002F3.serveex\u002F3.security",[132,136,140],{"title":133,"path":134,"stem":135},"Cloudflare Zero Trust","\u002Fen\u002Fserveex\u002Fsecurity\u002Fcloudflare","en\u002F3.serveex\u002F3.security\u002F2.cloudflare",{"title":137,"path":138,"stem":139},"TinyAuth","\u002Fen\u002Fserveex\u002Fsecurity\u002Ftinyauth","en\u002F3.serveex\u002F3.security\u002F3.tinyauth",{"title":141,"path":142,"stem":143},"Pocket ID","\u002Fen\u002Fserveex\u002Fsecurity\u002Fpocket-id","en\u002F3.serveex\u002F3.security\u002F4.pocket-id",{"title":145,"icon":146,"path":147,"stem":148,"children":149,"page":15},"Monitoring","i-lucide-chart-no-axes-column","\u002Fen\u002Fserveex\u002Fmonitoring","en\u002F3.serveex\u002F4.monitoring",[150,154,158,162,166],{"title":151,"path":152,"stem":153},"Uptime-Kuma","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fuptime-kuma","en\u002F3.serveex\u002F4.monitoring\u002F1.uptime-kuma",{"title":155,"path":156,"stem":157},"Dozzle","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fdozzle","en\u002F3.serveex\u002F4.monitoring\u002F2.dozzle",{"title":159,"path":160,"stem":161},"Speedtest Tracker","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fspeedtest-tracker","en\u002F3.serveex\u002F4.monitoring\u002F3.speedtest-tracker",{"title":163,"path":164,"stem":165},"Beszel","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fbeszel","en\u002F3.serveex\u002F4.monitoring\u002F4.beszel",{"title":167,"path":168,"stem":169},"UpSnap","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fupsnap","en\u002F3.serveex\u002F4.monitoring\u002F5.upsnap",{"title":171,"icon":172,"path":173,"stem":174,"children":175,"page":15},"Media & Seedbox","i-lucide-list-video","\u002Fen\u002Fserveex\u002Fmedia","en\u002F3.serveex\u002F5.media",[176,180,184],{"title":177,"path":178,"stem":179},"Jellyfin","\u002Fen\u002Fserveex\u002Fmedia\u002Fjellyfin","en\u002F3.serveex\u002F5.media\u002F1.jellyfin",{"title":181,"path":182,"stem":183},"Qbittorrent","\u002Fen\u002Fserveex\u002Fmedia\u002Fqbittorrent","en\u002F3.serveex\u002F5.media\u002F2.qbittorrent",{"title":185,"path":186,"stem":187},"Automation","\u002Fen\u002Fserveex\u002Fmedia\u002Fservarr","en\u002F3.serveex\u002F5.media\u002F3.servarr",{"title":189,"icon":190,"path":191,"stem":192,"children":193,"page":15},"Cloud Drive & Photos","i-lucide-cloud-upload","\u002Fen\u002Fserveex\u002Fcloud","en\u002F3.serveex\u002F6.cloud",[194,198],{"title":195,"path":196,"stem":197},"Immich","\u002Fen\u002Fserveex\u002Fcloud\u002Fimmich","en\u002F3.serveex\u002F6.cloud\u002F1.immich",{"title":199,"path":200,"stem":201},"Nextcloud","\u002Fen\u002Fserveex\u002Fcloud\u002Fnextcloud","en\u002F3.serveex\u002F6.cloud\u002F2.nextcloud",{"title":203,"icon":204,"path":205,"stem":206,"children":207,"page":15},"File & share","i-lucide-folder-tree","\u002Fen\u002Fserveex\u002Ffiles","en\u002F3.serveex\u002F7.files",[208,212],{"title":209,"path":210,"stem":211},"File Browser Quantum","\u002Fen\u002Fserveex\u002Ffiles\u002Ffile-browser-quantum","en\u002F3.serveex\u002F7.files\u002F1.file-browser-quantum",{"title":213,"path":214,"stem":215},"Pingvin","\u002Fen\u002Fserveex\u002Ffiles\u002Fpingvin","en\u002F3.serveex\u002F7.files\u002F2.pingvin",{"title":217,"icon":218,"path":219,"stem":220,"children":221,"page":15},"Developpement","i-lucide-code-xml","\u002Fen\u002Fserveex\u002Fdevelopment","en\u002F3.serveex\u002F8.development",[222,226,230],{"title":223,"path":224,"stem":225},"Code-Server","\u002Fen\u002Fserveex\u002Fdevelopment\u002Fcode-server","en\u002F3.serveex\u002F8.development\u002F1.code-server",{"title":227,"path":228,"stem":229},"Forgejo","\u002Fen\u002Fserveex\u002Fdevelopment\u002Fforgejo","en\u002F3.serveex\u002F8.development\u002F2.forgejo",{"title":231,"path":232,"stem":233},"IT Tools","\u002Fen\u002Fserveex\u002Fdevelopment\u002Fit-tools","en\u002F3.serveex\u002F8.development\u002F3.it-tools",{"title":235,"icon":236,"path":237,"stem":238,"children":239,"page":15},"Useful Apps","i-lucide-award","\u002Fen\u002Fserveex\u002Fapps","en\u002F3.serveex\u002F9.apps",[240,244],{"title":241,"path":242,"stem":243},"Adguard Home","\u002Fen\u002Fserveex\u002Fapps\u002Fadguard","en\u002F3.serveex\u002F9.apps\u002F1.adguard",{"title":245,"path":246,"stem":247},"Vaultwarden","\u002Fen\u002Fserveex\u002Fapps\u002Fvaultwarden","en\u002F3.serveex\u002F9.apps\u002F2.vaultwarden",{"title":249,"icon":250,"path":251,"stem":252,"children":253,"page":15},"Advanced","i-lucide-flask-conical","\u002Fen\u002Fserveex\u002Fadvanced","en\u002F3.serveex\u002F91.advanced",[254,258],{"title":255,"path":256,"stem":257},"Authentik","\u002Fen\u002Fserveex\u002Fadvanced\u002Fauthentik","en\u002F3.serveex\u002F91.advanced\u002F1.authentik",{"title":259,"path":260,"stem":261},"Arcane","\u002Fen\u002Fserveex\u002Fadvanced\u002Farcane","en\u002F3.serveex\u002F91.advanced\u002F2.arcane",{"title":263,"icon":264,"path":265,"stem":266,"children":267,"page":15},"Stockeex","i-noto-computer-disk","\u002Fen\u002Fstockeex","en\u002F4.stockeex",[268],{"title":101,"path":269,"stem":270,"icon":25},"\u002Fen\u002Fstockeex\u002Fintroduction","en\u002F4.stockeex\u002F1.introduction",{"title":272,"icon":273,"path":274,"stem":275,"children":276,"page":15},"My nonsense","i-noto-test-tube","\u002Fen\u002Fnonsense","en\u002F5.nonsense",[277,280,302],{"title":272,"path":278,"stem":279,"icon":25},"\u002Fen\u002Fnonsense\u002Fsummary","en\u002F5.nonsense\u002F1.summary",{"title":281,"icon":282,"path":283,"stem":284,"children":285,"page":15},"Python","i-lucide-file-code-2","\u002Fen\u002Fnonsense\u002Fpython","en\u002F5.nonsense\u002F2.python",[286,290,294,298],{"title":287,"path":288,"stem":289},"Nvidia Stock Bot","\u002Fen\u002Fnonsense\u002Fpython\u002Fnvidia-stock-bot","en\u002F5.nonsense\u002F2.python\u002F1.nvidia-stock-bot",{"title":291,"path":292,"stem":293},"Adguard CIDRE","\u002Fen\u002Fnonsense\u002Fpython\u002Fadguard-cidre","en\u002F5.nonsense\u002F2.python\u002F2.adguard-cidre",{"title":295,"path":296,"stem":297},"Lumeex","\u002Fen\u002Fnonsense\u002Fpython\u002Flumeex","en\u002F5.nonsense\u002F2.python\u002F3.lumeex",{"title":299,"path":300,"stem":301},"Instameex","\u002Fen\u002Fnonsense\u002Fpython\u002Finstameex","en\u002F5.nonsense\u002F2.python\u002F4.instameex",{"title":303,"icon":304,"path":305,"stem":306,"children":307,"page":15},"Bash","i-lucide-file-terminal","\u002Fen\u002Fnonsense\u002Fbash","en\u002F5.nonsense\u002F3.bash",[308,312,316,320,324,328],{"title":309,"path":310,"stem":311},"Servarr corrector","\u002Fen\u002Fnonsense\u002Fbash\u002Fservarr-duplicates","en\u002F5.nonsense\u002F3.bash\u002F1.servarr-duplicates",{"title":313,"path":314,"stem":315},"LUKS Backup","\u002Fen\u002Fnonsense\u002Fbash\u002Fluks-backup","en\u002F5.nonsense\u002F3.bash\u002F2.luks-backup",{"title":317,"path":318,"stem":319},"Socat Proxy","\u002Fen\u002Fnonsense\u002Fbash\u002Fsocat-proxy","en\u002F5.nonsense\u002F3.bash\u002F3.socat-proxy",{"title":321,"path":322,"stem":323},"HotDisk","\u002Fen\u002Fnonsense\u002Fbash\u002Fhotdisk","en\u002F5.nonsense\u002F3.bash\u002F4.hotdisk",{"title":325,"path":326,"stem":327},"Backrest Docker Stop","\u002Fen\u002Fnonsense\u002Fbash\u002Fbackrest-docker-stop","en\u002F5.nonsense\u002F3.bash\u002F5.backrest-docker-stop",{"title":329,"path":330,"stem":331},"rm Confirmation Guard","\u002Fen\u002Fnonsense\u002Fbash\u002Frm-confirmation","en\u002F5.nonsense\u002F3.bash\u002F6.rm-confirmation",{"title":333,"icon":334,"path":335,"stem":336,"children":337,"page":15},"Recycled","i-noto-recycling-symbol","\u002Fen\u002Frecycled","en\u002F6.recycled",[338,341,355],{"title":333,"path":339,"stem":340,"icon":25},"\u002Fen\u002Frecycled\u002Fsummary","en\u002F6.recycled\u002F1.summary",{"title":342,"icon":343,"path":344,"stem":345,"children":346,"page":15},"Deprecated","i-lucide-trash-2","\u002Fen\u002Frecycled\u002Fdeprecated","en\u002F6.recycled\u002F2.deprecated",[347,351],{"title":348,"path":349,"stem":350},"Wireguard 14","\u002Fen\u002Frecycled\u002Fdeprecated\u002Fwireguard-14","en\u002F6.recycled\u002F2.deprecated\u002F1.wireguard-14",{"title":352,"path":353,"stem":354},"File Browser","\u002Fen\u002Frecycled\u002Fdeprecated\u002Ffile-browser","en\u002F6.recycled\u002F2.deprecated\u002F2.file-browser",{"title":356,"icon":357,"path":358,"stem":359,"children":360,"page":15},"Alternatives","i-lucide-arrow-left-right","\u002Fen\u002Frecycled\u002Falternatives","en\u002F6.recycled\u002F3.alternatives",[361,365,369,373],{"title":362,"path":363,"stem":364},"Plex","\u002Fen\u002Frecycled\u002Falternatives\u002Fplex","en\u002F6.recycled\u002F3.alternatives\u002F1.plex",{"title":366,"path":367,"stem":368},"Qbittorrent for Plex","\u002Fen\u002Frecycled\u002Falternatives\u002Fqbittorrent-for-plex","en\u002F6.recycled\u002F3.alternatives\u002F2.qbittorrent for plex",{"title":370,"path":371,"stem":372},"Servarr for Plex","\u002Fen\u002Frecycled\u002Falternatives\u002Fservarr-for-plex","en\u002F6.recycled\u002F3.alternatives\u002F3.servarr for plex",{"title":374,"path":375,"stem":376},"Gitea","\u002Fen\u002Frecycled\u002Falternatives\u002Fgitea","en\u002F6.recycled\u002F3.alternatives\u002F4.gitea",{"id":378,"title":181,"body":379,"contributors":2662,"description":2664,"extension":2665,"hideCopyPage":15,"hideHeader":15,"hideToc":15,"links":2666,"meta":2667,"navigation":731,"path":182,"seo":2668,"stem":183,"__hash__":2669},"docs_en\u002Fen\u002F3.serveex\u002F5.media\u002F2.qbittorrent.md",{"type":380,"value":381,"toc":2642},"minimark",[382,390,398,401,446,449,454,459,463,1404,1408,1495,1502,1513,1517,1532,1535,1564,2085,2092,2096,2109,2596,2611,2630,2633,2638],[383,384],"ellipsis",{"blur":385,"left":386,"top":387,"width":388,"z-index":389},"140px","0px","10rem","40rem","60",[391,392,393],"p",{},[394,395],"img",{"alt":396,"src":397},"Picture","\u002Fimg\u002Fserveex\u002Fqbit-vue.jpeg",[391,399,400],{},"To safely download your favorite media, we'll build a system using:",[402,403,404,414,422,429,437],"ul",{},[405,406,407,413],"li",{},[408,409,181],"a",{"href":410,"rel":411},"https:\u002F\u002Fgithub.com\u002Flinuxserver\u002Fdocker-qbittorrent",[412],"nofollow"," as the BitTorrent client",[405,415,416,421],{},[408,417,420],{"href":418,"rel":419},"https:\u002F\u002Fprotonvpn.com\u002Ftorrenting",[412],"Proton VPN Plus",", a VPN to secure your traffic. You need a subscription (promos available) to access the BitTorrent protocol. You can also use another VPN as long as it supports BitTorrent.",[405,423,424],{},[408,425,428],{"href":426,"rel":427},"https:\u002F\u002Fgithub.com\u002Fqdm12\u002Fgluetun",[412],"Gluetun",[405,430,431,436],{},[408,432,435],{"href":433,"rel":434},"https:\u002F\u002Fcodeberg.org\u002FTechnoSam\u002Fqbittorrent-gluetun-port-update",[412],"Qbittorrent port update"," to automatically update the VPN port (which changes regularly).",[405,438,439,440,445],{},"The ",[408,441,444],{"href":442,"rel":443},"https:\u002F\u002Fgithub.com\u002Fgabe565\u002Flinuxserver-mod-vuetorrent",[412],"VueTorrent"," mod for a modern and intuitive UI.",[391,447,448],{},"Here’s the system we’ll set up:",[391,450,451],{},[394,452],{"alt":396,"src":453},"\u002Fimg\u002Fserveex\u002Fqbit.svg",[455,456,458],"h2",{"id":457},"configuration","Configuration",[460,461],"file-tree",{":tree":462},"{\"\u002F\":[{\"srv\":[{\"docker\":[{\"seedbox\":[{\"qbittorrent\":[\"config\u002F\"]},\"gluetun\u002F\",\"compose.yaml\",\".env\"]}]}]},{\"media # linked to Jellyfin and Qbittorrent\":[\"downloads\u002F # generic downloads, selected in settings\",\"movies\u002F # used for downloading movies\",\"tvseries\u002F # used for downloading TV shows\"]}]}",[464,465,467,472,484,511,515,526,926,1000,1004,1011,1018,1021,1024,1049,1056,1071,1078,1093,1096,1185,1201,1205,1210,1271,1274,1400],"steps",{"level":466},"3",[468,469,471],"h3",{"id":470},"create-the-media-folders","Create the media folders",[391,473,474,475,479,480,483],{},"If not already done, create the ",[476,477,478],"code",{},"downloads"," folder under ",[476,481,482],{},"\u002Fmedia",":",[485,486,492],"pre",{"className":487,"code":488,"filename":489,"language":490,"meta":491,"style":491},"language-bash shiki shiki-themes github-dark material-theme github-dark","mkdir -P \u002Fmedia\u002Fdownloads\n","Terminal","bash","",[476,493,494],{"__ignoreMap":491},[495,496,499,503,507],"span",{"class":497,"line":498},"line",1,[495,500,502],{"class":501},"sEgDM","mkdir",[495,504,506],{"class":505},"sJWha"," -P",[495,508,510],{"class":509},"s11XM"," \u002Fmedia\u002Fdownloads\n",[468,512,514],{"id":513},"deploy-the-stack","Deploy the stack",[391,516,517,518,521,522,525],{},"Open Dockge, click on ",[476,519,520],{},"compose",", and name the stack ",[476,523,524],{},"seedbox",". Paste the following config:",[485,527,532],{"className":528,"code":529,"filename":530,"language":531,"meta":491,"style":491},"language-yaml shiki shiki-themes github-dark material-theme github-dark","---\nservices:\n  qbit:\n    image: ghcr.io\u002Flinuxserver\u002Fqbittorrent:libtorrentv1\n    container_name: qbittorrent\n    restart: unless-stopped\n    network_mode: service:gluetun\n    mem_limit: 4g\n    environment:\n      - DOCKER_MODS=ghcr.io\u002Fgabe565\u002Flinuxserver-mod-vuetorrent|ghcr.io\u002Ft-anc\u002Fgsp-qbittorent-gluetun-sync-port-mod:main\n      - TZ=Europe\u002FParis\n      - PUID=${PUID}\n      - PGID=${GUID}\n      - WEBUI_PORT=${UI_PORT}\n      - GSP_GTN_API_KEY=${GSP_KEY}\n      - GSP_QBT_USERNAME=${ID}\n      - GSP_QBT_PASSWORD=${PW}\n    volumes:\n      - \u002Fsrv\u002Fdocker\u002Fseedbox\u002Fqbittorrent\u002Fconfig:\u002Fconfig\n      - \u002Fmedia:\u002Fmedia\n    depends_on:\n      - gluetun\n\n  gluetun:\n    image: qmcgaw\u002Fgluetun:v3.41.3\n    container_name: gluetun\n    restart: unless-stopped\n    mem_limit: 4g\n    volumes:\n      - \u002Fsrv\u002Fdocker\u002Fgluetun\u002Fconfig.toml:\u002Fgluetun\u002Fauth\u002Fconfig.toml:ro\n    devices:\n      - \u002Fdev\u002Fnet\u002Ftun:\u002Fdev\u002Fnet\u002Ftun\n    ports:\n      - ${UI_PORT}:5695 # Port de la web-ui\n      - 8000:8000 # Port de controle de Gluetun\n    cap_add:\n      - NET_ADMIN\n    environment:\n      - TZ=Europe\u002FParis\n      - VPN_SERVICE_PROVIDER=protonvpn\n      - VPN_PORT_FORWARDING=on\n      - VPN_PORT_FORWARDING_PROVIDER=protonvpn\n      - VPN_TYPE=wireguard\n      - WIREGUARD_PRIVATE_KEY=${PR_KEY}\n      - SERVER_COUNTRIES=France\n      - PORT_FORWARD_ONLY=on\n","compose.yaml","yaml",[476,533,534,539,550,558,569,580,591,602,613,621,630,638,646,654,662,670,678,686,694,702,710,718,726,733,741,751,760,769,778,785,793,801,809,817,829,840,848,856,863,870,878,886,894,902,910,918],{"__ignoreMap":491},[495,535,536],{"class":497,"line":498},[495,537,538],{"class":501},"---\n",[495,540,542,546],{"class":497,"line":541},2,[495,543,545],{"class":544},"sRuoG","services",[495,547,549],{"class":548},"s8jd1",":\n",[495,551,553,556],{"class":497,"line":552},3,[495,554,555],{"class":544},"  qbit",[495,557,549],{"class":548},[495,559,561,564,566],{"class":497,"line":560},4,[495,562,563],{"class":544},"    image",[495,565,483],{"class":548},[495,567,568],{"class":509}," ghcr.io\u002Flinuxserver\u002Fqbittorrent:libtorrentv1\n",[495,570,572,575,577],{"class":497,"line":571},5,[495,573,574],{"class":544},"    container_name",[495,576,483],{"class":548},[495,578,579],{"class":509}," qbittorrent\n",[495,581,583,586,588],{"class":497,"line":582},6,[495,584,585],{"class":544},"    restart",[495,587,483],{"class":548},[495,589,590],{"class":509}," unless-stopped\n",[495,592,594,597,599],{"class":497,"line":593},7,[495,595,596],{"class":544},"    network_mode",[495,598,483],{"class":548},[495,600,601],{"class":509}," service:gluetun\n",[495,603,605,608,610],{"class":497,"line":604},8,[495,606,607],{"class":544},"    mem_limit",[495,609,483],{"class":548},[495,611,612],{"class":509}," 4g\n",[495,614,616,619],{"class":497,"line":615},9,[495,617,618],{"class":544},"    environment",[495,620,549],{"class":548},[495,622,624,627],{"class":497,"line":623},10,[495,625,626],{"class":548},"      -",[495,628,629],{"class":509}," DOCKER_MODS=ghcr.io\u002Fgabe565\u002Flinuxserver-mod-vuetorrent|ghcr.io\u002Ft-anc\u002Fgsp-qbittorent-gluetun-sync-port-mod:main\n",[495,631,633,635],{"class":497,"line":632},11,[495,634,626],{"class":548},[495,636,637],{"class":509}," TZ=Europe\u002FParis\n",[495,639,641,643],{"class":497,"line":640},12,[495,642,626],{"class":548},[495,644,645],{"class":509}," PUID=${PUID}\n",[495,647,649,651],{"class":497,"line":648},13,[495,650,626],{"class":548},[495,652,653],{"class":509}," PGID=${GUID}\n",[495,655,657,659],{"class":497,"line":656},14,[495,658,626],{"class":548},[495,660,661],{"class":509}," WEBUI_PORT=${UI_PORT}\n",[495,663,665,667],{"class":497,"line":664},15,[495,666,626],{"class":548},[495,668,669],{"class":509}," GSP_GTN_API_KEY=${GSP_KEY}\n",[495,671,673,675],{"class":497,"line":672},16,[495,674,626],{"class":548},[495,676,677],{"class":509}," GSP_QBT_USERNAME=${ID}\n",[495,679,681,683],{"class":497,"line":680},17,[495,682,626],{"class":548},[495,684,685],{"class":509}," GSP_QBT_PASSWORD=${PW}\n",[495,687,689,692],{"class":497,"line":688},18,[495,690,691],{"class":544},"    volumes",[495,693,549],{"class":548},[495,695,697,699],{"class":497,"line":696},19,[495,698,626],{"class":548},[495,700,701],{"class":509}," \u002Fsrv\u002Fdocker\u002Fseedbox\u002Fqbittorrent\u002Fconfig:\u002Fconfig\n",[495,703,705,707],{"class":497,"line":704},20,[495,706,626],{"class":548},[495,708,709],{"class":509}," \u002Fmedia:\u002Fmedia\n",[495,711,713,716],{"class":497,"line":712},21,[495,714,715],{"class":544},"    depends_on",[495,717,549],{"class":548},[495,719,721,723],{"class":497,"line":720},22,[495,722,626],{"class":548},[495,724,725],{"class":509}," gluetun\n",[495,727,729],{"class":497,"line":728},23,[495,730,732],{"emptyLinePlaceholder":731},true,"\n",[495,734,736,739],{"class":497,"line":735},24,[495,737,738],{"class":544},"  gluetun",[495,740,549],{"class":548},[495,742,744,746,748],{"class":497,"line":743},25,[495,745,563],{"class":544},[495,747,483],{"class":548},[495,749,750],{"class":509}," qmcgaw\u002Fgluetun:v3.41.3\n",[495,752,754,756,758],{"class":497,"line":753},26,[495,755,574],{"class":544},[495,757,483],{"class":548},[495,759,725],{"class":509},[495,761,763,765,767],{"class":497,"line":762},27,[495,764,585],{"class":544},[495,766,483],{"class":548},[495,768,590],{"class":509},[495,770,772,774,776],{"class":497,"line":771},28,[495,773,607],{"class":544},[495,775,483],{"class":548},[495,777,612],{"class":509},[495,779,781,783],{"class":497,"line":780},29,[495,782,691],{"class":544},[495,784,549],{"class":548},[495,786,788,790],{"class":497,"line":787},30,[495,789,626],{"class":548},[495,791,792],{"class":509}," \u002Fsrv\u002Fdocker\u002Fgluetun\u002Fconfig.toml:\u002Fgluetun\u002Fauth\u002Fconfig.toml:ro\n",[495,794,796,799],{"class":497,"line":795},31,[495,797,798],{"class":544},"    devices",[495,800,549],{"class":548},[495,802,804,806],{"class":497,"line":803},32,[495,805,626],{"class":548},[495,807,808],{"class":509}," \u002Fdev\u002Fnet\u002Ftun:\u002Fdev\u002Fnet\u002Ftun\n",[495,810,812,815],{"class":497,"line":811},33,[495,813,814],{"class":544},"    ports",[495,816,549],{"class":548},[495,818,820,822,825],{"class":497,"line":819},34,[495,821,626],{"class":548},[495,823,824],{"class":509}," ${UI_PORT}:5695",[495,826,828],{"class":827},"sDvJj"," # Port de la web-ui\n",[495,830,832,834,837],{"class":497,"line":831},35,[495,833,626],{"class":548},[495,835,836],{"class":509}," 8000:8000",[495,838,839],{"class":827}," # Port de controle de Gluetun\n",[495,841,843,846],{"class":497,"line":842},36,[495,844,845],{"class":544},"    cap_add",[495,847,549],{"class":548},[495,849,851,853],{"class":497,"line":850},37,[495,852,626],{"class":548},[495,854,855],{"class":509}," NET_ADMIN\n",[495,857,859,861],{"class":497,"line":858},38,[495,860,618],{"class":544},[495,862,549],{"class":548},[495,864,866,868],{"class":497,"line":865},39,[495,867,626],{"class":548},[495,869,637],{"class":509},[495,871,873,875],{"class":497,"line":872},40,[495,874,626],{"class":548},[495,876,877],{"class":509}," VPN_SERVICE_PROVIDER=protonvpn\n",[495,879,881,883],{"class":497,"line":880},41,[495,882,626],{"class":548},[495,884,885],{"class":509}," VPN_PORT_FORWARDING=on\n",[495,887,889,891],{"class":497,"line":888},42,[495,890,626],{"class":548},[495,892,893],{"class":509}," VPN_PORT_FORWARDING_PROVIDER=protonvpn\n",[495,895,897,899],{"class":497,"line":896},43,[495,898,626],{"class":548},[495,900,901],{"class":509}," VPN_TYPE=wireguard\n",[495,903,905,907],{"class":497,"line":904},44,[495,906,626],{"class":548},[495,908,909],{"class":509}," WIREGUARD_PRIVATE_KEY=${PR_KEY}\n",[495,911,913,915],{"class":497,"line":912},45,[495,914,626],{"class":548},[495,916,917],{"class":509}," SERVER_COUNTRIES=France\n",[495,919,921,923],{"class":497,"line":920},46,[495,922,626],{"class":548},[495,924,925],{"class":509}," PORT_FORWARD_ONLY=on\n",[927,928,929,937],"tip",{"icon":491},[391,930,931,932,936],{},"✨ ",[933,934,935],"strong",{},"Tip:"," Add the Watchtower label in each container to automate updates",[485,938,940],{"className":528,"code":939,"filename":530,"language":531,"meta":491,"style":491},"---\nservices:\n  qbittorrent:\n    #...\n    labels:\n      - com.centurylinklabs.watchtower.enable=true\n  gluetun:\n    #...\n    labels:\n      - com.centurylinklabs.watchtower.enable=true\n",[476,941,942,946,952,959,964,971,978,984,988,994],{"__ignoreMap":491},[495,943,944],{"class":497,"line":498},[495,945,538],{"class":501},[495,947,948,950],{"class":497,"line":541},[495,949,545],{"class":544},[495,951,549],{"class":548},[495,953,954,957],{"class":497,"line":552},[495,955,956],{"class":544},"  qbittorrent",[495,958,549],{"class":548},[495,960,961],{"class":497,"line":560},[495,962,963],{"class":827},"    #...\n",[495,965,966,969],{"class":497,"line":571},[495,967,968],{"class":544},"    labels",[495,970,549],{"class":548},[495,972,973,975],{"class":497,"line":582},[495,974,626],{"class":548},[495,976,977],{"class":509}," com.centurylinklabs.watchtower.enable=true\n",[495,979,980,982],{"class":497,"line":593},[495,981,738],{"class":544},[495,983,549],{"class":548},[495,985,986],{"class":497,"line":604},[495,987,963],{"class":827},[495,989,990,992],{"class":497,"line":615},[495,991,968],{"class":544},[495,993,549],{"class":548},[495,995,996,998],{"class":497,"line":623},[495,997,626],{"class":548},[495,999,977],{"class":509},[468,1001,1003],{"id":1002},"configure-the-download-port-update","Configure the download port update",[391,1005,1006,1007,1010],{},"Before editing the ",[476,1008,1009],{},".env"," in Dockge, let's configure the download port update. Proton and most VPNs rotate the forwarding port, which must be communicated to Qbittorrent.",[391,1012,1013,1014,1017],{},"We’ve added the mod ",[476,1015,1016],{},"ghcr.io\u002Ft-anc\u002Fgsp-qbittorent-gluetun-sync-port-mod"," to the container.",[391,1019,1020],{},"We now need to allow the mod to fetch info from Gluetun, which only allows encrypted communication via its API.",[391,1022,1023],{},"Open a terminal to generate the authentication key:",[485,1025,1027],{"className":487,"code":1026,"filename":489,"language":490,"meta":491,"style":491},"sudo docker run --rm qmcgaw\u002Fgluetun genkey\n",[476,1028,1029],{"__ignoreMap":491},[495,1030,1031,1034,1037,1040,1043,1046],{"class":497,"line":498},[495,1032,1033],{"class":501},"sudo",[495,1035,1036],{"class":509}," docker",[495,1038,1039],{"class":509}," run",[495,1041,1042],{"class":505}," --rm",[495,1044,1045],{"class":509}," qmcgaw\u002Fgluetun",[495,1047,1048],{"class":509}," genkey\n",[391,1050,1051,1052,1055],{},"Note the key, then create the ",[476,1053,1054],{},"\u002Fsrv\u002Fdocker\u002Fgluetun"," folder:",[485,1057,1059],{"className":487,"code":1058,"filename":489,"language":490,"meta":491,"style":491},"sudo mkdir \u002Fsrv\u002Fdocker\u002Fgluetun\n",[476,1060,1061],{"__ignoreMap":491},[495,1062,1063,1065,1068],{"class":497,"line":498},[495,1064,1033],{"class":501},[495,1066,1067],{"class":509}," mkdir",[495,1069,1070],{"class":509}," \u002Fsrv\u002Fdocker\u002Fgluetun\n",[391,1072,1073,1074,1077],{},"Create the ",[476,1075,1076],{},"config.toml"," file:",[485,1079,1081],{"className":487,"code":1080,"filename":489,"language":490,"meta":491,"style":491},"sudo nano \u002Fsrv\u002Fdocker\u002Fgluetun\u002Fconfig.toml\n",[476,1082,1083],{"__ignoreMap":491},[495,1084,1085,1087,1090],{"class":497,"line":498},[495,1086,1033],{"class":501},[495,1088,1089],{"class":509}," nano",[495,1091,1092],{"class":509}," \u002Fsrv\u002Fdocker\u002Fgluetun\u002Fconfig.toml\n",[391,1094,1095],{},"Enter:",[485,1097,1101],{"className":1098,"code":1099,"filename":1076,"language":1100,"meta":491,"style":491},"language-toml shiki shiki-themes github-dark material-theme github-dark","[[roles]]\nname = \"t-anc\u002FGSP-Qbittorent-Gluetun-sync-port-mod\"\nroutes = [\"GET \u002Fv1\u002Fportforward\"]\nauth = \"apikey\"\napikey = \"your_key_here\" # key you just generated\n","toml",[476,1102,1103,1114,1133,1154,1168],{"__ignoreMap":491},[495,1104,1105,1108,1111],{"class":497,"line":498},[495,1106,1107],{"class":548},"[[",[495,1109,1110],{"class":501},"roles",[495,1112,1113],{"class":548},"]]\n",[495,1115,1116,1120,1123,1127,1130],{"class":497,"line":541},[495,1117,1119],{"class":1118},"slcoZ","name ",[495,1121,1122],{"class":548},"=",[495,1124,1126],{"class":1125},"s8K8j"," \"",[495,1128,1129],{"class":509},"t-anc\u002FGSP-Qbittorent-Gluetun-sync-port-mod",[495,1131,1132],{"class":1125},"\"\n",[495,1134,1135,1138,1140,1143,1146,1149,1151],{"class":497,"line":552},[495,1136,1137],{"class":1118},"routes ",[495,1139,1122],{"class":548},[495,1141,1142],{"class":548}," [",[495,1144,1145],{"class":1125},"\"",[495,1147,1148],{"class":509},"GET \u002Fv1\u002Fportforward",[495,1150,1145],{"class":1125},[495,1152,1153],{"class":548},"]\n",[495,1155,1156,1159,1161,1163,1166],{"class":497,"line":560},[495,1157,1158],{"class":1118},"auth ",[495,1160,1122],{"class":548},[495,1162,1126],{"class":1125},[495,1164,1165],{"class":509},"apikey",[495,1167,1132],{"class":1125},[495,1169,1170,1173,1175,1177,1180,1182],{"class":497,"line":571},[495,1171,1172],{"class":1118},"apikey ",[495,1174,1122],{"class":548},[495,1176,1126],{"class":1125},[495,1178,1179],{"class":509},"your_key_here",[495,1181,1145],{"class":1125},[495,1183,1184],{"class":827}," # key you just generated\n",[391,1186,1187,1188,1192,1193,1196,1197,1200],{},"Press ",[1189,1190],"kbd",{"value":1191},"Ctrl+O",", then ",[1189,1194],{"value":1195},"Enter"," to save, and ",[1189,1198],{"value":1199},"Ctrl+X"," to exit.",[468,1202,1204],{"id":1203},"set-your-environment-variables","Set your environment variables",[391,1206,1207,1208,483],{},"In Dockge, fill in the variables in ",[476,1209,1009],{},[485,1211,1215],{"className":1212,"code":1213,"filename":1009,"language":1214,"meta":491,"style":491},"language-properties shiki shiki-themes github-dark material-theme github-dark","PUID=\nGUID=\nUI_PORT=\nPR_KEY=\nGSP_KEY= # the key you generated and entered in config.toml\nID=\nPW=\n","properties",[476,1216,1217,1226,1233,1240,1247,1257,1264],{"__ignoreMap":491},[495,1218,1219,1223],{"class":497,"line":498},[495,1220,1222],{"class":1221},"szyEh","PUID",[495,1224,1225],{"class":548},"=\n",[495,1227,1228,1231],{"class":497,"line":541},[495,1229,1230],{"class":1221},"GUID",[495,1232,1225],{"class":548},[495,1234,1235,1238],{"class":497,"line":552},[495,1236,1237],{"class":1221},"UI_PORT",[495,1239,1225],{"class":548},[495,1241,1242,1245],{"class":497,"line":560},[495,1243,1244],{"class":1221},"PR_KEY",[495,1246,1225],{"class":548},[495,1248,1249,1252,1254],{"class":497,"line":571},[495,1250,1251],{"class":1221},"GSP_KEY",[495,1253,1122],{"class":548},[495,1255,1256],{"class":827}," # the key you generated and entered in config.toml\n",[495,1258,1259,1262],{"class":497,"line":582},[495,1260,1261],{"class":1221},"ID",[495,1263,1225],{"class":548},[495,1265,1266,1269],{"class":497,"line":593},[495,1267,1268],{"class":1221},"PW",[495,1270,1225],{"class":548},[391,1272,1273],{},"Detailed info:",[1275,1276,1277,1293],"table",{},[1278,1279,1280],"thead",{},[1281,1282,1283,1287,1290],"tr",{},[1284,1285,1286],"th",{},"Variable",[1284,1288,1289],{},"Description",[1284,1291,1292],{},"Example",[1294,1295,1296,1315,1330,1344,1358,1372,1386],"tbody",{},[1281,1297,1298,1303,1310],{},[1299,1300,1301],"td",{},[476,1302,1222],{},[1299,1304,1305,1306,1309],{},"User ID (",[476,1307,1308],{},"id yourusername",")",[1299,1311,1312],{},[476,1313,1314],{},"1000",[1281,1316,1317,1321,1326],{},[1299,1318,1319],{},[476,1320,1230],{},[1299,1322,1323,1324,1309],{},"Group ID (",[476,1325,1308],{},[1299,1327,1328],{},[476,1329,1314],{},[1281,1331,1332,1336,1339],{},[1299,1333,1334],{},[476,1335,1237],{},[1299,1337,1338],{},"Port for accessing the web UI",[1299,1340,1341],{},[476,1342,1343],{},"5695",[1281,1345,1346,1350,1353],{},[1299,1347,1348],{},[476,1349,1244],{},[1299,1351,1352],{},"Private key from Proton",[1299,1354,1355],{},[476,1356,1357],{},"buKsjNHLyzKMM1qYnzOy4s7SHfly",[1281,1359,1360,1364,1367],{},[1299,1361,1362],{},[476,1363,1251],{},[1299,1365,1366],{},"Key you generated for port update",[1299,1368,1369],{},[476,1370,1371],{},"MnBa47MeVmk7xiv",[1281,1373,1374,1378,1381],{},[1299,1375,1376],{},[476,1377,1261],{},[1299,1379,1380],{},"Qbittorrent UI login username",[1299,1382,1383],{},[476,1384,1385],{},"user",[1281,1387,1388,1392,1395],{},[1299,1389,1390],{},[476,1391,1268],{},[1299,1393,1394],{},"Qbittorrent UI password",[1299,1396,1397],{},[476,1398,1399],{},"password",[468,1401,1403],{"id":1402},"done","Done !",[455,1405,1407],{"id":1406},"deployment","Deployment",[464,1409,1410,1414,1417,1471,1475,1482,1489,1492],{"level":466},[468,1411,1413],{"id":1412},"deploy-the-container","Deploy the container",[391,1415,1416],{},"Once done, deploy the container.",[1418,1419,1421,1435],"note",{"to":1420},"\u002Fserveex\u002Fcore\u002Fdocker\u002F#dockge",[391,1422,1423,1430,1431,1434],{},[933,1424,1425,1426,1429],{},"Startup logs will show a temporary password for ",[476,1427,1428],{},"admin"," user.","\nSee logs in ",[933,1432,1433],{},"Dockge"," to retrieve it, or type this command in a terminal:",[485,1436,1438],{"className":487,"code":1437,"filename":489,"language":490,"meta":491,"style":491},"docker logs qbittorrent 2>&1 | grep -i \"temporary password\"\n",[476,1439,1440],{"__ignoreMap":491},[495,1441,1442,1445,1448,1451,1455,1458,1461,1464,1466,1469],{"class":497,"line":498},[495,1443,1444],{"class":501},"docker",[495,1446,1447],{"class":509}," logs",[495,1449,1450],{"class":509}," qbittorrent",[495,1452,1454],{"class":1453},"sJPTy"," 2>&1",[495,1456,1457],{"class":1453}," |",[495,1459,1460],{"class":501}," grep",[495,1462,1463],{"class":505}," -i",[495,1465,1126],{"class":1125},[495,1467,1468],{"class":509},"temporary password",[495,1470,1132],{"class":1125},[468,1472,1474],{"id":1473},"log-in-and-secure-your-account","Log in and secure your account",[391,1476,1477,1478,1481],{},"Login at ",[476,1479,1480],{},"http:\u002F\u002Fserver-ip:5695"," (or the port you set).",[1483,1484,1485,1488],"caution",{},[933,1486,1487],{},"If login fails:"," check your firewall rules.",[391,1490,1491],{},"Change your username and password in the \"webui\" settings.",[468,1493,1403],{"id":1494},"done-1",[391,1496,1497,1498,1501],{},"You're done! In Qbittorrent settings, under \"Downloads\", set ",[476,1499,1500],{},"\u002Fmedia\u002Fdownloads"," as the default folder.",[391,1503,1504,1505,1508,1509,1512],{},"When adding a download, remember to select the proper directory so Jellyfin can sync correctly (",[476,1506,1507],{},"\u002Fmedia\u002Fmovies"," or ",[476,1510,1511],{},"\u002Fmedia\u002Ftvseries","). You can also automate this with categories and folders.",[455,1514,1516],{"id":1515},"exposing-the-web-ui","Exposing the Web UI",[1518,1519,1520,1521,1508,1524,1527,1528,1531],"warning",{},"Qbittorrent does not support multi-factor authentication. Exposing it to the internet may put your system at risk. Only do this if you use MFA via ",[408,1522,137],{"href":1523},"\u002Fserveex\u002Fsecurity\u002Ftinyauth",[408,1525,255],{"href":1526},"\u002Fserveex\u002Fadvanced\u002Fauthentik\u002F",". Otherwise, don’t expose it with SWAG. Use a VPN like ",[408,1529,119],{"href":1530},"\u002Fserveex\u002Fcore\u002Fwireguard"," instead.",[391,1533,1534],{},"To start downloads from outside your home, without a VPN, you can expose the Qbittorrent web UI.",[1418,1536,1537,1538,1541,1542,1545,1546,1549,1550,1554,1555,1558,1559,1563],{},"We assume you have the subdomain ",[476,1539,1540],{},"seedbox.mydomain.com"," with a ",[476,1543,1544],{},"CNAME"," pointing to ",[476,1547,1548],{},"mydomain.com"," in ",[408,1551,1553],{"href":1552},"\u002Fgeneral\u002Fnetworking\u002Fdns","DNS zone",". And that port ",[476,1556,1557],{},"443"," on your router is forwarded to your server in ",[408,1560,1562],{"href":1561},"\u002Fgeneral\u002Fnetworking\u002Fnat","NAT rules",", unless you’re using Cloudflare Zero Trust.",[464,1565,1566,1570,1573,1672,1675,1687,1691,1697,1707,1721,1724,2074,2082],{"level":466},[468,1567,1569],{"id":1568},"add-gluetuns-network-to-swag","Add Gluetun's network to SWAG",[391,1571,1572],{},"In Dockge, edit the SWAG compose file and add Gluetun’s network:",[485,1574,1576],{"className":528,"code":1575,"filename":530,"language":531,"meta":491,"style":491},"---\nservices:\n  swag:\n    container_name: # ...\n    # ...\n    networks:\n      # ...\n      - seedbox\n\nnetworks:\n  # ...\n  seedbox:\n    name: seedbox_default\n    external: true\n",[476,1577,1578,1582,1588,1595,1604,1609,1616,1621,1628,1632,1639,1644,1651,1661],{"__ignoreMap":491},[495,1579,1580],{"class":497,"line":498},[495,1581,538],{"class":501},[495,1583,1584,1586],{"class":497,"line":541},[495,1585,545],{"class":544},[495,1587,549],{"class":548},[495,1589,1590,1593],{"class":497,"line":552},[495,1591,1592],{"class":544},"  swag",[495,1594,549],{"class":548},[495,1596,1597,1599,1601],{"class":497,"line":560},[495,1598,574],{"class":544},[495,1600,483],{"class":548},[495,1602,1603],{"class":827}," # ...\n",[495,1605,1606],{"class":497,"line":571},[495,1607,1608],{"class":827},"    # ...\n",[495,1610,1611,1614],{"class":497,"line":582},[495,1612,1613],{"class":544},"    networks",[495,1615,549],{"class":548},[495,1617,1618],{"class":497,"line":593},[495,1619,1620],{"class":827},"      # ...\n",[495,1622,1623,1625],{"class":497,"line":604},[495,1624,626],{"class":548},[495,1626,1627],{"class":509}," seedbox\n",[495,1629,1630],{"class":497,"line":615},[495,1631,732],{"emptyLinePlaceholder":731},[495,1633,1634,1637],{"class":497,"line":623},[495,1635,1636],{"class":544},"networks",[495,1638,549],{"class":548},[495,1640,1641],{"class":497,"line":632},[495,1642,1643],{"class":827},"  # ...\n",[495,1645,1646,1649],{"class":497,"line":640},[495,1647,1648],{"class":544},"  seedbox",[495,1650,549],{"class":548},[495,1652,1653,1656,1658],{"class":497,"line":648},[495,1654,1655],{"class":544},"    name",[495,1657,483],{"class":548},[495,1659,1660],{"class":509}," seedbox_default\n",[495,1662,1663,1666,1668],{"class":497,"line":656},[495,1664,1665],{"class":544},"    external",[495,1667,483],{"class":548},[495,1669,1671],{"class":1670},"s08Ry"," true\n",[391,1673,1674],{},"Click \"Deploy\" and wait for SWAG to fully initialize.",[1418,1676,1677,1678,1681,1682,1686],{},"We assume the network name is ",[476,1679,1680],{},"seedbox_default",". You can confirm by checking the SWAG dashboard at ",[408,1683,1684],{"href":1684,"rel":1685},"http:\u002F\u002Fserver-ip:81",[412],".",[468,1688,1690],{"id":1689},"create-the-subdomainconf-file","Create the subdomain.conf file",[391,1692,1693,1694,1686],{},"Now create\u002Fedit ",[476,1695,1696],{},"seedbox.subdomain.conf",[927,1698,931,1700,1703,1704,1706],{"icon":491,"to":1699},"\u002Fserveex\u002Ffiles\u002Ffile-browser-quantum",[933,1701,1702],{},"Terminal-free tip:"," use ",[933,1705,209],{}," to edit files instead of using the terminal.",[485,1708,1710],{"className":487,"code":1709,"filename":489,"language":490,"meta":491,"style":491},"sudo nano \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Fnginx\u002Fproxy-confs\u002Fseedbox.subdomain.conf\n",[476,1711,1712],{"__ignoreMap":491},[495,1713,1714,1716,1718],{"class":497,"line":498},[495,1715,1033],{"class":501},[495,1717,1089],{"class":509},[495,1719,1720],{"class":509}," \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Fnginx\u002Fproxy-confs\u002Fseedbox.subdomain.conf\n",[391,1722,1723],{},"Paste the following config (check the port):",[485,1725,1729],{"className":1726,"code":1727,"filename":1696,"language":1728,"meta":491,"style":491},"language-nginx shiki shiki-themes github-dark material-theme github-dark","## Version 2023\u002F12\u002F19\n\nserver {\n    listen 443 ssl;\n    listen [::]:443 ssl;\n\n    server_name seedbox.*;\n\n    include \u002Fconfig\u002Fnginx\u002Fssl.conf;\n\n    client_max_body_size 0;\n\n    #if ($lan-ip = yes) { set $geo-whitelist yes; }\n    #if ($geo-whitelist = no) { return 404; }\n    if ($geo-blacklist = no) { return 404; }\n\n    # enable for ldap auth (requires ldap-location.conf in the location block)\n    #include \u002Fconfig\u002Fnginx\u002Fldap-server.conf;\n\n    # enable for Authelia (requires authelia-location.conf in the location block)\n    #include \u002Fconfig\u002Fnginx\u002Fauthelia-server.conf;\n\n    # enable for Authentik (requires authentik-location.conf in the location block)\n    #include \u002Fconfig\u002Fnginx\u002Fauthentik-server.conf;\n\n    location \u002F {\n        # enable the next two lines for http auth\n        #auth_basic \"Restricted\";\n        #auth_basic_user_file \u002Fconfig\u002Fnginx\u002F.htpasswd;\n\n        # enable for ldap auth (requires ldap-server.conf in the server block)\n        #include \u002Fconfig\u002Fnginx\u002Fldap-location.conf;\n\n        # enable for Authelia (requires authelia-server.conf in the server block)\n        #include \u002Fconfig\u002Fnginx\u002Fauthelia-location.conf;\n\n        # enable for Authentik (requires authentik-server.conf in the server block)\n        #include \u002Fconfig\u002Fnginx\u002Fauthentik-location.conf;\n\n        include \u002Fconfig\u002Fnginx\u002Fproxy.conf;\n        include \u002Fconfig\u002Fnginx\u002Fresolver.conf;\n        set $upstream_app gluetun;\n        set $upstream_port 5555;\n        set $upstream_proto http;\n        proxy_pass $upstream_proto:\u002F\u002F$upstream_app:$upstream_port;\n\n    }\n}\n","nginx",[476,1730,1731,1736,1740,1749,1763,1772,1776,1786,1790,1800,1804,1814,1818,1823,1828,1862,1866,1871,1876,1880,1885,1890,1894,1899,1904,1908,1919,1924,1929,1934,1938,1943,1948,1952,1957,1962,1966,1971,1976,1980,1990,1999,2011,2025,2036,2058,2062,2068],{"__ignoreMap":491},[495,1732,1733],{"class":497,"line":498},[495,1734,1735],{"class":827},"## Version 2023\u002F12\u002F19\n",[495,1737,1738],{"class":497,"line":541},[495,1739,732],{"emptyLinePlaceholder":731},[495,1741,1742,1746],{"class":497,"line":552},[495,1743,1745],{"class":1744},"sAoO4","server",[495,1747,1748],{"class":1118}," {\n",[495,1750,1751,1754,1757,1760],{"class":497,"line":560},[495,1752,1753],{"class":1453},"    listen ",[495,1755,1557],{"class":1756},"swwWl",[495,1758,1759],{"class":1118}," ssl",[495,1761,1762],{"class":548},";\n",[495,1764,1765,1767,1770],{"class":497,"line":571},[495,1766,1753],{"class":1453},[495,1768,1769],{"class":1118},"[::]:443 ssl",[495,1771,1762],{"class":548},[495,1773,1774],{"class":497,"line":582},[495,1775,732],{"emptyLinePlaceholder":731},[495,1777,1778,1781,1784],{"class":497,"line":593},[495,1779,1780],{"class":1453},"    server_name ",[495,1782,1783],{"class":1118},"seedbox.*",[495,1785,1762],{"class":548},[495,1787,1788],{"class":497,"line":604},[495,1789,732],{"emptyLinePlaceholder":731},[495,1791,1792,1795,1798],{"class":497,"line":615},[495,1793,1794],{"class":1453},"    include ",[495,1796,1797],{"class":1118},"\u002Fconfig\u002Fnginx\u002Fssl.conf",[495,1799,1762],{"class":548},[495,1801,1802],{"class":497,"line":623},[495,1803,732],{"emptyLinePlaceholder":731},[495,1805,1806,1809,1812],{"class":497,"line":632},[495,1807,1808],{"class":1453},"    client_max_body_size ",[495,1810,1811],{"class":1756},"0",[495,1813,1762],{"class":548},[495,1815,1816],{"class":497,"line":640},[495,1817,732],{"emptyLinePlaceholder":731},[495,1819,1820],{"class":497,"line":648},[495,1821,1822],{"class":827},"    #if ($lan-ip = yes) { set $geo-whitelist yes; }\n",[495,1824,1825],{"class":497,"line":656},[495,1826,1827],{"class":827},"    #if ($geo-whitelist = no) { return 404; }\n",[495,1829,1830,1834,1837,1840,1843,1846,1849,1853,1856,1859],{"class":497,"line":664},[495,1831,1833],{"class":1832},"sJLGa","    if",[495,1835,1836],{"class":1118}," (",[495,1838,1839],{"class":548},"$",[495,1841,1842],{"class":1118},"geo-blacklist ",[495,1844,1845],{"class":1453},"= ",[495,1847,1848],{"class":1118},"no) ",[495,1850,1852],{"class":1851},"sSoIa","{ ",[495,1854,1855],{"class":1832},"return",[495,1857,1858],{"class":1756}," 404",[495,1860,1861],{"class":1851},"; }\n",[495,1863,1864],{"class":497,"line":672},[495,1865,732],{"emptyLinePlaceholder":731},[495,1867,1868],{"class":497,"line":680},[495,1869,1870],{"class":827},"    # enable for ldap auth (requires ldap-location.conf in the location block)\n",[495,1872,1873],{"class":497,"line":688},[495,1874,1875],{"class":827},"    #include \u002Fconfig\u002Fnginx\u002Fldap-server.conf;\n",[495,1877,1878],{"class":497,"line":696},[495,1879,732],{"emptyLinePlaceholder":731},[495,1881,1882],{"class":497,"line":704},[495,1883,1884],{"class":827},"    # enable for Authelia (requires authelia-location.conf in the location block)\n",[495,1886,1887],{"class":497,"line":712},[495,1888,1889],{"class":827},"    #include \u002Fconfig\u002Fnginx\u002Fauthelia-server.conf;\n",[495,1891,1892],{"class":497,"line":720},[495,1893,732],{"emptyLinePlaceholder":731},[495,1895,1896],{"class":497,"line":728},[495,1897,1898],{"class":827},"    # enable for Authentik (requires authentik-location.conf in the location block)\n",[495,1900,1901],{"class":497,"line":735},[495,1902,1903],{"class":827},"    #include \u002Fconfig\u002Fnginx\u002Fauthentik-server.conf;\n",[495,1905,1906],{"class":497,"line":743},[495,1907,732],{"emptyLinePlaceholder":731},[495,1909,1910,1913,1916],{"class":497,"line":753},[495,1911,1912],{"class":1744},"    location",[495,1914,1915],{"class":501}," \u002F ",[495,1917,1918],{"class":1118},"{\n",[495,1920,1921],{"class":497,"line":762},[495,1922,1923],{"class":827},"        # enable the next two lines for http auth\n",[495,1925,1926],{"class":497,"line":771},[495,1927,1928],{"class":827},"        #auth_basic \"Restricted\";\n",[495,1930,1931],{"class":497,"line":780},[495,1932,1933],{"class":827},"        #auth_basic_user_file \u002Fconfig\u002Fnginx\u002F.htpasswd;\n",[495,1935,1936],{"class":497,"line":787},[495,1937,732],{"emptyLinePlaceholder":731},[495,1939,1940],{"class":497,"line":795},[495,1941,1942],{"class":827},"        # enable for ldap auth (requires ldap-server.conf in the server block)\n",[495,1944,1945],{"class":497,"line":803},[495,1946,1947],{"class":827},"        #include \u002Fconfig\u002Fnginx\u002Fldap-location.conf;\n",[495,1949,1950],{"class":497,"line":811},[495,1951,732],{"emptyLinePlaceholder":731},[495,1953,1954],{"class":497,"line":819},[495,1955,1956],{"class":827},"        # enable for Authelia (requires authelia-server.conf in the server block)\n",[495,1958,1959],{"class":497,"line":831},[495,1960,1961],{"class":827},"        #include \u002Fconfig\u002Fnginx\u002Fauthelia-location.conf;\n",[495,1963,1964],{"class":497,"line":842},[495,1965,732],{"emptyLinePlaceholder":731},[495,1967,1968],{"class":497,"line":850},[495,1969,1970],{"class":827},"        # enable for Authentik (requires authentik-server.conf in the server block)\n",[495,1972,1973],{"class":497,"line":858},[495,1974,1975],{"class":827},"        #include \u002Fconfig\u002Fnginx\u002Fauthentik-location.conf;\n",[495,1977,1978],{"class":497,"line":865},[495,1979,732],{"emptyLinePlaceholder":731},[495,1981,1982,1985,1988],{"class":497,"line":872},[495,1983,1984],{"class":1453},"        include ",[495,1986,1987],{"class":1118},"\u002Fconfig\u002Fnginx\u002Fproxy.conf",[495,1989,1762],{"class":548},[495,1991,1992,1994,1997],{"class":497,"line":880},[495,1993,1984],{"class":1453},[495,1995,1996],{"class":1118},"\u002Fconfig\u002Fnginx\u002Fresolver.conf",[495,1998,1762],{"class":548},[495,2000,2001,2004,2006,2009],{"class":497,"line":888},[495,2002,2003],{"class":1453},"        set ",[495,2005,1839],{"class":548},[495,2007,2008],{"class":1118},"upstream_app gluetun",[495,2010,1762],{"class":548},[495,2012,2013,2015,2017,2020,2023],{"class":497,"line":896},[495,2014,2003],{"class":1453},[495,2016,1839],{"class":548},[495,2018,2019],{"class":1118},"upstream_port ",[495,2021,2022],{"class":1756},"5555",[495,2024,1762],{"class":548},[495,2026,2027,2029,2031,2034],{"class":497,"line":904},[495,2028,2003],{"class":1453},[495,2030,1839],{"class":548},[495,2032,2033],{"class":1118},"upstream_proto http",[495,2035,1762],{"class":548},[495,2037,2038,2041,2043,2046,2048,2051,2053,2056],{"class":497,"line":912},[495,2039,2040],{"class":1453},"        proxy_pass ",[495,2042,1839],{"class":548},[495,2044,2045],{"class":1118},"upstream_proto:\u002F\u002F",[495,2047,1839],{"class":548},[495,2049,2050],{"class":1118},"upstream_app:",[495,2052,1839],{"class":548},[495,2054,2055],{"class":1118},"upstream_port",[495,2057,1762],{"class":548},[495,2059,2060],{"class":497,"line":920},[495,2061,732],{"emptyLinePlaceholder":731},[495,2063,2065],{"class":497,"line":2064},47,[495,2066,2067],{"class":1118},"    }\n",[495,2069,2071],{"class":497,"line":2070},48,[495,2072,2073],{"class":1118},"}\n",[391,2075,1187,2076,1192,2078,1196,2080,1200],{},[1189,2077],{"value":1191},[1189,2079],{"value":1195},[1189,2081],{"value":1199},[468,2083,1403],{"id":2084},"done-2",[391,2086,2087,2088,2091],{},"Wait a few minutes, then go to ",[476,2089,2090],{},"https:\u002F\u002Fseedbox.mydomain.com",". You should land on the Qbittorrent interface.",[455,2093,2095],{"id":2094},"protecting-qbittorrent-with-tinyauth","Protecting Qbittorrent with TinyAuth",[391,2097,2098,2099,2101,2102,2104,2105,483],{},"Add ",[408,2100,137],{"href":1523},"'s forward-auth check directly to ",[476,2103,1696],{},", the same way as ",[408,2106,2108],{"href":2107},"\u002Fserveex\u002Fsecurity\u002Ftinyauth#protecting-an-app-via-reverse-proxy","the TinyAuth guide",[485,2110,2113],{"className":1726,"code":2111,"filename":1696,"highlights":2112,"language":1728,"meta":491,"style":491},"## Version 2023\u002F12\u002F19\n\nserver {\n    listen 443 ssl;\n    listen [::]:443 ssl;\n\n    server_name seedbox.*;\n\n    include \u002Fconfig\u002Fnginx\u002Fssl.conf;\n\n    client_max_body_size 0;\n\n    #if ($lan-ip = yes) { set $geo-whitelist yes; }\n    #if ($geo-whitelist = no) { return 404; }\n    if ($geo-blacklist = no) { return 404; }\n\n    # enable for ldap auth (requires ldap-location.conf in the location block)\n    #include \u002Fconfig\u002Fnginx\u002Fldap-server.conf;\n\n    # enable for Authelia (requires authelia-location.conf in the location block)\n    #include \u002Fconfig\u002Fnginx\u002Fauthelia-server.conf;\n\n    # enable for Authentik (requires authentik-location.conf in the location block)\n    #include \u002Fconfig\u002Fnginx\u002Fauthentik-server.conf;\n\n    location \u002Ftinyauth {\n        internal;\n        proxy_pass http:\u002F\u002Ftinyauth:3000\u002Fapi\u002Fauth\u002Fnginx;\n        proxy_pass_request_body off;\n        proxy_set_header Content-Length \"\";\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_set_header X-Forwarded-Host $http_host;\n        proxy_set_header X-Forwarded-Uri $request_uri;\n    }\n\n    location @tinyauth_login {\n        return 302 https:\u002F\u002Ftinyauth.mydomain.com\u002Flogin?redirect_uri=$scheme:\u002F\u002F$http_host$request_uri;\n    }\n\n    location \u002F {\n        auth_request \u002Ftinyauth;\n        error_page 401 = @tinyauth_login;\n\n        # enable the next two lines for http auth\n        #auth_basic \"Restricted\";\n        #auth_basic_user_file \u002Fconfig\u002Fnginx\u002F.htpasswd;\n\n        # enable for ldap auth (requires ldap-server.conf in the server block)\n        #include \u002Fconfig\u002Fnginx\u002Fldap-location.conf;\n\n        # enable for Authelia (requires authelia-server.conf in the server block)\n        #include \u002Fconfig\u002Fnginx\u002Fauthelia-location.conf;\n\n        # enable for Authentik (requires authentik-server.conf in the server block)\n        #include \u002Fconfig\u002Fnginx\u002Fauthentik-location.conf;\n\n        include \u002Fconfig\u002Fnginx\u002Fproxy.conf;\n        include \u002Fconfig\u002Fnginx\u002Fresolver.conf;\n        set $upstream_app gluetun;\n        set $upstream_port 5555;\n        set $upstream_proto http;\n        proxy_pass $upstream_proto:\u002F\u002F$upstream_app:$upstream_port;\n\n    }\n}\n",[753,762,771,780,787,795,803,811,819,831,842,850,858,880,888],[476,2114,2115,2119,2123,2129,2139,2147,2151,2159,2163,2171,2175,2183,2187,2191,2195,2217,2221,2225,2229,2233,2237,2241,2245,2249,2253,2257,2268,2276,2286,2298,2312,2327,2342,2357,2362,2367,2377,2403,2408,2412,2420,2431,2445,2449,2453,2457,2461,2465,2469,2474,2479,2484,2489,2494,2499,2504,2509,2518,2527,2538,2551,2562,2581,2586,2591],{"__ignoreMap":491},[495,2116,2117],{"class":497,"line":498},[495,2118,1735],{"class":827},[495,2120,2121],{"class":497,"line":541},[495,2122,732],{"emptyLinePlaceholder":731},[495,2124,2125,2127],{"class":497,"line":552},[495,2126,1745],{"class":1744},[495,2128,1748],{"class":1118},[495,2130,2131,2133,2135,2137],{"class":497,"line":560},[495,2132,1753],{"class":1453},[495,2134,1557],{"class":1756},[495,2136,1759],{"class":1118},[495,2138,1762],{"class":548},[495,2140,2141,2143,2145],{"class":497,"line":571},[495,2142,1753],{"class":1453},[495,2144,1769],{"class":1118},[495,2146,1762],{"class":548},[495,2148,2149],{"class":497,"line":582},[495,2150,732],{"emptyLinePlaceholder":731},[495,2152,2153,2155,2157],{"class":497,"line":593},[495,2154,1780],{"class":1453},[495,2156,1783],{"class":1118},[495,2158,1762],{"class":548},[495,2160,2161],{"class":497,"line":604},[495,2162,732],{"emptyLinePlaceholder":731},[495,2164,2165,2167,2169],{"class":497,"line":615},[495,2166,1794],{"class":1453},[495,2168,1797],{"class":1118},[495,2170,1762],{"class":548},[495,2172,2173],{"class":497,"line":623},[495,2174,732],{"emptyLinePlaceholder":731},[495,2176,2177,2179,2181],{"class":497,"line":632},[495,2178,1808],{"class":1453},[495,2180,1811],{"class":1756},[495,2182,1762],{"class":548},[495,2184,2185],{"class":497,"line":640},[495,2186,732],{"emptyLinePlaceholder":731},[495,2188,2189],{"class":497,"line":648},[495,2190,1822],{"class":827},[495,2192,2193],{"class":497,"line":656},[495,2194,1827],{"class":827},[495,2196,2197,2199,2201,2203,2205,2207,2209,2211,2213,2215],{"class":497,"line":664},[495,2198,1833],{"class":1832},[495,2200,1836],{"class":1118},[495,2202,1839],{"class":548},[495,2204,1842],{"class":1118},[495,2206,1845],{"class":1453},[495,2208,1848],{"class":1118},[495,2210,1852],{"class":1851},[495,2212,1855],{"class":1832},[495,2214,1858],{"class":1756},[495,2216,1861],{"class":1851},[495,2218,2219],{"class":497,"line":672},[495,2220,732],{"emptyLinePlaceholder":731},[495,2222,2223],{"class":497,"line":680},[495,2224,1870],{"class":827},[495,2226,2227],{"class":497,"line":688},[495,2228,1875],{"class":827},[495,2230,2231],{"class":497,"line":696},[495,2232,732],{"emptyLinePlaceholder":731},[495,2234,2235],{"class":497,"line":704},[495,2236,1884],{"class":827},[495,2238,2239],{"class":497,"line":712},[495,2240,1889],{"class":827},[495,2242,2243],{"class":497,"line":720},[495,2244,732],{"emptyLinePlaceholder":731},[495,2246,2247],{"class":497,"line":728},[495,2248,1898],{"class":827},[495,2250,2251],{"class":497,"line":735},[495,2252,1903],{"class":827},[495,2254,2255],{"class":497,"line":743},[495,2256,732],{"emptyLinePlaceholder":731},[495,2258,2261,2263,2266],{"class":2259,"line":753},[497,2260],"highlight",[495,2262,1912],{"class":1744},[495,2264,2265],{"class":501}," \u002Ftinyauth ",[495,2267,1918],{"class":1118},[495,2269,2271,2274],{"class":2270,"line":762},[497,2260],[495,2272,2273],{"class":1453},"        internal",[495,2275,1762],{"class":548},[495,2277,2279,2281,2284],{"class":2278,"line":771},[497,2260],[495,2280,2040],{"class":1453},[495,2282,2283],{"class":1118},"http:\u002F\u002Ftinyauth:3000\u002Fapi\u002Fauth\u002Fnginx",[495,2285,1762],{"class":548},[495,2287,2289,2292,2296],{"class":2288,"line":780},[497,2260],[495,2290,2291],{"class":1453},"        proxy_pass_request_body ",[495,2293,2295],{"class":2294},"soUAX","off",[495,2297,1762],{"class":548},[495,2299,2301,2304,2307,2310],{"class":2300,"line":787},[497,2260],[495,2302,2303],{"class":1453},"        proxy_set_header ",[495,2305,2306],{"class":1118},"Content-Length ",[495,2308,2309],{"class":509},"\"\"",[495,2311,1762],{"class":548},[495,2313,2315,2317,2320,2322,2325],{"class":2314,"line":795},[497,2260],[495,2316,2303],{"class":1453},[495,2318,2319],{"class":1118},"X-Forwarded-Proto ",[495,2321,1839],{"class":548},[495,2323,2324],{"class":1118},"scheme",[495,2326,1762],{"class":548},[495,2328,2330,2332,2335,2337,2340],{"class":2329,"line":803},[497,2260],[495,2331,2303],{"class":1453},[495,2333,2334],{"class":1118},"X-Forwarded-Host ",[495,2336,1839],{"class":548},[495,2338,2339],{"class":1118},"http_host",[495,2341,1762],{"class":548},[495,2343,2345,2347,2350,2352,2355],{"class":2344,"line":811},[497,2260],[495,2346,2303],{"class":1453},[495,2348,2349],{"class":1118},"X-Forwarded-Uri ",[495,2351,1839],{"class":548},[495,2353,2354],{"class":1118},"request_uri",[495,2356,1762],{"class":548},[495,2358,2360],{"class":2359,"line":819},[497,2260],[495,2361,2067],{"class":1118},[495,2363,2365],{"class":2364,"line":831},[497,2260],[495,2366,732],{"emptyLinePlaceholder":731},[495,2368,2370,2372,2375],{"class":2369,"line":842},[497,2260],[495,2371,1912],{"class":1744},[495,2373,2374],{"class":501}," @tinyauth_login ",[495,2376,1918],{"class":1118},[495,2378,2380,2383,2386,2389,2391,2394,2396,2398,2400],{"class":2379,"line":850},[497,2260],[495,2381,2382],{"class":1832},"        return",[495,2384,2385],{"class":1756}," 302",[495,2387,2388],{"class":1118}," https:\u002F\u002Ftinyauth.mydomain.com\u002Flogin?redirect_uri=",[495,2390,1839],{"class":548},[495,2392,2393],{"class":1118},"scheme:\u002F\u002F",[495,2395,1839],{"class":548},[495,2397,2339],{"class":1118},[495,2399,1839],{"class":548},[495,2401,2402],{"class":1118},"request_uri;\n",[495,2404,2406],{"class":2405,"line":858},[497,2260],[495,2407,2067],{"class":1118},[495,2409,2410],{"class":497,"line":865},[495,2411,732],{"emptyLinePlaceholder":731},[495,2413,2414,2416,2418],{"class":497,"line":872},[495,2415,1912],{"class":1744},[495,2417,1915],{"class":501},[495,2419,1918],{"class":1118},[495,2421,2423,2426,2429],{"class":2422,"line":880},[497,2260],[495,2424,2425],{"class":1453},"        auth_request ",[495,2427,2428],{"class":1118},"\u002Ftinyauth",[495,2430,1762],{"class":548},[495,2432,2434,2437,2440,2443],{"class":2433,"line":888},[497,2260],[495,2435,2436],{"class":1453},"        error_page ",[495,2438,2439],{"class":1756},"401",[495,2441,2442],{"class":1118}," = @tinyauth_login",[495,2444,1762],{"class":548},[495,2446,2447],{"class":497,"line":896},[495,2448,732],{"emptyLinePlaceholder":731},[495,2450,2451],{"class":497,"line":904},[495,2452,1923],{"class":827},[495,2454,2455],{"class":497,"line":912},[495,2456,1928],{"class":827},[495,2458,2459],{"class":497,"line":920},[495,2460,1933],{"class":827},[495,2462,2463],{"class":497,"line":2064},[495,2464,732],{"emptyLinePlaceholder":731},[495,2466,2467],{"class":497,"line":2070},[495,2468,1942],{"class":827},[495,2470,2472],{"class":497,"line":2471},49,[495,2473,1947],{"class":827},[495,2475,2477],{"class":497,"line":2476},50,[495,2478,732],{"emptyLinePlaceholder":731},[495,2480,2482],{"class":497,"line":2481},51,[495,2483,1956],{"class":827},[495,2485,2487],{"class":497,"line":2486},52,[495,2488,1961],{"class":827},[495,2490,2492],{"class":497,"line":2491},53,[495,2493,732],{"emptyLinePlaceholder":731},[495,2495,2497],{"class":497,"line":2496},54,[495,2498,1970],{"class":827},[495,2500,2502],{"class":497,"line":2501},55,[495,2503,1975],{"class":827},[495,2505,2507],{"class":497,"line":2506},56,[495,2508,732],{"emptyLinePlaceholder":731},[495,2510,2512,2514,2516],{"class":497,"line":2511},57,[495,2513,1984],{"class":1453},[495,2515,1987],{"class":1118},[495,2517,1762],{"class":548},[495,2519,2521,2523,2525],{"class":497,"line":2520},58,[495,2522,1984],{"class":1453},[495,2524,1996],{"class":1118},[495,2526,1762],{"class":548},[495,2528,2530,2532,2534,2536],{"class":497,"line":2529},59,[495,2531,2003],{"class":1453},[495,2533,1839],{"class":548},[495,2535,2008],{"class":1118},[495,2537,1762],{"class":548},[495,2539,2541,2543,2545,2547,2549],{"class":497,"line":2540},60,[495,2542,2003],{"class":1453},[495,2544,1839],{"class":548},[495,2546,2019],{"class":1118},[495,2548,2022],{"class":1756},[495,2550,1762],{"class":548},[495,2552,2554,2556,2558,2560],{"class":497,"line":2553},61,[495,2555,2003],{"class":1453},[495,2557,1839],{"class":548},[495,2559,2033],{"class":1118},[495,2561,1762],{"class":548},[495,2563,2565,2567,2569,2571,2573,2575,2577,2579],{"class":497,"line":2564},62,[495,2566,2040],{"class":1453},[495,2568,1839],{"class":548},[495,2570,2045],{"class":1118},[495,2572,1839],{"class":548},[495,2574,2050],{"class":1118},[495,2576,1839],{"class":548},[495,2578,2055],{"class":1118},[495,2580,1762],{"class":548},[495,2582,2584],{"class":497,"line":2583},63,[495,2585,732],{"emptyLinePlaceholder":731},[495,2587,2589],{"class":497,"line":2588},64,[495,2590,2067],{"class":1118},[495,2592,2594],{"class":497,"line":2593},65,[495,2595,2073],{"class":1118},[1418,2597,439,2599,2602,2603,2606,2607,2610],{"to":2598},"\u002Fserveex\u002Fsecurity\u002Ftinyauth#exposing-tinyauth-with-swag",[476,2600,2601],{},"location \u002Ftinyauth"," block runs inside SWAG's own container, so SWAG needs to be on TinyAuth's Docker network to reach it by name (",[476,2604,2605],{},"tinyauth"," here). This should already be set up from ",[933,2608,2609],{},"exposing TinyAuth itself",". If you run into an error, double-check SWAG's compose file still has that network attached.",[927,2612,2613,2614,2617,2618,2621,2622,2625,2626,1686],{"icon":491},"✨ You can secure this app with ",[408,2615,255],{"href":2616},"\u002Fserveex\u002Fadvanced\u002Fauthentik"," instead of TinyAuth by uncommenting the ",[476,2619,2620],{},"authentik-server.conf"," and ",[476,2623,2624],{},"authentik-location.conf"," lines. Don’t forget to ",[408,2627,2629],{"href":2628},"\u002Fserveex\u002Fadvanced\u002Fauthentik#protecting-an-app-via-reverse-proxy","create an app and provider in Authentik",[391,2631,2632],{},"And that’s it! You now have a ready-to-use media center.",[391,2634,2635],{},[394,2636],{"alt":396,"src":2637},"\u002Fimg\u002Fserveex\u002Fseed.svg",[2639,2640,2641],"style",{},"html pre.shiki code .sEgDM, html code.shiki .sEgDM{--shiki-light:#B392F0;--shiki-default:#FFCB6B;--shiki-dark:#B392F0}html pre.shiki code .sJWha, html code.shiki .sJWha{--shiki-light:#79B8FF;--shiki-default:#C3E88D;--shiki-dark:#79B8FF}html pre.shiki code .s11XM, html code.shiki .s11XM{--shiki-light:#9ECBFF;--shiki-default:#C3E88D;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sRuoG, html code.shiki .sRuoG{--shiki-light:#85E89D;--shiki-default:#F07178;--shiki-dark:#85E89D}html pre.shiki code .s8jd1, html code.shiki .s8jd1{--shiki-light:#E1E4E8;--shiki-default:#89DDFF;--shiki-dark:#E1E4E8}html pre.shiki code .sDvJj, html code.shiki .sDvJj{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .szyEh, html code.shiki .szyEh{--shiki-light:#F97583;--shiki-default:#F07178;--shiki-dark:#F97583}html pre.shiki code .sJPTy, html code.shiki .sJPTy{--shiki-light:#F97583;--shiki-default:#89DDFF;--shiki-dark:#F97583}html pre.shiki code .s8K8j, html code.shiki .s8K8j{--shiki-light:#9ECBFF;--shiki-default:#89DDFF;--shiki-dark:#9ECBFF}html pre.shiki code .s08Ry, html code.shiki .s08Ry{--shiki-light:#79B8FF;--shiki-default:#FF9CAC;--shiki-dark:#79B8FF}html pre.shiki code .sAoO4, html code.shiki .sAoO4{--shiki-light:#F97583;--shiki-default:#C792EA;--shiki-dark:#F97583}html pre.shiki code .slcoZ, html code.shiki .slcoZ{--shiki-light:#E1E4E8;--shiki-default:#EEFFFF;--shiki-dark:#E1E4E8}html pre.shiki code .swwWl, html code.shiki .swwWl{--shiki-light:#79B8FF;--shiki-default:#F78C6C;--shiki-dark:#79B8FF}html pre.shiki code .sJLGa, html code.shiki .sJLGa{--shiki-light:#F97583;--shiki-light-font-style:inherit;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .sSoIa, html code.shiki .sSoIa{--shiki-light:#E1E4E8;--shiki-default:#F07178;--shiki-dark:#E1E4E8}html pre.shiki code .soUAX, html code.shiki .soUAX{--shiki-light:#79B8FF;--shiki-default:#89DDFF;--shiki-dark:#79B8FF}",{"title":491,"searchDepth":541,"depth":541,"links":2643},[2644,2651,2656,2661],{"id":457,"depth":541,"text":458,"children":2645},[2646,2647,2648,2649,2650],{"id":470,"depth":552,"text":471},{"id":513,"depth":552,"text":514},{"id":1002,"depth":552,"text":1003},{"id":1203,"depth":552,"text":1204},{"id":1402,"depth":552,"text":1403},{"id":1406,"depth":541,"text":1407,"children":2652},[2653,2654,2655],{"id":1412,"depth":552,"text":1413},{"id":1473,"depth":552,"text":1474},{"id":1494,"depth":552,"text":1403},{"id":1515,"depth":541,"text":1516,"children":2657},[2658,2659,2660],{"id":1568,"depth":552,"text":1569},{"id":1689,"depth":552,"text":1690},{"id":2084,"depth":552,"text":1403},{"id":2094,"depth":541,"text":2095},[2663],"Djeex","Install qBittorrent with Gluetun and ProtonVPN to download torrents securely behind a VPN on your self-hosted server.","md",null,{},{"title":181,"description":2664},"cjLYqcx2JGzqHbrWyGA1pzrMnxq7tC-espc3Ki7Roeg",[2671,2673],{"title":177,"path":178,"stem":179,"description":2672,"children":-1},"Install Jellyfin, a free and open-source media server, to stream your movies and TV shows from anywhere without a paid subscription.",{"title":185,"path":186,"stem":187,"description":2674,"children":-1},"Automate media downloads with the Servarr stack, Radarr, Sonarr, Bazarr, Prowlarr, and Seerr, for movies and TV shows.",1788645847445]