FreeBSD et Gitea

Publié le 7 juin 2019

Petite intro des familles

J’utilise de manière très ponctuelle l’outil git pour quelques besoins personnels. Par exemple, j’utilise git pour la création des articles de ce blog. Mon dépôt git était posé dans le homedirectory d’un petit serveur auto hébergé. J’ai eu l’occasion d’utiliser quelques interfaces chouettes du style de github, framagit. Étant donné que je ne suis pas développeur je ne souhaitais pas déployer un outil proche d’une usine à gaz ou complexe. Après quelques recherches je suis tombé sur l’outil Gitea. Ce que j’ai bien aimé ce sont les premières lignes de présentation du logiciel : “Gitea - Git with a cup of tea” (même si je préfère plutôt le café au thé) ainsi que “A painless self-hosted Git service”. Du coup j’ai testé et je dois dire que oui ça fait bien son taf :-)

Un petit tableau comparatif des différentes solutions concurrentes.

FreeBSD et Gitea

J’utilise de plus en plus FreeBSD pour mes serveurs perso et donc je me suis dit que ça serait une bonne idée d’installer Gitea sur ce système d’exploitation.

Ci-dessous les commandes tapées pour procéder à l’installation de Gitea :

pkg update
pkg install gitea

Après l’installation il est nécessaire de configurer Gitea. Le dossier de configuration se trouve /usr/local/etc/gitea/conf.

Nous allons éditer le fichier app.ini. J’ai pris la décision d’utiliser sqlite3 pour la partie base de données étant donné le peu de besoin que j’ai.

#
# Sample Configuration for Gitea using SQLite
#
# For information on the available settings, consult the online
# documentation, or see the accompanying file app.ini.defaults, which
# contains the settings incorporated into the gitea binary.
#
# This sample configuration runs Gitea with a local database.  Before
# running this configuration, make sure to change the INTERNAL_TOKEN,
# JWT_SECRET, and SECRET_KEY variables.  SECRET_KEY is a password of your
# choosing, INTERNAL_TOKEN is a 64-byte random number in BASE64 encoding,
# JWT_SECRET is a 32-byte random number in BASE64 encoding.
# 
# Your can generate the token using for example:
#   openssl rand -base64 64
# 
# You can let Gitea add these to the config for you; you need to make
# app.ini writeable by the git user.
#
# There are no pre-configured users; the first user to register becomes an
# admin.  In this sample configuration, the HTTP server only listens on
# localhost.
#
# If you'd rather use the web-based installer, remove this conf/app.ini file
# and make /usr/local/etc/gitea/conf writeable to the git user.

APP_NAME = Gitea: Git with a cup of tea
RUN_USER = git
RUN_MODE = prod

[database]
DB_TYPE  = sqlite3
HOST     = 127.0.0.1:3306
NAME     = gitea
PASSWD   = 
PATH     = /var/db/gitea/gitea.db
SSL_MODE = disable
USER     = root

[indexer]
ISSUE_INDEXER_PATH = /var/db/gitea/indexers/issues.bleve

[log]
ROOT_PATH = /var/log/gitea
MODE      = file
LEVEL     = Info

[mailer]
ENABLED = false

[oauth2]
JWT_SECRET = <un_mot_de_passe_long>

[picture]
AVATAR_UPLOAD_PATH      = /var/db/gitea/data/avatars
DISABLE_GRAVATAR        = false
ENABLE_FEDERATED_AVATAR = false

[repository]
ROOT = /var/db/gitea/gitea-repositories
# Gitea's default is 'bash', so if you have bash installed, you can comment
# this out.
SCRIPT_TYPE = sh

[repository.upload]
TEMP_PATH = /var/db/gitea/data/tmp/uploads

[security]
INSTALL_LOCK = true
INTERNAL_TOKEN = <un_mot_de_passe_long>
SECRET_KEY   = <un_mot_de_passe_long>

[session]
PROVIDER = file
PROVIDER_CONFIG = /var/db/gitea/data/sessions

[server]
DOMAIN       = <FQDN>
HTTP_ADDR    = <IP>
HTTP_PORT    = 3000
ROOT_URL     = http://localhost:3000/
DISABLE_SSH  = false
SSH_DOMAIN   = <FQDN>
SSH_PORT     = <port de SSH>
OFFLINE_MODE = false
APP_DATA_PATH = /var/db/gitea/data

[service]
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL     = false
DISABLE_REGISTRATION   = true
ENABLE_CAPTCHA         = true
REQUIRE_SIGNIN_VIEW    = false

On peut alors démarrer le service :

service gitea start

Le dossier des logs est /var/log/gitea/ et nous allons notamment regarder le fichier gitea.log qui va nous indiquer que le service est démarré, le port d’écoute et le backend de données utilisé.

Etant donné que mon serveur Gitea écoute sur le port 3000 sur une VM avec adressage IP privé et en HTTP j’ai mis un reverse proxy nginx en frontal dont voici la configuration :

server {
        listen 80;
        server_name git.lovetux.net;
        return 301 https://git.lovetux.net$request_uri;
        access_log  /var/log/nginx/git.lovetux.net.access.log;
        error_log  /var/log/nginx/git.lovetux.net.error.log;
}


server {
        listen 443;
        server_name git.lovetux.net;
        client_max_body_size 300M;
        index index.html index.htm index.php;

        error_page 404 /404.html;

        access_log /var/log/nginx/git.lovetux.net.access.log;
        error_log /var/log/nginx/git.lovetux.net.error.log;

        ssl on;
        ssl_certificate /etc/letsencrypt/live/lovetux.net/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/lovetux.net/privkey.pem;
        add_header Strict-Transport-Security "max-age=10886400; includeSubDomains; preload;";
        ssl_dhparam /etc/nginx/ssl/dhparams.pem;

        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
        ssl_prefer_server_ciphers   on;
        ssl_session_cache shared:SSL:10m;

        location / {
                proxy_pass            http://git.int.lovetux.net:3000;
                proxy_read_timeout    90s;
                proxy_connect_timeout 90s;
                proxy_send_timeout    90s;
                proxy_set_header      Host $host;
                proxy_set_header      X-Real-IP $remote_addr;
                proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header      Proxy "";
        }

}

Première connexion à Gitea et dépôt

Prenez votre butineur préféré et connectez-vous sur l’URL du serveur Gitea. Un bouton Connexion apparaît en haut à droite.

gitea

Une fois les identifiants validés un tableau de boad apparaît sur la page d’accueil. Tout en haut à droite cliquer sur le bouton + fera apparaître un menu et vous choisissez “dépôt”, remplissez le formulaire et cliquer sur “Créer un dépôt” :

gitea

Le nouveau dépôt est maintenant disponible !

gitea

Il ne reste plus qu’à cloner le dépôt et à faire vos premiers commits ;) L’URL du dépôt est affichée, vous pouvez cloner le dépôt par HTTPS ou bien par SSH :

cd /tmp
git clone https://<serveur>/<mon_identifiant>/<nom_du_depot>
ou bien
git ssh://git@<nom_du_serveu>:<port_de_ssh>/<mon_identifiant>/<nom_du_depot>

Reste plus qu’à produire du contenu / code et d’envoyer le tout sur le serveur Gitea.

git status
git add <mes fichiers>
git commit -m 'mon joli commentaire'
git push #on envoie le bousin

Sur un dépôt avec un peu d’activité le tableau de bord montre les fichiers modifiés ainsi qu’un horodatage :

gitea

Aller plus loin avec Gitea

Cet article est très sommaire. Je vous invite à consulter la documentation officielle.