[{"data":1,"prerenderedAt":2101},["ShallowReactive",2],{"navigation_docs_en":3,"-en-serveex-monitoring-beszel-":377,"-en-serveex-monitoring-beszel--surround":2096},[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":163,"body":379,"contributors":2088,"description":2090,"extension":2091,"hideCopyPage":15,"hideHeader":15,"hideToc":15,"links":2092,"meta":2093,"navigation":558,"path":164,"seo":2094,"stem":165,"__hash__":2095},"docs_en\u002Fen\u002F3.serveex\u002F4.monitoring\u002F4.beszel.md",{"type":380,"value":381,"toc":2073},"minimark",[382,390,400,403,409,414,418,779,786,790,793,799,805,811,815,818,835,841,930,935,961,964,968,972,988,991,1028,1548,1551,1555,1568,2027,2043,2069],[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,163],"a",{"href":396,"rel":397},"https:\u002F\u002Fbeszel.dev\u002F",[398],"nofollow"," is a container that gives you real-time access to hardware information from your servers and allows historical tracking. CPU activity, disk usage, temperatures, RAM: nothing escapes your monitoring. Beszel also lets you configure notifications and alerts when your predefined thresholds are exceeded.",[391,401,402],{},"Beszel includes a hub with a web UI and an agent that collects data from your server or a remote server.",[391,404,405],{},[406,407],"img",{"alt":163,"src":408},"\u002Fimg\u002Fserveex\u002Fbeszel.png",[410,411,413],"h2",{"id":412},"installation","Installation",[415,416],"file-tree",{":tree":417},"{\"\u002F\":[{\"srv\":[{\"docker\":[{\"beszel\":[\"compose.yaml\",\".env\",\"data\u002F\",\"socket\u002F\"]}]}]}]}",[419,420,422,427,439,667,718,722,729,762,768,775],"steps",{"level":421},"3",[423,424,426],"h3",{"id":425},"deploy-the-stack","Deploy the stack",[391,428,429,430,434,435,438],{},"Open Dockge, click ",[431,432,433],"code",{},"compose",", name the stack ",[431,436,437],{},"beszel",", and paste the following:",[440,441,447],"pre",{"className":442,"code":443,"filename":444,"language":445,"meta":446,"style":446},"language-yaml shiki shiki-themes github-dark material-theme github-dark","---\nservices:\n  beszel:\n    image: henrygd\u002Fbeszel:latest\n    container_name: beszel\n    restart: unless-stopped\n    ports:\n      - ${PORT}:8090\n    volumes:\n      - .\u002Fdata:\u002Fbeszel_data\n      - .\u002Fsocket:\u002Fbeszel_socket\n\n  beszel-agent:\n    image: henrygd\u002Fbeszel-agent:latest\n    container_name: beszel-agent\n    restart: unless-stopped\n    network_mode: host\n    volumes:\n      - .\u002Fsocket:\u002Fbeszel_socket\n      - \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock:ro\n    environment:\n      LISTEN: \u002Fbeszel_socket\u002Fbeszel.sock\n      # Do not remove quotes around the key\n      KEY: ${KEY}\n","compose.yaml","yaml","",[431,448,449,458,469,477,490,501,512,520,529,537,545,553,560,568,578,588,597,608,615,622,630,638,649,656],{"__ignoreMap":446},[450,451,454],"span",{"class":452,"line":453},"line",1,[450,455,457],{"class":456},"sEgDM","---\n",[450,459,461,465],{"class":452,"line":460},2,[450,462,464],{"class":463},"sRuoG","services",[450,466,468],{"class":467},"s8jd1",":\n",[450,470,472,475],{"class":452,"line":471},3,[450,473,474],{"class":463},"  beszel",[450,476,468],{"class":467},[450,478,480,483,486],{"class":452,"line":479},4,[450,481,482],{"class":463},"    image",[450,484,485],{"class":467},":",[450,487,489],{"class":488},"s11XM"," henrygd\u002Fbeszel:latest\n",[450,491,493,496,498],{"class":452,"line":492},5,[450,494,495],{"class":463},"    container_name",[450,497,485],{"class":467},[450,499,500],{"class":488}," beszel\n",[450,502,504,507,509],{"class":452,"line":503},6,[450,505,506],{"class":463},"    restart",[450,508,485],{"class":467},[450,510,511],{"class":488}," unless-stopped\n",[450,513,515,518],{"class":452,"line":514},7,[450,516,517],{"class":463},"    ports",[450,519,468],{"class":467},[450,521,523,526],{"class":452,"line":522},8,[450,524,525],{"class":467},"      -",[450,527,528],{"class":488}," ${PORT}:8090\n",[450,530,532,535],{"class":452,"line":531},9,[450,533,534],{"class":463},"    volumes",[450,536,468],{"class":467},[450,538,540,542],{"class":452,"line":539},10,[450,541,525],{"class":467},[450,543,544],{"class":488}," .\u002Fdata:\u002Fbeszel_data\n",[450,546,548,550],{"class":452,"line":547},11,[450,549,525],{"class":467},[450,551,552],{"class":488}," .\u002Fsocket:\u002Fbeszel_socket\n",[450,554,556],{"class":452,"line":555},12,[450,557,559],{"emptyLinePlaceholder":558},true,"\n",[450,561,563,566],{"class":452,"line":562},13,[450,564,565],{"class":463},"  beszel-agent",[450,567,468],{"class":467},[450,569,571,573,575],{"class":452,"line":570},14,[450,572,482],{"class":463},[450,574,485],{"class":467},[450,576,577],{"class":488}," henrygd\u002Fbeszel-agent:latest\n",[450,579,581,583,585],{"class":452,"line":580},15,[450,582,495],{"class":463},[450,584,485],{"class":467},[450,586,587],{"class":488}," beszel-agent\n",[450,589,591,593,595],{"class":452,"line":590},16,[450,592,506],{"class":463},[450,594,485],{"class":467},[450,596,511],{"class":488},[450,598,600,603,605],{"class":452,"line":599},17,[450,601,602],{"class":463},"    network_mode",[450,604,485],{"class":467},[450,606,607],{"class":488}," host\n",[450,609,611,613],{"class":452,"line":610},18,[450,612,534],{"class":463},[450,614,468],{"class":467},[450,616,618,620],{"class":452,"line":617},19,[450,619,525],{"class":467},[450,621,552],{"class":488},[450,623,625,627],{"class":452,"line":624},20,[450,626,525],{"class":467},[450,628,629],{"class":488}," \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock:ro\n",[450,631,633,636],{"class":452,"line":632},21,[450,634,635],{"class":463},"    environment",[450,637,468],{"class":467},[450,639,641,644,646],{"class":452,"line":640},22,[450,642,643],{"class":463},"      LISTEN",[450,645,485],{"class":467},[450,647,648],{"class":488}," \u002Fbeszel_socket\u002Fbeszel.sock\n",[450,650,652],{"class":452,"line":651},23,[450,653,655],{"class":654},"sDvJj","      # Do not remove quotes around the key\n",[450,657,659,662,664],{"class":452,"line":658},24,[450,660,661],{"class":463},"      KEY",[450,663,485],{"class":467},[450,665,666],{"class":488}," ${KEY}\n",[668,669,670,678],"tip",{"icon":446},[391,671,672,673,677],{},"✨ ",[674,675,676],"strong",{},"Tip:"," Add the Watchtower label to each container to automate updates.",[440,679,681],{"className":442,"code":680,"filename":444,"language":445,"meta":446,"style":446},"---\nservices:\n  beszel:\n    #...\n    labels:\n      - com.centurylinklabs.watchtower.enable=true\n",[431,682,683,687,693,699,704,711],{"__ignoreMap":446},[450,684,685],{"class":452,"line":453},[450,686,457],{"class":456},[450,688,689,691],{"class":452,"line":460},[450,690,464],{"class":463},[450,692,468],{"class":467},[450,694,695,697],{"class":452,"line":471},[450,696,474],{"class":463},[450,698,468],{"class":467},[450,700,701],{"class":452,"line":479},[450,702,703],{"class":654},"    #...\n",[450,705,706,709],{"class":452,"line":492},[450,707,708],{"class":463},"    labels",[450,710,468],{"class":467},[450,712,713,715],{"class":452,"line":503},[450,714,525],{"class":467},[450,716,717],{"class":488}," com.centurylinklabs.watchtower.enable=true\n",[423,719,721],{"id":720},"set-your-environment-variables","Set your environment variables",[391,723,724,725,728],{},"Fill out the ",[431,726,727],{},".env"," file, for example:",[440,730,734],{"className":731,"code":732,"filename":727,"language":733,"meta":446,"style":446},"language-properties shiki shiki-themes github-dark material-theme github-dark","PORT=8090 # web UI port\nKEY= # private key to retrieve from Beszel when adding a system\n","properties",[431,735,736,752],{"__ignoreMap":446},[450,737,738,742,745,749],{"class":452,"line":453},[450,739,741],{"class":740},"szyEh","PORT",[450,743,744],{"class":467},"=",[450,746,748],{"class":747},"slcoZ","8090 ",[450,750,751],{"class":654},"# web UI port\n",[450,753,754,757,759],{"class":452,"line":460},[450,755,756],{"class":740},"KEY",[450,758,744],{"class":467},[450,760,761],{"class":654}," # private key to retrieve from Beszel when adding a system\n",[391,763,764,765,767],{},"For the ",[431,766,756],{}," value, you'll need to launch Beszel once to get it.",[391,769,770,771,774],{},"Deploy the container and go to ",[431,772,773],{},"http:\u002F\u002Fyourserverip:8090",". Your Beszel web UI is now accessible!",[423,776,778],{"id":777},"done","Done !",[780,781,782,785],"caution",{},[674,783,784],{},"If it fails:"," check your firewall rules.",[423,787,789],{"id":788},"add-local-server-information","Add local server information",[391,791,792],{},"Now that the web UI is accessible, you need to push local server information into it. Just add a machine via the web UI and configure it like this:",[391,794,795],{},[406,796],{"alt":797,"src":798},"Beszel add system","\u002Fimg\u002Fserveex\u002Fbeszel-add.png",[391,800,801,802,804],{},"Note the private key and confirm. Enter the key in your ",[431,803,727],{}," file in Dockge and redeploy the stack. Once done, your server will appear in the web UI:",[391,806,807],{},[406,808],{"alt":809,"src":810},"Beszel system","\u002Fimg\u002Fserveex\u002Fbeszel-system.png",[423,812,814],{"id":813},"add-a-remote-server","Add a remote server",[391,816,817],{},"You can also monitor a remote server. To do so, run the agent on the remote server. Add a new machine in Beszel and fill in:",[819,820,821,825,828],"ul",{},[822,823,824],"li",{},"The name displayed for your remote server",[822,826,827],{},"The IP address or domain name of the remote server",[822,829,830,831,834],{},"The listening port (e.g., ",[431,832,833],{},"45876",")",[391,836,837,838,840],{},"Beszel will suggest a ",[431,839,444],{}," to deploy on the remote server, or you can use:",[440,842,844],{"className":442,"code":843,"filename":444,"language":445,"meta":446,"style":446},"---\nservices:\n  beszel-agent:\n    image: henrygd\u002Fbeszel-agent\n    container_name: beszel-agent\n    restart: unless-stopped\n    network_mode: host\n    volumes:\n      - \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock:ro\n    environment:\n      LISTEN: ${PORT}\n      KEY: ${KEY}\n",[431,845,846,850,856,862,871,879,887,895,901,907,913,922],{"__ignoreMap":446},[450,847,848],{"class":452,"line":453},[450,849,457],{"class":456},[450,851,852,854],{"class":452,"line":460},[450,853,464],{"class":463},[450,855,468],{"class":467},[450,857,858,860],{"class":452,"line":471},[450,859,565],{"class":463},[450,861,468],{"class":467},[450,863,864,866,868],{"class":452,"line":479},[450,865,482],{"class":463},[450,867,485],{"class":467},[450,869,870],{"class":488}," henrygd\u002Fbeszel-agent\n",[450,872,873,875,877],{"class":452,"line":492},[450,874,495],{"class":463},[450,876,485],{"class":467},[450,878,587],{"class":488},[450,880,881,883,885],{"class":452,"line":503},[450,882,506],{"class":463},[450,884,485],{"class":467},[450,886,511],{"class":488},[450,888,889,891,893],{"class":452,"line":514},[450,890,602],{"class":463},[450,892,485],{"class":467},[450,894,607],{"class":488},[450,896,897,899],{"class":452,"line":522},[450,898,534],{"class":463},[450,900,468],{"class":467},[450,902,903,905],{"class":452,"line":531},[450,904,525],{"class":467},[450,906,629],{"class":488},[450,908,909,911],{"class":452,"line":539},[450,910,635],{"class":463},[450,912,468],{"class":467},[450,914,915,917,919],{"class":452,"line":547},[450,916,643],{"class":463},[450,918,485],{"class":467},[450,920,921],{"class":488}," ${PORT}\n",[450,923,924,926,928],{"class":452,"line":555},[450,925,661],{"class":463},[450,927,485],{"class":467},[450,929,666],{"class":488},[391,931,932,933,485],{},"And in ",[431,934,727],{},[440,936,938],{"className":731,"code":937,"filename":727,"language":733,"meta":446,"style":446},"PORT=45876 # communication port between hub and remote agent\nKEY= # private key from Beszel when adding the system\n",[431,939,940,952],{"__ignoreMap":446},[450,941,942,944,946,949],{"class":452,"line":453},[450,943,741],{"class":740},[450,945,744],{"class":467},[450,947,948],{"class":747},"45876 ",[450,950,951],{"class":654},"# communication port between hub and remote agent\n",[450,953,954,956,958],{"class":452,"line":460},[450,955,756],{"class":740},[450,957,744],{"class":467},[450,959,960],{"class":654}," # private key from Beszel when adding the system\n",[391,962,963],{},"Deploy the stack on the remote server. Data will begin flowing into the web UI after a few seconds.",[780,965,966,785],{},[674,967,784],{},[410,969,971],{"id":970},"expose-beszel-with-swag","Expose Beszel with Swag",[973,974,975,976,979,980,983,984,987],"warning",{},"Beszel does not support multi-factor authentication. Exposing it on the internet could compromise connected machines. Only do this if you're using a system like ",[394,977,137],{"href":978},"\u002Fserveex\u002Fsecurity\u002Ftinyauth"," or ",[394,981,255],{"href":982},"\u002Fserveex\u002Fadvanced\u002Fauthentik\u002F",". Otherwise, do not expose with SWAG. Use a VPN like ",[394,985,119],{"href":986},"\u002Fserveex\u002Fcore\u002Fwireguard"," instead.",[391,989,990],{},"If you want to access Beszel remotely from all your devices, expose it using Swag.",[992,993,995,996,999,1002,1004,1005,1008,1009,1012,1013,1016,1017,1020,1021,1023,1024,1027],"note",{"to":994,"icon":446},"\u002Fgeneral\u002Fnetworking\u002Fnat","📋 ",[674,997,998],{},"Prerequisite:",[1000,1001],"br",{},[1000,1003],{},"\nYou must have created a DNS subdomain like ",[431,1006,1007],{},"beszel.mydomain.com"," with a ",[431,1010,1011],{},"CNAME"," pointing to ",[431,1014,1015],{},"mydomain.com",". Unless you're using Cloudflare Zero Trust, you must also have forwarded port ",[431,1018,1019],{},"443"," on your router to your server’s ",[431,1022,1019],{}," port via ",[674,1025,1026],{},"NAT rules",".",[419,1029,1030,1034,1037,1141,1144,1154,1158,1164,1173,1192,1195,1529,1545],{"level":421},[423,1031,1033],{"id":1032},"add-beszels-network-to-swag","Add Beszel's network to SWAG",[391,1035,1036],{},"In Dockge, edit Swag's compose file and add Beszel’s network:",[440,1038,1040],{"className":442,"code":1039,"filename":444,"language":445,"meta":446,"style":446},"---\nservices:\n  swag:\n     container_name: # ...\n      # ...\n     networks:\n      # ...\n      - beszel            # network declared in the stack\n\nnetworks:\n  # ...\n  beszel:\n    name: beszel_default  # actual external network name\n    external: true\n",[431,1041,1042,1046,1052,1059,1069,1074,1081,1085,1095,1099,1106,1111,1117,1130],{"__ignoreMap":446},[450,1043,1044],{"class":452,"line":453},[450,1045,457],{"class":456},[450,1047,1048,1050],{"class":452,"line":460},[450,1049,464],{"class":463},[450,1051,468],{"class":467},[450,1053,1054,1057],{"class":452,"line":471},[450,1055,1056],{"class":463},"  swag",[450,1058,468],{"class":467},[450,1060,1061,1064,1066],{"class":452,"line":479},[450,1062,1063],{"class":463},"     container_name",[450,1065,485],{"class":467},[450,1067,1068],{"class":654}," # ...\n",[450,1070,1071],{"class":452,"line":492},[450,1072,1073],{"class":654},"      # ...\n",[450,1075,1076,1079],{"class":452,"line":503},[450,1077,1078],{"class":463},"     networks",[450,1080,468],{"class":467},[450,1082,1083],{"class":452,"line":514},[450,1084,1073],{"class":654},[450,1086,1087,1089,1092],{"class":452,"line":522},[450,1088,525],{"class":467},[450,1090,1091],{"class":488}," beszel",[450,1093,1094],{"class":654},"            # network declared in the stack\n",[450,1096,1097],{"class":452,"line":531},[450,1098,559],{"emptyLinePlaceholder":558},[450,1100,1101,1104],{"class":452,"line":539},[450,1102,1103],{"class":463},"networks",[450,1105,468],{"class":467},[450,1107,1108],{"class":452,"line":547},[450,1109,1110],{"class":654},"  # ...\n",[450,1112,1113,1115],{"class":452,"line":555},[450,1114,474],{"class":463},[450,1116,468],{"class":467},[450,1118,1119,1122,1124,1127],{"class":452,"line":562},[450,1120,1121],{"class":463},"    name",[450,1123,485],{"class":467},[450,1125,1126],{"class":488}," beszel_default",[450,1128,1129],{"class":654},"  # actual external network name\n",[450,1131,1132,1135,1137],{"class":452,"line":570},[450,1133,1134],{"class":463},"    external",[450,1136,485],{"class":467},[450,1138,1140],{"class":1139},"s08Ry"," true\n",[391,1142,1143],{},"Redeploy the stack and wait for Swag to become fully operational.",[992,1145,1146,1147,1150,1151,1027],{},"We assume the network name is ",[431,1148,1149],{},"beszel_default",". You can check connectivity by visiting Swag's dashboard at ",[431,1152,1153],{},"http:\u002F\u002Fyourserverip:81",[423,1155,1157],{"id":1156},"create-the-subdomainconf-file","Create the subdomain.conf file",[391,1159,1160,1161,1027],{},"In Swag’s config folders, create ",[431,1162,1163],{},"beszel.subdomain.conf",[668,1165,672,1167,1169,1170,1172],{"icon":446,"to":1166},"\u002Fserveex\u002Ffiles\u002Ffile-browser-quantum",[674,1168,676],{}," Use ",[674,1171,209],{}," to browse and edit files instead of terminal commands.",[440,1174,1179],{"className":1175,"code":1176,"filename":1177,"language":1178,"meta":446,"style":446},"language-bash shiki shiki-themes github-dark material-theme github-dark","sudo nano \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Fnginx\u002Fproxy-confs\u002Fbeszel.subdomain.conf\n","Terminal","bash",[431,1180,1181],{"__ignoreMap":446},[450,1182,1183,1186,1189],{"class":452,"line":453},[450,1184,1185],{"class":456},"sudo",[450,1187,1188],{"class":488}," nano",[450,1190,1191],{"class":488}," \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Fnginx\u002Fproxy-confs\u002Fbeszel.subdomain.conf\n",[391,1193,1194],{},"Paste:",[440,1196,1200],{"className":1197,"code":1198,"filename":1163,"language":1199,"meta":446,"style":446},"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 beszel.*;\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\n    #include \u002Fconfig\u002Fnginx\u002Fldap-server.conf;\n\n    # enable for Authelia\n    #include \u002Fconfig\u002Fnginx\u002Fauthelia-server.conf;\n\n    # enable for Authentik\n    #include \u002Fconfig\u002Fnginx\u002Fauthentik-server.conf;\n\n    location \u002F {\n        #auth_basic \"Restricted\";\n        #auth_basic_user_file \u002Fconfig\u002Fnginx\u002F.htpasswd;\n\n        #include \u002Fconfig\u002Fnginx\u002Fldap-location.conf;\n        #include \u002Fconfig\u002Fnginx\u002Fauthelia-location.conf;\n        #include \u002Fconfig\u002Fnginx\u002Fauthentik-location.conf;\n\n        include \u002Fconfig\u002Fnginx\u002Fproxy.conf;\n        include \u002Fconfig\u002Fnginx\u002Fresolver.conf;\n        set $upstream_app beszel;\n        set $upstream_port 8090;\n        set $upstream_proto http;\n        proxy_pass $upstream_proto:\u002F\u002F$upstream_app:$upstream_port;\n    }\n}\n","nginx",[431,1201,1202,1207,1211,1220,1235,1244,1248,1258,1262,1272,1276,1286,1290,1295,1300,1334,1338,1343,1348,1352,1357,1362,1366,1371,1376,1381,1393,1399,1405,1410,1416,1422,1428,1433,1444,1454,1467,1482,1494,1517,1523],{"__ignoreMap":446},[450,1203,1204],{"class":452,"line":453},[450,1205,1206],{"class":654},"## Version 2023\u002F12\u002F19\n",[450,1208,1209],{"class":452,"line":460},[450,1210,559],{"emptyLinePlaceholder":558},[450,1212,1213,1217],{"class":452,"line":471},[450,1214,1216],{"class":1215},"sAoO4","server",[450,1218,1219],{"class":747}," {\n",[450,1221,1222,1226,1229,1232],{"class":452,"line":479},[450,1223,1225],{"class":1224},"sJPTy","    listen ",[450,1227,1019],{"class":1228},"swwWl",[450,1230,1231],{"class":747}," ssl",[450,1233,1234],{"class":467},";\n",[450,1236,1237,1239,1242],{"class":452,"line":492},[450,1238,1225],{"class":1224},[450,1240,1241],{"class":747},"[::]:443 ssl",[450,1243,1234],{"class":467},[450,1245,1246],{"class":452,"line":503},[450,1247,559],{"emptyLinePlaceholder":558},[450,1249,1250,1253,1256],{"class":452,"line":514},[450,1251,1252],{"class":1224},"    server_name ",[450,1254,1255],{"class":747},"beszel.*",[450,1257,1234],{"class":467},[450,1259,1260],{"class":452,"line":522},[450,1261,559],{"emptyLinePlaceholder":558},[450,1263,1264,1267,1270],{"class":452,"line":531},[450,1265,1266],{"class":1224},"    include ",[450,1268,1269],{"class":747},"\u002Fconfig\u002Fnginx\u002Fssl.conf",[450,1271,1234],{"class":467},[450,1273,1274],{"class":452,"line":539},[450,1275,559],{"emptyLinePlaceholder":558},[450,1277,1278,1281,1284],{"class":452,"line":547},[450,1279,1280],{"class":1224},"    client_max_body_size ",[450,1282,1283],{"class":1228},"0",[450,1285,1234],{"class":467},[450,1287,1288],{"class":452,"line":555},[450,1289,559],{"emptyLinePlaceholder":558},[450,1291,1292],{"class":452,"line":562},[450,1293,1294],{"class":654},"    #if ($lan-ip = yes) { set $geo-whitelist yes; }\n",[450,1296,1297],{"class":452,"line":570},[450,1298,1299],{"class":654},"    #if ($geo-whitelist = no) { return 404; }\n",[450,1301,1302,1306,1309,1312,1315,1318,1321,1325,1328,1331],{"class":452,"line":580},[450,1303,1305],{"class":1304},"sJLGa","    if",[450,1307,1308],{"class":747}," (",[450,1310,1311],{"class":467},"$",[450,1313,1314],{"class":747},"geo-blacklist ",[450,1316,1317],{"class":1224},"= ",[450,1319,1320],{"class":747},"no) ",[450,1322,1324],{"class":1323},"sSoIa","{ ",[450,1326,1327],{"class":1304},"return",[450,1329,1330],{"class":1228}," 404",[450,1332,1333],{"class":1323},"; }\n",[450,1335,1336],{"class":452,"line":590},[450,1337,559],{"emptyLinePlaceholder":558},[450,1339,1340],{"class":452,"line":599},[450,1341,1342],{"class":654},"    # enable for ldap auth\n",[450,1344,1345],{"class":452,"line":610},[450,1346,1347],{"class":654},"    #include \u002Fconfig\u002Fnginx\u002Fldap-server.conf;\n",[450,1349,1350],{"class":452,"line":617},[450,1351,559],{"emptyLinePlaceholder":558},[450,1353,1354],{"class":452,"line":624},[450,1355,1356],{"class":654},"    # enable for Authelia\n",[450,1358,1359],{"class":452,"line":632},[450,1360,1361],{"class":654},"    #include \u002Fconfig\u002Fnginx\u002Fauthelia-server.conf;\n",[450,1363,1364],{"class":452,"line":640},[450,1365,559],{"emptyLinePlaceholder":558},[450,1367,1368],{"class":452,"line":651},[450,1369,1370],{"class":654},"    # enable for Authentik\n",[450,1372,1373],{"class":452,"line":658},[450,1374,1375],{"class":654},"    #include \u002Fconfig\u002Fnginx\u002Fauthentik-server.conf;\n",[450,1377,1379],{"class":452,"line":1378},25,[450,1380,559],{"emptyLinePlaceholder":558},[450,1382,1384,1387,1390],{"class":452,"line":1383},26,[450,1385,1386],{"class":1215},"    location",[450,1388,1389],{"class":456}," \u002F ",[450,1391,1392],{"class":747},"{\n",[450,1394,1396],{"class":452,"line":1395},27,[450,1397,1398],{"class":654},"        #auth_basic \"Restricted\";\n",[450,1400,1402],{"class":452,"line":1401},28,[450,1403,1404],{"class":654},"        #auth_basic_user_file \u002Fconfig\u002Fnginx\u002F.htpasswd;\n",[450,1406,1408],{"class":452,"line":1407},29,[450,1409,559],{"emptyLinePlaceholder":558},[450,1411,1413],{"class":452,"line":1412},30,[450,1414,1415],{"class":654},"        #include \u002Fconfig\u002Fnginx\u002Fldap-location.conf;\n",[450,1417,1419],{"class":452,"line":1418},31,[450,1420,1421],{"class":654},"        #include \u002Fconfig\u002Fnginx\u002Fauthelia-location.conf;\n",[450,1423,1425],{"class":452,"line":1424},32,[450,1426,1427],{"class":654},"        #include \u002Fconfig\u002Fnginx\u002Fauthentik-location.conf;\n",[450,1429,1431],{"class":452,"line":1430},33,[450,1432,559],{"emptyLinePlaceholder":558},[450,1434,1436,1439,1442],{"class":452,"line":1435},34,[450,1437,1438],{"class":1224},"        include ",[450,1440,1441],{"class":747},"\u002Fconfig\u002Fnginx\u002Fproxy.conf",[450,1443,1234],{"class":467},[450,1445,1447,1449,1452],{"class":452,"line":1446},35,[450,1448,1438],{"class":1224},[450,1450,1451],{"class":747},"\u002Fconfig\u002Fnginx\u002Fresolver.conf",[450,1453,1234],{"class":467},[450,1455,1457,1460,1462,1465],{"class":452,"line":1456},36,[450,1458,1459],{"class":1224},"        set ",[450,1461,1311],{"class":467},[450,1463,1464],{"class":747},"upstream_app beszel",[450,1466,1234],{"class":467},[450,1468,1470,1472,1474,1477,1480],{"class":452,"line":1469},37,[450,1471,1459],{"class":1224},[450,1473,1311],{"class":467},[450,1475,1476],{"class":747},"upstream_port ",[450,1478,1479],{"class":1228},"8090",[450,1481,1234],{"class":467},[450,1483,1485,1487,1489,1492],{"class":452,"line":1484},38,[450,1486,1459],{"class":1224},[450,1488,1311],{"class":467},[450,1490,1491],{"class":747},"upstream_proto http",[450,1493,1234],{"class":467},[450,1495,1497,1500,1502,1505,1507,1510,1512,1515],{"class":452,"line":1496},39,[450,1498,1499],{"class":1224},"        proxy_pass ",[450,1501,1311],{"class":467},[450,1503,1504],{"class":747},"upstream_proto:\u002F\u002F",[450,1506,1311],{"class":467},[450,1508,1509],{"class":747},"upstream_app:",[450,1511,1311],{"class":467},[450,1513,1514],{"class":747},"upstream_port",[450,1516,1234],{"class":467},[450,1518,1520],{"class":452,"line":1519},40,[450,1521,1522],{"class":747},"    }\n",[450,1524,1526],{"class":452,"line":1525},41,[450,1527,1528],{"class":747},"}\n",[391,1530,1531,1532,1536,1537,1540,1541,1544],{},"Press ",[1533,1534],"kbd",{"value":1535},"Ctrl+O",", then ",[1533,1538],{"value":1539},"Enter"," to save, and ",[1533,1542],{"value":1543},"Ctrl+X"," to exit.",[423,1546,778],{"id":1547},"done-1",[391,1549,1550],{},"That’s it! Beszel is now exposed!",[410,1552,1554],{"id":1553},"protecting-beszel-with-tinyauth","Protecting Beszel with TinyAuth",[391,1556,1557,1558,1560,1561,1563,1564,485],{},"Add ",[394,1559,137],{"href":978},"'s forward-auth check directly to ",[431,1562,1163],{},", the same way as ",[394,1565,1567],{"href":1566},"\u002Fserveex\u002Fsecurity\u002Ftinyauth#protecting-an-app-via-reverse-proxy","the TinyAuth guide",[440,1569,1573],{"className":1197,"code":1570,"filename":1163,"highlights":1571,"language":1199,"meta":446,"style":446},"## Version 2023\u002F12\u002F19\n\nserver {\n    listen 443 ssl;\n    listen [::]:443 ssl;\n\n    server_name beszel.*;\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\n    #include \u002Fconfig\u002Fnginx\u002Fldap-server.conf;\n\n    # enable for Authelia\n    #include \u002Fconfig\u002Fnginx\u002Fauthelia-server.conf;\n\n    # enable for Authentik\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        #auth_basic \"Restricted\";\n        #auth_basic_user_file \u002Fconfig\u002Fnginx\u002F.htpasswd;\n\n        #include \u002Fconfig\u002Fnginx\u002Fldap-location.conf;\n        #include \u002Fconfig\u002Fnginx\u002Fauthelia-location.conf;\n        #include \u002Fconfig\u002Fnginx\u002Fauthentik-location.conf;\n\n        include \u002Fconfig\u002Fnginx\u002Fproxy.conf;\n        include \u002Fconfig\u002Fnginx\u002Fresolver.conf;\n        set $upstream_app beszel;\n        set $upstream_port 8090;\n        set $upstream_proto http;\n        proxy_pass $upstream_proto:\u002F\u002F$upstream_app:$upstream_port;\n    }\n}\n",[1383,1395,1401,1407,1412,1418,1424,1430,1435,1446,1456,1469,1484,1525,1572],42,[431,1574,1575,1579,1583,1589,1599,1607,1611,1619,1623,1631,1635,1643,1647,1651,1655,1677,1681,1685,1689,1693,1697,1701,1705,1709,1713,1717,1728,1736,1746,1758,1772,1787,1802,1817,1822,1827,1837,1863,1868,1872,1880,1891,1905,1910,1915,1920,1925,1930,1935,1940,1945,1954,1963,1974,1987,1998,2017,2022],{"__ignoreMap":446},[450,1576,1577],{"class":452,"line":453},[450,1578,1206],{"class":654},[450,1580,1581],{"class":452,"line":460},[450,1582,559],{"emptyLinePlaceholder":558},[450,1584,1585,1587],{"class":452,"line":471},[450,1586,1216],{"class":1215},[450,1588,1219],{"class":747},[450,1590,1591,1593,1595,1597],{"class":452,"line":479},[450,1592,1225],{"class":1224},[450,1594,1019],{"class":1228},[450,1596,1231],{"class":747},[450,1598,1234],{"class":467},[450,1600,1601,1603,1605],{"class":452,"line":492},[450,1602,1225],{"class":1224},[450,1604,1241],{"class":747},[450,1606,1234],{"class":467},[450,1608,1609],{"class":452,"line":503},[450,1610,559],{"emptyLinePlaceholder":558},[450,1612,1613,1615,1617],{"class":452,"line":514},[450,1614,1252],{"class":1224},[450,1616,1255],{"class":747},[450,1618,1234],{"class":467},[450,1620,1621],{"class":452,"line":522},[450,1622,559],{"emptyLinePlaceholder":558},[450,1624,1625,1627,1629],{"class":452,"line":531},[450,1626,1266],{"class":1224},[450,1628,1269],{"class":747},[450,1630,1234],{"class":467},[450,1632,1633],{"class":452,"line":539},[450,1634,559],{"emptyLinePlaceholder":558},[450,1636,1637,1639,1641],{"class":452,"line":547},[450,1638,1280],{"class":1224},[450,1640,1283],{"class":1228},[450,1642,1234],{"class":467},[450,1644,1645],{"class":452,"line":555},[450,1646,559],{"emptyLinePlaceholder":558},[450,1648,1649],{"class":452,"line":562},[450,1650,1294],{"class":654},[450,1652,1653],{"class":452,"line":570},[450,1654,1299],{"class":654},[450,1656,1657,1659,1661,1663,1665,1667,1669,1671,1673,1675],{"class":452,"line":580},[450,1658,1305],{"class":1304},[450,1660,1308],{"class":747},[450,1662,1311],{"class":467},[450,1664,1314],{"class":747},[450,1666,1317],{"class":1224},[450,1668,1320],{"class":747},[450,1670,1324],{"class":1323},[450,1672,1327],{"class":1304},[450,1674,1330],{"class":1228},[450,1676,1333],{"class":1323},[450,1678,1679],{"class":452,"line":590},[450,1680,559],{"emptyLinePlaceholder":558},[450,1682,1683],{"class":452,"line":599},[450,1684,1342],{"class":654},[450,1686,1687],{"class":452,"line":610},[450,1688,1347],{"class":654},[450,1690,1691],{"class":452,"line":617},[450,1692,559],{"emptyLinePlaceholder":558},[450,1694,1695],{"class":452,"line":624},[450,1696,1356],{"class":654},[450,1698,1699],{"class":452,"line":632},[450,1700,1361],{"class":654},[450,1702,1703],{"class":452,"line":640},[450,1704,559],{"emptyLinePlaceholder":558},[450,1706,1707],{"class":452,"line":651},[450,1708,1370],{"class":654},[450,1710,1711],{"class":452,"line":658},[450,1712,1375],{"class":654},[450,1714,1715],{"class":452,"line":1378},[450,1716,559],{"emptyLinePlaceholder":558},[450,1718,1721,1723,1726],{"class":1719,"line":1383},[452,1720],"highlight",[450,1722,1386],{"class":1215},[450,1724,1725],{"class":456}," \u002Ftinyauth ",[450,1727,1392],{"class":747},[450,1729,1731,1734],{"class":1730,"line":1395},[452,1720],[450,1732,1733],{"class":1224},"        internal",[450,1735,1234],{"class":467},[450,1737,1739,1741,1744],{"class":1738,"line":1401},[452,1720],[450,1740,1499],{"class":1224},[450,1742,1743],{"class":747},"http:\u002F\u002Ftinyauth:3000\u002Fapi\u002Fauth\u002Fnginx",[450,1745,1234],{"class":467},[450,1747,1749,1752,1756],{"class":1748,"line":1407},[452,1720],[450,1750,1751],{"class":1224},"        proxy_pass_request_body ",[450,1753,1755],{"class":1754},"soUAX","off",[450,1757,1234],{"class":467},[450,1759,1761,1764,1767,1770],{"class":1760,"line":1412},[452,1720],[450,1762,1763],{"class":1224},"        proxy_set_header ",[450,1765,1766],{"class":747},"Content-Length ",[450,1768,1769],{"class":488},"\"\"",[450,1771,1234],{"class":467},[450,1773,1775,1777,1780,1782,1785],{"class":1774,"line":1418},[452,1720],[450,1776,1763],{"class":1224},[450,1778,1779],{"class":747},"X-Forwarded-Proto ",[450,1781,1311],{"class":467},[450,1783,1784],{"class":747},"scheme",[450,1786,1234],{"class":467},[450,1788,1790,1792,1795,1797,1800],{"class":1789,"line":1424},[452,1720],[450,1791,1763],{"class":1224},[450,1793,1794],{"class":747},"X-Forwarded-Host ",[450,1796,1311],{"class":467},[450,1798,1799],{"class":747},"http_host",[450,1801,1234],{"class":467},[450,1803,1805,1807,1810,1812,1815],{"class":1804,"line":1430},[452,1720],[450,1806,1763],{"class":1224},[450,1808,1809],{"class":747},"X-Forwarded-Uri ",[450,1811,1311],{"class":467},[450,1813,1814],{"class":747},"request_uri",[450,1816,1234],{"class":467},[450,1818,1820],{"class":1819,"line":1435},[452,1720],[450,1821,1522],{"class":747},[450,1823,1825],{"class":1824,"line":1446},[452,1720],[450,1826,559],{"emptyLinePlaceholder":558},[450,1828,1830,1832,1835],{"class":1829,"line":1456},[452,1720],[450,1831,1386],{"class":1215},[450,1833,1834],{"class":456}," @tinyauth_login ",[450,1836,1392],{"class":747},[450,1838,1840,1843,1846,1849,1851,1854,1856,1858,1860],{"class":1839,"line":1469},[452,1720],[450,1841,1842],{"class":1304},"        return",[450,1844,1845],{"class":1228}," 302",[450,1847,1848],{"class":747}," https:\u002F\u002Ftinyauth.mydomain.com\u002Flogin?redirect_uri=",[450,1850,1311],{"class":467},[450,1852,1853],{"class":747},"scheme:\u002F\u002F",[450,1855,1311],{"class":467},[450,1857,1799],{"class":747},[450,1859,1311],{"class":467},[450,1861,1862],{"class":747},"request_uri;\n",[450,1864,1866],{"class":1865,"line":1484},[452,1720],[450,1867,1522],{"class":747},[450,1869,1870],{"class":452,"line":1496},[450,1871,559],{"emptyLinePlaceholder":558},[450,1873,1874,1876,1878],{"class":452,"line":1519},[450,1875,1386],{"class":1215},[450,1877,1389],{"class":456},[450,1879,1392],{"class":747},[450,1881,1883,1886,1889],{"class":1882,"line":1525},[452,1720],[450,1884,1885],{"class":1224},"        auth_request ",[450,1887,1888],{"class":747},"\u002Ftinyauth",[450,1890,1234],{"class":467},[450,1892,1894,1897,1900,1903],{"class":1893,"line":1572},[452,1720],[450,1895,1896],{"class":1224},"        error_page ",[450,1898,1899],{"class":1228},"401",[450,1901,1902],{"class":747}," = @tinyauth_login",[450,1904,1234],{"class":467},[450,1906,1908],{"class":452,"line":1907},43,[450,1909,559],{"emptyLinePlaceholder":558},[450,1911,1913],{"class":452,"line":1912},44,[450,1914,1398],{"class":654},[450,1916,1918],{"class":452,"line":1917},45,[450,1919,1404],{"class":654},[450,1921,1923],{"class":452,"line":1922},46,[450,1924,559],{"emptyLinePlaceholder":558},[450,1926,1928],{"class":452,"line":1927},47,[450,1929,1415],{"class":654},[450,1931,1933],{"class":452,"line":1932},48,[450,1934,1421],{"class":654},[450,1936,1938],{"class":452,"line":1937},49,[450,1939,1427],{"class":654},[450,1941,1943],{"class":452,"line":1942},50,[450,1944,559],{"emptyLinePlaceholder":558},[450,1946,1948,1950,1952],{"class":452,"line":1947},51,[450,1949,1438],{"class":1224},[450,1951,1441],{"class":747},[450,1953,1234],{"class":467},[450,1955,1957,1959,1961],{"class":452,"line":1956},52,[450,1958,1438],{"class":1224},[450,1960,1451],{"class":747},[450,1962,1234],{"class":467},[450,1964,1966,1968,1970,1972],{"class":452,"line":1965},53,[450,1967,1459],{"class":1224},[450,1969,1311],{"class":467},[450,1971,1464],{"class":747},[450,1973,1234],{"class":467},[450,1975,1977,1979,1981,1983,1985],{"class":452,"line":1976},54,[450,1978,1459],{"class":1224},[450,1980,1311],{"class":467},[450,1982,1476],{"class":747},[450,1984,1479],{"class":1228},[450,1986,1234],{"class":467},[450,1988,1990,1992,1994,1996],{"class":452,"line":1989},55,[450,1991,1459],{"class":1224},[450,1993,1311],{"class":467},[450,1995,1491],{"class":747},[450,1997,1234],{"class":467},[450,1999,2001,2003,2005,2007,2009,2011,2013,2015],{"class":452,"line":2000},56,[450,2002,1499],{"class":1224},[450,2004,1311],{"class":467},[450,2006,1504],{"class":747},[450,2008,1311],{"class":467},[450,2010,1509],{"class":747},[450,2012,1311],{"class":467},[450,2014,1514],{"class":747},[450,2016,1234],{"class":467},[450,2018,2020],{"class":452,"line":2019},57,[450,2021,1522],{"class":747},[450,2023,2025],{"class":452,"line":2024},58,[450,2026,1528],{"class":747},[992,2028,2030,2031,2034,2035,2038,2039,2042],{"to":2029},"\u002Fserveex\u002Fsecurity\u002Ftinyauth#exposing-tinyauth-with-swag","The ",[431,2032,2033],{},"location \u002Ftinyauth"," block runs inside SWAG's own container, so SWAG needs to be on TinyAuth's Docker network to reach it by name (",[431,2036,2037],{},"tinyauth"," here). This should already be set up from ",[674,2040,2041],{},"exposing TinyAuth itself",". If you run into an error, double-check SWAG's compose file still has that network attached.",[668,2044,2045,2046,2049,2050,2052,2053,2056,2057,2060,2061,2064,2065,1027],{"icon":446},"✨ You can protect this app with ",[394,2047,255],{"href":2048},"\u002Fserveex\u002Fadvanced\u002Fauthentik"," instead of TinyAuth by opening ",[431,2051,1163],{}," and removing the ",[431,2054,2055],{},"#"," in front of ",[431,2058,2059],{},"include \u002Fconfig\u002Fnginx\u002Fauthentik-server.conf;"," and ",[431,2062,2063],{},"include \u002Fconfig\u002Fnginx\u002Fauthentik-location.conf;",". Don’t forget to ",[394,2066,2068],{"href":2067},"\u002Fserveex\u002Fadvanced\u002Fauthentik#protecting-an-app-via-reverse-proxy","create an application and provider in Authentik",[2070,2071,2072],"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 .szyEh, html code.shiki .szyEh{--shiki-light:#F97583;--shiki-default:#F07178;--shiki-dark:#F97583}html pre.shiki code .slcoZ, html code.shiki .slcoZ{--shiki-light:#E1E4E8;--shiki-default:#EEFFFF;--shiki-dark:#E1E4E8}html pre.shiki code .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":446,"searchDepth":460,"depth":460,"links":2074},[2075,2082,2087],{"id":412,"depth":460,"text":413,"children":2076},[2077,2078,2079,2080,2081],{"id":425,"depth":471,"text":426},{"id":720,"depth":471,"text":721},{"id":777,"depth":471,"text":778},{"id":788,"depth":471,"text":789},{"id":813,"depth":471,"text":814},{"id":970,"depth":460,"text":971,"children":2083},[2084,2085,2086],{"id":1032,"depth":471,"text":1033},{"id":1156,"depth":471,"text":1157},{"id":1547,"depth":471,"text":778},{"id":1553,"depth":460,"text":1554},[2089],"Djeex","Install Beszel to monitor server CPU, RAM, disk, and network metrics, including remote servers, with a lightweight web dashboard.","md",null,{},{"title":163,"description":2090},"6vcy6zA7zmafmydAtHtaDuZYKcRS9alFdzs-Ij84NuE",[2097,2099],{"title":159,"path":160,"stem":161,"description":2098,"children":-1},"Install Speedtest Tracker to automatically measure and log your internet connection speed over time, exposed with SWAG.",{"title":167,"path":168,"stem":169,"description":2100,"children":-1},"Install UpSnap to remotely wake up machines on your local network via Wake-on-LAN, exposed with SWAG.",1788645846863]