Installation de Gitea

Une des parties importantes dans la gestions de projets est la collaboration entre les différents intervenants sur le projet, et plus particulièrement le partage et le travail simultané sur différents fichiers par plusieurs collaborateurs.

Une des solutions trouvée pour ce problème est les Systèmes de gestion de Versions VCS.

L’un des premiers outils/serveur trouvés était le CVS (Concurrent versions system) depuis les années 1990, et est devenu quasiment obsolète aujourd’hui, étant basé sur un modèle centralisé, et posant beaucoup de problème de gestions de verrous sur les fichiers.

Le début des années 2000 a vu l’essor de beaucoup de solutions de remplacement à savoir SVN, Mercurial, Bazaar, GIT etc… qui ont se sont quasiment tous basés sur un modèle décentralisé pour palier au problèmes posé par CVS.

Mème si l’un des logiciels plus utilisé au début était le SVN, GIT a commencé à prendre petit à petit le dessus puis à être propulsé au rang de quasi monopole grace entre autre à son adoption par exemple dans le développement du noyau Linux, mais surtout par le lancement du service Github, qui permet à n’importe qui de créer/posséder des dépôts et ainsi la démocratisation de l’outil.

Depuis l’acquisition de Github par Microsoft en 2018, beaucoup de développeurs et d’entreprises commencent à préférer utiliser des alternatives auto-hébergées par peur de voir leur dépôts restreints ou purement et simplement supprimés ou à voir le code fuiter ou être utilisé par des IA.

Il existe de nombreux logiciel pouvant être hébergé sur son propre serveur tels que Git-web, Gitlab, etc.. mais notre choix se porte sur un outil léger, à savoir Gitea, qui fourni un certain nombre de fonctionnalités similaires à github.

La procédure d’installation proposée ici repose sur Gitea, utilisant MySQL (ou MariaDB) comme backend, et se trouvant derrière le serveur web apache en mod_proxy.

On commencera donc notre procédure par la création d’une base de donnée MySQL et d’un compte utilisateur ayant les privilèges dessus puis on enchaînera par la création d’un compte utilisateur système :

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

On procédera par la suite au téléchargement et à l’installation de gitea:

curl -s https://api.github.com/repos/go-gitea/gitea/releases/latest |grep browser_download_url | cut -d '"' -f 4 | grep '\linux-amd64$' | wget -i -
mv gitea-*-linux-amd64 /usr/bin/gitea
chmod +x /usr/bin/gitea
mkdir -p /etc/gitea /var/lib/gitea/{custom,data,indexers,public,log}
chown git:git /var/lib/gitea/{data,indexers,log}
chmod 750 /var/lib/gitea/{data,indexers,log}
chown root:git /etc/gitea
chmod 770 /etc/gitea

On créé maintenant le fichier /etc/systemd/system/gitea.service qui permettra de lancer gitea au démarrage du serveur :

[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
###
# Don't forget to add the database service dependencies
###
#
#Wants=mysql.service
#After=mysql.service
#
Wants=mariadb.service
After=mariadb.service
#
#Wants=postgresql.service
#After=postgresql.service
#
#Wants=memcached.service
#After=memcached.service
#
Wants=redis.service
After=redis.service
#
###
# If using socket activation for main http/s
###
#
#After=gitea.main.socket
#Requires=gitea.main.socket
#
###
# (You can also provide gitea an http fallback and/or ssh socket too)
#
# An example of /etc/systemd/system/gitea.main.socket
###
##
## [Unit]
## Description=Gitea Web Socket
## PartOf=gitea.service
##
## [Socket]
## Service=gitea.service
## ListenStream=<some_port>
## NoDelay=true
##
## [Install]
## WantedBy=sockets.target
##
###

[Service]
# Uncomment the next line if you have repos with lots of files and get a HTTP 500 error because of that
# LimitNOFILE=524288:524288
RestartSec=2s
Type=notify
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
# If using Unix socket: tells systemd to create the /run/gitea folder, which will contain the gitea.sock file
# (manually creating /run/gitea doesn't work, because it would not persist across reboots)
#RuntimeDirectory=gitea
ExecStart=/usr/bin/gitea web --custom-path /var/lib/gitea/custom --config /etc/gitea/app.ini 
Restart=always
Environment=USER=git HOME=/srv/git GITEA_WORK_DIR=/var/lib/gitea
WatchdogSec=30s
# If you install Git to directory prefix other than default PATH (which happens
# for example if you install other versions of Git side-to-side with
# distribution version), uncomment below line and add that prefix to PATH
# Don't forget to place git-lfs binary on the PATH below if you want to enable
# Git LFS support
#Environment=PATH=/path/to/git/bin:/bin:/sbin:/usr/bin:/usr/sbin
# If you want to bind Gitea to a port below 1024, uncomment
# the two values below, or use socket activation to pass Gitea its ports as above
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE
###
# In some cases, when using CapabilityBoundingSet and AmbientCapabilities option, you may want to
# set the following value to false to allow capabilities to be applied on gitea process. The following
# value if set to true sandboxes gitea service and prevent any processes from running with privileges
# in the host user namespace.
###
#PrivateUsers=false
###

[Install]
WantedBy=multi-user.target

et on activera puis on lancera le service avec les commandes suivantes :

systemctl daemon-reload
systemctl enable gitea
systemctl start gitea

On passe maintenant à la configuration d’un hôte virtuel sous apache (si vous ne pouvez pas créer/pointer de sous-domaine/domaine, vous pouvez adapter la configuration pour un alias web) en ajoutant le fichier /etc/apache2/sites-enabled/001-com.toto.git.conf :

<VirtualHost *:80>
        ServerName git.toto.com
        ServerAdmin webmaster@localhost
        <IfModule mod_ssl.c>
                Include /etc/apache2/conf-available/options-force-ssl.conf
        </IfModule>
        <IfModule ! mod_ssl.c>
                ProxyPreserveHost On
                ProxyRequests off
                AllowEncodedSlashes NoDecode
                ProxyPass / http://localhost:3000/ nocanon
                ProxyPassReverse / http://localhost:3000/
        </IfModule>
        LogLevel warn
        ErrorLog ${APACHE_LOG_DIR}/com.toto.git-error.log
        CustomLog ${APACHE_LOG_DIR}/com.toto.git-access.log combined
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName git.toto.com
        ServerAdmin webmaster@localhost
        ProxyPreserveHost On
        ProxyRequests off
        AllowEncodedSlashes NoDecode
        ProxyPass / http://localhost:3000/ nocanon
        ProxyPassReverse / http://localhost:3000/
        Header always set Strict-Transport-Security "max-age=500; includeSubDomains; preload"
        <IfModule mod_expires.c>
                ExpiresActive Off
        </IfModule>
        Include /etc/letsencrypt/options-ssl-apache-srv.conf
        SSLCertificateKeyFile    /etc/letsencrypt/live/git.toto.com/privkey.pem
        SSLCertificateFile       /etc/letsencrypt/live/git.toto.com/cert.pem
        SSLCertificateChainFile  /etc/letsencrypt/live/git.toto.com/chain.pem
        LogLevel warn
        ErrorLog ${APACHE_LOG_DIR}/com.toto.git-error.log
        CustomLog ${APACHE_LOG_DIR}/com.toto.git-access.log combined
</VirtualHost>
</IfModule>

Puis on active la configuration apache2 et on ouvre dans le navigateur l’url correspondant à notre config pour nous retrouver dans une page ressemblant à ceci :

On modifie la configuration en entrant nos paramètres de base de donnée, d’emailing, d’url etc.. et en choisissant un compte administrateur pour notre serveur Gitea puis on sauvegarde la configuration.

On pourra par la suite modifier notre configuration en éditant le fichier /etc/gitea/app.ini qui devrait ressembler à ceci :

DOMAIN = git.toto.com
ROOT_URL = https://git.toto.com/
APP_NAME = Gita Local service
RUN_USER = git
WORK_PATH = /var/lib/gitea
RUN_MODE = prod

[database]
DB_TYPE = mysql
HOST = 127.0.0.1:3306
NAME = gitdb
USER = gituser
PASSWD = gitSuperPass
SCHEMA =
SSL_MODE = disable
#PATH = /var/lib/gitea/data/gitea.db
LOG_SQL = false

[repository]
ROOT = /var/lib/gitea/data/gitea-repositories

[server]
ROOT_URL = https://git.toto.com/
HTTP_ADDR = 127.0.0.1
DOMAIN = localhost
HTTP_PORT = 3000
SSH_DOMAIN = git.toto.com
APP_DATA_PATH = /var/lib/gitea/data
DISABLE_SSH = true
SSH_PORT = 22
LFS_START_SERVER = true
LFS_JWT_SECRET = 04oRgkH2x42Hr3LwKqw5RnVonwI5EpRL6xNj7iknM90
OFFLINE_MODE = false

[lfs]
PATH = /var/lib/gitea/data/lfs

[mailer]
ENABLED = true
SMTP_ADDR = mail.toto.com
SMTP_PORT = 465
FROM = git@toto.com
USER = git@totocom
PASSWD = gitMailSuperPass

[service]
REGISTER_EMAIL_CONFIRM = true
ENABLE_NOTIFY_MAIL = true
DISABLE_REGISTRATION = false
ALLOW_ONLY_EXTERNAL_REGISTRATION = false
ENABLE_CAPTCHA = true
REQUIRE_SIGNIN_VIEW = false
DEFAULT_KEEP_EMAIL_PRIVATE = false
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
DEFAULT_ENABLE_TIMETRACKING = true
NO_REPLY_ADDRESS = noreply.toto.com
[openid]
ENABLE_OPENID_SIGNIN = true
ENABLE_OPENID_SIGNUP = true

[cron.update_checker]
ENABLED = false

[session]
PROVIDER = file

[log]
MODE = console
LEVEL = info
ROOT_PATH = /var/lib/gitea/log

[repository.pull-request]
DEFAULT_MERGE_STYLE = merge

[repository.signing]
DEFAULT_TRUST_MODEL = committer

[security]
INSTALL_LOCK = true
INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE2OTcxODM5MDN9.JBnVfKh0XKE3cjcaCMbP0VJgTCZ23GhzaydXabDK7Tc
PASSWORD_HASH_ALGO = pbkdf2

[oauth2]
JWT_SECRET = iLqNIepNzXvEm6SoVohhUmmbTu-WC85tY_sfQAMpqv4

[ui]

Dans le cas d’une modification de se fichier, il faudra juste redémarrer le service gitea.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.