Construire un frontend web Git et un serveur Git avec FreeBSD + fcgiwrap + cgit
Bonjour, c'est Munou.
Jusqu'à récemment, je construisais avec GItea, mais je voulais améliorer cela car c'était trop riche et consommait des ressources serveur inutiles.
De plus, je voulais créer des dépôts de base autant que possible depuis la CLI, et bien que Github ait la commande gh, je ne voulais pas adopter de telles commandes dépendantes de la plateforme pour mon usage personnel, donc je ne les ai pas introduites.
C'est parce que les binaires dépendants de la plateforme n'offrent pas beaucoup d'apprentissage de bas niveau.
J'ai donc adopté cgit comme frontend web séparé pour git et stocké git sur une destination distante via SSH, ce qui m'a permis de construire exactement ce que je voulais.
Rendre Git pushable
En d'autres termes, il suffit de créer un dépôt bare sur le serveur Git et de pouvoir y pusher.
Il est supposé que vous pouvez déjà vous connecter en SSH à la destination distante, qui est cette fois le serveur Git.
Création de l'utilisateur git
Dans le cas de FreeBSD, vous pouvez le créer de manière interactive avec la commande "adduser".
adduser
Après avoir créé l'utilisateur git ici, basculez vers cet utilisateur et ajoutez la clé publique du client à .ssh/authorized_keys.
su - git
mkdir .ssh
chmod 700 .ssh
vim .ssh/authorized_keys
# ou
echo "clé publique du client" > ".ssh/authorized_keys"
chmod 600 .ssh/authorized_keys
Vérifiez que vous pouvez maintenant ssh.
De plus, créez un répertoire pour stocker les dépôts sous le répertoire personnel de cet utilisateur git.
mkdir repos
Ensuite, configurez la branche par défaut à utiliser avec git config.
git config --global init.defaultBranch main
Permettre la création de dépôts du côté client vers le côté serveur
Tel quel, il faudrait se connecter au serveur Git à chaque fois, créer un dépôt et faire un git push depuis le client, ce qui est trop fastidieux. Nous allons donc permettre d'effectuer une série d'opérations depuis le client.
J'ai ajouté ce qui suit à .bashrc.
mkr() {
ssh git@bsd "git init --bare repos/$1.git"
ssh git@bsd "cd repos/$1.git; git branch -m main"
echo "remote add origin git@bsd:~/repos/$1.git"
}
Maintenant, la création de dépôts peut être effectuée côté client à partir du nom de dépôt donné en argument.
Enfin, en affichant la commande pour exécuter l'URL distante sur la sortie standard, il devient facile de définir l'URL distante.
Installation de cgit
Pour utiliser cgit, cgi est nécessaire, nous allons donc installer les paquets requis. Nous supposons que Nginx est déjà installé.
pkg install cgit fcgiwrap
Il est nécessaire de permettre à Nginx d'accéder via un socket UNIX avec les permissions utilisateur et groupe www:www, et d'activer le service.
sysrc fcgiwrap_enable=YES
sysrc fcgiwrap_user=www
sysrc fcgiwrap_group=www
sysrc fcgiwrap_socket_owner=www
sysrc fcgiwrap_socket_group=www
service fcgiwrap start
Configuration de cgit
Il est nécessaire de configurer cgit.
Cette fois, j'ai légèrement personnalisé les paramètres par défaut, ce qui a donné ce qui suit.
$ cat /usr/local/etc/cgitrc
root-title=Git
root-desc=public repositories
virtual-root=/
scan-path=/home/git/repos/
css=/style.css
logo=/top.png
head-include=/usr/local/www/cgit/head.html
readme=:README.md
readme=:README.rst
enable-commit-graph=1
Les fichiers à distribuer avaient déjà été créés sous /usr/local/www/cgit/ au moment de l'installation du paquet.
Configuration de Nginx
Maintenant, voici Nginx.
server {
if ($host = git.soulminingrig.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
server_name git.soulminingrig.com;
listen 80;
}
server {
server_name git.soulminingrig.com;
listen 443 ssl;
root /usr/local/www/cgit;
location / {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/local/www/cgit/cgit.cgi;
fastcgi_param PATH_INFO $uri;
fastcgi_param QUERY_STRING $query_string;
fastcgi_pass unix:/var/run/fcgiwrap/fcgiwrap.sock;
}
location ~* \.(css|png|ico)$ {
root /usr/local/www/cgit;
}
ssl_certificate /usr/local/etc/letsencrypt/live/git.soulminingrig.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /usr/local/etc/letsencrypt/live/git.soulminingrig.com/privkey.pem; # managed by Certbot
}
Après avoir créé le fichier conf ci-dessus, vérifiez la syntaxe avec nginx -t, puis redémarrez.
nginx -t
service nginx restart
D'ailleurs, j'avais déjà obtenu le certificat avec certbot.
certbot --nginx -d git.soulminingrig.com
Maintenant, l'accès est possible.
Conclusion
J'ai ainsi pu construire un frontend web Git très léger.
Je suis plutôt satisfait car il peut être construit avec très peu de ressources.
À la prochaine. Merci.