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