From 11c543295565d3c65365aa5871392e2363436feb Mon Sep 17 00:00:00 2001 From: Djeex Date: Mon, 31 Aug 2026 23:44:50 +0200 Subject: [PATCH] Replace Gitea with Forgejo in the development section --- content/en/3.serveex/1.introduction.md | 4 +- .../en/3.serveex/8.development/2.forgejo.md | 197 ++++++++++++++++++ 2 files changed, 199 insertions(+), 2 deletions(-) create mode 100644 content/en/3.serveex/8.development/2.forgejo.md diff --git a/content/en/3.serveex/1.introduction.md b/content/en/3.serveex/1.introduction.md index 436de7d..59a55b0 100644 --- a/content/en/3.serveex/1.introduction.md +++ b/content/en/3.serveex/1.introduction.md @@ -162,8 +162,8 @@ Install and deploy Pingvin Install and deploy code-server :: -::card{icon="i-simple-icons-gitea" title="Git Repository" to="/serveex/development/gitea"} -Install and deploy Gitea +::card{icon="i-simple-icons-forgejo" title="Git Repository" to="/serveex/development/forgejo"} +Install and deploy Forgejo :: ::card{icon="i-noto-hammer-and-wrench" title="Tools" to="/serveex/development/it-tools"} diff --git a/content/en/3.serveex/8.development/2.forgejo.md b/content/en/3.serveex/8.development/2.forgejo.md new file mode 100644 index 0000000..0e44c5c --- /dev/null +++ b/content/en/3.serveex/8.development/2.forgejo.md @@ -0,0 +1,197 @@ +--- +title: Forgejo +description: Install Forgejo, a lightweight self-hosted Git service to manage your code repositories privately on your own server. +--- + + +:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} +# Forgejo + +::note +🎯 __Goals:__ + +- Install Forgejo +- Expose Forgejo using Swag +:: + +[Forgejo](https://forgejo.org/) 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. + +## Installation +Folder structure + +```text [Directory tree] +root +└── docker + └── forgejo + └── data +``` + +Open Dockge, click on `compose`, name the stack `forgejo`, and paste the following content: + +```yaml [compose.yaml] +--- +networks: + forgejo: + external: false +services: + server: + image: codeberg.org/forgejo/forgejo:11 + container_name: forgejo + environment: + + - USER_UID=${UID} + - USER_GID=${GID} + - TZ=Europe/Paris + restart: unless-stopped + networks: + + - forgejo + volumes: + + - ./data:/data + ports: + + - 3333:3000 + - 222:22 +``` + +Fill out the `.env` file with the required information, for example: + +```properties [.env] +UID=1000 +GID=1000 +``` + +Deploy the container and go to `http://yourserverip:3333`. Your Forgejo instance is now up and running! + +::caution + +__If it fails:__ check your firewall rules. +:: + +## Exposing Forgejo with Swag +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. + +::note + +__Prerequisite:__ We assume you have created a subdomain such as `forgejo.yourdomain.com` in your [DNS zone](/general/networking/dns) with `CNAME` pointing to `yourdomain.com`, and [unless you're using Cloudflare Zero Trust](/serveex/security/cloudflare), you have already forwarded port `443` from your router to your server’s port `443` in the [NAT rules](/general/networking/nat). +:: + +In Dockge, go to the SWAG stack and edit the compose file by adding Forgejo's network: + +```yaml [compose.yaml] +services: + swag: + container_name: # ... + # ... + networks: # Connect the container to the custom network + # ... + + - forgejo # Name of the declared network + +networks: # Define the custom network + # ... + forgejo: # Name of the declared network + name: forgejo_default # Actual external network name + external: true # Indicates it's an external network +``` + +::note + +We assume the Forgejo network name is `forgejo_default`. You can verify connectivity by visiting the SWAG dashboard at http://yourserverip:81. +:: + +Redeploy the stack by clicking "Deploy" and wait until SWAG is fully operational. + +Inside the Swag folders, create the file `forgejo.subdomain.conf`. + +::tip{icon=""} +✨ __Tip:__ You can use [File Browser](/serveex/files/file-browser) to navigate and edit your files instead of using terminal commands. +:: + +```bash [Terminal] +sudo nano /docker/swag/config/nginx/proxy-confs/forgejo.subdomain.conf +``` +Paste the configuration below: + +```nginx [forgejo.subdomain.conf] +## Version 2023/12/19 + +server { + listen 443 ssl; + listen [::]:443 ssl; + + server_name forgejo.*; + + include /config/nginx/ssl.conf; + + client_max_body_size 0; + + # enable for ldap auth (requires ldap-location.conf in the location block) + #include /config/nginx/ldap-server.conf; + + # enable for Authelia (requires authelia-location.conf in the location block) + #include /config/nginx/authelia-server.conf; + + # enable for Authentik (requires authentik-location.conf in the location block) + #include /config/nginx/authentik-server.conf; + + location / { + # enable the next two lines for http auth + #auth_basic "Restricted"; + #auth_basic_user_file /config/nginx/.htpasswd; + + # enable for ldap auth (requires ldap-server.conf in the server block) + #include /config/nginx/ldap-location.conf; + + # enable for Authelia (requires authelia-server.conf in the server block) + #include /config/nginx/authelia-location.conf; + + # enable for Authentik (requires authentik-server.conf in the server block) + #include /config/nginx/authentik-location.conf; + + include /config/nginx/proxy.conf; + include /config/nginx/resolver.conf; + set $upstream_app forgejo; + set $upstream_port 3000; + set $upstream_proto http; + proxy_pass $upstream_proto://$upstream_app:$upstream_port; + + } + + location ~ (/forgejo)?/info/lfs { + include /config/nginx/proxy.conf; + include /config/nginx/resolver.conf; + set $upstream_app forgejo; + set $upstream_port 3000; + set $upstream_proto http; + proxy_pass $upstream_proto://$upstream_app:$upstream_port; + + } +} +``` + +Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit. + +Now open the `app.ini` file from the container's file system: + +```bash [Terminal] +sudo nano /docker/forgejo/data/gitea/conf/app.ini +``` + +Then modify the server section with your domain information: + +```properties [app.ini] +[server] +DOMAIN = forgejo.yourdomain.com +SSH_DOMAIN = forgejo.yourdomain.com +ROOT_URL = https://forgejo.yourdomain.com/ +``` + +Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit, then restart the container. + +And that’s it! Forgejo is now exposed to the web. + +::tip{icon=""} +✨ __Tip:__ You can protect this app natively via OIDC with [Pocket ID](/serveex/security/pocket-id) (register it as an OIDC client), or with Authentik by [following these instructions](https://integrations.goauthentik.io/development/forgejo/). +::