Derioss's blog

GOGS, un github version light en auto-hébergement

Installation et avantages de cette solution

Présentation de la solution

C’est une solution light de github, qu’on peut utiliser “presque” partout et rapide.

De plus, les utilisateurs de github ne seront pas perdu, c’est la mm chose avec des fonctionnalitées en moins (pas de ci).

Enfin, pas de CI… intégré du moins, il s’intègre parfaitement à un jenkins.

Je l’ai utilisé et maintenu un an en production sans avoir eu à me préoccuper de sa maintenance hormis la classque install, configuration, politique de backup et PRA classique.

Compatibilité

Version 0.11.91@2019-08-11

Installation

Prérequis

J’ai choisi comme frontal apache 2.4 (pour changer un peu) mais il y a bien d’autres solutions (notamment Nginx, traefik, istio,envoy suivant l’infrastructure).

Une distribution linux, en l’occurence une vm CentOs 7.

Gogs prend en charge de nombreuses base de données.

l’install

Création d’un utilisateur.

su - root
useradd -m -s /bin/bash git # ajout de l utilisateur
passwd git # création du mot de passe

Pour les mots de passes, par expérience on évite les caractères spéciaux, l’idéal étant de passer par un utilitaire de type keepass et de générer du 128 voir 256 bit pour la prod.

Téléchargement de gogs

librairie officielle

cd /home/git
yum install wget unzip vim
wget https://dl.gogs.io/0.11.91/gogs_0.11.91_linux_amd64.zip && chown git: gogs_0.11.91_linux_amd64.zip
su - git
unzip gogs_0.11.91_linux_amd64.zip && rm gogs_0.11.91_linux_amd64.zip
cd gogs

On monte le service

su - root
cp /home/git/gogs/scripts/systemd/gogs.service /lib/systemd/system
cat /lib/systemd/system/gogs.service # on voit que le path de ExecStart n'est pas le bon
vim /lib/systemd/system/gogs.service
# Dans mon cas je remplace ExecStart
WorkingDirectory=/home/git/gogs
ExecStart=/home/git/gogs web
Restart=always
systemctl start gogs
systemctl enable gogs
systemctl status gogs

On voit bien qu’il tourne sur du http://0.0.0.0:3000.

Plusieurs choix s’offre à nous pour diffuser le service…. bref on lui colle un frontal.

Donc le frontal

Installation

# AH oui
yum update
# Voila c'est mieux
yum install httpd  mod_ssl #serveur apache et son module qui implémente le ssl

Configuration

vim /etc/httpd/conf.d/gogs.conf

Le server name est le FQDN auquel répond votre virtualhost. (doc officielle)

 <VirtualHost *:80>
    ServerName www.gogs.local
    RewriteEngine on
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
</VirtualHost>



<VirtualHost *:443>
        ServerName www.gogs.local
        ProxyPass / http://localhost:3000/
        ProxyPassReverse / http://localhost:3000/
        SSLEngine on
        SSLCertificateFile /etc/pki/tls/private/apache-selfsigned.crt
        SSLCertificateKeyFile /etc/pki/tls/private/apache-selfsigned.key

</VirtualHost>
Génération des certificats.

Ici je génère une paire de certificat auto-signé.

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/apache-selfsigned.key -out /etc/pki/tls/private/apache-selfsigned.crt

Vérification de la configuration

apachectl configtest

Démarrage du serveur

systemctl enable httpd
ystemctl start httpd
systemctl status httpd

Si comme moi vous être dans un lab sans DNS (bind9 voir pfsense..).

A réaliser sur le client (en l’occurence un linux)

vim /etc/hosts

Sur windows, on ouvre un notepad++(ou autre) en tant qu’administrateur voici le path C:\windows\system32\drivers\etc\hosts

et on rajoute cette ligne, qui nous permettra de résoudre.

192.168.1.106 www.gogs.local
ping www.gogs.local # on vérifie qu'on résoud bien
Ouverture des ports sur la vm
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload

Et voila

Il nous reste plus qu’a configurer les différents éléments et vous aurez un git auto-héberger.

Si jamais vous être peu et/ou des petits projet, sur ce gogs à un sqllite fait largement le boulot.

Dépannage

En cas de souci, les logs (par défault) sont ici.

tail -f /var/log/httpd/* # en stream

Moyen rapide de déterminer si un service écoute

yum install net-tools
netstat -netpul | grep httpd # permet de voir si le serveur httpd écoute sur le 443/80, si aucune sortie c'est qu'en effet non..

Moyen rapide (en tcp) de déterminer si le service est atteignable sur le port (bien évidemment, il faut d’abord voir si il est en écoute)

# A partie du client donc
telnet hostname|ip 80
telnet hostname|ip 443