Installer Gitea sur un NAS Synology

Publié dans : Blog

Je vous propose un tutoriel sur l’installation de la forge Libre Gitea sur un NAS Synology avec une petite nuance par rapport à ce qu’on trouve habituellement sur le sujet: on n’utilisera pas Docker…

En effet, j’ai à ma disposition un DS216play, basé sur un processeur STM Monaco STiH412, processeur ARM à double-coeur à 1.5GHz (plus quatre coeurs dédiés à la vidéo). Un bon NAS pour un usage courant, mais qui ne supporte malheureusement pas Docker, ce qui aurait considérablement simplifié l’installation et la maintenance de logiciels tiers, en particulier celui qui nous intéresse aujourd’hui: Gitea.

La méthode que je vais décrire ici pourrait également être appliquée avec un NAS où l’on pourrait (techniquement) utiliser Docker, mais sans le vouloir. Je pars du principe que votre NAS est à jour (version 6.2.3 au moment d’écrire ce tutoriel), mais il est probable que cela fonctionne pour des versions antérieures.

Installation de paquets supplémentaires 🔗

Notre procédure exige l’installation de paquets Synology supplémentaires. Allez dans le Centre de paquets, et installez:

  • Git Server
  • MariaDB 10
  • phpMyAdmin

Tous trois se trouvent dans les paquets Tierce partie.

Notez le mot de passe que vous allez saisir dans MariaDB, vous en aurez besoin plus tard.

Ouvrez ensuite MariaDB via le lien présent dans le menu principal, afin de cocher la case “Activer la connexion TCP/IP”, sur le port 3307.

Activer SSH sur le NAS 🔗

Connectez-vous à l’interface d’administration de votre NAS, puis allez dans le Panneau de configuration. Activez le Mode avancé en cliquant sur le lien en haut à droite, puis ouvrez Terminal & SNMP. Activez SSH, et laissez-le sur le port 22 pour le moment. Cliquez sur Appliquer.

Créez un dossier dédié à Gitea 🔗

Allez maintenant dans Dossier partagé, et créez un partage Gitea.

  • Cacher ce dossier partagé dans “Mes emplacements réseaux”.
  • Masquer les sous-dossiers et les fichiers des utilisateurs sans autorisations.
  • Activer la corbeille.

Ne donnez aucun accès à personne pour le moment (c’est-à-dire, laissez tous les autres paramètres à leurs valeurs par défaut).

Créer un utilisateur pour Gitea 🔗

Toujours dans le Panneau de configuration, ouvrez la page Utilisateur, et créez-en un nouveau, appelé comme vous le souhaitez, mais partons pour gitea. Affectez-lui un mot de passe dont vous vous souviendrez.

Laissez-le dans le groupe users. Par contre, donnez-lui les accès en lecture et en écriture dans le dossier partagé gitea que vous venez de créer.

Vous pouvez éventuellement attribuer des quotas, mais laissez tout le reste aux valeurs par défaut.

Se connecter en SSH au NAS 🔗

Depuis votre terminal préféré, initiez une connection SSH vers votre NAS, avec l’utilisateur admin.

ssh admin@nas

Une fois votre mot de passe saisi, vous devriez être connecté.

Télécharger Gitea 🔗

On va stocker Gitea dans son propre répertoire, dans le dossier partagé créé précédemment.

cd /volume1/gitea/
mkdir bin
cd bin/
wget https://dl.gitea.io/gitea/1.13.1/gitea-1.13.1-linux-arm-6
ln -s gitea-1.13.1-linux-arm-6 gitea
ls -alh

Vous devriez voir la sortie suivante, qui vous montre la création d’un lien symbolique gitea vers le binaire téléchargé gitea-1.13.1-linux-arm-6, ce qui simplifiera les commandes futures.

lrwxrwxrwx+  1 gitea users   24 Jan  4 00:12 gitea -> gitea-1.13.1-linux-arm-6
-rwxrwxrwx+  1 gitea users  96M Dec 28 19:50 gitea-1.13.1-linux-arm-6

Tester 🔗

chmod +x gitea
export GITEA_ROOT="/volume1/gitea"
./gitea --port 13000 --custom-path $GITEA_ROOT/custom --config $GITEA_ROOT/custom/conf/app.ini

Le port 3000 étant déjà utilisé, on demande à Gitea de démarrer sur le port 13000, et on lui indique où stocker ses données.

La dernière ligne de la sortie provoquée par cette commande devrait ressembler à ça:

2021/01/04 00:19:43 ...s/graceful/server.go:55:NewServer() [I] Starting new server: tcp:0.0.0.0:13000 on PID: 26230

Confirmez en ouvrant votre navigateur, puis en allant à l’adresse de votre NAS, sur le port 13000:

http://nas:13000/

En théorie, vous devriez voir la page d’accueil de votre instance Gitea.

N’y faites rien pour l’instant, on ne l’a pas démarré avec le bon utilisateur: c’était juste une proof-of-concept, il est maintenant temps de lancer Gitea avec son utilisateur attitré.

Retournez dans votre terminal, puis stoppez le processus avec CTRL+C.

Démarrage de Gitea 🔗

Allez dans le Panneau de configuration, puis dans le Planificateur de tâches. Créez une nouvelle Tâche déclenchée. Nommez-la “Gitea”, affectez l’utilisateur gitea, à l’évènement “Démarrage”. Allez ensuite dans l’onglet “Paramètres de tâche”. Le temps des tests, je vous recommande de cocher la case permettant d’envoyer les détails d’exécution par email. Une fois qu’on se sera assuré que tout fonctionne, on pourra aussi cocher la case “Envoyer les détails d’exécution uniquement lorsque le script se termine de manière anormale”.

Dans la zone de texte du bas, “Script défini par l’utilisateur”, copiez-collez ceci:

export HOME="/volume1/homes/gitea"
export GITEA_ROOT="/volume1/gitea"
$GITEA_ROOT/bin/gitea --port 13000 --custom-path $GITEA_ROOT/custom --config $GITEA_ROOT/custom/conf/app.ini

Enregistrez, puis faites un clic droit sur la tâche et Exécuter.

Si vous pouvez accéder à l’interface web de Gitea, comme pendant le test précédent, et qu’aucun mail ne vous est envoyé avec une sortie de programme, c’est qu’on peut passer à la configuration…

Base de données 🔗

Dans le menu principal de DSM, ouvrez phpMyAdmin. Connectez-vous au compte root, avec le mot de passe spécifié pendant l’installation du paquet MariaDB.

Dans la barre en haut, cliquez sur Comptes utilisateurs, puis Ajouter un compte d’utilisateur.

Donnez-lui un nom (par exmple, gitea), un mot de passe, puis cochez les cases:

  • Créer une base portant son nom et donner à cet utilisateur tous les privilèges sur cette base.
  • Accorder tous les privilèges à un nom passe-partout (utilisateur_%).

Puis cliquez sur le bouton Exécuter tout en bas à droite.

Configuration de Gitea 🔗

De retour dans l’interface de Gitea, on peut remplir les champs liés à la base de données.

Le serveur MariaDB sur le NAS écoute sur le port 3307, au lieu du 3306 habituel. Le nom d’utilisateur et le nom de la base de données devraient être gitea si vous avez suivi mes indications, et le mot de passe est celui que vous venez de donner à l’utilisateur gitea dans MariaDB.

Il est important maintenant de définir les chemins d’accès aux fichiers:

  • Emplacement racine des dépôts: /volume1/gitea/gitea-repositories
  • Répertoire racine Git LFS: /volume1/gitea/bin/data/lfs
  • Chemin des fichiers log: /volume1/gitea/log

Vous devez aussi vous assurer que les noms de domaines mentionnés correspondent à celui utilisé pour accéder à votre NAS.

Placez le port d’écoute SSH sur le port 10022, puis continuez la configuration avec les paramètres facultatifs.

Tester 🔗

Allez dans la configuration de Gitea, une fois que vous y serez connecté, puis dans “Clés SSH/GPG”.

Récupérez votre clé publique depuis une autre machine:

ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub

La clé aura cette forme:

ssh-rsa <série de caractères> <utilisateur>@<ordinateur>

Dans Gitea, faites un copier-coller de cette clé publique dans “Ajouter une clé”.

Créez maintenant un dépôt de test qui sera supprimé ensuite. Gitea vous donne même la marche à suivre:

touch README.md
git init

git add README.md
git commit -m "first commit"
git remote add origin ssh://gitea@<domaine>:13000/<utilisateur>/test.git
git push -u origin master

Arrivé là, il est fort à parier qu’un nom d’utilisateur et un mot de passe vous sera demandé, à la place de l’identification à clé publique. C’est tout simplement parce que les permissions du dossier .ssh de l’utilisateur gitea ne sont pas les bonnes, et parce que Gitea n’a pas lancé son propre serveur SSH.

Dans votre terminal, toujours en tant qu'admin, exécutez les commandes suivantes:

sudo su
cd /volume1/homes/gitea
chmod 0711 ./
chmod 0711 ./.ssh/
chmod 0600 ./.ssh/authorized_keys

Vous devez également ajouter un paramètre à la configuration de Gitea, située dans le fichier /volume1/gitea/custom/conf/app.ini.

Dans la section [server], rajoutez:

START_SSH_SERVER = true

Arrêtez Gitea en faisant:

killall gitea

Et relancez la tâche planifiée créée plus tôt. Gitea doit démarrer et un push ou un pull vers votre dépôt de test devrait fonctionner.

Mise à jour de Gitea 🔗

À chaque nouvelle version, il vous suffit de télécharger le fichier binaire, et de changer le lien symbolique vers lui, comme on l’a fait avant. Vous stoppez ensuite Gitea, sauvegardez les données comme vous le faites d’habitude avec DSM, et relancer la tâche planifiée.