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