Installation de Gitea sur votre serveur linux

Avant de commencer cette partie, je pars du principe que vous avez déjà un minimum de connaissances sur Linux.

Si ce n'est pas le cas, je vous invite à vous familiariser avec l'environnement Linux à l'aide de nombreux tutoriels qu'on peut trouver gratuitement sur le net.

Config du serveur du tutoriel

J'utilise un serveur Linux Ubuntu 20.4

La majorité des commandes seront effectuées à l'aide de l'utilisateur deploy qui fait partie du groupe sudoers.

Prérequis (Nginx + git + SGBD)

Nous allons installer Nginx en tant que serveur web et nous assurer que git soit bien installé

sudo apt-get install nginx git

Base de données

Gitea a sans grande surprise besoin d'une base de données pour fonctionner.

Choisissez le SGBD qui vous convient et qui est supporté par Gitea (PostgreSQL, MySQL, SQLite...)

Voir : https://docs.gitea.io/en-us/database-prep/

PostgreSQL (exemple)

Personnellement j'utilise PostgreSQL, un bon début serait de créer une base et un utilisateur dédié à Gitea :

-- Exemple de création de DB + USER avec PostgreSQL
CREATE DATABASE gitea;
CREATE USER gitea WITH PASSWORD 'mot-de-passe-fort-ici';
ALTER ROLE gitea SET client_encoding TO 'utf8';
ALTER ROLE gitea SET default_transaction_isolation TO 'read committed';
ALTER ROLE gitea SET timezone TO 'UTC';

Création d'un utilisateur (Linux) dédié au service gitea

Créons un utilisateur qui servira à executer Gitea : j'ai choisi de l'appeler "git", mais vous êtes libre de choisir le pseudo qui vous convient

sudo adduser \
--system \
--shell /bin/bash \
--gecos 'Git Version Control' \
--group \
--disabled-password \
--home /home/git \
git

Où télécharger Gitea

Vous pouvez trouver toutes les versions de Gitea par ici : https://dl.gitea.io/gitea/

Pour ce tutoriel nous allons utiliser la version 1.15.6 et récupérer directement le fichier binaire.

Naviguez à l'URL suivante : https://dl.gitea.io/gitea/1.15.6/

Trouvez le fichier qui correspond à l'architecture de votre système, dans mon cas, mon serveur utilise une architecture x86_64 (amd64)

Comment connaître l'architecture utilisée par mon serveur ?

Tapez une des deux commandes suivantes :

lscpu | grep Architecture
# Architecture:                    x86_64
uname -m
# x86_64

Téléchargement du fichier

Je vais donc choisir le fichier gitea-1.15.6-linux-amd64 : https://dl.gitea.io/gitea/1.15.6/gitea-1.15.6-linux-amd64

Je vais le récupérer avec wget et le rendre executable avec chmod :

# /home/deploy/
wget https://dl.gitea.io/gitea/1.15.6/gitea-1.15.6-linux-amd64
chmod +x gitea-1.15.6-linux-amd64

Vérifiez la signature GPG

Gitea signe tous ses binaires avec une clé GPG afin de s'assurer qu'aucune altération du fichier n'a été effectuée sur le fichier récupéré (avant ou pendant le téléchargement par ex.)

Pour valider le binaire, téléchargez le fichier de signature : il se termine en .asc et porte le nom de la version téléchargée.

Prenons donc : https://dl.gitea.io/gitea/1.15.6/gitea-1.15.6-linux-amd64.asc

Si la signature est bonne, vous verrez un message ressemblant à ceci : Good signature from "Teabot <teabot@gitea.io>"

Sinon : This key is not certified with a trusted signature!

Pour vérifier :

gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
gpg --verify gitea-1.15.6-linux-amd64.asc gitea-1.15.6-linux-amd64

Copiez le fichier vers /usr/local/bin/

Maintenant que la vérification GPG a été effectuée, nous pouvons copier le fichier dans le repertoire /usr/local/bin/

sudo cp gitea-1.15.6-linux-amd64 /usr/local/bin/gitea

Création des dossiers requis et affectation des droits

Il est nécessaire de créer certains dossiers et d'y affecter les bonnes permissions pour le bon fonctionnement de Gitea.

PS : pour la commande chown pensez à changer git si vous avez nommé l'utilisateur en charge d'executer Gitea différemment.

mkdir -p /var/lib/gitea/{custom,data,log}
sudo chown -R git:git /var/lib/gitea/
sudo chmod -R 750 /var/lib/gitea/
mkdir /etc/gitea
sudo chown root:git /etc/gitea
sudo chmod 770 /etc/gitea

Création et activation du service gitea (systemd)

Créons un service avec systemd pour Gitea, pour cela, créez le fichier : /etc/systemd/system/gitea.service

Éditez-le avec l'éditeur de votre choix

sudo vim /etc/systemd/system/gitea.service

Entrez le contenu suivant :

[Service]
# Modify these two values and uncomment them if you have
# repos with lots of files and get an HTTP error 500 because
# of that
###
#LimitMEMLOCK=infinity
#LimitNOFILE=65535
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/conf/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
# If you want to bind Gitea to a port below 1024 uncomment
# the two values below
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

Rechargez systemd et activez le service gitea

sudo systemctl daemon-reload
sudo systemctl enable gitea --now

Ajoutez une configuration pour Nginx

Créez une nouvelle configuration pour votre site Gitea et pour Nginx.

On prendra l'URL https://gitea.exemple.com/ comme exemple.

Créez un fichier de config nginx à l'emplacement dans /etc/nginx/sites-availables/

sudo touch /etc/nginx/sites-availables/gitea.conf

Entrez le contenu suivant :

server {
    listen 80;

    # todo : à modifier pour votre config
    server_name gitea.exemple.com;

    location ^~ /.well-known/acme-challenge/ {
        root /var/www/html;
        default_type "text/plain";
        allow all;
    }

    location / {
        return 301 https://$server_name$request_uri;
    }
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    # todo : à modifier pour votre config
    server_name gitea.exemple.com;

    root /var/lib/gitea/public;
    access_log off;
    error_log off;

    # todo : à modifier pour votre config
    ssl_certificate_key /etc/letsencrypt/live/gitea.exemple.com/privkey.pem;
    ssl_certificate /etc/letsencrypt/live/gitea.exemple.com/fullchain.pem;

    location / {
      try_files maintain.html $uri $uri/index.html @node;
    }

    location @node {
      client_max_body_size 0;
      proxy_pass http://localhost:3000;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_max_temp_file_size 0;
      proxy_redirect off;
      proxy_read_timeout 120;
    }
}

PS: les lignes concernant le certificat SSL sont à adapter en fonction de l'autorité choisie, dans mon cas j'ai utilisé letsencrypt.

La configuration Nginx de votre Gitea est prête à être activée !

Activer le site Nginx

Faites un lien symbolique vers /etc/nginx/sites-enabled/

Testez la config puis redémarrez nginx s'il n'y a aucune erreur.

sudo ln -s /etc/nginx/sites-availables/gitea.conf /etc/nginx/sites-enabled/gitea.conf
sudo nginx -t && sudo systemctl restart nginx

Terminer l'installation (configuration)

Une fois que toutes les étapes ont été effectuées, vous avez deux choix possibles pour finaliser la configuration de Gitea :

  • Soit vous configurez votre gitea directement depuis votre navigateur (en visitant l'URL de votre gitea)
  • Soit vous créez le fichier un fichier de config /etc/gitea/conf/app.ini manuellement et remplissez les bonnes informations

Note de sécurité

Si vous avez opté pour la configuration via le web : pensez à configurer rapidement votre gitea car quiconque ayant accès et connaissant votre URL est en mesure de le faire à votre place.

Le risque est tout de même très faible, ca serait vraiment un coup de malchance.

Si vous voulez restreindre l'accès au formulaire de configuration, plusieurs options s'offrent à vous :

  • vous pouvez configurer une règle firewall pour autoriser les connexions entrantes uniquement depuis votre IP pour les ports TCP 80 et 443
  • autoriser seulement le port 22 et faire une redirection du port de gitea (3000) en local...
  • mettre un HTTP basic auth temporaire
  • etc.

Documentation du fichier de configuration

Voici la documentation officielle du fichier de configuration :

https://docs.gitea.io/en-us/config-cheat-sheet/

Ne vous fiez pas à l'image que vous allez voir dans la partie "Configuration via le web" car les couples clé/valeur sont ammenés à changer.

Si vous avez opté pour la même configuration que notre tutoriel, vous trouverez le fichier à l'emplacement suivant : /etc/gitea/conf/app.ini (c'est également l'emplacement par défaut).

Configuration via le web

Naviguez à l'URL de votre gitea (ex: gitea.exemple.com), vous devriez voir ce formulaire :

gitea page installation configuration

Remplissez les bonnes informations.

À la fin de la page, dans la section "Optionnal Settings" vous avez une sous-section "Administrator Account Settings" : c'est ici que pouvez créer votre compte administrateur.

Si vous avez déjà cliqué sur Install Gitea, ne vous inquiétez pas : le premier utilisateur créé sera automatiquement admin.

La section Email Settings peut également être intéressante à compléter pour que gitea envoie les emails liés au système (comme la réinitialisation de mot de passe, validation de pull request, etc.)

Dans tous les cas, vous pourrez revenir sur votre configuration en modifiant le fichier de configuration généré.

Désactivez l'enregistrement de nouveaux utilisateurs

Je vous conseille de désactiver l'enregistrement de nouveaux utilisateurs sur votre serveur gitea, vous pourrez toujours créer de nouveaux comptes depuis l'interface web avec votre compte admin.

Ouvrez le fichier de configuration et mettez DISABLE_REGISTRATION à true :

# /etc/gitea/conf/app.ini (ou autre emplacement suivant votre configuration)
[service]                      
DISABLE_REGISTRATION = true