[{"data":1,"prerenderedAt":1493},["ShallowReactive",2],{"navigation_docs_en":3,"-en-recycled-alternatives-gitea-":377,"-en-recycled-alternatives-gitea--surround":1490},[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":374,"body":379,"contributors":1482,"description":1484,"extension":1485,"hideCopyPage":15,"hideHeader":15,"hideToc":15,"links":1486,"meta":1487,"navigation":939,"path":375,"seo":1488,"stem":376,"__hash__":1489},"docs_en\u002Fen\u002F6.recycled\u002F3.alternatives\u002F4.gitea.md",{"type":380,"value":381,"toc":1469},"minimark",[382,390,399,409,416,421,425,686,693,697,700,740,1448,1451,1465],[383,384],"ellipsis",{"blur":385,"left":386,"top":387,"width":388,"z-index":389},"140px","0px","10rem","40rem","60",[391,392,394,395,398],"note",{"to":393},"\u002Fserveex\u002Fdevelopment\u002Fforgejo","This is an alternative to ",[396,397,227],"strong",{},", the community-run fork created after Gitea's governance moved to a for-profit company, a concern for a project people expect to stay FOSS.",[400,401,402,408],"p",{},[403,404,374],"a",{"href":405,"rel":406},"https:\u002F\u002Fabout.gitea.com\u002F",[407],"nofollow"," is a self-hosted DevOps platform that allows you to manage repositories much like GitHub, but on your own infrastructure.",[400,410,411],{},[412,413],"img",{"alt":414,"src":415},"gitea","https:\u002F\u002Fabout.gitea.com\u002Fimg\u002Fhome-screenshot.png",[417,418,420],"h2",{"id":419},"installation","Installation",[422,423],"file-tree",{":tree":424},"{\"\u002F\":[{\"srv\":[{\"docker\":[{\"gitea\":[\"data\u002F\"]}]}]}]}",[426,427,429,434,445,635,639,646,675,682],"steps",{"level":428},"3",[430,431,433],"h3",{"id":432},"deploy-the-stack","Deploy the stack",[400,435,436,437,441,442,444],{},"Open Dockge, click on ",[438,439,440],"code",{},"compose",", name the stack ",[438,443,414],{},", and paste the following content:",[446,447,453],"pre",{"className":448,"code":449,"filename":450,"language":451,"meta":452,"style":452},"language-yaml shiki shiki-themes github-dark material-theme github-dark","---\nnetworks:\n  gitea:\n    external: false\nservices:\n  server:\n    image: gitea\u002Fgitea:1.22.0\n    container_name: gitea\n    environment:\n      - USER_UID=${UID}\n      - USER_GID=${GID}\n      - TZ=Europe\u002FParis\n    restart: unless-stopped\n    networks:\n      - gitea\n    volumes:\n      - .\u002Fdata:\u002Fdata\n    ports:\n      - 3333:3000\n      - 222:22\n","compose.yaml","yaml","",[438,454,455,464,475,483,496,504,512,524,535,543,552,560,568,579,587,594,602,610,618,626],{"__ignoreMap":452},[456,457,460],"span",{"class":458,"line":459},"line",1,[456,461,463],{"class":462},"sEgDM","---\n",[456,465,467,471],{"class":458,"line":466},2,[456,468,470],{"class":469},"sRuoG","networks",[456,472,474],{"class":473},"s8jd1",":\n",[456,476,478,481],{"class":458,"line":477},3,[456,479,480],{"class":469},"  gitea",[456,482,474],{"class":473},[456,484,486,489,492],{"class":458,"line":485},4,[456,487,488],{"class":469},"    external",[456,490,491],{"class":473},":",[456,493,495],{"class":494},"s08Ry"," false\n",[456,497,499,502],{"class":458,"line":498},5,[456,500,501],{"class":469},"services",[456,503,474],{"class":473},[456,505,507,510],{"class":458,"line":506},6,[456,508,509],{"class":469},"  server",[456,511,474],{"class":473},[456,513,515,518,520],{"class":458,"line":514},7,[456,516,517],{"class":469},"    image",[456,519,491],{"class":473},[456,521,523],{"class":522},"s11XM"," gitea\u002Fgitea:1.22.0\n",[456,525,527,530,532],{"class":458,"line":526},8,[456,528,529],{"class":469},"    container_name",[456,531,491],{"class":473},[456,533,534],{"class":522}," gitea\n",[456,536,538,541],{"class":458,"line":537},9,[456,539,540],{"class":469},"    environment",[456,542,474],{"class":473},[456,544,546,549],{"class":458,"line":545},10,[456,547,548],{"class":473},"      -",[456,550,551],{"class":522}," USER_UID=${UID}\n",[456,553,555,557],{"class":458,"line":554},11,[456,556,548],{"class":473},[456,558,559],{"class":522}," USER_GID=${GID}\n",[456,561,563,565],{"class":458,"line":562},12,[456,564,548],{"class":473},[456,566,567],{"class":522}," TZ=Europe\u002FParis\n",[456,569,571,574,576],{"class":458,"line":570},13,[456,572,573],{"class":469},"    restart",[456,575,491],{"class":473},[456,577,578],{"class":522}," unless-stopped\n",[456,580,582,585],{"class":458,"line":581},14,[456,583,584],{"class":469},"    networks",[456,586,474],{"class":473},[456,588,590,592],{"class":458,"line":589},15,[456,591,548],{"class":473},[456,593,534],{"class":522},[456,595,597,600],{"class":458,"line":596},16,[456,598,599],{"class":469},"    volumes",[456,601,474],{"class":473},[456,603,605,607],{"class":458,"line":604},17,[456,606,548],{"class":473},[456,608,609],{"class":522}," .\u002Fdata:\u002Fdata\n",[456,611,613,616],{"class":458,"line":612},18,[456,614,615],{"class":469},"    ports",[456,617,474],{"class":473},[456,619,621,623],{"class":458,"line":620},19,[456,622,548],{"class":473},[456,624,625],{"class":522}," 3333:3000\n",[456,627,629,631],{"class":458,"line":628},20,[456,630,548],{"class":473},[456,632,634],{"class":633},"swwWl"," 222:22\n",[430,636,638],{"id":637},"set-your-environment-variables","Set your environment variables",[400,640,641,642,645],{},"Fill out the ",[438,643,644],{},".env"," file with the required information, for example:",[446,647,651],{"className":648,"code":649,"filename":644,"language":650,"meta":452,"style":452},"language-properties shiki shiki-themes github-dark material-theme github-dark","UID=1000\nGID=1000\n","properties",[438,652,653,666],{"__ignoreMap":452},[456,654,655,659,662],{"class":458,"line":459},[456,656,658],{"class":657},"szyEh","UID",[456,660,661],{"class":473},"=",[456,663,665],{"class":664},"slcoZ","1000\n",[456,667,668,671,673],{"class":458,"line":466},[456,669,670],{"class":657},"GID",[456,672,661],{"class":473},[456,674,665],{"class":664},[400,676,677,678,681],{},"Deploy the container and go to ",[438,679,680],{},"http:\u002F\u002Fyourserverip:3333",". Your Gitea instance is now up and running!",[430,683,685],{"id":684},"done","Done !",[687,688,689,692],"caution",{},[396,690,691],{},"If it fails:"," check your firewall rules.",[417,694,696],{"id":695},"exposing-gitea-with-swag","Exposing Gitea with Swag",[400,698,699],{},"The benefit of this setup is being able to access it remotely from any of your devices. To do so, we’ll expose Gitea through Swag.",[391,701,702,705,706,709,710,714,715,718,719,722,723,727,728,731,732,734,735,739],{},[396,703,704],{},"Prerequisite:"," We assume you have created a subdomain such as ",[438,707,708],{},"gitea.yourdomain.com"," in your ",[403,711,713],{"href":712},"\u002Fgeneral\u002Fnetworking\u002Fdns","DNS zone"," with ",[438,716,717],{},"CNAME"," pointing to ",[438,720,721],{},"yourdomain.com",", and ",[403,724,726],{"href":725},"\u002Fserveex\u002Fsecurity\u002Fcloudflare","unless you're using Cloudflare Zero Trust",", you have already forwarded port ",[438,729,730],{},"443"," from your router to your server’s port ",[438,733,730],{}," in the ",[403,736,738],{"href":737},"\u002Fgeneral\u002Fnetworking\u002Fnat","NAT rules",".",[426,741,742,746,749,865,876,879,883,889,901,920,923,1351,1367,1371,1378,1392,1395,1436,1445],{"level":428},[430,743,745],{"id":744},"add-giteas-network-to-swag","Add Gitea's network to SWAG",[400,747,748],{},"In Dockge, go to the SWAG stack and edit the compose file by adding Gitea's network:",[446,750,752],{"className":448,"code":751,"filename":450,"language":451,"meta":452,"style":452},"---\nservices:\n  swag:\n     container_name: # ...\n      # ... \n     networks:           # Connect the container to the custom network\n      # ...           \n      - gitea            # Name of the declared network\n    \nnetworks:                # Define the custom network\n  # ...\n  gitea:                 # Name of the declared network\n    name: gitea_default  # Actual external network name\n    external: true       # Indicates it's an external network\n",[438,753,754,758,764,771,782,787,797,802,812,817,826,831,840,853],{"__ignoreMap":452},[456,755,756],{"class":458,"line":459},[456,757,463],{"class":462},[456,759,760,762],{"class":458,"line":466},[456,761,501],{"class":469},[456,763,474],{"class":473},[456,765,766,769],{"class":458,"line":477},[456,767,768],{"class":469},"  swag",[456,770,474],{"class":473},[456,772,773,776,778],{"class":458,"line":485},[456,774,775],{"class":469},"     container_name",[456,777,491],{"class":473},[456,779,781],{"class":780},"sDvJj"," # ...\n",[456,783,784],{"class":458,"line":498},[456,785,786],{"class":780},"      # ... \n",[456,788,789,792,794],{"class":458,"line":506},[456,790,791],{"class":469},"     networks",[456,793,491],{"class":473},[456,795,796],{"class":780},"           # Connect the container to the custom network\n",[456,798,799],{"class":458,"line":514},[456,800,801],{"class":780},"      # ...           \n",[456,803,804,806,809],{"class":458,"line":526},[456,805,548],{"class":473},[456,807,808],{"class":522}," gitea",[456,810,811],{"class":780},"            # Name of the declared network\n",[456,813,814],{"class":458,"line":537},[456,815,816],{"class":664},"    \n",[456,818,819,821,823],{"class":458,"line":545},[456,820,470],{"class":469},[456,822,491],{"class":473},[456,824,825],{"class":780},"                # Define the custom network\n",[456,827,828],{"class":458,"line":554},[456,829,830],{"class":780},"  # ...\n",[456,832,833,835,837],{"class":458,"line":562},[456,834,480],{"class":469},[456,836,491],{"class":473},[456,838,839],{"class":780},"                 # Name of the declared network\n",[456,841,842,845,847,850],{"class":458,"line":570},[456,843,844],{"class":469},"    name",[456,846,491],{"class":473},[456,848,849],{"class":522}," gitea_default",[456,851,852],{"class":780},"  # Actual external network name\n",[456,854,855,857,859,862],{"class":458,"line":581},[456,856,488],{"class":469},[456,858,491],{"class":473},[456,860,861],{"class":494}," true",[456,863,864],{"class":780},"       # Indicates it's an external network\n",[391,866,867,868,871,872,739],{},"We assume the Gitea network name is ",[438,869,870],{},"gitea_default",". You can verify connectivity by visiting the SWAG dashboard at ",[403,873,874],{"href":874,"rel":875},"http:\u002F\u002Fyourserverip:81",[407],[400,877,878],{},"Redeploy the stack by clicking \"Deploy\" and wait until SWAG is fully operational.",[430,880,882],{"id":881},"create-the-subdomainconf-file","Create the subdomain.conf file",[400,884,885,886,739],{},"Inside the Swag folders, create the file ",[438,887,888],{},"gitea.subdomain.conf",[890,891,893,894,897,898,900],"tip",{"icon":452,"to":892},"\u002Fserveex\u002Ffiles\u002Ffile-browser-quantum","✨ ",[396,895,896],{},"Tip:"," You can use ",[396,899,352],{}," to navigate and edit your files instead of using terminal commands.",[446,902,907],{"className":903,"code":904,"filename":905,"language":906,"meta":452,"style":452},"language-bash shiki shiki-themes github-dark material-theme github-dark","sudo nano \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Fnginx\u002Fproxy-confs\u002Fgitea.subdomain.conf\n","Terminal","bash",[438,908,909],{"__ignoreMap":452},[456,910,911,914,917],{"class":458,"line":459},[456,912,913],{"class":462},"sudo",[456,915,916],{"class":522}," nano",[456,918,919],{"class":522}," \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Fnginx\u002Fproxy-confs\u002Fgitea.subdomain.conf\n",[400,921,922],{},"Paste the configuration below:",[446,924,928],{"className":925,"code":926,"filename":888,"language":927,"meta":452,"style":452},"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 gitea.*;\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 gitea;\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 ~ (\u002Fgitea)?\u002Finfo\u002Flfs {\n        include \u002Fconfig\u002Fnginx\u002Fproxy.conf;\n        include \u002Fconfig\u002Fnginx\u002Fresolver.conf;\n        set $upstream_app gitea;\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",[438,929,930,935,941,950,964,973,977,987,991,1001,1005,1015,1019,1024,1029,1033,1038,1043,1047,1052,1057,1062,1074,1080,1086,1092,1097,1103,1109,1114,1120,1126,1131,1137,1143,1148,1159,1169,1183,1198,1210,1233,1238,1244,1249,1263,1272,1281,1292,1305,1316,1335,1340,1345],{"__ignoreMap":452},[456,931,932],{"class":458,"line":459},[456,933,934],{"class":780},"## Version 2023\u002F12\u002F19\n",[456,936,937],{"class":458,"line":466},[456,938,940],{"emptyLinePlaceholder":939},true,"\n",[456,942,943,947],{"class":458,"line":477},[456,944,946],{"class":945},"sAoO4","server",[456,948,949],{"class":664}," {\n",[456,951,952,956,958,961],{"class":458,"line":485},[456,953,955],{"class":954},"sJPTy","    listen ",[456,957,730],{"class":633},[456,959,960],{"class":664}," ssl",[456,962,963],{"class":473},";\n",[456,965,966,968,971],{"class":458,"line":498},[456,967,955],{"class":954},[456,969,970],{"class":664},"[::]:443 ssl",[456,972,963],{"class":473},[456,974,975],{"class":458,"line":506},[456,976,940],{"emptyLinePlaceholder":939},[456,978,979,982,985],{"class":458,"line":514},[456,980,981],{"class":954},"    server_name ",[456,983,984],{"class":664},"gitea.*",[456,986,963],{"class":473},[456,988,989],{"class":458,"line":526},[456,990,940],{"emptyLinePlaceholder":939},[456,992,993,996,999],{"class":458,"line":537},[456,994,995],{"class":954},"    include ",[456,997,998],{"class":664},"\u002Fconfig\u002Fnginx\u002Fssl.conf",[456,1000,963],{"class":473},[456,1002,1003],{"class":458,"line":545},[456,1004,940],{"emptyLinePlaceholder":939},[456,1006,1007,1010,1013],{"class":458,"line":554},[456,1008,1009],{"class":954},"    client_max_body_size ",[456,1011,1012],{"class":633},"0",[456,1014,963],{"class":473},[456,1016,1017],{"class":458,"line":562},[456,1018,940],{"emptyLinePlaceholder":939},[456,1020,1021],{"class":458,"line":570},[456,1022,1023],{"class":780},"    # enable for ldap auth (requires ldap-location.conf in the location block)\n",[456,1025,1026],{"class":458,"line":581},[456,1027,1028],{"class":780},"    #include \u002Fconfig\u002Fnginx\u002Fldap-server.conf;\n",[456,1030,1031],{"class":458,"line":589},[456,1032,940],{"emptyLinePlaceholder":939},[456,1034,1035],{"class":458,"line":596},[456,1036,1037],{"class":780},"    # enable for Authelia (requires authelia-location.conf in the location block)\n",[456,1039,1040],{"class":458,"line":604},[456,1041,1042],{"class":780},"    #include \u002Fconfig\u002Fnginx\u002Fauthelia-server.conf;\n",[456,1044,1045],{"class":458,"line":612},[456,1046,940],{"emptyLinePlaceholder":939},[456,1048,1049],{"class":458,"line":620},[456,1050,1051],{"class":780},"    # enable for Authentik (requires authentik-location.conf in the location block)\n",[456,1053,1054],{"class":458,"line":628},[456,1055,1056],{"class":780},"    #include \u002Fconfig\u002Fnginx\u002Fauthentik-server.conf;\n",[456,1058,1060],{"class":458,"line":1059},21,[456,1061,940],{"emptyLinePlaceholder":939},[456,1063,1065,1068,1071],{"class":458,"line":1064},22,[456,1066,1067],{"class":945},"    location",[456,1069,1070],{"class":462}," \u002F ",[456,1072,1073],{"class":664},"{\n",[456,1075,1077],{"class":458,"line":1076},23,[456,1078,1079],{"class":780},"        # enable the next two lines for http auth\n",[456,1081,1083],{"class":458,"line":1082},24,[456,1084,1085],{"class":780},"        #auth_basic \"Restricted\";\n",[456,1087,1089],{"class":458,"line":1088},25,[456,1090,1091],{"class":780},"        #auth_basic_user_file \u002Fconfig\u002Fnginx\u002F.htpasswd;\n",[456,1093,1095],{"class":458,"line":1094},26,[456,1096,940],{"emptyLinePlaceholder":939},[456,1098,1100],{"class":458,"line":1099},27,[456,1101,1102],{"class":780},"        # enable for ldap auth (requires ldap-server.conf in the server block)\n",[456,1104,1106],{"class":458,"line":1105},28,[456,1107,1108],{"class":780},"        #include \u002Fconfig\u002Fnginx\u002Fldap-location.conf;\n",[456,1110,1112],{"class":458,"line":1111},29,[456,1113,940],{"emptyLinePlaceholder":939},[456,1115,1117],{"class":458,"line":1116},30,[456,1118,1119],{"class":780},"        # enable for Authelia (requires authelia-server.conf in the server block)\n",[456,1121,1123],{"class":458,"line":1122},31,[456,1124,1125],{"class":780},"        #include \u002Fconfig\u002Fnginx\u002Fauthelia-location.conf;\n",[456,1127,1129],{"class":458,"line":1128},32,[456,1130,940],{"emptyLinePlaceholder":939},[456,1132,1134],{"class":458,"line":1133},33,[456,1135,1136],{"class":780},"        # enable for Authentik (requires authentik-server.conf in the server block)\n",[456,1138,1140],{"class":458,"line":1139},34,[456,1141,1142],{"class":780},"        #include \u002Fconfig\u002Fnginx\u002Fauthentik-location.conf;\n",[456,1144,1146],{"class":458,"line":1145},35,[456,1147,940],{"emptyLinePlaceholder":939},[456,1149,1151,1154,1157],{"class":458,"line":1150},36,[456,1152,1153],{"class":954},"        include ",[456,1155,1156],{"class":664},"\u002Fconfig\u002Fnginx\u002Fproxy.conf",[456,1158,963],{"class":473},[456,1160,1162,1164,1167],{"class":458,"line":1161},37,[456,1163,1153],{"class":954},[456,1165,1166],{"class":664},"\u002Fconfig\u002Fnginx\u002Fresolver.conf",[456,1168,963],{"class":473},[456,1170,1172,1175,1178,1181],{"class":458,"line":1171},38,[456,1173,1174],{"class":954},"        set ",[456,1176,1177],{"class":473},"$",[456,1179,1180],{"class":664},"upstream_app gitea",[456,1182,963],{"class":473},[456,1184,1186,1188,1190,1193,1196],{"class":458,"line":1185},39,[456,1187,1174],{"class":954},[456,1189,1177],{"class":473},[456,1191,1192],{"class":664},"upstream_port ",[456,1194,1195],{"class":633},"3000",[456,1197,963],{"class":473},[456,1199,1201,1203,1205,1208],{"class":458,"line":1200},40,[456,1202,1174],{"class":954},[456,1204,1177],{"class":473},[456,1206,1207],{"class":664},"upstream_proto http",[456,1209,963],{"class":473},[456,1211,1213,1216,1218,1221,1223,1226,1228,1231],{"class":458,"line":1212},41,[456,1214,1215],{"class":954},"        proxy_pass ",[456,1217,1177],{"class":473},[456,1219,1220],{"class":664},"upstream_proto:\u002F\u002F",[456,1222,1177],{"class":473},[456,1224,1225],{"class":664},"upstream_app:",[456,1227,1177],{"class":473},[456,1229,1230],{"class":664},"upstream_port",[456,1232,963],{"class":473},[456,1234,1236],{"class":458,"line":1235},42,[456,1237,940],{"emptyLinePlaceholder":939},[456,1239,1241],{"class":458,"line":1240},43,[456,1242,1243],{"class":664},"    }\n",[456,1245,1247],{"class":458,"line":1246},44,[456,1248,940],{"emptyLinePlaceholder":939},[456,1250,1252,1254,1257,1261],{"class":458,"line":1251},45,[456,1253,1067],{"class":945},[456,1255,1256],{"class":954}," ~",[456,1258,1260],{"class":1259},"sxjBU"," (\u002Fgitea)?\u002Finfo\u002Flfs ",[456,1262,1073],{"class":664},[456,1264,1266,1268,1270],{"class":458,"line":1265},46,[456,1267,1153],{"class":954},[456,1269,1156],{"class":664},[456,1271,963],{"class":473},[456,1273,1275,1277,1279],{"class":458,"line":1274},47,[456,1276,1153],{"class":954},[456,1278,1166],{"class":664},[456,1280,963],{"class":473},[456,1282,1284,1286,1288,1290],{"class":458,"line":1283},48,[456,1285,1174],{"class":954},[456,1287,1177],{"class":473},[456,1289,1180],{"class":664},[456,1291,963],{"class":473},[456,1293,1295,1297,1299,1301,1303],{"class":458,"line":1294},49,[456,1296,1174],{"class":954},[456,1298,1177],{"class":473},[456,1300,1192],{"class":664},[456,1302,1195],{"class":633},[456,1304,963],{"class":473},[456,1306,1308,1310,1312,1314],{"class":458,"line":1307},50,[456,1309,1174],{"class":954},[456,1311,1177],{"class":473},[456,1313,1207],{"class":664},[456,1315,963],{"class":473},[456,1317,1319,1321,1323,1325,1327,1329,1331,1333],{"class":458,"line":1318},51,[456,1320,1215],{"class":954},[456,1322,1177],{"class":473},[456,1324,1220],{"class":664},[456,1326,1177],{"class":473},[456,1328,1225],{"class":664},[456,1330,1177],{"class":473},[456,1332,1230],{"class":664},[456,1334,963],{"class":473},[456,1336,1338],{"class":458,"line":1337},52,[456,1339,940],{"emptyLinePlaceholder":939},[456,1341,1343],{"class":458,"line":1342},53,[456,1344,1243],{"class":664},[456,1346,1348],{"class":458,"line":1347},54,[456,1349,1350],{"class":664},"}\n",[400,1352,1353,1354,1358,1359,1362,1363,1366],{},"Press ",[1355,1356],"kbd",{"value":1357},"Ctrl+O",", then ",[1355,1360],{"value":1361},"Enter"," to save, and ",[1355,1364],{"value":1365},"Ctrl+X"," to exit.",[430,1368,1370],{"id":1369},"configure-giteas-domain","Configure Gitea's domain",[400,1372,1373,1374,1377],{},"Now open the ",[438,1375,1376],{},"app.ini"," file from the container's file system:",[446,1379,1381],{"className":903,"code":1380,"filename":905,"language":906,"meta":452,"style":452},"sudo nano \u002Fsrv\u002Fdocker\u002Fgitea\u002Fdata\u002Fgitea\u002Fconf\u002Fapp.ini\n",[438,1382,1383],{"__ignoreMap":452},[456,1384,1385,1387,1389],{"class":458,"line":459},[456,1386,913],{"class":462},[456,1388,916],{"class":522},[456,1390,1391],{"class":522}," \u002Fsrv\u002Fdocker\u002Fgitea\u002Fdata\u002Fgitea\u002Fconf\u002Fapp.ini\n",[400,1393,1394],{},"Then modify the server section with your domain information:",[446,1396,1398],{"className":648,"code":1397,"filename":1376,"language":650,"meta":452,"style":452},"[server]\nDOMAIN = gitea.yourdomain.com\nSSH_DOMAIN = gitea.yourdomain.com\nROOT_URL = https:\u002F\u002Fgitea.yourdomain.com\u002F\n",[438,1399,1400,1406,1417,1426],{"__ignoreMap":452},[456,1401,1402],{"class":458,"line":459},[456,1403,1405],{"class":1404},"srnIM","[server]\n",[456,1407,1408,1411,1414],{"class":458,"line":466},[456,1409,1410],{"class":657},"DOMAIN",[456,1412,1413],{"class":473}," =",[456,1415,1416],{"class":664}," gitea.yourdomain.com\n",[456,1418,1419,1422,1424],{"class":458,"line":477},[456,1420,1421],{"class":657},"SSH_DOMAIN",[456,1423,1413],{"class":473},[456,1425,1416],{"class":664},[456,1427,1428,1431,1433],{"class":458,"line":485},[456,1429,1430],{"class":657},"ROOT_URL",[456,1432,1413],{"class":473},[456,1434,1435],{"class":664}," https:\u002F\u002Fgitea.yourdomain.com\u002F\n",[400,1437,1353,1438,1358,1440,1362,1442,1444],{},[1355,1439],{"value":1357},[1355,1441],{"value":1361},[1355,1443],{"value":1365}," to exit, then restart the container.",[430,1446,685],{"id":1447},"done-1",[400,1449,1450],{},"And that’s it! Gitea is now exposed to the web.",[890,1452,893,1453,1455,1456,1459,1460,739],{"icon":452},[396,1454,896],{}," You can protect this app natively via OIDC with ",[403,1457,141],{"href":1458},"\u002Fserveex\u002Fsecurity\u002Fpocket-id"," (register it as an OIDC client), or with Authentik by ",[403,1461,1464],{"href":1462,"rel":1463},"https:\u002F\u002Fdocs.goauthentik.io\u002Fintegrations\u002Fservices\u002Fgitea\u002F",[407],"following these instructions",[1466,1467,1468],"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":452,"searchDepth":466,"depth":466,"links":1470},[1471,1476],{"id":419,"depth":466,"text":420,"children":1472},[1473,1474,1475],{"id":432,"depth":477,"text":433},{"id":637,"depth":477,"text":638},{"id":684,"depth":477,"text":685},{"id":695,"depth":466,"text":696,"children":1477},[1478,1479,1480,1481],{"id":744,"depth":477,"text":745},{"id":881,"depth":477,"text":882},{"id":1369,"depth":477,"text":1370},{"id":1447,"depth":477,"text":685},[1483],"Djeex","Install Gitea, a lightweight self-hosted Git service to manage your code repositories privately on your own server.","md",null,{},{"title":374,"description":1484},"BKtm4UhmqsYZk54OGt6HdMrsa4bo4Iz-YrAKsXUZwS4",[1491,1486],{"title":370,"path":371,"stem":372,"description":1492,"children":-1},"Automate media downloads with the Servarr stack, Radarr, Sonarr, Bazarr, Prowlarr, and Overseerr for movies and TV shows.",1788645858731]