[{"data":1,"prerenderedAt":1636},["ShallowReactive",2],{"navigation_docs_en":3,"-en-serveex-cloud-nextcloud-":377,"-en-serveex-cloud-nextcloud--surround":1631},[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":199,"body":379,"contributors":1623,"description":1625,"extension":1626,"hideCopyPage":15,"hideHeader":15,"hideToc":15,"links":1627,"meta":1628,"navigation":1180,"path":200,"seo":1629,"stem":201,"__hash__":1630},"docs_en\u002Fen\u002F3.serveex\u002F6.cloud\u002F2.nextcloud.md",{"type":380,"value":381,"toc":1604},"minimark",[382,390,400,407,412,421,425,689,696,700,703,739,1414,1422,1426,1429,1554,1600],[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,199],"a",{"href":396,"rel":397},"https:\u002F\u002Fnextcloud.com\u002F",[398],"nofollow"," is a self-hosted solution that allows you to access and synchronize your data across all your devices. It also includes collaboration features, calendar, and more. It’s a great alternative to services like Google Drive, iCloud, or OneDrive.",[391,401,402],{},[403,404],"img",{"alt":405,"src":406},"Picture","\u002Fimg\u002Fserveex\u002Fnextcloud.png",[408,409,411],"h2",{"id":410},"installation","Installation",[413,414,416,417],"note",{"to":415},"https:\u002F\u002Fdocs.linuxserver.io\u002Fimages\u002Fdocker-nextcloud\u002F","We'll be using the Docker image maintained by ",[418,419,420],"strong",{},"LinuxServer.io",[422,423],"file-tree",{":tree":424},"{\"\u002F\":[{\"srv\":[{\"docker\":[{\"nextcloud\":[\"config\u002F\",\"data\u002F\",\"compose.yaml\",\".env\"]}]}]}]}",[426,427,429,434,446,592,603,607,618,634,641,678,685],"steps",{"level":428},"3",[430,431,433],"h3",{"id":432},"deploy-the-stack","Deploy the stack",[391,435,436,437,441,442,445],{},"Open Dockge, click on ",[438,439,440],"code",{},"compose",", name the stack ",[438,443,444],{},"nextcloud"," and paste the following:",[447,448,454],"pre",{"className":449,"code":450,"filename":451,"language":452,"meta":453,"style":453},"language-yaml shiki shiki-themes github-dark material-theme github-dark","---\nservices:\n  nextcloud:\n    image: lscr.io\u002Flinuxserver\u002Fnextcloud:latest\n    container_name: nextcloud\n    environment:\n      - PUID=${PUID}\n      - PGID=${GUID}\n      - TZ=Etc\u002FUTC\n    volumes:\n      - \u002Fsrv\u002Fdocker\u002Fnextcloud\u002Fconfig:\u002Fconfig\n      - \u002Fsrv\u002Fdocker\u002Fnextcloud\u002Fdata:\u002Fdata\n    ports:\n      - ${PORT}:443\n    restart: unless-stopped\n","compose.yaml","yaml","",[438,455,456,465,476,484,497,508,516,525,533,541,549,557,565,573,581],{"__ignoreMap":453},[457,458,461],"span",{"class":459,"line":460},"line",1,[457,462,464],{"class":463},"sEgDM","---\n",[457,466,468,472],{"class":459,"line":467},2,[457,469,471],{"class":470},"sRuoG","services",[457,473,475],{"class":474},"s8jd1",":\n",[457,477,479,482],{"class":459,"line":478},3,[457,480,481],{"class":470},"  nextcloud",[457,483,475],{"class":474},[457,485,487,490,493],{"class":459,"line":486},4,[457,488,489],{"class":470},"    image",[457,491,492],{"class":474},":",[457,494,496],{"class":495},"s11XM"," lscr.io\u002Flinuxserver\u002Fnextcloud:latest\n",[457,498,500,503,505],{"class":459,"line":499},5,[457,501,502],{"class":470},"    container_name",[457,504,492],{"class":474},[457,506,507],{"class":495}," nextcloud\n",[457,509,511,514],{"class":459,"line":510},6,[457,512,513],{"class":470},"    environment",[457,515,475],{"class":474},[457,517,519,522],{"class":459,"line":518},7,[457,520,521],{"class":474},"      -",[457,523,524],{"class":495}," PUID=${PUID}\n",[457,526,528,530],{"class":459,"line":527},8,[457,529,521],{"class":474},[457,531,532],{"class":495}," PGID=${GUID}\n",[457,534,536,538],{"class":459,"line":535},9,[457,537,521],{"class":474},[457,539,540],{"class":495}," TZ=Etc\u002FUTC\n",[457,542,544,547],{"class":459,"line":543},10,[457,545,546],{"class":470},"    volumes",[457,548,475],{"class":474},[457,550,552,554],{"class":459,"line":551},11,[457,553,521],{"class":474},[457,555,556],{"class":495}," \u002Fsrv\u002Fdocker\u002Fnextcloud\u002Fconfig:\u002Fconfig\n",[457,558,560,562],{"class":459,"line":559},12,[457,561,521],{"class":474},[457,563,564],{"class":495}," \u002Fsrv\u002Fdocker\u002Fnextcloud\u002Fdata:\u002Fdata\n",[457,566,568,571],{"class":459,"line":567},13,[457,569,570],{"class":470},"    ports",[457,572,475],{"class":474},[457,574,576,578],{"class":459,"line":575},14,[457,577,521],{"class":474},[457,579,580],{"class":495}," ${PORT}:443\n",[457,582,584,587,589],{"class":459,"line":583},15,[457,585,586],{"class":470},"    restart",[457,588,492],{"class":474},[457,590,591],{"class":495}," unless-stopped\n",[413,593,595,596,598,599,602],{"to":594},"\u002Fgeneral\u002Fnetworking\u002Fsamba","If you’re using a NAS or network-shared drive via ",[418,597,41],{},", replace ",[438,600,601],{},"\u002Fsrv\u002Fdocker\u002Fnextcloud\u002Fdata"," with the path to your shared folder.",[430,604,606],{"id":605},"set-your-environment-variables","Set your environment variables",[391,608,609,610,613,614,617],{},"Find your ",[438,611,612],{},"PUID"," and ",[438,615,616],{},"GUID"," by running the following command:",[447,619,624],{"className":620,"code":621,"filename":622,"language":623,"meta":453,"style":453},"language-bash shiki shiki-themes github-dark material-theme github-dark","id username\n","Terminal","bash",[438,625,626],{"__ignoreMap":453},[457,627,628,631],{"class":459,"line":460},[457,629,630],{"class":463},"id",[457,632,633],{"class":495}," username\n",[391,635,636,637,640],{},"Then fill out the ",[438,638,639],{},".env"," file with your preferred port and the values found above, for example:",[447,642,646],{"className":643,"code":644,"filename":639,"language":645,"meta":453,"style":453},"language-properties shiki shiki-themes github-dark material-theme github-dark","PUID=1000\nGUID=1000\nPORT=4545\n","properties",[438,647,648,660,668],{"__ignoreMap":453},[457,649,650,653,656],{"class":459,"line":460},[457,651,612],{"class":652},"szyEh",[457,654,655],{"class":474},"=",[457,657,659],{"class":658},"slcoZ","1000\n",[457,661,662,664,666],{"class":459,"line":467},[457,663,616],{"class":652},[457,665,655],{"class":474},[457,667,659],{"class":658},[457,669,670,673,675],{"class":459,"line":478},[457,671,672],{"class":652},"PORT",[457,674,655],{"class":474},[457,676,677],{"class":658},"4545\n",[391,679,680,681,684],{},"Deploy the stack and visit ",[438,682,683],{},"http:\u002F\u002Fyourserverip:4545"," to complete the setup.",[430,686,688],{"id":687},"done","Done !",[690,691,692,695],"caution",{},[418,693,694],{},"If it fails:"," check your firewall rules.",[408,697,699],{"id":698},"exposing-nextcloud-with-swag","Exposing Nextcloud with Swag",[391,701,702],{},"The goal of this setup is to access Nextcloud remotely from all your devices. We’ll use Swag to expose the app.",[413,704,705,706,709,710,713,714,717,718,722,723,726,727,730,731,733,734,738],{},"We assume you have a subdomain ",[438,707,708],{},"nextcloud.yourdomain.com"," with a ",[438,711,712],{},"CNAME"," pointing to ",[438,715,716],{},"yourdomain.com"," in your ",[394,719,721],{"href":720},"\u002Fgeneral\u002Fnetworking\u002Fdns","DNS zone",". And unless you’re using ",[394,724,133],{"href":725},"\u002Fserveex\u002Fsecurity\u002Fcloudflare",", port ",[438,728,729],{},"443"," on your router must be forwarded to port ",[438,732,729],{}," on your server using ",[394,735,737],{"href":736},"\u002Fgeneral\u002Fnetworking\u002Fnat","NAT rules",".",[426,740,741,745,748,864,875,878,882,889,901,917,923,1027,1034,1090,1106,1110,1116,1130,1133,1403,1411],{"level":428},[430,742,744],{"id":743},"add-nextclouds-network-to-swag","Add Nextcloud's network to SWAG",[391,746,747],{},"In Dockge, go to your SWAG stack and edit the compose to add Nextcloud's network:",[447,749,751],{"className":449,"code":750,"filename":451,"language":452,"meta":453,"style":453},"---\nservices:\n  swag:\n     container_name: # ...\n      # ... \n     networks:               \n      # ...           \n      - nextcloud            \n    \nnetworks:                    \n  # ...\n  nextcloud:                 \n    name: nextcloud_default  \n    external: true           \n",[438,752,753,757,763,770,781,786,796,801,811,816,826,831,840,853],{"__ignoreMap":453},[457,754,755],{"class":459,"line":460},[457,756,464],{"class":463},[457,758,759,761],{"class":459,"line":467},[457,760,471],{"class":470},[457,762,475],{"class":474},[457,764,765,768],{"class":459,"line":478},[457,766,767],{"class":470},"  swag",[457,769,475],{"class":474},[457,771,772,775,777],{"class":459,"line":486},[457,773,774],{"class":470},"     container_name",[457,776,492],{"class":474},[457,778,780],{"class":779},"sDvJj"," # ...\n",[457,782,783],{"class":459,"line":499},[457,784,785],{"class":779},"      # ... \n",[457,787,788,791,793],{"class":459,"line":510},[457,789,790],{"class":470},"     networks",[457,792,492],{"class":474},[457,794,795],{"class":658},"               \n",[457,797,798],{"class":459,"line":518},[457,799,800],{"class":779},"      # ...           \n",[457,802,803,805,808],{"class":459,"line":527},[457,804,521],{"class":474},[457,806,807],{"class":495}," nextcloud",[457,809,810],{"class":658},"            \n",[457,812,813],{"class":459,"line":535},[457,814,815],{"class":658},"    \n",[457,817,818,821,823],{"class":459,"line":543},[457,819,820],{"class":470},"networks",[457,822,492],{"class":474},[457,824,825],{"class":658},"                    \n",[457,827,828],{"class":459,"line":551},[457,829,830],{"class":779},"  # ...\n",[457,832,833,835,837],{"class":459,"line":559},[457,834,481],{"class":470},[457,836,492],{"class":474},[457,838,839],{"class":658},"                 \n",[457,841,842,845,847,850],{"class":459,"line":567},[457,843,844],{"class":470},"    name",[457,846,492],{"class":474},[457,848,849],{"class":495}," nextcloud_default",[457,851,852],{"class":658},"  \n",[457,854,855,858,860],{"class":459,"line":575},[457,856,857],{"class":470},"    external",[457,859,492],{"class":474},[457,861,863],{"class":862},"s08Ry"," true\n",[413,865,866,867,870,871,738],{},"We assume the Nextcloud network is named ",[438,868,869],{},"nextcloud_default",". You can confirm connectivity by visiting the SWAG dashboard at ",[394,872,873],{"href":873,"rel":874},"http:\u002F\u002Fyourserverip:81",[398],[391,876,877],{},"Redeploy the stack and wait for SWAG to become fully operational.",[430,879,881],{"id":880},"configure-trusted-proxies","Configure trusted proxies",[391,883,884,885,888],{},"In Nextcloud’s files, edit the ",[438,886,887],{},"config.php"," file:",[890,891,893,894,897,898,900],"tip",{"icon":453,"to":892},"\u002Fserveex\u002Ffiles\u002Ffile-browser-quantum","✨ ",[418,895,896],{},"Tip:"," You can use ",[418,899,209],{}," to navigate and edit files instead of using terminal commands.",[447,902,904],{"className":620,"code":903,"filename":622,"language":623,"meta":453,"style":453},"sudo nano \u002Fsrv\u002Fdocker\u002Fnextcloud\u002Fconfig\u002Fwww\u002Fnextcloud\u002Fconfig\u002Fconfig.php\n",[438,905,906],{"__ignoreMap":453},[457,907,908,911,914],{"class":459,"line":460},[457,909,910],{"class":463},"sudo",[457,912,913],{"class":495}," nano",[457,915,916],{"class":495}," \u002Fsrv\u002Fdocker\u002Fnextcloud\u002Fconfig\u002Fwww\u002Fnextcloud\u002Fconfig\u002Fconfig.php\n",[391,918,919,920,492],{},"Paste the following before the final ",[438,921,922],{},");",[447,924,928],{"className":925,"code":926,"filename":887,"language":927,"meta":453,"style":453},"language-php shiki shiki-themes github-dark material-theme github-dark","'trusted_proxies' => [gethostbyname('swag')],\n'overwrite.cli.url' => 'https:\u002F\u002Fnextcloud.example.com\u002F',\n'overwritehost' => 'nextcloud.example.com',\n'overwriteprotocol' => 'https',\n","php",[438,929,930,965,987,1007],{"__ignoreMap":453},[457,931,932,936,939,941,945,948,952,955,957,960,962],{"class":459,"line":460},[457,933,935],{"class":934},"s8K8j","'",[457,937,938],{"class":495},"trusted_proxies",[457,940,935],{"class":934},[457,942,944],{"class":943},"sJPTy"," =>",[457,946,947],{"class":474}," [",[457,949,951],{"class":950},"sJGgK","gethostbyname",[457,953,954],{"class":474},"(",[457,956,935],{"class":934},[457,958,959],{"class":495},"swag",[457,961,935],{"class":934},[457,963,964],{"class":474},")],\n",[457,966,967,969,972,974,976,979,982,984],{"class":459,"line":467},[457,968,935],{"class":934},[457,970,971],{"class":495},"overwrite.cli.url",[457,973,935],{"class":934},[457,975,944],{"class":943},[457,977,978],{"class":934}," '",[457,980,981],{"class":495},"https:\u002F\u002Fnextcloud.example.com\u002F",[457,983,935],{"class":934},[457,985,986],{"class":474},",\n",[457,988,989,991,994,996,998,1000,1003,1005],{"class":459,"line":478},[457,990,935],{"class":934},[457,992,993],{"class":495},"overwritehost",[457,995,935],{"class":934},[457,997,944],{"class":943},[457,999,978],{"class":934},[457,1001,1002],{"class":495},"nextcloud.example.com",[457,1004,935],{"class":934},[457,1006,986],{"class":474},[457,1008,1009,1011,1014,1016,1018,1020,1023,1025],{"class":459,"line":486},[457,1010,935],{"class":934},[457,1012,1013],{"class":495},"overwriteprotocol",[457,1015,935],{"class":934},[457,1017,944],{"class":943},[457,1019,978],{"class":934},[457,1021,1022],{"class":495},"https",[457,1024,935],{"class":934},[457,1026,986],{"class":474},[391,1028,1029,1030,1033],{},"Also add your domain in the ",[438,1031,1032],{},"array"," section. It should look like this:",[447,1035,1037],{"className":925,"code":1036,"filename":887,"language":927,"meta":453,"style":453},"array (\n   0 => '192.168.0.1:444', # This line may differ, don’t change it!\n   1 => 'nextcloud.yourdomain.com', # Add your domain here\n),\n",[438,1038,1039,1046,1067,1085],{"__ignoreMap":453},[457,1040,1041,1043],{"class":459,"line":460},[457,1042,1032],{"class":950},[457,1044,1045],{"class":474}," (\n",[457,1047,1048,1052,1054,1056,1059,1061,1064],{"class":459,"line":467},[457,1049,1051],{"class":1050},"swwWl","   0",[457,1053,944],{"class":943},[457,1055,978],{"class":934},[457,1057,1058],{"class":495},"192.168.0.1:444",[457,1060,935],{"class":934},[457,1062,1063],{"class":474},",",[457,1065,1066],{"class":779}," # This line may differ, don’t change it!\n",[457,1068,1069,1072,1074,1076,1078,1080,1082],{"class":459,"line":478},[457,1070,1071],{"class":1050},"   1",[457,1073,944],{"class":943},[457,1075,978],{"class":934},[457,1077,708],{"class":495},[457,1079,935],{"class":934},[457,1081,1063],{"class":474},[457,1083,1084],{"class":779}," # Add your domain here\n",[457,1086,1087],{"class":459,"line":486},[457,1088,1089],{"class":474},"),\n",[391,1091,1092,1093,1097,1098,1101,1102,1105],{},"Press ",[1094,1095],"kbd",{"value":1096},"Ctrl+O",", then ",[1094,1099],{"value":1100},"Enter"," to save, and ",[1094,1103],{"value":1104},"Ctrl+X"," to exit.",[430,1107,1109],{"id":1108},"create-the-subdomainconf-file","Create the subdomain.conf file",[391,1111,1112,1113,492],{},"In Swag’s folders, create the file ",[438,1114,1115],{},"nextcloud.subdomain.conf",[447,1117,1119],{"className":620,"code":1118,"filename":622,"language":623,"meta":453,"style":453},"sudo nano \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Fnginx\u002Fproxy-confs\u002Fnextcloud.subdomain.conf\n",[438,1120,1121],{"__ignoreMap":453},[457,1122,1123,1125,1127],{"class":459,"line":460},[457,1124,910],{"class":463},[457,1126,913],{"class":495},[457,1128,1129],{"class":495}," \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Fnginx\u002Fproxy-confs\u002Fnextcloud.subdomain.conf\n",[391,1131,1132],{},"Paste the following:",[447,1134,1138],{"className":1135,"code":1136,"filename":1115,"language":1137,"meta":453,"style":453},"language-nginx shiki shiki-themes github-dark material-theme github-dark","## Version 2024\u002F04\u002F25\nserver {\n    listen 443 ssl;\n    listen [::]:443 ssl;\n\n    server_name nextcloud.*;\n\n    include \u002Fconfig\u002Fnginx\u002Fssl.conf;\n\n    client_max_body_size 0;\n\n    location \u002F {\n        include \u002Fconfig\u002Fnginx\u002Fproxy.conf;\n        include \u002Fconfig\u002Fnginx\u002Fresolver.conf;\n        set $upstream_app nextcloud;\n        set $upstream_port 443;\n        set $upstream_proto https;\n        proxy_pass $upstream_proto:\u002F\u002F$upstream_app:$upstream_port;\n\n        # Hide proxy response headers from Nextcloud that conflict with ssl.conf\n        proxy_hide_header Referrer-Policy;\n        proxy_hide_header X-Content-Type-Options;\n        proxy_hide_header X-Frame-Options;\n        proxy_hide_header X-XSS-Protection;\n\n        # Disable proxy buffering\n        proxy_buffering off;\n    }\n}\n","nginx",[438,1139,1140,1145,1154,1167,1176,1182,1192,1196,1206,1210,1220,1224,1235,1245,1254,1267,1281,1293,1316,1321,1327,1338,1348,1358,1368,1373,1379,1391,1397],{"__ignoreMap":453},[457,1141,1142],{"class":459,"line":460},[457,1143,1144],{"class":779},"## Version 2024\u002F04\u002F25\n",[457,1146,1147,1151],{"class":459,"line":467},[457,1148,1150],{"class":1149},"sAoO4","server",[457,1152,1153],{"class":658}," {\n",[457,1155,1156,1159,1161,1164],{"class":459,"line":478},[457,1157,1158],{"class":943},"    listen ",[457,1160,729],{"class":1050},[457,1162,1163],{"class":658}," ssl",[457,1165,1166],{"class":474},";\n",[457,1168,1169,1171,1174],{"class":459,"line":486},[457,1170,1158],{"class":943},[457,1172,1173],{"class":658},"[::]:443 ssl",[457,1175,1166],{"class":474},[457,1177,1178],{"class":459,"line":499},[457,1179,1181],{"emptyLinePlaceholder":1180},true,"\n",[457,1183,1184,1187,1190],{"class":459,"line":510},[457,1185,1186],{"class":943},"    server_name ",[457,1188,1189],{"class":658},"nextcloud.*",[457,1191,1166],{"class":474},[457,1193,1194],{"class":459,"line":518},[457,1195,1181],{"emptyLinePlaceholder":1180},[457,1197,1198,1201,1204],{"class":459,"line":527},[457,1199,1200],{"class":943},"    include ",[457,1202,1203],{"class":658},"\u002Fconfig\u002Fnginx\u002Fssl.conf",[457,1205,1166],{"class":474},[457,1207,1208],{"class":459,"line":535},[457,1209,1181],{"emptyLinePlaceholder":1180},[457,1211,1212,1215,1218],{"class":459,"line":543},[457,1213,1214],{"class":943},"    client_max_body_size ",[457,1216,1217],{"class":1050},"0",[457,1219,1166],{"class":474},[457,1221,1222],{"class":459,"line":551},[457,1223,1181],{"emptyLinePlaceholder":1180},[457,1225,1226,1229,1232],{"class":459,"line":559},[457,1227,1228],{"class":1149},"    location",[457,1230,1231],{"class":463}," \u002F ",[457,1233,1234],{"class":658},"{\n",[457,1236,1237,1240,1243],{"class":459,"line":567},[457,1238,1239],{"class":943},"        include ",[457,1241,1242],{"class":658},"\u002Fconfig\u002Fnginx\u002Fproxy.conf",[457,1244,1166],{"class":474},[457,1246,1247,1249,1252],{"class":459,"line":575},[457,1248,1239],{"class":943},[457,1250,1251],{"class":658},"\u002Fconfig\u002Fnginx\u002Fresolver.conf",[457,1253,1166],{"class":474},[457,1255,1256,1259,1262,1265],{"class":459,"line":583},[457,1257,1258],{"class":943},"        set ",[457,1260,1261],{"class":474},"$",[457,1263,1264],{"class":658},"upstream_app nextcloud",[457,1266,1166],{"class":474},[457,1268,1270,1272,1274,1277,1279],{"class":459,"line":1269},16,[457,1271,1258],{"class":943},[457,1273,1261],{"class":474},[457,1275,1276],{"class":658},"upstream_port ",[457,1278,729],{"class":1050},[457,1280,1166],{"class":474},[457,1282,1284,1286,1288,1291],{"class":459,"line":1283},17,[457,1285,1258],{"class":943},[457,1287,1261],{"class":474},[457,1289,1290],{"class":658},"upstream_proto https",[457,1292,1166],{"class":474},[457,1294,1296,1299,1301,1304,1306,1309,1311,1314],{"class":459,"line":1295},18,[457,1297,1298],{"class":943},"        proxy_pass ",[457,1300,1261],{"class":474},[457,1302,1303],{"class":658},"upstream_proto:\u002F\u002F",[457,1305,1261],{"class":474},[457,1307,1308],{"class":658},"upstream_app:",[457,1310,1261],{"class":474},[457,1312,1313],{"class":658},"upstream_port",[457,1315,1166],{"class":474},[457,1317,1319],{"class":459,"line":1318},19,[457,1320,1181],{"emptyLinePlaceholder":1180},[457,1322,1324],{"class":459,"line":1323},20,[457,1325,1326],{"class":779},"        # Hide proxy response headers from Nextcloud that conflict with ssl.conf\n",[457,1328,1330,1333,1336],{"class":459,"line":1329},21,[457,1331,1332],{"class":943},"        proxy_hide_header ",[457,1334,1335],{"class":658},"Referrer-Policy",[457,1337,1166],{"class":474},[457,1339,1341,1343,1346],{"class":459,"line":1340},22,[457,1342,1332],{"class":943},[457,1344,1345],{"class":658},"X-Content-Type-Options",[457,1347,1166],{"class":474},[457,1349,1351,1353,1356],{"class":459,"line":1350},23,[457,1352,1332],{"class":943},[457,1354,1355],{"class":658},"X-Frame-Options",[457,1357,1166],{"class":474},[457,1359,1361,1363,1366],{"class":459,"line":1360},24,[457,1362,1332],{"class":943},[457,1364,1365],{"class":658},"X-XSS-Protection",[457,1367,1166],{"class":474},[457,1369,1371],{"class":459,"line":1370},25,[457,1372,1181],{"emptyLinePlaceholder":1180},[457,1374,1376],{"class":459,"line":1375},26,[457,1377,1378],{"class":779},"        # Disable proxy buffering\n",[457,1380,1382,1385,1389],{"class":459,"line":1381},27,[457,1383,1384],{"class":943},"        proxy_buffering ",[457,1386,1388],{"class":1387},"soUAX","off",[457,1390,1166],{"class":474},[457,1392,1394],{"class":459,"line":1393},28,[457,1395,1396],{"class":658},"    }\n",[457,1398,1400],{"class":459,"line":1399},29,[457,1401,1402],{"class":658},"}\n",[391,1404,1092,1405,1097,1407,1101,1409,1105],{},[1094,1406],{"value":1096},[1094,1408],{"value":1100},[1094,1410],{"value":1104},[430,1412,688],{"id":1413},"done-1",[391,1415,1416,1417,738],{},"That’s it! You’ve exposed Nextcloud! Don’t forget to install ",[394,1418,1421],{"href":1419,"rel":1420},"https:\u002F\u002Fnextcloud.com\u002Finstall\u002F",[398],"the desktop and mobile apps",[408,1423,1425],{"id":1424},"protecting-nextcloud-with-pocket-id","Protecting Nextcloud with Pocket ID",[391,1427,1428],{},"Nextcloud can also delegate login to an OIDC provider instead of (or alongside) its own accounts.",[426,1430,1431,1435,1451,1455,1465,1473,1477,1487,1551],{"level":428},[430,1432,1434],{"id":1433},"install-the-openid-connect-app","Install the OpenID Connect app",[391,1436,1437,1438,1442,1443,1446,1447,1450],{},"In Nextcloud, go to ",[1439,1440,1441],"em",{},"Apps > Integration"," and install ",[418,1444,1445],{},"OpenID Connect user backend"," (",[438,1448,1449],{},"user_oidc",").",[430,1452,1454],{"id":1453},"register-nextcloud-as-an-oidc-client","Register Nextcloud as an OIDC client",[391,1456,1457,1461,1462,1464],{},[394,1458,1460],{"href":1459},"\u002Fserveex\u002Fsecurity\u002Fpocket-id#registering-an-oidc-client","Register an OIDC client in Pocket ID"," named ",[438,1463,199],{},", with this callback URL:",[447,1466,1471],{"className":1467,"code":1469,"language":1470,"meta":453},[1468],"language-text","https:\u002F\u002Fnextcloud.yourdomain.com\u002Fapps\u002Fuser_oidc\u002Fcode\n","text",[438,1472,1469],{"__ignoreMap":453},[430,1474,1476],{"id":1475},"add-the-provider-in-nextcloud","Add the provider in Nextcloud",[391,1478,1437,1479,1482,1483,1486],{},[1439,1480,1481],{},"Administration > OpenID Connect",", click the ",[438,1484,1485],{},"+"," button, and fill in:",[1488,1489,1490,1503],"table",{},[1491,1492,1493],"thead",{},[1494,1495,1496,1500],"tr",{},[1497,1498,1499],"th",{},"Field",[1497,1501,1502],{},"Value",[1504,1505,1506,1517,1525,1533,1541],"tbody",{},[1494,1507,1508,1512],{},[1509,1510,1511],"td",{},"Identifier",[1509,1513,1514],{},[438,1515,1516],{},"PocketID",[1494,1518,1519,1522],{},[1509,1520,1521],{},"Client ID",[1509,1523,1524],{},"The client ID copied from Pocket ID",[1494,1526,1527,1530],{},[1509,1528,1529],{},"Client secret",[1509,1531,1532],{},"The client secret copied from Pocket ID",[1494,1534,1535,1538],{},[1509,1536,1537],{},"Discovery endpoint",[1509,1539,1540],{},"Pocket ID's OIDC discovery URL",[1494,1542,1543,1546],{},[1509,1544,1545],{},"Scope",[1509,1547,1548],{},[438,1549,1550],{},"openid email profile groups",[430,1552,688],{"id":1553},"done-2",[890,1555,1557,1563],{"icon":453,"to":1556},"\u002Fserveex\u002Fadvanced\u002Fauthentik",[391,1558,1559,1560,1562],{},"✨ You can use ",[418,1561,255],{}," instead of Pocket ID:",[1564,1565,1566,1580,1593],"ol",{},[1567,1568,1569,1570,1572,1573,1576,1577,738],"li",{},"In Authentik, create an application and an OAuth2\u002FOpenID Connect provider named ",[438,1571,199],{},", with a redirect URI (type ",[438,1574,1575],{},"Strict",") of ",[438,1578,1579],{},"https:\u002F\u002Fnextcloud.yourdomain.com\u002Fapps\u002Fuser_oidc\u002Fcode",[1567,1581,1582,1583,1585,1586,1589,1590,738],{},"Note the provider's ",[418,1584,1521],{},", ",[418,1587,1588],{},"Client Secret",", and ",[418,1591,1592],{},"Slug",[1567,1594,1595,1596,1599],{},"In Nextcloud's OpenID Connect settings, set the Discovery endpoint to ",[438,1597,1598],{},"https:\u002F\u002Fauthentik.yourdomain.com\u002Fapplication\u002Fo\u002F\u003Cslug>\u002F.well-known\u002Fopenid-configuration",", then fill in the Client ID and Client Secret.",[1601,1602,1603],"style",{},"html pre.shiki code .sEgDM, html code.shiki .sEgDM{--shiki-light:#B392F0;--shiki-default:#FFCB6B;--shiki-dark:#B392F0}html pre.shiki code .sRuoG, html code.shiki .sRuoG{--shiki-light:#85E89D;--shiki-default:#F07178;--shiki-dark:#85E89D}html pre.shiki code .s8jd1, html code.shiki .s8jd1{--shiki-light:#E1E4E8;--shiki-default:#89DDFF;--shiki-dark:#E1E4E8}html pre.shiki code .s11XM, html code.shiki .s11XM{--shiki-light:#9ECBFF;--shiki-default:#C3E88D;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .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 .sDvJj, html code.shiki .sDvJj{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .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 .soUAX, html code.shiki .soUAX{--shiki-light:#79B8FF;--shiki-default:#89DDFF;--shiki-dark:#79B8FF}html pre.shiki code .s8K8j, html code.shiki .s8K8j{--shiki-light:#9ECBFF;--shiki-default:#89DDFF;--shiki-dark:#9ECBFF}html pre.shiki code .sJGgK, html code.shiki .sJGgK{--shiki-light:#79B8FF;--shiki-default:#82AAFF;--shiki-dark:#79B8FF}",{"title":453,"searchDepth":467,"depth":467,"links":1605},[1606,1611,1617],{"id":410,"depth":467,"text":411,"children":1607},[1608,1609,1610],{"id":432,"depth":478,"text":433},{"id":605,"depth":478,"text":606},{"id":687,"depth":478,"text":688},{"id":698,"depth":467,"text":699,"children":1612},[1613,1614,1615,1616],{"id":743,"depth":478,"text":744},{"id":880,"depth":478,"text":881},{"id":1108,"depth":478,"text":1109},{"id":1413,"depth":478,"text":688},{"id":1424,"depth":467,"text":1425,"children":1618},[1619,1620,1621,1622],{"id":1433,"depth":478,"text":1434},{"id":1453,"depth":478,"text":1454},{"id":1475,"depth":478,"text":1476},{"id":1553,"depth":478,"text":688},[1624],"Djeex","Install Nextcloud to self-host your files, photos, and calendar, a privacy-friendly alternative to Google Drive, OneDrive, and iCloud.","md",null,{},{"title":199,"description":1625},"wzf9scUIoBFRfo-ktS49Qs3Td--bpqI0EN6NYBg9JHQ",[1632,1634],{"title":195,"path":196,"stem":197,"description":1633,"children":-1},"Install Immich, a self-hosted alternative to Google Photos and iCloud with face recognition, geolocation, and multi-device sync.",{"title":209,"path":210,"stem":211,"description":1635,"children":-1},"Install File Browser Quantum, a modernized fork of File Browser, to browse and manage your server files from a fast web interface.",1788645847638]