Files
docudjeex/content/fr/3.serveex/8.development/2.forgejo.md
T

7.9 KiB

title, description
title description
Forgejo Installer Forgejo, un service Git auto-hébergé et léger pour gérer vos dépôts de code en privé sur votre propre serveur.

:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}

Forgejo est une plateforme DevOps auto-hébergée qui permet de gérer des dépôts à la manière de GitHub, mais sur votre propre infrastructure. C'est un fork communautaire de Gitea.

forgejo

Installation

::file-tree

tree: /: - srv: - docker: - forgejo: - compose.yaml - .env - data/

::

::steps{level="3"}

Déployer la stack

Ouvrez Dockge, cliquez sur compose, nommez la stack forgejo, et collez le contenu suivant :

---
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

Renseigner vos variables d'environnement

Remplissez le fichier .env avec les informations nécessaires, par exemple :

UID=1000
GID=1000

Déployez le conteneur et allez sur http://ipdevotreserveur:3333. Votre instance Forgejo est en route !

Terminé !

::

::caution

Si ça ne marche pas : vérifiez les règles de votre pare-feu. ::

Exposer Forgejo avec Swag

L'intérêt de cette installation est de pouvoir y accéder à distance depuis n'importe lequel de vos appareils. Pour cela, nous allons exposer Forgejo à travers Swag.

::note

Au préalable : nous partons du principe que vous avez créé un sous-domaine du type forgejo.mondomaine.fr dans votre zone DNS avec un CNAME pointant vers mondomaine.fr, et que, à moins d'utiliser Cloudflare Zero Trust, vous avez déjà redirigé le port 443 de votre box vers le port 443 de votre serveur dans les règles NAT. ::

::steps{level="3"}

Ajouter le réseau de Forgejo à SWAG

Dans Dockge, allez sur la stack SWAG et modifiez le fichier compose en y ajoutant le réseau de Forgejo :

---
services:
  swag:
     container_name: # ...
      # ... 
     networks:              # Rattache le conteneur au réseau personnalisé
      # ...           
      - forgejo             # Nom du réseau déclaré

networks:                   # Définit le réseau personnalisé
  # ...
  forgejo:                  # Nom du réseau déclaré
    name: forgejo_default   # Nom réel du réseau externe
    external: true          # Indique qu'il s'agit d'un réseau externe

::note

Nous partons du principe que le nom du réseau de Forgejo est forgejo_default. Vous pouvez vérifier la connectivité en visitant le tableau de bord de SWAG sur http://ipdevotreserveur:81. ::

Redéployez la stack en cliquant sur « Deploy » et attendez que SWAG soit pleinement opérationnel.

Créer le fichier subdomain.conf

Dans les dossiers de Swag, créez le fichier forgejo.subdomain.conf.

::tip{icon="" to="/serveex/files/file-browser-quantum"} Astuce : vous pouvez utiliser File Browser Quantum pour naviguer et modifier vos fichiers plutôt que des commandes dans le terminal. ::

sudo nano /srv/docker/swag/config/nginx/proxy-confs/forgejo.subdomain.conf

Collez la configuration ci-dessous :

## 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;

    }
}

Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.

Configurer le domaine de Forgejo

Ouvrez maintenant le fichier app.ini depuis le système de fichiers du conteneur :

sudo nano /srv/docker/forgejo/data/gitea/conf/app.ini

Puis modifiez la section server avec les informations de votre domaine :

[server]
DOMAIN = forgejo.mondomaine.fr
SSH_DOMAIN = forgejo.mondomaine.fr
ROOT_URL = https://forgejo.mondomaine.fr/

Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter, puis redémarrez le conteneur.

Terminé !

::

Et voilà ! Forgejo est maintenant exposé sur le web.

Protéger Forgejo avec Pocket ID

Forgejo peut aussi déléguer la connexion à un fournisseur OIDC plutôt qu'à (ou en plus de) ses propres comptes.

::steps{level="3"}

Enregistrer Forgejo comme client OIDC

Enregistrez un client OIDC dans Pocket ID nommé Forgejo, avec cette URL de callback :

https://forgejo.mondomaine.fr/user/oauth2/PocketID/callback

::note Le PocketID de l'URL de callback doit correspondre exactement au champ Authentication Name que vous renseignerez à l'étape suivante. ::

Ajouter la source d'authentification dans Forgejo

En tant qu'administrateur, allez dans Site Administration > Identity & Access > Authentication Sources, cliquez sur Add Authentication Source, et renseignez :

Champ Valeur
Authentication Type OAuth2
Authentication Name PocketID
OAuth2 Provider OpenID Connect
Client ID (Key) Le client ID copié depuis Pocket ID
Client Secret Le client secret copié depuis Pocket ID
OIDC Discovery URL L'URL de découverte OIDC de Pocket ID
Additional Scopes openid email profile

Activez également Skip local 2FA.

Terminé !

::

::tip{icon="" to="/serveex/advanced/authentik"} Vous pouvez utiliser Authentik plutôt que Pocket ID :

  1. Dans Authentik, créez une application et un provider OAuth2/OpenID Connect nommé Forgejo, avec une redirect URI (de type Strict) valant https://forgejo.mondomaine.fr/user/oauth2/authentik/callback.
  2. Notez les Client ID, Client Secret et Slug du provider.
  3. Dans la source d'authentification de Forgejo, mettez authentik dans Authentication Name, https://authentik.mondomaine.fr/application/o/<slug>/.well-known/openid-configuration dans OIDC Discovery URL, puis renseignez le Client ID, le Client Secret et les Additional Scopes email profile. ::