[{"data":1,"prerenderedAt":1684},["ShallowReactive",2],{"navigation_docs_en":3,"-en-serveex-development-forgejo-":377,"-en-serveex-development-forgejo--surround":1679},[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":227,"body":379,"contributors":1671,"description":1673,"extension":1674,"hideCopyPage":15,"hideHeader":15,"hideToc":15,"links":1675,"meta":1676,"navigation":932,"path":228,"seo":1677,"stem":229,"__hash__":1678},"docs_en\u002Fen\u002F3.serveex\u002F8.development\u002F2.forgejo.md",{"type":380,"value":381,"toc":1653},"minimark",[382,390,400,407,412,416,677,685,689,692,733,1441,1444,1448,1451,1593,1649],[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,227],"a",{"href":396,"rel":397},"https:\u002F\u002Fforgejo.org\u002F",[398],"nofollow"," is a self-hosted DevOps platform that allows you to manage repositories much like GitHub, but on your own infrastructure. It's a community-driven fork of Gitea.",[391,401,402],{},[403,404],"img",{"alt":405,"src":406},"forgejo","\u002Fimg\u002Fserveex\u002Fforgejo.png",[408,409,411],"h2",{"id":410},"installation","Installation",[413,414],"file-tree",{":tree":415},"{\"\u002F\":[{\"srv\":[{\"docker\":[{\"forgejo\":[\"compose.yaml\",\".env\",\"data\u002F\"]}]}]}]}",[417,418,420,425,436,626,630,637,666,673],"steps",{"level":419},"3",[421,422,424],"h3",{"id":423},"deploy-the-stack","Deploy the stack",[391,426,427,428,432,433,435],{},"Open Dockge, click on ",[429,430,431],"code",{},"compose",", name the stack ",[429,434,405],{},", and paste the following content:",[437,438,444],"pre",{"className":439,"code":440,"filename":441,"language":442,"meta":443,"style":443},"language-yaml shiki shiki-themes github-dark material-theme github-dark","---\nnetworks:\n  forgejo:\n    external: false\nservices:\n  server:\n    image: codeberg.org\u002Fforgejo\u002Fforgejo:11\n    container_name: forgejo\n    environment:\n      - USER_UID=${UID}\n      - USER_GID=${GID}\n      - TZ=Europe\u002FParis\n    restart: unless-stopped\n    networks:\n      - forgejo\n    volumes:\n      - .\u002Fdata:\u002Fdata\n    ports:\n      - 3333:3000\n      - 222:22\n","compose.yaml","yaml","",[429,445,446,455,466,474,487,495,503,515,526,534,543,551,559,570,578,585,593,601,609,617],{"__ignoreMap":443},[447,448,451],"span",{"class":449,"line":450},"line",1,[447,452,454],{"class":453},"sEgDM","---\n",[447,456,458,462],{"class":449,"line":457},2,[447,459,461],{"class":460},"sRuoG","networks",[447,463,465],{"class":464},"s8jd1",":\n",[447,467,469,472],{"class":449,"line":468},3,[447,470,471],{"class":460},"  forgejo",[447,473,465],{"class":464},[447,475,477,480,483],{"class":449,"line":476},4,[447,478,479],{"class":460},"    external",[447,481,482],{"class":464},":",[447,484,486],{"class":485},"s08Ry"," false\n",[447,488,490,493],{"class":449,"line":489},5,[447,491,492],{"class":460},"services",[447,494,465],{"class":464},[447,496,498,501],{"class":449,"line":497},6,[447,499,500],{"class":460},"  server",[447,502,465],{"class":464},[447,504,506,509,511],{"class":449,"line":505},7,[447,507,508],{"class":460},"    image",[447,510,482],{"class":464},[447,512,514],{"class":513},"s11XM"," codeberg.org\u002Fforgejo\u002Fforgejo:11\n",[447,516,518,521,523],{"class":449,"line":517},8,[447,519,520],{"class":460},"    container_name",[447,522,482],{"class":464},[447,524,525],{"class":513}," forgejo\n",[447,527,529,532],{"class":449,"line":528},9,[447,530,531],{"class":460},"    environment",[447,533,465],{"class":464},[447,535,537,540],{"class":449,"line":536},10,[447,538,539],{"class":464},"      -",[447,541,542],{"class":513}," USER_UID=${UID}\n",[447,544,546,548],{"class":449,"line":545},11,[447,547,539],{"class":464},[447,549,550],{"class":513}," USER_GID=${GID}\n",[447,552,554,556],{"class":449,"line":553},12,[447,555,539],{"class":464},[447,557,558],{"class":513}," TZ=Europe\u002FParis\n",[447,560,562,565,567],{"class":449,"line":561},13,[447,563,564],{"class":460},"    restart",[447,566,482],{"class":464},[447,568,569],{"class":513}," unless-stopped\n",[447,571,573,576],{"class":449,"line":572},14,[447,574,575],{"class":460},"    networks",[447,577,465],{"class":464},[447,579,581,583],{"class":449,"line":580},15,[447,582,539],{"class":464},[447,584,525],{"class":513},[447,586,588,591],{"class":449,"line":587},16,[447,589,590],{"class":460},"    volumes",[447,592,465],{"class":464},[447,594,596,598],{"class":449,"line":595},17,[447,597,539],{"class":464},[447,599,600],{"class":513}," .\u002Fdata:\u002Fdata\n",[447,602,604,607],{"class":449,"line":603},18,[447,605,606],{"class":460},"    ports",[447,608,465],{"class":464},[447,610,612,614],{"class":449,"line":611},19,[447,613,539],{"class":464},[447,615,616],{"class":513}," 3333:3000\n",[447,618,620,622],{"class":449,"line":619},20,[447,621,539],{"class":464},[447,623,625],{"class":624},"swwWl"," 222:22\n",[421,627,629],{"id":628},"set-your-environment-variables","Set your environment variables",[391,631,632,633,636],{},"Fill out the ",[429,634,635],{},".env"," file with the required information, for example:",[437,638,642],{"className":639,"code":640,"filename":635,"language":641,"meta":443,"style":443},"language-properties shiki shiki-themes github-dark material-theme github-dark","UID=1000\nGID=1000\n","properties",[429,643,644,657],{"__ignoreMap":443},[447,645,646,650,653],{"class":449,"line":450},[447,647,649],{"class":648},"szyEh","UID",[447,651,652],{"class":464},"=",[447,654,656],{"class":655},"slcoZ","1000\n",[447,658,659,662,664],{"class":449,"line":457},[447,660,661],{"class":648},"GID",[447,663,652],{"class":464},[447,665,656],{"class":655},[391,667,668,669,672],{},"Deploy the container and go to ",[429,670,671],{},"http:\u002F\u002Fyourserverip:3333",". Your Forgejo instance is now up and running!",[421,674,676],{"id":675},"done","Done !",[678,679,680,684],"caution",{},[681,682,683],"strong",{},"If it fails:"," check your firewall rules.",[408,686,688],{"id":687},"exposing-forgejo-with-swag","Exposing Forgejo with Swag",[391,690,691],{},"The benefit of this setup is being able to access it remotely from any of your devices. To do so, we’ll expose Forgejo through Swag.",[693,694,695,698,699,702,703,707,708,711,712,715,716,720,721,724,725,727,728,732],"note",{},[681,696,697],{},"Prerequisite:"," We assume you have created a subdomain such as ",[429,700,701],{},"forgejo.yourdomain.com"," in your ",[394,704,706],{"href":705},"\u002Fgeneral\u002Fnetworking\u002Fdns","DNS zone"," with ",[429,709,710],{},"CNAME"," pointing to ",[429,713,714],{},"yourdomain.com",", and ",[394,717,719],{"href":718},"\u002Fserveex\u002Fsecurity\u002Fcloudflare","unless you're using Cloudflare Zero Trust",", you have already forwarded port ",[429,722,723],{},"443"," from your router to your server’s port ",[429,726,723],{}," in the ",[394,729,731],{"href":730},"\u002Fgeneral\u002Fnetworking\u002Fnat","NAT rules",".",[417,734,735,739,742,858,869,872,876,882,894,913,916,1344,1360,1364,1371,1385,1388,1429,1438],{"level":419},[421,736,738],{"id":737},"add-forgejos-network-to-swag","Add Forgejo's network to SWAG",[391,740,741],{},"In Dockge, go to the SWAG stack and edit the compose file by adding Forgejo's network:",[437,743,745],{"className":439,"code":744,"filename":441,"language":442,"meta":443,"style":443},"---\nservices:\n  swag:\n     container_name: # ...\n      # ... \n     networks:              # Connect the container to the custom network\n      # ...           \n      - forgejo             # Name of the declared network\n    \nnetworks:                   # Define the custom network\n  # ...\n  forgejo:                  # Name of the declared network\n    name: forgejo_default   # Actual external network name\n    external: true          # Indicates it's an external network\n",[429,746,747,751,757,764,775,780,790,795,805,810,819,824,833,846],{"__ignoreMap":443},[447,748,749],{"class":449,"line":450},[447,750,454],{"class":453},[447,752,753,755],{"class":449,"line":457},[447,754,492],{"class":460},[447,756,465],{"class":464},[447,758,759,762],{"class":449,"line":468},[447,760,761],{"class":460},"  swag",[447,763,465],{"class":464},[447,765,766,769,771],{"class":449,"line":476},[447,767,768],{"class":460},"     container_name",[447,770,482],{"class":464},[447,772,774],{"class":773},"sDvJj"," # ...\n",[447,776,777],{"class":449,"line":489},[447,778,779],{"class":773},"      # ... \n",[447,781,782,785,787],{"class":449,"line":497},[447,783,784],{"class":460},"     networks",[447,786,482],{"class":464},[447,788,789],{"class":773},"              # Connect the container to the custom network\n",[447,791,792],{"class":449,"line":505},[447,793,794],{"class":773},"      # ...           \n",[447,796,797,799,802],{"class":449,"line":517},[447,798,539],{"class":464},[447,800,801],{"class":513}," forgejo",[447,803,804],{"class":773},"             # Name of the declared network\n",[447,806,807],{"class":449,"line":528},[447,808,809],{"class":655},"    \n",[447,811,812,814,816],{"class":449,"line":536},[447,813,461],{"class":460},[447,815,482],{"class":464},[447,817,818],{"class":773},"                   # Define the custom network\n",[447,820,821],{"class":449,"line":545},[447,822,823],{"class":773},"  # ...\n",[447,825,826,828,830],{"class":449,"line":553},[447,827,471],{"class":460},[447,829,482],{"class":464},[447,831,832],{"class":773},"                  # Name of the declared network\n",[447,834,835,838,840,843],{"class":449,"line":561},[447,836,837],{"class":460},"    name",[447,839,482],{"class":464},[447,841,842],{"class":513}," forgejo_default",[447,844,845],{"class":773},"   # Actual external network name\n",[447,847,848,850,852,855],{"class":449,"line":572},[447,849,479],{"class":460},[447,851,482],{"class":464},[447,853,854],{"class":485}," true",[447,856,857],{"class":773},"          # Indicates it's an external network\n",[693,859,860,861,864,865,732],{},"We assume the Forgejo network name is ",[429,862,863],{},"forgejo_default",". You can verify connectivity by visiting the SWAG dashboard at ",[394,866,867],{"href":867,"rel":868},"http:\u002F\u002Fyourserverip:81",[398],[391,870,871],{},"Redeploy the stack by clicking \"Deploy\" and wait until SWAG is fully operational.",[421,873,875],{"id":874},"create-the-subdomainconf-file","Create the subdomain.conf file",[391,877,878,879,732],{},"Inside the Swag folders, create the file ",[429,880,881],{},"forgejo.subdomain.conf",[883,884,886,887,890,891,893],"tip",{"icon":443,"to":885},"\u002Fserveex\u002Ffiles\u002Ffile-browser-quantum","✨ ",[681,888,889],{},"Tip:"," You can use ",[681,892,209],{}," to navigate and edit your files instead of using terminal commands.",[437,895,900],{"className":896,"code":897,"filename":898,"language":899,"meta":443,"style":443},"language-bash shiki shiki-themes github-dark material-theme github-dark","sudo nano \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Fnginx\u002Fproxy-confs\u002Fforgejo.subdomain.conf\n","Terminal","bash",[429,901,902],{"__ignoreMap":443},[447,903,904,907,910],{"class":449,"line":450},[447,905,906],{"class":453},"sudo",[447,908,909],{"class":513}," nano",[447,911,912],{"class":513}," \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Fnginx\u002Fproxy-confs\u002Fforgejo.subdomain.conf\n",[391,914,915],{},"Paste the configuration below:",[437,917,921],{"className":918,"code":919,"filename":881,"language":920,"meta":443,"style":443},"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 forgejo.*;\n\n    include \u002Fconfig\u002Fnginx\u002Fssl.conf;\n\n    client_max_body_size 0;\n\n    # enable for ldap auth (requires ldap-location.conf in the location block)\n    #include \u002Fconfig\u002Fnginx\u002Fldap-server.conf;\n\n    # enable for Authelia (requires authelia-location.conf in the location block)\n    #include \u002Fconfig\u002Fnginx\u002Fauthelia-server.conf;\n\n    # enable for Authentik (requires authentik-location.conf in the location block)\n    #include \u002Fconfig\u002Fnginx\u002Fauthentik-server.conf;\n\n    location \u002F {\n        # enable the next two lines for http auth\n        #auth_basic \"Restricted\";\n        #auth_basic_user_file \u002Fconfig\u002Fnginx\u002F.htpasswd;\n\n        # enable for ldap auth (requires ldap-server.conf in the server block)\n        #include \u002Fconfig\u002Fnginx\u002Fldap-location.conf;\n\n        # enable for Authelia (requires authelia-server.conf in the server block)\n        #include \u002Fconfig\u002Fnginx\u002Fauthelia-location.conf;\n\n        # enable for Authentik (requires authentik-server.conf in the server block)\n        #include \u002Fconfig\u002Fnginx\u002Fauthentik-location.conf;\n\n        include \u002Fconfig\u002Fnginx\u002Fproxy.conf;\n        include \u002Fconfig\u002Fnginx\u002Fresolver.conf;\n        set $upstream_app forgejo;\n        set $upstream_port 3000;\n        set $upstream_proto http;\n        proxy_pass $upstream_proto:\u002F\u002F$upstream_app:$upstream_port;\n\n    }\n\n    location ~ (\u002Fforgejo)?\u002Finfo\u002Flfs {\n        include \u002Fconfig\u002Fnginx\u002Fproxy.conf;\n        include \u002Fconfig\u002Fnginx\u002Fresolver.conf;\n        set $upstream_app forgejo;\n        set $upstream_port 3000;\n        set $upstream_proto http;\n        proxy_pass $upstream_proto:\u002F\u002F$upstream_app:$upstream_port;\n\n    }\n}\n","nginx",[429,922,923,928,934,943,957,966,970,980,984,994,998,1008,1012,1017,1022,1026,1031,1036,1040,1045,1050,1055,1067,1073,1079,1085,1090,1096,1102,1107,1113,1119,1124,1130,1136,1141,1152,1162,1176,1191,1203,1226,1231,1237,1242,1256,1265,1274,1285,1298,1309,1328,1333,1338],{"__ignoreMap":443},[447,924,925],{"class":449,"line":450},[447,926,927],{"class":773},"## Version 2023\u002F12\u002F19\n",[447,929,930],{"class":449,"line":457},[447,931,933],{"emptyLinePlaceholder":932},true,"\n",[447,935,936,940],{"class":449,"line":468},[447,937,939],{"class":938},"sAoO4","server",[447,941,942],{"class":655}," {\n",[447,944,945,949,951,954],{"class":449,"line":476},[447,946,948],{"class":947},"sJPTy","    listen ",[447,950,723],{"class":624},[447,952,953],{"class":655}," ssl",[447,955,956],{"class":464},";\n",[447,958,959,961,964],{"class":449,"line":489},[447,960,948],{"class":947},[447,962,963],{"class":655},"[::]:443 ssl",[447,965,956],{"class":464},[447,967,968],{"class":449,"line":497},[447,969,933],{"emptyLinePlaceholder":932},[447,971,972,975,978],{"class":449,"line":505},[447,973,974],{"class":947},"    server_name ",[447,976,977],{"class":655},"forgejo.*",[447,979,956],{"class":464},[447,981,982],{"class":449,"line":517},[447,983,933],{"emptyLinePlaceholder":932},[447,985,986,989,992],{"class":449,"line":528},[447,987,988],{"class":947},"    include ",[447,990,991],{"class":655},"\u002Fconfig\u002Fnginx\u002Fssl.conf",[447,993,956],{"class":464},[447,995,996],{"class":449,"line":536},[447,997,933],{"emptyLinePlaceholder":932},[447,999,1000,1003,1006],{"class":449,"line":545},[447,1001,1002],{"class":947},"    client_max_body_size ",[447,1004,1005],{"class":624},"0",[447,1007,956],{"class":464},[447,1009,1010],{"class":449,"line":553},[447,1011,933],{"emptyLinePlaceholder":932},[447,1013,1014],{"class":449,"line":561},[447,1015,1016],{"class":773},"    # enable for ldap auth (requires ldap-location.conf in the location block)\n",[447,1018,1019],{"class":449,"line":572},[447,1020,1021],{"class":773},"    #include \u002Fconfig\u002Fnginx\u002Fldap-server.conf;\n",[447,1023,1024],{"class":449,"line":580},[447,1025,933],{"emptyLinePlaceholder":932},[447,1027,1028],{"class":449,"line":587},[447,1029,1030],{"class":773},"    # enable for Authelia (requires authelia-location.conf in the location block)\n",[447,1032,1033],{"class":449,"line":595},[447,1034,1035],{"class":773},"    #include \u002Fconfig\u002Fnginx\u002Fauthelia-server.conf;\n",[447,1037,1038],{"class":449,"line":603},[447,1039,933],{"emptyLinePlaceholder":932},[447,1041,1042],{"class":449,"line":611},[447,1043,1044],{"class":773},"    # enable for Authentik (requires authentik-location.conf in the location block)\n",[447,1046,1047],{"class":449,"line":619},[447,1048,1049],{"class":773},"    #include \u002Fconfig\u002Fnginx\u002Fauthentik-server.conf;\n",[447,1051,1053],{"class":449,"line":1052},21,[447,1054,933],{"emptyLinePlaceholder":932},[447,1056,1058,1061,1064],{"class":449,"line":1057},22,[447,1059,1060],{"class":938},"    location",[447,1062,1063],{"class":453}," \u002F ",[447,1065,1066],{"class":655},"{\n",[447,1068,1070],{"class":449,"line":1069},23,[447,1071,1072],{"class":773},"        # enable the next two lines for http auth\n",[447,1074,1076],{"class":449,"line":1075},24,[447,1077,1078],{"class":773},"        #auth_basic \"Restricted\";\n",[447,1080,1082],{"class":449,"line":1081},25,[447,1083,1084],{"class":773},"        #auth_basic_user_file \u002Fconfig\u002Fnginx\u002F.htpasswd;\n",[447,1086,1088],{"class":449,"line":1087},26,[447,1089,933],{"emptyLinePlaceholder":932},[447,1091,1093],{"class":449,"line":1092},27,[447,1094,1095],{"class":773},"        # enable for ldap auth (requires ldap-server.conf in the server block)\n",[447,1097,1099],{"class":449,"line":1098},28,[447,1100,1101],{"class":773},"        #include \u002Fconfig\u002Fnginx\u002Fldap-location.conf;\n",[447,1103,1105],{"class":449,"line":1104},29,[447,1106,933],{"emptyLinePlaceholder":932},[447,1108,1110],{"class":449,"line":1109},30,[447,1111,1112],{"class":773},"        # enable for Authelia (requires authelia-server.conf in the server block)\n",[447,1114,1116],{"class":449,"line":1115},31,[447,1117,1118],{"class":773},"        #include \u002Fconfig\u002Fnginx\u002Fauthelia-location.conf;\n",[447,1120,1122],{"class":449,"line":1121},32,[447,1123,933],{"emptyLinePlaceholder":932},[447,1125,1127],{"class":449,"line":1126},33,[447,1128,1129],{"class":773},"        # enable for Authentik (requires authentik-server.conf in the server block)\n",[447,1131,1133],{"class":449,"line":1132},34,[447,1134,1135],{"class":773},"        #include \u002Fconfig\u002Fnginx\u002Fauthentik-location.conf;\n",[447,1137,1139],{"class":449,"line":1138},35,[447,1140,933],{"emptyLinePlaceholder":932},[447,1142,1144,1147,1150],{"class":449,"line":1143},36,[447,1145,1146],{"class":947},"        include ",[447,1148,1149],{"class":655},"\u002Fconfig\u002Fnginx\u002Fproxy.conf",[447,1151,956],{"class":464},[447,1153,1155,1157,1160],{"class":449,"line":1154},37,[447,1156,1146],{"class":947},[447,1158,1159],{"class":655},"\u002Fconfig\u002Fnginx\u002Fresolver.conf",[447,1161,956],{"class":464},[447,1163,1165,1168,1171,1174],{"class":449,"line":1164},38,[447,1166,1167],{"class":947},"        set ",[447,1169,1170],{"class":464},"$",[447,1172,1173],{"class":655},"upstream_app forgejo",[447,1175,956],{"class":464},[447,1177,1179,1181,1183,1186,1189],{"class":449,"line":1178},39,[447,1180,1167],{"class":947},[447,1182,1170],{"class":464},[447,1184,1185],{"class":655},"upstream_port ",[447,1187,1188],{"class":624},"3000",[447,1190,956],{"class":464},[447,1192,1194,1196,1198,1201],{"class":449,"line":1193},40,[447,1195,1167],{"class":947},[447,1197,1170],{"class":464},[447,1199,1200],{"class":655},"upstream_proto http",[447,1202,956],{"class":464},[447,1204,1206,1209,1211,1214,1216,1219,1221,1224],{"class":449,"line":1205},41,[447,1207,1208],{"class":947},"        proxy_pass ",[447,1210,1170],{"class":464},[447,1212,1213],{"class":655},"upstream_proto:\u002F\u002F",[447,1215,1170],{"class":464},[447,1217,1218],{"class":655},"upstream_app:",[447,1220,1170],{"class":464},[447,1222,1223],{"class":655},"upstream_port",[447,1225,956],{"class":464},[447,1227,1229],{"class":449,"line":1228},42,[447,1230,933],{"emptyLinePlaceholder":932},[447,1232,1234],{"class":449,"line":1233},43,[447,1235,1236],{"class":655},"    }\n",[447,1238,1240],{"class":449,"line":1239},44,[447,1241,933],{"emptyLinePlaceholder":932},[447,1243,1245,1247,1250,1254],{"class":449,"line":1244},45,[447,1246,1060],{"class":938},[447,1248,1249],{"class":947}," ~",[447,1251,1253],{"class":1252},"sxjBU"," (\u002Fforgejo)?\u002Finfo\u002Flfs ",[447,1255,1066],{"class":655},[447,1257,1259,1261,1263],{"class":449,"line":1258},46,[447,1260,1146],{"class":947},[447,1262,1149],{"class":655},[447,1264,956],{"class":464},[447,1266,1268,1270,1272],{"class":449,"line":1267},47,[447,1269,1146],{"class":947},[447,1271,1159],{"class":655},[447,1273,956],{"class":464},[447,1275,1277,1279,1281,1283],{"class":449,"line":1276},48,[447,1278,1167],{"class":947},[447,1280,1170],{"class":464},[447,1282,1173],{"class":655},[447,1284,956],{"class":464},[447,1286,1288,1290,1292,1294,1296],{"class":449,"line":1287},49,[447,1289,1167],{"class":947},[447,1291,1170],{"class":464},[447,1293,1185],{"class":655},[447,1295,1188],{"class":624},[447,1297,956],{"class":464},[447,1299,1301,1303,1305,1307],{"class":449,"line":1300},50,[447,1302,1167],{"class":947},[447,1304,1170],{"class":464},[447,1306,1200],{"class":655},[447,1308,956],{"class":464},[447,1310,1312,1314,1316,1318,1320,1322,1324,1326],{"class":449,"line":1311},51,[447,1313,1208],{"class":947},[447,1315,1170],{"class":464},[447,1317,1213],{"class":655},[447,1319,1170],{"class":464},[447,1321,1218],{"class":655},[447,1323,1170],{"class":464},[447,1325,1223],{"class":655},[447,1327,956],{"class":464},[447,1329,1331],{"class":449,"line":1330},52,[447,1332,933],{"emptyLinePlaceholder":932},[447,1334,1336],{"class":449,"line":1335},53,[447,1337,1236],{"class":655},[447,1339,1341],{"class":449,"line":1340},54,[447,1342,1343],{"class":655},"}\n",[391,1345,1346,1347,1351,1352,1355,1356,1359],{},"Press ",[1348,1349],"kbd",{"value":1350},"Ctrl+O",", then ",[1348,1353],{"value":1354},"Enter"," to save, and ",[1348,1357],{"value":1358},"Ctrl+X"," to exit.",[421,1361,1363],{"id":1362},"configure-forgejos-domain","Configure Forgejo's domain",[391,1365,1366,1367,1370],{},"Now open the ",[429,1368,1369],{},"app.ini"," file from the container's file system:",[437,1372,1374],{"className":896,"code":1373,"filename":898,"language":899,"meta":443,"style":443},"sudo nano \u002Fsrv\u002Fdocker\u002Fforgejo\u002Fdata\u002Fgitea\u002Fconf\u002Fapp.ini\n",[429,1375,1376],{"__ignoreMap":443},[447,1377,1378,1380,1382],{"class":449,"line":450},[447,1379,906],{"class":453},[447,1381,909],{"class":513},[447,1383,1384],{"class":513}," \u002Fsrv\u002Fdocker\u002Fforgejo\u002Fdata\u002Fgitea\u002Fconf\u002Fapp.ini\n",[391,1386,1387],{},"Then modify the server section with your domain information:",[437,1389,1391],{"className":639,"code":1390,"filename":1369,"language":641,"meta":443,"style":443},"[server]\nDOMAIN = forgejo.yourdomain.com\nSSH_DOMAIN = forgejo.yourdomain.com\nROOT_URL = https:\u002F\u002Fforgejo.yourdomain.com\u002F\n",[429,1392,1393,1399,1410,1419],{"__ignoreMap":443},[447,1394,1395],{"class":449,"line":450},[447,1396,1398],{"class":1397},"srnIM","[server]\n",[447,1400,1401,1404,1407],{"class":449,"line":457},[447,1402,1403],{"class":648},"DOMAIN",[447,1405,1406],{"class":464}," =",[447,1408,1409],{"class":655}," forgejo.yourdomain.com\n",[447,1411,1412,1415,1417],{"class":449,"line":468},[447,1413,1414],{"class":648},"SSH_DOMAIN",[447,1416,1406],{"class":464},[447,1418,1409],{"class":655},[447,1420,1421,1424,1426],{"class":449,"line":476},[447,1422,1423],{"class":648},"ROOT_URL",[447,1425,1406],{"class":464},[447,1427,1428],{"class":655}," https:\u002F\u002Fforgejo.yourdomain.com\u002F\n",[391,1430,1346,1431,1351,1433,1355,1435,1437],{},[1348,1432],{"value":1350},[1348,1434],{"value":1354},[1348,1436],{"value":1358}," to exit, then restart the container.",[421,1439,676],{"id":1440},"done-1",[391,1442,1443],{},"And that’s it! Forgejo is now exposed to the web.",[408,1445,1447],{"id":1446},"protecting-forgejo-with-pocket-id","Protecting Forgejo with Pocket ID",[391,1449,1450],{},"Forgejo can also delegate login to an OIDC provider instead of (or alongside) its own accounts.",[417,1452,1453,1457,1467,1475,1486,1490,1502,1584,1590],{"level":419},[421,1454,1456],{"id":1455},"register-forgejo-as-an-oidc-client","Register Forgejo as an OIDC client",[391,1458,1459,1463,1464,1466],{},[394,1460,1462],{"href":1461},"\u002Fserveex\u002Fsecurity\u002Fpocket-id#registering-an-oidc-client","Register an OIDC client in Pocket ID"," named ",[429,1465,227],{},", with this callback URL:",[437,1468,1473],{"className":1469,"code":1471,"language":1472,"meta":443},[1470],"language-text","https:\u002F\u002Fforgejo.yourdomain.com\u002Fuser\u002Foauth2\u002FPocketID\u002Fcallback\n","text",[429,1474,1471],{"__ignoreMap":443},[693,1476,1477,1478,1481,1482,1485],{},"The ",[429,1479,1480],{},"PocketID"," in the callback URL must match the ",[681,1483,1484],{},"Authentication Name"," you set in the next step, exactly.",[421,1487,1489],{"id":1488},"add-the-authentication-source-in-forgejo","Add the authentication source in Forgejo",[391,1491,1492,1493,1497,1498,1501],{},"As an admin, go to ",[1494,1495,1496],"em",{},"Site Administration > Identity & Access > Authentication Sources",", click ",[1494,1499,1500],{},"Add Authentication Source",", and fill in:",[1503,1504,1505,1518],"table",{},[1506,1507,1508],"thead",{},[1509,1510,1511,1515],"tr",{},[1512,1513,1514],"th",{},"Field",[1512,1516,1517],{},"Value",[1519,1520,1521,1532,1540,1550,1558,1566,1574],"tbody",{},[1509,1522,1523,1527],{},[1524,1525,1526],"td",{},"Authentication Type",[1524,1528,1529],{},[429,1530,1531],{},"OAuth2",[1509,1533,1534,1536],{},[1524,1535,1484],{},[1524,1537,1538],{},[429,1539,1480],{},[1509,1541,1542,1545],{},[1524,1543,1544],{},"OAuth2 Provider",[1524,1546,1547],{},[429,1548,1549],{},"OpenID Connect",[1509,1551,1552,1555],{},[1524,1553,1554],{},"Client ID (Key)",[1524,1556,1557],{},"The client ID copied from Pocket ID",[1509,1559,1560,1563],{},[1524,1561,1562],{},"Client Secret",[1524,1564,1565],{},"The client secret copied from Pocket ID",[1509,1567,1568,1571],{},[1524,1569,1570],{},"OIDC Discovery URL",[1524,1572,1573],{},"Pocket ID's OIDC discovery URL",[1509,1575,1576,1579],{},[1524,1577,1578],{},"Additional Scopes",[1524,1580,1581],{},[429,1582,1583],{},"openid email profile",[391,1585,1586,1587,732],{},"Also enable ",[681,1588,1589],{},"Skip local 2FA",[421,1591,676],{"id":1592},"done-2",[883,1594,1596,1602],{"icon":443,"to":1595},"\u002Fserveex\u002Fadvanced\u002Fauthentik",[391,1597,1598,1599,1601],{},"✨ You can use ",[681,1600,255],{}," instead of Pocket ID:",[1603,1604,1605,1619,1631],"ol",{},[1606,1607,1608,1609,1611,1612,1615,1616,732],"li",{},"In Authentik, create an application and an OAuth2\u002FOpenID Connect provider named ",[429,1610,227],{},", with a redirect URI (type ",[429,1613,1614],{},"Strict",") of ",[429,1617,1618],{},"https:\u002F\u002Fforgejo.yourdomain.com\u002Fuser\u002Foauth2\u002Fauthentik\u002Fcallback",[1606,1620,1621,1622,1625,1626,715,1628,732],{},"Note the provider's ",[681,1623,1624],{},"Client ID",", ",[681,1627,1562],{},[681,1629,1630],{},"Slug",[1606,1632,1633,1634,1636,1637,1625,1640,1636,1642,1645,1646,732],{},"In Forgejo's authentication source, set ",[681,1635,1484],{}," to ",[429,1638,1639],{},"authentik",[681,1641,1570],{},[429,1643,1644],{},"https:\u002F\u002Fauthentik.yourdomain.com\u002Fapplication\u002Fo\u002F\u003Cslug>\u002F.well-known\u002Fopenid-configuration",", then fill in the Client ID, Client Secret, and Additional Scopes ",[429,1647,1648],{},"email profile",[1650,1651,1652],"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 .s08Ry, html code.shiki .s08Ry{--shiki-light:#79B8FF;--shiki-default:#FF9CAC;--shiki-dark:#79B8FF}html pre.shiki code .s11XM, html code.shiki .s11XM{--shiki-light:#9ECBFF;--shiki-default:#C3E88D;--shiki-dark:#9ECBFF}html pre.shiki code .swwWl, html code.shiki .swwWl{--shiki-light:#79B8FF;--shiki-default:#F78C6C;--shiki-dark:#79B8FF}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 .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 .sxjBU, html code.shiki .sxjBU{--shiki-light:#DBEDFF;--shiki-default:#C3E88D;--shiki-dark:#DBEDFF}html pre.shiki code .srnIM, html code.shiki .srnIM{--shiki-light:#B392F0;--shiki-default:#89DDFF;--shiki-dark:#B392F0}",{"title":443,"searchDepth":457,"depth":457,"links":1654},[1655,1660,1666],{"id":410,"depth":457,"text":411,"children":1656},[1657,1658,1659],{"id":423,"depth":468,"text":424},{"id":628,"depth":468,"text":629},{"id":675,"depth":468,"text":676},{"id":687,"depth":457,"text":688,"children":1661},[1662,1663,1664,1665],{"id":737,"depth":468,"text":738},{"id":874,"depth":468,"text":875},{"id":1362,"depth":468,"text":1363},{"id":1440,"depth":468,"text":676},{"id":1446,"depth":457,"text":1447,"children":1667},[1668,1669,1670],{"id":1455,"depth":468,"text":1456},{"id":1488,"depth":468,"text":1489},{"id":1592,"depth":468,"text":676},[1672],"Djeex","Install Forgejo, a lightweight self-hosted Git service to manage your code repositories privately on your own server.","md",null,{},{"title":227,"description":1673},"NFdRzh-nqmaB2aDf82oOafllhFBUrSSA2KEV-frTkdM",[1680,1682],{"title":223,"path":224,"stem":225,"description":1681,"children":-1},"Install code-server to run VS Code in your browser from your homelab, mount folders and expose it securely with SWAG.",{"title":231,"path":232,"stem":233,"description":1683,"children":-1},"Install IT Tools, a self-hosted collection of handy utilities for developers, converters, encoders, formatters, and more.",1788645848730]