[{"data":1,"prerenderedAt":1842},["ShallowReactive",2],{"navigation_docs_en":3,"-en-recycled-deprecated-file-browser-":377,"-en-recycled-deprecated-file-browser--surround":1837},[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":352,"body":379,"contributors":1829,"description":1831,"extension":1832,"hideCopyPage":15,"hideHeader":15,"hideToc":15,"links":1833,"meta":1834,"navigation":591,"path":353,"seo":1835,"stem":354,"__hash__":1836},"docs_en\u002Fen\u002F6.recycled\u002F2.deprecated\u002F2.file-browser.md",{"type":380,"value":381,"toc":1817},"minimark",[382,390,399,409,415,420,617,624,628,643,646,682,1256,1259,1263,1276,1759,1775,1813],[383,384],"ellipsis",{"blur":385,"left":386,"top":387,"width":388,"z-index":389},"140px","0px","10rem","40rem","60",[391,392,394,395,398],"warning",{"to":393},"\u002Fserveex\u002Ffiles\u002Ffile-browser-quantum","Replaced by ",[396,397,209],"strong",{},". The original project has a history of serious CVEs (a CSRF-to-backdoor-admin RCE, stored XSS, path traversal, auth bypass...) and was officially archived in September 2026, with the maintainers leaving known session-handling and command-execution issues unfixed for good. Don't deploy this version, especially not exposed to the internet.",[400,401,402,408],"p",{},[403,404,352],"a",{"href":405,"rel":406},"https:\u002F\u002Fgithub.com\u002Ffilebrowser\u002Ffilebrowser",[407],"nofollow"," is a web-based interface that lets you access and edit the files on your server.",[400,410,411],{},[412,413],"img",{"alt":352,"src":414},"\u002Fimg\u002Fserveex\u002Ffilebrowser.png",[416,417,419],"h2",{"id":418},"installation","Installation",[421,422,424,429,441,548,606,613],"steps",{"level":423},"3",[425,426,428],"h3",{"id":427},"deploy-the-stack","Deploy the stack",[400,430,431,432,436,437,440],{},"Open Dockge, click on ",[433,434,435],"code",{},"compose",", name the stack ",[433,438,439],{},"filebrowser",", then copy and paste the following:",[442,443,449],"pre",{"className":444,"code":445,"filename":446,"language":447,"meta":448,"style":448},"language-yaml shiki shiki-themes github-dark material-theme github-dark","---\nservices:\n  filebrowser:\n    container_name: filebrowser\n    volumes:\n      - \u002Fsrv\u002Fdocker\u002Ffilebrowser\u002Fconfig:\u002Fconfig\u002F\n      - \u002Fpath\u002Fto\u002Fyour\u002Ffolders:\u002Fyourfolders #add your folders to browse as \u002Fsrv\u002Fdocker:\u002Fsrv\u002Fdocker for exemple\n    ports:\n      - 8010:80\n    image: filebrowser\u002Ffilebrowser:s6\n","compose.yaml","yaml","",[433,450,451,460,471,479,492,500,509,521,529,537],{"__ignoreMap":448},[452,453,456],"span",{"class":454,"line":455},"line",1,[452,457,459],{"class":458},"sEgDM","---\n",[452,461,463,467],{"class":454,"line":462},2,[452,464,466],{"class":465},"sRuoG","services",[452,468,470],{"class":469},"s8jd1",":\n",[452,472,474,477],{"class":454,"line":473},3,[452,475,476],{"class":465},"  filebrowser",[452,478,470],{"class":469},[452,480,482,485,488],{"class":454,"line":481},4,[452,483,484],{"class":465},"    container_name",[452,486,487],{"class":469},":",[452,489,491],{"class":490},"s11XM"," filebrowser\n",[452,493,495,498],{"class":454,"line":494},5,[452,496,497],{"class":465},"    volumes",[452,499,470],{"class":469},[452,501,503,506],{"class":454,"line":502},6,[452,504,505],{"class":469},"      -",[452,507,508],{"class":490}," \u002Fsrv\u002Fdocker\u002Ffilebrowser\u002Fconfig:\u002Fconfig\u002F\n",[452,510,512,514,517],{"class":454,"line":511},7,[452,513,505],{"class":469},[452,515,516],{"class":490}," \u002Fpath\u002Fto\u002Fyour\u002Ffolders:\u002Fyourfolders",[452,518,520],{"class":519},"sDvJj"," #add your folders to browse as \u002Fsrv\u002Fdocker:\u002Fsrv\u002Fdocker for exemple\n",[452,522,524,527],{"class":454,"line":523},8,[452,525,526],{"class":465},"    ports",[452,528,470],{"class":469},[452,530,532,534],{"class":454,"line":531},9,[452,533,505],{"class":469},[452,535,536],{"class":490}," 8010:80\n",[452,538,540,543,545],{"class":454,"line":539},10,[452,541,542],{"class":465},"    image",[452,544,487],{"class":469},[452,546,547],{"class":490}," filebrowser\u002Ffilebrowser:s6\n",[549,550,551,558],"tip",{"icon":448},[400,552,553,554,557],{},"✨ ",[396,555,556],{},"Tip:"," Add the watchtower label to each container to automate updates.",[442,559,561],{"className":444,"code":560,"filename":446,"language":447,"meta":448,"style":448},"services:\n  filebrowser:\n    #...\n    labels:\n\n      - com.centurylinklabs.watchtower.enable=true\n```\n",[433,562,563,569,575,580,587,593,600],{"__ignoreMap":448},[452,564,565,567],{"class":454,"line":455},[452,566,466],{"class":465},[452,568,470],{"class":469},[452,570,571,573],{"class":454,"line":462},[452,572,476],{"class":465},[452,574,470],{"class":469},[452,576,577],{"class":454,"line":473},[452,578,579],{"class":519},"    #...\n",[452,581,582,585],{"class":454,"line":481},[452,583,584],{"class":465},"    labels",[452,586,470],{"class":469},[452,588,589],{"class":454,"line":494},[452,590,592],{"emptyLinePlaceholder":591},true,"\n",[452,594,595,597],{"class":454,"line":502},[452,596,505],{"class":469},[452,598,599],{"class":490}," com.centurylinklabs.watchtower.enable=true\n",[452,601,602],{"class":454,"line":511},[452,603,605],{"class":604},"slcoZ","```\n",[400,607,608,609,612],{},"Deploy the container and go to ",[433,610,611],{},"http:\u002F\u002Fyourserverip:8010",". That’s it! Your File Browser web UI is up and running!",[425,614,616],{"id":615},"done","Done !",[618,619,620,623],"caution",{},[396,621,622],{},"If it doesn’t work:"," check your firewall rules.",[416,625,627],{"id":626},"exposing-file-browser-with-swag","Exposing File Browser with Swag",[391,629,630,631,634,635,638,639,642],{},"File Browser does not support multi-factor authentication. Exposing it publicly could put your systems at risk. Only do this if you’re using a secure authentication solution like ",[403,632,137],{"href":633},"\u002Fserveex\u002Fsecurity\u002Ftinyauth"," or ",[403,636,255],{"href":637},"\u002Fserveex\u002Fadvanced\u002Fauthentik\u002F",". Otherwise, do not expose it with SWAG. Use a VPN like ",[403,640,119],{"href":641},"\u002Fserveex\u002Fcore\u002Fwireguard"," instead.",[400,644,645],{},"You may want to access File Browser remotely from all your devices. To do that, we’ll expose it through Swag.",[647,648,649,652,653,656,657,661,662,665,666,669,670,673,674,676,677,681],"note",{},[396,650,651],{},"Pre-requisite:"," We assume you've already created a subdomain like ",[433,654,655],{},"files.yourdomain.com"," in your ",[403,658,660],{"href":659},"\u002Fgeneral\u002Fnetworking\u002Fdns","DNS zone"," pointing to ",[433,663,664],{},"yourdomain.com"," with a ",[433,667,668],{},"CNAME",". Unless you're using Cloudflare Zero Trust, we also assume you've already forwarded port ",[433,671,672],{},"443"," on your router to port ",[433,675,672],{}," on your server using ",[403,678,680],{"href":679},"\u002Fgeneral\u002Fnetworking\u002Fnat","NAT rules",".",[421,683,684,688,691,813,824,827,831,837,856,859,1237,1253],{"level":423},[425,685,687],{"id":686},"add-file-browsers-network-to-swag","Add File Browser's network to SWAG",[400,689,690],{},"In Dockge, go to the SWAG stack and edit the compose file to add File Browser’s network:",[442,692,694],{"className":444,"code":693,"filename":446,"language":447,"meta":448,"style":448},"---\nservices:\n  swag:\n     container_name: # ...\n      # ... \n     networks:                 # Connects the container to the custom network \n      # ...           \n      - filebrowser            # Name of the network declared in the stack\n    \nnetworks:                      # Defines the custom network\n  # ...\n  filebrowser:                 # Name of the network declared in the stack\n    name: filebrowser_default  # Actual name of the external network\n    external: true             # Specifies it's an external network\n",[433,695,696,700,706,713,723,728,738,743,753,758,768,774,784,798],{"__ignoreMap":448},[452,697,698],{"class":454,"line":455},[452,699,459],{"class":458},[452,701,702,704],{"class":454,"line":462},[452,703,466],{"class":465},[452,705,470],{"class":469},[452,707,708,711],{"class":454,"line":473},[452,709,710],{"class":465},"  swag",[452,712,470],{"class":469},[452,714,715,718,720],{"class":454,"line":481},[452,716,717],{"class":465},"     container_name",[452,719,487],{"class":469},[452,721,722],{"class":519}," # ...\n",[452,724,725],{"class":454,"line":494},[452,726,727],{"class":519},"      # ... \n",[452,729,730,733,735],{"class":454,"line":502},[452,731,732],{"class":465},"     networks",[452,734,487],{"class":469},[452,736,737],{"class":519},"                 # Connects the container to the custom network \n",[452,739,740],{"class":454,"line":511},[452,741,742],{"class":519},"      # ...           \n",[452,744,745,747,750],{"class":454,"line":523},[452,746,505],{"class":469},[452,748,749],{"class":490}," filebrowser",[452,751,752],{"class":519},"            # Name of the network declared in the stack\n",[452,754,755],{"class":454,"line":531},[452,756,757],{"class":604},"    \n",[452,759,760,763,765],{"class":454,"line":539},[452,761,762],{"class":465},"networks",[452,764,487],{"class":469},[452,766,767],{"class":519},"                      # Defines the custom network\n",[452,769,771],{"class":454,"line":770},11,[452,772,773],{"class":519},"  # ...\n",[452,775,777,779,781],{"class":454,"line":776},12,[452,778,476],{"class":465},[452,780,487],{"class":469},[452,782,783],{"class":519},"                 # Name of the network declared in the stack\n",[452,785,787,790,792,795],{"class":454,"line":786},13,[452,788,789],{"class":465},"    name",[452,791,487],{"class":469},[452,793,794],{"class":490}," filebrowser_default",[452,796,797],{"class":519},"  # Actual name of the external network\n",[452,799,801,804,806,810],{"class":454,"line":800},14,[452,802,803],{"class":465},"    external",[452,805,487],{"class":469},[452,807,809],{"class":808},"s08Ry"," true",[452,811,812],{"class":519},"             # Specifies it's an external network\n",[647,814,815,816,819,820,681],{},"Here, we assume the network name for File Browser is ",[433,817,818],{},"filebrowser_default",". You can confirm the connection is working by accessing the SWAG dashboard at ",[403,821,822],{"href":822,"rel":823},"http:\u002F\u002Fyourserverip:81",[407],[400,825,826],{},"Restart the stack by clicking \"deploy\" and wait for SWAG to fully initialize.",[425,828,830],{"id":829},"create-the-subdomainconf-file","Create the subdomain.conf file",[400,832,833,834,681],{},"In the Swag folders, create the file ",[433,835,836],{},"files.subdomain.conf",[442,838,843],{"className":839,"code":840,"filename":841,"language":842,"meta":448,"style":448},"language-bash shiki shiki-themes github-dark material-theme github-dark","sudo nano \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Fnginx\u002Fproxy-confs\u002Ffiles.subdomain.conf\n","Terminal","bash",[433,844,845],{"__ignoreMap":448},[452,846,847,850,853],{"class":454,"line":455},[452,848,849],{"class":458},"sudo",[452,851,852],{"class":490}," nano",[452,854,855],{"class":490}," \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Fnginx\u002Fproxy-confs\u002Ffiles.subdomain.conf\n",[400,857,858],{},"And paste the following configuration:",[442,860,864],{"className":861,"code":862,"filename":836,"language":863,"meta":448,"style":448},"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 files.*;\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 filebrowser;\n        set $upstream_port 80;\n        set $upstream_proto http;\n        proxy_pass $upstream_proto:\u002F\u002F$upstream_app:$upstream_port;\n    }\n}\n","nginx",[433,865,866,871,875,884,899,908,912,922,926,936,940,950,954,959,964,999,1004,1010,1016,1021,1027,1033,1038,1044,1050,1055,1067,1073,1079,1085,1090,1096,1102,1107,1113,1119,1124,1130,1136,1141,1152,1162,1175,1190,1202,1225,1231],{"__ignoreMap":448},[452,867,868],{"class":454,"line":455},[452,869,870],{"class":519},"## Version 2023\u002F12\u002F19\n",[452,872,873],{"class":454,"line":462},[452,874,592],{"emptyLinePlaceholder":591},[452,876,877,881],{"class":454,"line":473},[452,878,880],{"class":879},"sAoO4","server",[452,882,883],{"class":604}," {\n",[452,885,886,890,893,896],{"class":454,"line":481},[452,887,889],{"class":888},"sJPTy","    listen ",[452,891,672],{"class":892},"swwWl",[452,894,895],{"class":604}," ssl",[452,897,898],{"class":469},";\n",[452,900,901,903,906],{"class":454,"line":494},[452,902,889],{"class":888},[452,904,905],{"class":604},"[::]:443 ssl",[452,907,898],{"class":469},[452,909,910],{"class":454,"line":502},[452,911,592],{"emptyLinePlaceholder":591},[452,913,914,917,920],{"class":454,"line":511},[452,915,916],{"class":888},"    server_name ",[452,918,919],{"class":604},"files.*",[452,921,898],{"class":469},[452,923,924],{"class":454,"line":523},[452,925,592],{"emptyLinePlaceholder":591},[452,927,928,931,934],{"class":454,"line":531},[452,929,930],{"class":888},"    include ",[452,932,933],{"class":604},"\u002Fconfig\u002Fnginx\u002Fssl.conf",[452,935,898],{"class":469},[452,937,938],{"class":454,"line":539},[452,939,592],{"emptyLinePlaceholder":591},[452,941,942,945,948],{"class":454,"line":770},[452,943,944],{"class":888},"    client_max_body_size ",[452,946,947],{"class":892},"0",[452,949,898],{"class":469},[452,951,952],{"class":454,"line":776},[452,953,592],{"emptyLinePlaceholder":591},[452,955,956],{"class":454,"line":786},[452,957,958],{"class":519},"    #if ($lan-ip = yes) { set $geo-whitelist yes; }\n",[452,960,961],{"class":454,"line":800},[452,962,963],{"class":519},"    #if ($geo-whitelist = no) { return 404; }\n",[452,965,967,971,974,977,980,983,986,990,993,996],{"class":454,"line":966},15,[452,968,970],{"class":969},"sJLGa","    if",[452,972,973],{"class":604}," (",[452,975,976],{"class":469},"$",[452,978,979],{"class":604},"geo-blacklist ",[452,981,982],{"class":888},"= ",[452,984,985],{"class":604},"no) ",[452,987,989],{"class":988},"sSoIa","{ ",[452,991,992],{"class":969},"return",[452,994,995],{"class":892}," 404",[452,997,998],{"class":988},"; }\n",[452,1000,1002],{"class":454,"line":1001},16,[452,1003,592],{"emptyLinePlaceholder":591},[452,1005,1007],{"class":454,"line":1006},17,[452,1008,1009],{"class":519},"    # enable for ldap auth (requires ldap-location.conf in the location block)\n",[452,1011,1013],{"class":454,"line":1012},18,[452,1014,1015],{"class":519},"    #include \u002Fconfig\u002Fnginx\u002Fldap-server.conf;\n",[452,1017,1019],{"class":454,"line":1018},19,[452,1020,592],{"emptyLinePlaceholder":591},[452,1022,1024],{"class":454,"line":1023},20,[452,1025,1026],{"class":519},"    # enable for Authelia (requires authelia-location.conf in the location block)\n",[452,1028,1030],{"class":454,"line":1029},21,[452,1031,1032],{"class":519},"    #include \u002Fconfig\u002Fnginx\u002Fauthelia-server.conf;\n",[452,1034,1036],{"class":454,"line":1035},22,[452,1037,592],{"emptyLinePlaceholder":591},[452,1039,1041],{"class":454,"line":1040},23,[452,1042,1043],{"class":519},"    # enable for Authentik (requires authentik-location.conf in the location block)\n",[452,1045,1047],{"class":454,"line":1046},24,[452,1048,1049],{"class":519},"    #include \u002Fconfig\u002Fnginx\u002Fauthentik-server.conf;\n",[452,1051,1053],{"class":454,"line":1052},25,[452,1054,592],{"emptyLinePlaceholder":591},[452,1056,1058,1061,1064],{"class":454,"line":1057},26,[452,1059,1060],{"class":879},"    location",[452,1062,1063],{"class":458}," \u002F ",[452,1065,1066],{"class":604},"{\n",[452,1068,1070],{"class":454,"line":1069},27,[452,1071,1072],{"class":519},"        # enable the next two lines for http auth\n",[452,1074,1076],{"class":454,"line":1075},28,[452,1077,1078],{"class":519},"        #auth_basic \"Restricted\";\n",[452,1080,1082],{"class":454,"line":1081},29,[452,1083,1084],{"class":519},"        #auth_basic_user_file \u002Fconfig\u002Fnginx\u002F.htpasswd;\n",[452,1086,1088],{"class":454,"line":1087},30,[452,1089,592],{"emptyLinePlaceholder":591},[452,1091,1093],{"class":454,"line":1092},31,[452,1094,1095],{"class":519},"        # enable for ldap auth (requires ldap-server.conf in the server block)\n",[452,1097,1099],{"class":454,"line":1098},32,[452,1100,1101],{"class":519},"        #include \u002Fconfig\u002Fnginx\u002Fldap-location.conf;\n",[452,1103,1105],{"class":454,"line":1104},33,[452,1106,592],{"emptyLinePlaceholder":591},[452,1108,1110],{"class":454,"line":1109},34,[452,1111,1112],{"class":519},"        # enable for Authelia (requires authelia-server.conf in the server block)\n",[452,1114,1116],{"class":454,"line":1115},35,[452,1117,1118],{"class":519},"        #include \u002Fconfig\u002Fnginx\u002Fauthelia-location.conf;\n",[452,1120,1122],{"class":454,"line":1121},36,[452,1123,592],{"emptyLinePlaceholder":591},[452,1125,1127],{"class":454,"line":1126},37,[452,1128,1129],{"class":519},"        # enable for Authentik (requires authentik-server.conf in the server block)\n",[452,1131,1133],{"class":454,"line":1132},38,[452,1134,1135],{"class":519},"        #include \u002Fconfig\u002Fnginx\u002Fauthentik-location.conf;\n",[452,1137,1139],{"class":454,"line":1138},39,[452,1140,592],{"emptyLinePlaceholder":591},[452,1142,1144,1147,1150],{"class":454,"line":1143},40,[452,1145,1146],{"class":888},"        include ",[452,1148,1149],{"class":604},"\u002Fconfig\u002Fnginx\u002Fproxy.conf",[452,1151,898],{"class":469},[452,1153,1155,1157,1160],{"class":454,"line":1154},41,[452,1156,1146],{"class":888},[452,1158,1159],{"class":604},"\u002Fconfig\u002Fnginx\u002Fresolver.conf",[452,1161,898],{"class":469},[452,1163,1165,1168,1170,1173],{"class":454,"line":1164},42,[452,1166,1167],{"class":888},"        set ",[452,1169,976],{"class":469},[452,1171,1172],{"class":604},"upstream_app filebrowser",[452,1174,898],{"class":469},[452,1176,1178,1180,1182,1185,1188],{"class":454,"line":1177},43,[452,1179,1167],{"class":888},[452,1181,976],{"class":469},[452,1183,1184],{"class":604},"upstream_port ",[452,1186,1187],{"class":892},"80",[452,1189,898],{"class":469},[452,1191,1193,1195,1197,1200],{"class":454,"line":1192},44,[452,1194,1167],{"class":888},[452,1196,976],{"class":469},[452,1198,1199],{"class":604},"upstream_proto http",[452,1201,898],{"class":469},[452,1203,1205,1208,1210,1213,1215,1218,1220,1223],{"class":454,"line":1204},45,[452,1206,1207],{"class":888},"        proxy_pass ",[452,1209,976],{"class":469},[452,1211,1212],{"class":604},"upstream_proto:\u002F\u002F",[452,1214,976],{"class":469},[452,1216,1217],{"class":604},"upstream_app:",[452,1219,976],{"class":469},[452,1221,1222],{"class":604},"upstream_port",[452,1224,898],{"class":469},[452,1226,1228],{"class":454,"line":1227},46,[452,1229,1230],{"class":604},"    }\n",[452,1232,1234],{"class":454,"line":1233},47,[452,1235,1236],{"class":604},"}\n",[400,1238,1239,1240,1244,1245,1248,1249,1252],{},"Press ",[1241,1242],"kbd",{"value":1243},"Ctrl+O",", then ",[1241,1246],{"value":1247},"Enter"," to save, and ",[1241,1250],{"value":1251},"Ctrl+X"," to exit.",[425,1254,616],{"id":1255},"done-1",[400,1257,1258],{},"That’s it! File Browser is now exposed!",[416,1260,1262],{"id":1261},"protecting-file-browser-with-tinyauth","Protecting File Browser with TinyAuth",[400,1264,1265,1266,1268,1269,1271,1272,487],{},"Add ",[403,1267,137],{"href":633},"'s forward-auth check directly to ",[433,1270,836],{},", the same way as ",[403,1273,1275],{"href":1274},"\u002Fserveex\u002Fsecurity\u002Ftinyauth#protecting-an-app-via-reverse-proxy","the TinyAuth guide",[442,1277,1280],{"className":861,"code":1278,"filename":836,"highlights":1279,"language":863,"meta":448,"style":448},"## Version 2023\u002F12\u002F19\n\nserver {\n    listen 443 ssl;\n    listen [::]:443 ssl;\n\n    server_name files.*;\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 filebrowser;\n        set $upstream_port 80;\n        set $upstream_proto http;\n        proxy_pass $upstream_proto:\u002F\u002F$upstream_app:$upstream_port;\n    }\n}\n",[1057,1069,1075,1081,1087,1092,1098,1104,1109,1115,1121,1126,1132,1154,1164],[433,1281,1282,1286,1290,1296,1306,1314,1318,1326,1330,1338,1342,1350,1354,1358,1362,1384,1388,1392,1396,1400,1404,1408,1412,1416,1420,1424,1435,1443,1453,1465,1479,1494,1509,1524,1529,1534,1544,1570,1575,1579,1587,1598,1612,1616,1620,1624,1628,1632,1637,1642,1647,1652,1657,1662,1667,1672,1677,1686,1695,1706,1719,1730,1749,1754],{"__ignoreMap":448},[452,1283,1284],{"class":454,"line":455},[452,1285,870],{"class":519},[452,1287,1288],{"class":454,"line":462},[452,1289,592],{"emptyLinePlaceholder":591},[452,1291,1292,1294],{"class":454,"line":473},[452,1293,880],{"class":879},[452,1295,883],{"class":604},[452,1297,1298,1300,1302,1304],{"class":454,"line":481},[452,1299,889],{"class":888},[452,1301,672],{"class":892},[452,1303,895],{"class":604},[452,1305,898],{"class":469},[452,1307,1308,1310,1312],{"class":454,"line":494},[452,1309,889],{"class":888},[452,1311,905],{"class":604},[452,1313,898],{"class":469},[452,1315,1316],{"class":454,"line":502},[452,1317,592],{"emptyLinePlaceholder":591},[452,1319,1320,1322,1324],{"class":454,"line":511},[452,1321,916],{"class":888},[452,1323,919],{"class":604},[452,1325,898],{"class":469},[452,1327,1328],{"class":454,"line":523},[452,1329,592],{"emptyLinePlaceholder":591},[452,1331,1332,1334,1336],{"class":454,"line":531},[452,1333,930],{"class":888},[452,1335,933],{"class":604},[452,1337,898],{"class":469},[452,1339,1340],{"class":454,"line":539},[452,1341,592],{"emptyLinePlaceholder":591},[452,1343,1344,1346,1348],{"class":454,"line":770},[452,1345,944],{"class":888},[452,1347,947],{"class":892},[452,1349,898],{"class":469},[452,1351,1352],{"class":454,"line":776},[452,1353,592],{"emptyLinePlaceholder":591},[452,1355,1356],{"class":454,"line":786},[452,1357,958],{"class":519},[452,1359,1360],{"class":454,"line":800},[452,1361,963],{"class":519},[452,1363,1364,1366,1368,1370,1372,1374,1376,1378,1380,1382],{"class":454,"line":966},[452,1365,970],{"class":969},[452,1367,973],{"class":604},[452,1369,976],{"class":469},[452,1371,979],{"class":604},[452,1373,982],{"class":888},[452,1375,985],{"class":604},[452,1377,989],{"class":988},[452,1379,992],{"class":969},[452,1381,995],{"class":892},[452,1383,998],{"class":988},[452,1385,1386],{"class":454,"line":1001},[452,1387,592],{"emptyLinePlaceholder":591},[452,1389,1390],{"class":454,"line":1006},[452,1391,1009],{"class":519},[452,1393,1394],{"class":454,"line":1012},[452,1395,1015],{"class":519},[452,1397,1398],{"class":454,"line":1018},[452,1399,592],{"emptyLinePlaceholder":591},[452,1401,1402],{"class":454,"line":1023},[452,1403,1026],{"class":519},[452,1405,1406],{"class":454,"line":1029},[452,1407,1032],{"class":519},[452,1409,1410],{"class":454,"line":1035},[452,1411,592],{"emptyLinePlaceholder":591},[452,1413,1414],{"class":454,"line":1040},[452,1415,1043],{"class":519},[452,1417,1418],{"class":454,"line":1046},[452,1419,1049],{"class":519},[452,1421,1422],{"class":454,"line":1052},[452,1423,592],{"emptyLinePlaceholder":591},[452,1425,1428,1430,1433],{"class":1426,"line":1057},[454,1427],"highlight",[452,1429,1060],{"class":879},[452,1431,1432],{"class":458}," \u002Ftinyauth ",[452,1434,1066],{"class":604},[452,1436,1438,1441],{"class":1437,"line":1069},[454,1427],[452,1439,1440],{"class":888},"        internal",[452,1442,898],{"class":469},[452,1444,1446,1448,1451],{"class":1445,"line":1075},[454,1427],[452,1447,1207],{"class":888},[452,1449,1450],{"class":604},"http:\u002F\u002Ftinyauth:3000\u002Fapi\u002Fauth\u002Fnginx",[452,1452,898],{"class":469},[452,1454,1456,1459,1463],{"class":1455,"line":1081},[454,1427],[452,1457,1458],{"class":888},"        proxy_pass_request_body ",[452,1460,1462],{"class":1461},"soUAX","off",[452,1464,898],{"class":469},[452,1466,1468,1471,1474,1477],{"class":1467,"line":1087},[454,1427],[452,1469,1470],{"class":888},"        proxy_set_header ",[452,1472,1473],{"class":604},"Content-Length ",[452,1475,1476],{"class":490},"\"\"",[452,1478,898],{"class":469},[452,1480,1482,1484,1487,1489,1492],{"class":1481,"line":1092},[454,1427],[452,1483,1470],{"class":888},[452,1485,1486],{"class":604},"X-Forwarded-Proto ",[452,1488,976],{"class":469},[452,1490,1491],{"class":604},"scheme",[452,1493,898],{"class":469},[452,1495,1497,1499,1502,1504,1507],{"class":1496,"line":1098},[454,1427],[452,1498,1470],{"class":888},[452,1500,1501],{"class":604},"X-Forwarded-Host ",[452,1503,976],{"class":469},[452,1505,1506],{"class":604},"http_host",[452,1508,898],{"class":469},[452,1510,1512,1514,1517,1519,1522],{"class":1511,"line":1104},[454,1427],[452,1513,1470],{"class":888},[452,1515,1516],{"class":604},"X-Forwarded-Uri ",[452,1518,976],{"class":469},[452,1520,1521],{"class":604},"request_uri",[452,1523,898],{"class":469},[452,1525,1527],{"class":1526,"line":1109},[454,1427],[452,1528,1230],{"class":604},[452,1530,1532],{"class":1531,"line":1115},[454,1427],[452,1533,592],{"emptyLinePlaceholder":591},[452,1535,1537,1539,1542],{"class":1536,"line":1121},[454,1427],[452,1538,1060],{"class":879},[452,1540,1541],{"class":458}," @tinyauth_login ",[452,1543,1066],{"class":604},[452,1545,1547,1550,1553,1556,1558,1561,1563,1565,1567],{"class":1546,"line":1126},[454,1427],[452,1548,1549],{"class":969},"        return",[452,1551,1552],{"class":892}," 302",[452,1554,1555],{"class":604}," https:\u002F\u002Ftinyauth.mydomain.com\u002Flogin?redirect_uri=",[452,1557,976],{"class":469},[452,1559,1560],{"class":604},"scheme:\u002F\u002F",[452,1562,976],{"class":469},[452,1564,1506],{"class":604},[452,1566,976],{"class":469},[452,1568,1569],{"class":604},"request_uri;\n",[452,1571,1573],{"class":1572,"line":1132},[454,1427],[452,1574,1230],{"class":604},[452,1576,1577],{"class":454,"line":1138},[452,1578,592],{"emptyLinePlaceholder":591},[452,1580,1581,1583,1585],{"class":454,"line":1143},[452,1582,1060],{"class":879},[452,1584,1063],{"class":458},[452,1586,1066],{"class":604},[452,1588,1590,1593,1596],{"class":1589,"line":1154},[454,1427],[452,1591,1592],{"class":888},"        auth_request ",[452,1594,1595],{"class":604},"\u002Ftinyauth",[452,1597,898],{"class":469},[452,1599,1601,1604,1607,1610],{"class":1600,"line":1164},[454,1427],[452,1602,1603],{"class":888},"        error_page ",[452,1605,1606],{"class":892},"401",[452,1608,1609],{"class":604}," = @tinyauth_login",[452,1611,898],{"class":469},[452,1613,1614],{"class":454,"line":1177},[452,1615,592],{"emptyLinePlaceholder":591},[452,1617,1618],{"class":454,"line":1192},[452,1619,1072],{"class":519},[452,1621,1622],{"class":454,"line":1204},[452,1623,1078],{"class":519},[452,1625,1626],{"class":454,"line":1227},[452,1627,1084],{"class":519},[452,1629,1630],{"class":454,"line":1233},[452,1631,592],{"emptyLinePlaceholder":591},[452,1633,1635],{"class":454,"line":1634},48,[452,1636,1095],{"class":519},[452,1638,1640],{"class":454,"line":1639},49,[452,1641,1101],{"class":519},[452,1643,1645],{"class":454,"line":1644},50,[452,1646,592],{"emptyLinePlaceholder":591},[452,1648,1650],{"class":454,"line":1649},51,[452,1651,1112],{"class":519},[452,1653,1655],{"class":454,"line":1654},52,[452,1656,1118],{"class":519},[452,1658,1660],{"class":454,"line":1659},53,[452,1661,592],{"emptyLinePlaceholder":591},[452,1663,1665],{"class":454,"line":1664},54,[452,1666,1129],{"class":519},[452,1668,1670],{"class":454,"line":1669},55,[452,1671,1135],{"class":519},[452,1673,1675],{"class":454,"line":1674},56,[452,1676,592],{"emptyLinePlaceholder":591},[452,1678,1680,1682,1684],{"class":454,"line":1679},57,[452,1681,1146],{"class":888},[452,1683,1149],{"class":604},[452,1685,898],{"class":469},[452,1687,1689,1691,1693],{"class":454,"line":1688},58,[452,1690,1146],{"class":888},[452,1692,1159],{"class":604},[452,1694,898],{"class":469},[452,1696,1698,1700,1702,1704],{"class":454,"line":1697},59,[452,1699,1167],{"class":888},[452,1701,976],{"class":469},[452,1703,1172],{"class":604},[452,1705,898],{"class":469},[452,1707,1709,1711,1713,1715,1717],{"class":454,"line":1708},60,[452,1710,1167],{"class":888},[452,1712,976],{"class":469},[452,1714,1184],{"class":604},[452,1716,1187],{"class":892},[452,1718,898],{"class":469},[452,1720,1722,1724,1726,1728],{"class":454,"line":1721},61,[452,1723,1167],{"class":888},[452,1725,976],{"class":469},[452,1727,1199],{"class":604},[452,1729,898],{"class":469},[452,1731,1733,1735,1737,1739,1741,1743,1745,1747],{"class":454,"line":1732},62,[452,1734,1207],{"class":888},[452,1736,976],{"class":469},[452,1738,1212],{"class":604},[452,1740,976],{"class":469},[452,1742,1217],{"class":604},[452,1744,976],{"class":469},[452,1746,1222],{"class":604},[452,1748,898],{"class":469},[452,1750,1752],{"class":454,"line":1751},63,[452,1753,1230],{"class":604},[452,1755,1757],{"class":454,"line":1756},64,[452,1758,1236],{"class":604},[647,1760,1762,1763,1766,1767,1770,1771,1774],{"to":1761},"\u002Fserveex\u002Fsecurity\u002Ftinyauth#exposing-tinyauth-with-swag","The ",[433,1764,1765],{},"location \u002Ftinyauth"," block runs inside SWAG's own container, so SWAG needs to be on TinyAuth's Docker network to reach it by name (",[433,1768,1769],{},"tinyauth"," here). This should already be set up from ",[396,1772,1773],{},"exposing TinyAuth itself",". If you run into an error, double-check SWAG's compose file still has that network attached.",[549,1776,553,1777,1779,1780,1783,1784,1786,1787,1798,1799,1808,1809,681],{"icon":448},[396,1778,556],{}," You can protect this app with ",[403,1781,255],{"href":1782},"\u002Fserveex\u002Fadvanced\u002Fauthentik"," instead of TinyAuth by opening ",[433,1785,836],{}," and uncommenting ",[433,1788,1789,1792,1795],{"className":861,"language":863,"style":448},[452,1790,1791],{"class":888},"include ",[452,1793,1794],{"class":604},"\u002Fconfig\u002Fnginx\u002Fauthentik-server.conf",[452,1796,1797],{"class":469},";"," and ",[433,1800,1801,1803,1806],{"className":861,"language":863,"style":448},[452,1802,1791],{"class":888},[452,1804,1805],{"class":604},"\u002Fconfig\u002Fnginx\u002Fauthentik-location.conf",[452,1807,1797],{"class":469},". Don’t forget to ",[403,1810,1812],{"href":1811},"\u002Fserveex\u002Fadvanced\u002Fauthentik#protecting-an-app-via-reverse-proxy","create an application and provider in Authentik",[1814,1815,1816],"style",{},"html pre.shiki code .sEgDM, html code.shiki .sEgDM{--shiki-light:#B392F0;--shiki-default:#FFCB6B;--shiki-dark:#B392F0}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 .s11XM, html code.shiki .s11XM{--shiki-light:#9ECBFF;--shiki-default:#C3E88D;--shiki-dark:#9ECBFF}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 .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 .slcoZ, html code.shiki .slcoZ{--shiki-light:#E1E4E8;--shiki-default:#EEFFFF;--shiki-dark:#E1E4E8}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 .sJPTy, html code.shiki .sJPTy{--shiki-light:#F97583;--shiki-default:#89DDFF;--shiki-dark:#F97583}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":448,"searchDepth":462,"depth":462,"links":1818},[1819,1823,1828],{"id":418,"depth":462,"text":419,"children":1820},[1821,1822],{"id":427,"depth":473,"text":428},{"id":615,"depth":473,"text":616},{"id":626,"depth":462,"text":627,"children":1824},[1825,1826,1827],{"id":686,"depth":473,"text":687},{"id":829,"depth":473,"text":830},{"id":1255,"depth":473,"text":616},{"id":1261,"depth":462,"text":1262},[1830],"Djeex","Install File Browser to browse and manage your server files from a web interface, exposed securely with SWAG.","md",null,{},{"title":352,"description":1831},"0iEsbzU5LJwT1YtSWAeK0RrGXlMTrW4MffTg2rPbx-U",[1838,1840],{"title":348,"path":349,"stem":350,"description":1839,"children":-1},"Archived guide to installing WireGuard VPN using linuxserver.io's older wireguard image, kept for reference only.",{"title":362,"path":363,"stem":364,"description":1841,"children":-1},"Install Plex Media Server with Tautulli on your homelab to stream movies and TV shows from anywhere on all your devices.",1788645858161]