1
0
contenu/blog/2021/01/04/installer-gitea-sur-nas-synology/index.md

278 lines
9.8 KiB
Markdown
Raw Normal View History

2023-09-05 23:47:36 +02:00
---
title: "Installer Gitea sur un NAS Synology"
date: 2021-01-04T11:16:36+01:00
tags: ["SysAdmin", "Synology", "Git", "Gitea", "NAS", "SSH"]
---
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...
<!--more-->
En effet, j'ai à ma disposition un
[DS216play](https://global.download.synology.com/download/Document/Hardware/DataSheet/DiskStation/16-year/DS216play/enu/Synology_DS216play_Data_Sheet_enu.pdf), basé sur un processeur STM Monaco
[STiH412](https://www.st.com/resource/en/data_brief/stih412.pdf), 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](https://gitea.io/en-us/).
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_.
- [x] Cacher ce dossier partagé dans "Mes emplacements réseaux".
- [x] 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_.
```bash {linenos=false,class=not-prose}
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.
```bash {linenos=false,class=not-prose}
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.
```plaintext {linenos=false,class=not-prose}
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 ##
```bash {linenos=false,class=not-prose}
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:
```plaintext {linenos=false,class=not-prose}
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
<kbd>CTRL</kbd>+<kbd>C</kbd>.
## 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:
```bash {linenos=false,class=not-prose}
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 exemple, _gitea_), un mot de passe, puis cochez les cases:
- [x] Créer une base portant son nom et donner à cet utilisateur tous les privilèges sur cette base.
- [x] 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:
```bash {linenos=false,class=not-prose}
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub
```
La clé aura cette forme:
```plaintext {linenos=false,class=not-prose}
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:
```bash {linenos=false,class=not-prose}
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:
```bash {linenos=false,class=not-prose}
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:
```ini {linenos=false,class=not-prose}
START_SSH_SERVER = true
```
Arrêtez Gitea en faisant:
```bash {linenos=false,class=not-prose}
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.