Git avec serveur HTTPs

Domaine: https://git.progysm.com/

Création du serveur HTTPs

* Génération du fichier de configuration avec GenList2 (remplir l'URL du serveur http://git.progysm.com/ et télécharger le fichier install/apache2.conf)

* Éditer le fichier
vim /etc/apache2/sites-available/git.progysm.com.conf
 * changer VirtualHost *:80
 * changer le courriel de ServerAdmin 
 * enlever les commentaires
 * enregistrer

* Créer le répertoire
mkdir /var/www/vhost/git.progysm.com
chown username:www-data /var/www/vhost/git.progysm.com
chmod 750 /var/www/vhost/git.progysm.com

* Charger la configuration et recharger la configuration
a2ensite git.progysm.com.conf
systemctl reload apache2

* Tester
http://git.progysm.com/

* Installation certificat SSL avec Let's Encrypt (certbot-auto 0.24.0)
./certbot-auto run --apache -d git.progysm.com
 * redirect 2

* Vérifier le fichier créer:
/etc/apache2/sites-available/git.progysm.com-le-ssl.conf

* Tester
https://git.progysm.com/
http://git.progysm.com/ (redirection)

Site à la racine

robots.txt

User-agent: *
Disallow: /

index.php

<!DOCTYPE html>
<html lang="fr">
 <head>
  <meta charset="UTF-8">
  <title>git.progysm.com</title>
 </head>
 <body>
   <h1>git.progysm.com</h1>
 </body>
</html>

Ne pas oublier les droits...

chown username:www-data index.php robots.txt

git-http-backend

Fichier: /usr/lib/git-core/git-http-backend
Sur disque: /var/www/vhost/git.progysm.com/git/
Web: https://git.progysm.com/git/depot.git

* Vérifier que mod_cgi, mod_alias, et mod_env sont activé avec:
apache2ctl -M | grep -E cgi_\|alias_\|env_

* Créer un répertoire git par défaut pour les dépôts
* Permet d'avoir une page web à la racine, fichier robots.txt, favicon.ico, etc...
mkdir /var/www/vhost/git.progysm.com/git
chown username:www-data /var/www/vhost/git.progysm.com/git
chmod 750 /var/www/vhost/git.progysm.com/git

* Éditer le fichier de configuration
vim /etc/apache2/sites-available/git.progysm.com-le-ssl.con
 * dans le VirtualHost, variable GIT_PROJECT_ROOT
SetEnv GIT_PROJECT_ROOT /var/www/vhost/git.progysm.com/git

 * si on ne veut pas de fichier git-daemon-export-ok
SetEnv GIT_HTTP_EXPORT_ALL

 * Rediriger
AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$          /var/www/vhost/git.progysm.com/git/$1
AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/vhost/git.progysm.com/git/$1

 * Alias pour le répertoire /git/
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/

 * Authentification anonyme
RewriteEngine On
RewriteCond %{QUERY_STRING} service=git-receive-pack [OR]
RewriteCond %{REQUEST_URI} /git-receive-pack$
RewriteRule ^/git/ - [E=AUTHREQUIRED:yes]

       <LocationMatch "^/git/">
                Order Deny,Allow
                Deny from env=AUTHREQUIRED

                AuthType Digest
                AuthName "Git"
                AuthDigestProvider file
                AuthUserFile /etc/apache2/auth/git-htdigest
                AuthDigestDomain / https://git.progysm.com/
                Require valid-user
                Satisfy Any
       </LocationMatch>

* Créer authentification
mkdir /etc/apache2/auth/
htdigest -c /etc/apache2/auth/git-htdigest Git username

Créer un dépôt

* créer le dépôt
cd /var/www/vhost/git.progysm.com/git
git init --bare --shared=group genlist2.git
touch genlist2.git/git-daemon-export-ok
chown -R username:www-data genlist2.git

* envoyer un dépôt existant:
git remote add neworigin https://git.progysm.com/git/genlist2.git
git push -u neworigin master
 * entrer username
 * entrer mot de passe

* cloner le dépôt (sans mot de passe)
git clone https://git.progysm.com/git/genlist2.git