# Installation Gitlab,Caprover,Jenkins sur un VPS sous Ubuntu ## Prérequis - Un serveur VPS sous Ubuntu 20.04 ou plus récent - Nginx commme serveur proxy - Docker pour nos containers - Un nom de domaine (domain_name) - Configurer vos sous domaines: | Type | Host | Value | TTL | | ----- | -------- | -------- |-------- | | A | jenkins | x.x.x.x |Automatic| | A | captain | x.x.x.x |Automatic| | A | gitlab | x.x.x.x |Automatic| - Installation de certbot pour les certficats SSL/TLS: ```shell! sudo apt install certbot python3-certbot-nginx ``` # Gitlab-CE sur Ubuntu ## Étape 1 : Installation de gitlab Assurez-vous que votre système est à jour avant d'installer GitLab. ```bash=1 sudo apt update && sudo apt upgrade -y ``` ```shell=2 curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash ``` ```shell=3 sudo EXTERNAL_URL="http://gitlab.domaine_name.com" apt install -y gitlab-ce ``` > Editer le fichier de configuration gitlab et définir les valeurs de certaines propriétés par défaut comment le port du service puma qui sera exposé sur le reverse proxy de nginx et définit le port de nginx sur un autre port que le 80. > - external_url => l'url de votre service gitlab > - pumal['port'] et puma['listen'] qui définissent les configurations du serveur d'application de gitlab > - nginx['listen_port'] et nginx['listen_https'] qui définissent les configuration du serveur web interne de gitlab. > - Le gitlab_rails['port'] configure le port à utiliser par gitlab pour la génération d'urls ou l'utilisation de certains services internes. ```shell=4 sudo nano /etc/gitlab/gitlab.rb (configurer le fichier) ``` ```ruby=1 external_url 'https://gitlab.domaine_name.com' gitlab_rails['port']=8181 # Puma configuration puma['listen'] = '127.0.0.1' puma['port'] = 8182 # NGINX Configuration nginx['listen_port'] = 8082 nginx['listen_https'] = false # Si vous utilisez un proxy HTTPS, définissez ces paramètres nginx['proxy_set_headers'] = { "X-Forwarded-Proto" => "https", "X-Forwarded-Ssl" => "on", "X-Forwarded-Port" => "443" } ``` ![carbon (13)](https://hackmd.io/_uploads/ByaXiFycC.png) ## Étape 2 : Configuration du serveur virtual de gitlab sur nginx ```shell=1 #Obtenir un noveau certificat SSL/TLS pour notre gitlab sudo certbot certonly --nginx -d gitlab.domain_name.com sudo nano /etc/nginx/sites-available/gitlab ``` ```nginx=1 server { listen 80; server_name gitlab.domain_name.com; # Redirect HTTP to HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name gitlab.domain_name.com; location / { proxy_pass http://localhost:8182; 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 X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Ssl on; proxy_set_header X-Forwarded-Port 443; } location ~ ^/(assets|uploads|favicon.ico|robots.txt) { root /opt/gitlab/embedded/service/gitlab-rails/public; gzip_static on; # si vous utilisez la compression gzip expires max; add_header Cache-Control public; } # managed by Certbot ssl_certificate /etc/letsencrypt/live/gitlab.domain_name.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/gitlab.domain_name.com/privkey.pem; } ``` ![carbon (12)](https://hackmd.io/_uploads/Hy3U5YJcA.png) ```shell=1 ### Créer un lien symbolique pour votre serveur virtuel sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab ### Valider la configuration de nginx et redémarre le sudo nginx -t sudo systemctl restart nginx ```` > Pour verifier les configs du gitlab que tout est ok ```shell=1 sudo gitlab-rake gitlab:check SANITIZE=true ``` > Reconfigurer gitlab pour enregistrer toutes les modifications ```shell sudo gitlab-ctl reconfigure ``` > Redémarre le gitlab et revoir les états de ses services (run) ```shell sudo gitlab-ctl restart sudo gitlab-ctl status ``` ![Capture d’écran 2024-08-06 à 12.18.08](https://hackmd.io/_uploads/rJ6qEqJ5R.png) > Se connecter à l'interface gitbub_rails pour définir un mot de passe ```shell=1 sudo gitlab-rails console (#Se connecter à la console Rails de GitLab) > user = User.where(id:1).first > user.password = 'your_new_password' > user.password_confirmation ='your_new_password' > user.save! > exit ``` ![Capture d’écran 2024-08-06 à 11.49.15](https://hackmd.io/_uploads/r1rgAYk9A.png) :::success ## SUCCESS: Si tout est ok Se connecter sur l'url de caprover défini ex [https://your_domain_name.gitlab.co](https://your_domain_name.gitlab.com) Now try to login with <strong >root </strong> as usename and your password ![Capture d’écran 2024-08-08 à 14.45.24](https://hackmd.io/_uploads/rJlUejLM9C.png) ::: ------------------------------------------------- ----------------------FIN INSTALLATION GITLAB-------------------------- ------------------------------------------------------------- ------------------------------------------------------------- # CapRover sur Ubuntu ## Étape 1 : Installer caprover avec docker ### La commande docker pour installer caprover > Pour notre cas Caprover aussi s'installe avec des services Swarm sous docker en :::info :information_source: Pour plus d'infos sur l' [Image caprover docker](https://hub.docker.com/r/caprover/caprover) ::: ``` sudo docker run -p 81:80 -p 8443:443 -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock -v /captain:/captain -e ACCEPTED_TERMS=true -e BY_PASS_PROXY_CHECK=true caprover/caprover ``` :::warning :warning: Verifier d'abord les ports définis s'ils sont disponibles avec les commandes suivantes: ```shell= #pour savoir qui écoute un port ayant 80 sudo lsof -i :80 #Ou bien sudo netstat -tulnp | grep :80 #Savoir la liste de tous les ports écoutés sudo netstat -tulnp | grep LISTEN #En savoir plus de quel service utilise ce port en passant le pid apres -p ps -p 451143 -o pid,comm,args ``` ::: ### Ou définir un fichier docker-compose.yml > Ou configurer un fichier docker-compose comme ainsi dans un repertoire et executer la commande : $ docker-compose up -d ```yaml=1 version: '3.8' services: caprover: image: caprover/caprover ports: - "81:80" - "8443:443" - "3000:3000" volumes: - /var/run/docker.sock:/var/run/docker.sock - /captain:/captain environment: - ACCEPTED_TERMS=true - BY_PASS_PROXY_CHECK=true - MAIN_NODE_IP_ADDRESS=127.0.0.1 restart: always ``` ![carbon (14)](https://hackmd.io/_uploads/SkSHk2J5A.png) > Une fois démarré, verifions les 3 services derrieres l'exécution de caprover: > - captain-captain > - captain-certbot > - captain-nginx ```shell sudo docker service ls ``` ![image](https://hackmd.io/_uploads/BJkFCIUFC.png) :::danger #### :warning: Au cas où l'un des services ne marche pas avec comme réplica 0/1 Exemple captain-nginx par cause de defaut de port ``` sudo docker service create --name captain-nginx --replicas 1 --publish 81:80 nginx:1.24 ``` ::: ## Étape 2 : Configuration du serveur virtual de caprover sur nginx ```shell=1 #Obtenir un nouveau certificat SSL/TLS pour notre captain sudo certbot certonly --nginx -d captain.domain_name.com sudo nano /etc/nginx/sites-available/captain ``` ```nginx=1 server { server_name captain.yourdomain_name.com; location / { proxy_pass http://localhost:3000; # Modifier le port si nécessaire 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 X-Forwarded-Proto $scheme; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/captain.yourdomain_name.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/captain.yourdomain_name.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = captain.yourdomain_name.com) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; server_name captain.yourdomain_name.com; return 404; # managed by Certbot } ``` ![carbon (18)](https://hackmd.io/_uploads/r1O1k61cR.png) ```shell=1 ### Créer un lien symbolique pour votre serveur virtuel sudo ln -s /etc/nginx/sites-available/captain /etc/nginx/sites-enabled/captain ### Valider la configuration de nginx et redémarre le sudo nginx -t sudo systemctl restart nginx ```` :::success ## SUCCESS: Si tout est ok Se connecter sur l'url de caprover défini ex: [https://captain.domain_name.com](https://captain.domain_name.com) Essaies de te connecter avec <strong >captain42 </strong> comme password ![Capture d’écran 2024-08-08 à 14.43.47](https://hackmd.io/_uploads/rygCYUM5A.png) ``` #La commande par defaut pour faire les configurations de démarrage caprover serversetup ``` ::: :::danger ## CAS : Mot de passe oublié Pour debugger ou changer le mot de passe ``` # Fermer le service captain docker service scale captain-captain=0 #Effacer la clé et valeur du mot de passe hashé sudo nano /captain/data/config-captain.json #Redémarrr le service captain docker service scale captain-captain=1 ``` ::: ------------------------------------------------- ----------------------FIN INSTALLATION CAPROVER--------------------- ------------------------------------------------------------- ------------------------------------------------------------- # Jenkins sur Ubuntu ## Étape 1 : Installation de JENKINS Assurez-vous que votre système est à jour avant d'installer Jenkins. ```bash=1 sudo apt update && sudo apt upgrade -y ``` Installation de Java JDK (17 pour notre cas) et Jenkin ```bash=1 sudo apt install -y openjdk-17-jdk curl -fsSL https://pkg.jenkins.io/debian/jenkins.io.key | sudo tee \ /usr/share/keyrings/jenkins-keyring.asc > /dev/null echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \ https://pkg.jenkins.io/debian binary/ | sudo tee \ /etc/apt/sources.list.d/jenkins.list > /dev/null sudo apt update sudo apt install -y jenkins ``` Démarrage de Jenkins ```shell=1 sudo systemctl start jenkins sudo systemctl enable jenkins ``` ## Étape 2 : Configuration port par defaut de jenkins Définit le port par defaut de Jenkins sudo nano /lib/systemd/system/jenkins.service ``` Environment="JENKINS_PORT=8081" ``` sudo nano /etc/default/jenkins (ex HTTP_PORT=8081) ![Capture d’écran 2024-08-06 à 17.08.16](https://hackmd.io/_uploads/BJ_idRkqC.png) ### Toujours recharcher la configuration system après modification des fichier de conf et aussi des fichiers d’unité system sudo systemctl daemon-reload (). sudo nano /etc/nginx/sites-available/jenkins (avec configuration ngxinx) ## Étape 3 : Configuration du serveur virtual de caprover sur nginx ```shell=1 #Obtenir un nouveau certificat SSL/TLS pour notre jenkins sudo certbot certonly --nginx -d jenkins.domain_name.com sudo nano /etc/nginx/sites-available/jenkins ``` ```nginx=1 server { listen 80; server_name jenkins.domaine_name.com; location / { proxy_pass http://localhost:8081; 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 X-Forwarded-Proto $scheme; } listen 443 ssl; ssl_certificate /etc/letsencrypt/live/jenkins.domaine_name.com-0001/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/jenkins.domaine_name.com-0001/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = jenkins.domaine_name.com) { return 301 https://$host$request_uri; } } ```` ```bash=1 ### Créer un lien symbolique pour votre serveur virtuel sudo ln -s /etc/nginx/sites-available/jenkins /etc/nginx/sites-enabled/jenkins ### Valider la configuration de nginx et redémarre le sudo nginx -t sudo systemctl restart nginx ``` :::success ## SUCCESS: Si tout est ok ### Recuperer le mot de passe initial de Jenkins ```shell cat /var/lib/jenkins/secrets/initialAdminPassword ``` Se connecter sur l'url de caprover défini ex: [https://jenkins.domaine_name.com](https://jenkins.domaine_name.com) Essaies de te connecter avec le password trouvé dans <strong>initialAdminPassword </strong>. ![Capture d’écran 2024-08-08 à 14.42.50](https://hackmd.io/_uploads/SkoKt8MqR.png) :::