GitLab est un référentiel en ligne qui permet aux développeurs de créer, stocker et gérer leurs projets avec la possibilité de revenir à un état antérieur en cas d’erreur. Pour utiliser le référentiel en ligne, aucune configuration n’est requise, il suffit de créer un compte et de commencer à créer des projets.
Néanmoins vous avez la possibilité d’installer sur votre propre serveur la version Gitlab-ce (gratuite) ou la version Gitlab-ee (payante).
Nous utiliserons un vps, ce qui nous donne la capacité d’installer gitlab-ce et d’accueillir également d’autres projets en même temps.
Le serveur gitlab utilise nginx comme serveur par défaut, tandis que nos projets utilisent le serveur apache pour servir le contenu. L’exécution simultanée de deux serveurs internes peut poser de nombreux problèmes. Nous utiliserons le serveur apache pour exécuter à la fois gitlab et d’autres projets web.
Prérequis :
- Avoir un serveur sous la distribution Debian 10 https://www.debian.org/CD/http-ftp/index.fr.html#stable
- Disposer des droits administrateur et ce connecter en admin dans le terminal avec la commande : su – (afin de bénéficier de toutes les commandes nécessaires )
- Attention lors de la configuration de gitlab-ce il vous sera demandé de renseigner l’URL de votre gitlab, si vous souhaitez activer le SSL il vous faudra voir la configuration de let’s encrypt pour apache2 https://certbot.eff.org/lets-encrypt/debianbuster-apache.html
1 :
Nous installerons gitlab-ce sur notre VPS manuellement à l’aide des commandes suivantes:
sudo apt install curl openssh-server ca-certificates postfix
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bashsudo
apt install gitlab-ce
L’installation de gitlab sur notre serveur nous donne la possibilité de changer le serveur nginx par défaut pour lequel il a été configuré.
2 :
Nous allons configurer l’url à utiliser pour accéder au serveur gitlab en éditant le fichier de configuration gitlab à l’aide de la commande suivante :
sudo nano /etc/gitlab/gitlab.rb
Modifiez le fichier de configuration en changeant l’url externe avec l’URL souhaitée:
external_url " http: // <votredomaine>"
Enregistrez votre configuration et exécutez cette commande pour reconfigurer votre installation gitlab:
sudo gitlab-ctl reconfigure
Votre installation de gitlab devrait fonctionner partiellement, visitez l’url spécifiée pour accéder à votre gitlab, ou en local sur le serveur à l’adresse 127.0.0.1/8080
Lors de la première connexion la page vous demandera de modifier votre mot de passe root.
3 :
Nous avons maintenant un serveur gitlab casi fonctionnel, mais nous voulons qu’il fonctionne en utilisant le serveur apache afin que nous puissions héberger d’autres éléments (sites Web, applications, etc.) sur le même serveur. Nous allons donc installer le serveur Apache et configurer le gitlab pour qu’il s’exécute.
Installez le serveur Apache en utilisant:
sudo apt update
sudo apt install apache2
sudo a2enmod proxy_http
sudo a2enmod réécrire
sudo a2enmod ssl
sudo a2enmod headers
systemctl restart apache2
Ceux-ci installeront et démarreront le serveur Apache. Pour vérifier si le serveur Apache est en cours d’exécution, utilisez:
sudo systemctl status apache2
qui devrait afficher activé (en cours d’exécution).
4 :
Configurons notre serveur gitlab pour utiliser le serveur apache au lieu du serveur nginx par défaut.
sudo nano /etc/gitlab/gitlab.rb
Modifiez ce qui suit dans notre fichier de configuration gitlab:
# Modifiez l'url externe pour qu'elle corresponde au domaine dans notre fichier de configuration Apache
external_url " http: // <votredomaine>"
# Désactiver nginx
nginx ['enable'] = false
# Donnez à l'utilisateur Apache des privilèges pour écouter gitLab
web_server ['external_users'] = ['www-data']
Enregistrez le fichier, puis créez le fichier de configuration gitlab apache dans le dossier apache sites-available.
# accédez au dossier de configuration apache
cd /etc/apache2/sites-available
# créer un nouveau fichier de configuration
touch gitlab.conf
# ouvrir le fichier de configuration pour éditer
sudo nano gitlab.conf
Copiez et collez ce qui suit dans le fichier en modifiant les valeurs en correspondance avec votre configuration :
<VirtualHost *: 80>
ServerName < your_domain_or_sub_domai n>
ServerSignature Off
ProxyPreserveHost On
AllowEncodedSlashes NoDecode
<Location />
Obliger tous accordé
ProxyPassReverse http://127.0.0.1:8080
ProxyPassReverse < your_domain_or_sub_domai n>
</ Location>
RewriteEngine on
RewriteCond% {DOCUMENT_ROOT} / {%} REQUEST_FILENAME! -f
RewriteRule. * http://127.0.0.1:8080% {REQUEST_URI} [P, QSA]
# nécessaire pour télécharger les pièces jointes
DocumentRoot / opt / gitlab / embedded / service / gitlab-rails / public
#Configurez les documents d'erreur Apache, si le back-end tombe en panne (c'est-à-dire une erreur 503), une page de maintenance / déploiement est lancée.
ErrorDocument 404 /404.html
ErrorDocument 422 /422.html
ErrorDocument 500 /500.html
ErrorDocument 503 /deploy.html
LogFormat "% {X-Forwarded-For} i% l% u% t \"% r \ "%> s % b "common_forwarded
ErrorLog / var / log / httpd / logs / < votre_domaine_ou_sub_domai n> _error.log
CustomLog / var / log / httpd / logs / < votre_domaine_ou_sous_domaine n> _forwarded.log common_forwarded
CustomLog / var / log / httpd / logs / < votre_domaine_ou_sous_domaine n> _access.log combiné env =! dontlog
CustomLog / var / log / httpd / logs / < votre_domaine_ou_sous_domain> .log combiné
</VirtualHost>
Pour le certificat SSL ajouter ces lignes au fichier de configuration gitlab.conf avant le </VirtualHost> en ajustant les paramètres à votre configuration.
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/domain.tld/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain.tld/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/domain.tld/chain.pem
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCompression off
SSLOptions +StrictRequire
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/www.domain.tld-error.log
CustomLog ${APACHE_LOG_DIR}/www.domain.tld-access.log combined
Enregistrez le fichier et activez le site gitlab en activant la configuration en utilisant:
# Activer gitlab
sudo a2ensite gitlab.conf
#Redémarer Apache
service apache2 restart
#Reconfigurer gitlab
sudo gitlab-ctl reconfigure
#Redémarrer gitlab server
sudo gitlab-ctl restart
Nous avons fini de configurer notre gitlab pour qu’il s’exécute à partir du serveur apache, vérifiez maintenant à nouveau l’url pour voir un gitlab fonctionnel.
5 :
Nous avons installé avec succès notre gitlab pour utiliser le serveur apache, vérifions que notre serveur peut également contenir plusieurs sites.
Avant de créer la configuration Apache pour le nouveau site, nous allons créer le dossier pour contenir le contenu du site:
#Créer un répertoire pour le nouveau site
sudo mkdir -p /var/www/new_site/public_html
# Autoriser les utilisateurs réguliers à modifier les fichiers dans le répertoire
sudo chown -R $ USER: $ USER /var/www/new_site/public_html
#Autoriser l'accès général en lecture à notre répertoire Web
sudo chmod -R 755 /var/www
Créez un nouveau fichier de configuration pour le nouveau site en dupliquant le fichier de configuration par défaut /etc/apache2/sites-available/000-default.conf et en le renommant en /etc/apache2/sites-available/new_site.conf
# accédez au dossier de configuration apache
cd /etc/apache2/sites-available
# copier le contenu de la configuration par défaut dans le nouveau fichier de configuration
sudo cp 000-default.conf new_site.conf
# ouvrir un nouveau fichier de configuration pour éditer
sudo nano new_site.conf
puis modifiez le contenu du nouveau fichier pour qu’il corresponde à la configuration ci-dessous:
<VirtualHost *: 80>
ServerName <site-domain>
ServerAlias <site-domain>
ServerAdmin < site-admin-email>
DocumentRoot /var/www/new_site/public_html
#Répertoire créé précédemment
ErrorLog $ {APACHE_LOG_DIR} /error.log
CustomLog $ {APACHE_LOG_DIR} /access.log combiné
</VirtualHost>
Après avoir enregistré notre fichier de configuration, nous pouvons activer notre nouveau site et redémarrer apache pour affecter les changements:
# activer la nouvelle configuration du site
sudo a2ensite new_site.conf
# redémarrer le serveur apache
sudo service apache2 restart
Assurez-vous que vos DNS ont été configurés pour pointer vers votre adresse IP public.
Rediriger les requêtes vers le serveur Apache
Dans un premier temps, il va donc falloir faire en sorte que lors d’une requête sur votre box, qui est la seule à être accessible depuis l’extérieur, celle-ci soit redirigée vers votre Serveur web, pour qu’elle soit traitée par le service adapté (en l’occurrence le serveur Apache2).
Pour cela, il va falloir accéder à l’interface de configuration de votre box. L’accès se fait différemment selon votre Fournisseur d’Accès Internet. Il faut donc que vous cherchiez (par exemple sur le site de votre fournisseur d’accès, ou plus simplement via votre moteur de recherche préféré) comment accéder à l’interface d’administration de votre box.
Une fois sur l’interface d’administration, et après vous être authentifié, vous allez pouvoir ouvrir les ports de votre box et rediriger les requêtes vers le serveur Apache.
Cette configuration se fait dans une partie qui peut avoir plusieurs noms, « configuration NAT », « Gestion des redirections de ports », « port forwading », etc.
Une fois que vous êtes dans la catégorie de configuration adaptée, le reste de la procédure est sensiblement équivalente pour l’ensemble des FAI. Vous allez mettre en place deux redirections différentes :
Type de requête | Port externe de la requête | Port interne de la redirection | Protocole employé | Équipement cible |
---|---|---|---|---|
HTTP | 80 | 80 | TCP | serveur web* |
HTTPS | 443 | 443 | TCP | serveur web* |
*serveur web peut correspondre soit au nom de votre Serveur, soit à son adresse IP sur le réseau interne.
Vous pouvez maintenant tester vos URL dans votre navigateur. Si vous rencontrez une erreur, vous devez passer en revue vos configurations pour vous assurer que tout était bien configuré.
Il ce peut cependant que vous rencontriez des erreurs de configuration autres que celles abordées durant ce tutoriel:
Problème de configuration des ports dans le fichier :
nano /etc/apache2/ports.conf
voir ceci : https://httpd.apache.org/docs/2.2/fr/bind.html
Problème d’autorisation dans les fichiers htacess :
nano /etc/apache2/apache2.conf
voir ceci : https://geekonweb.fr/autoriser-les-fichiers-htaccess-dapache-sur-un-serveur-sous-debian-8.html
Au cas où vous souhaiteriez réinitialiser le mot de passe root : https://docs.gitlab.com/12.10/ee/security/reset_root_password.html
Et pour approfondir, je vous partage cette ressource pour l’utilisation de Gitlab : http://osur-wikis.univ-reunion.fr/mediawiki/index.php/Utilisation_de_Git_et_GitLab
6 :
Configurez les référentiels de serveur pour push & pull:
Après avoir créé le serveur gitlab, les nouveaux utilisateurs peuvent s’inscrire et créer des projets sur le serveur gitlab.
Dans une situation où aucun utilisateur n’est autorisé à pull ou à push vers un référentiel, nous pouvons corriger cela en modifiant les lignes suivantes dans notre configuration gitlab (/etc/gitlab/gitlab.rb):
Ouvrez le fichier gitlab pour le modifier:
sudo nano /etc/gitlab/gitlab.rb
Modifiez les lignes suivantes pour refléter les changements ci-dessous:
gitlab_workhorse['enable'] = true
gitlab_workhorse['listen_network'] = "tcp"
gitlab_workhorse['listen_addr'] = "localhost:8282"
Après avoir enregistré le fichier de configuration, reconfigurez le serveur gitlab en utilisant:
sudo gitlab-ctl reconfigure
Puis :
sudo gitlab-ctl restart