# 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"
}
```

## É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;
}
```

```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
```

> 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
```

:::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

:::
-------------------------------------------------
----------------------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
```

> 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
```

:::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
}
```

```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

```
#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)

### 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>.

:::