# Open source

L'**open source** désigne des logiciels dont le code source est librement accessible, permettant à tout le monde de le modifier, l'améliorer et le redistribuer. Ce modèle favorise la collaboration et l'innovation, avec des exemples comme **Linux** ou **Firefox**.

# OpenProject

**OpenProject** est une plateforme de gestion de projet open-source qui permet de planifier, suivre et collaborer sur des projets. Elle offre des fonctionnalités comme la gestion des tâches, des diagrammes de Gantt, le suivi des bugs, et la gestion des sprints pour les équipes agiles. Son caractère open-source permet de la personnaliser et de l'adapter aux besoins des utilisateurs.

# Fonctionnalités entreprise

<p class="callout info">Source : [OpenProject Enterprise mode for free · GitHub](https://gist.github.com/markasoftware/f5b2e55a2c2e3abb1f9eefcdf0bfff45)</p>

##### <span style="text-decoration: underline;">**Solution :**</span>

- Remplace le fichier `<strong>/opt/openproject/app/models/enterprise_token.rb</strong>` dans le code source par le fichier [enterprise\_token.txt](https://wiki.ezoxe.fr/attachments/3) (version texte) ou [enterprise\_token.rb](https://wiki.ezoxe.fr/attachments/2) (version .rb)
- Assure-toi également de REDÉMARRER OpenProject après avoir remplacé le fichier. Il n'indique pas que le mode entreprise est activé dans les paramètres, mais toutes les fonctionnalités du mode entreprise, telles que les tableaux KanBan, sont activées.

<p class="callout info">**Version du cœur :** OpenProject 14.6.3  
**Version de PostgreSQL :** 13.16</p>

<div class="attributes-key-value" id="bkmrk-version-du-c%C5%93ur-%3A%C2%A0op"></div>##### <span style="text-decoration: underline;">**Mise à jour :**</span>

<div class="attributes-key-value--key" id="bkmrk--1"></div><div class="attributes-key-value--key" id="bkmrk--2"></div>Si vous souhaitez mettre à jour OpenProject, il est recommandé de retirer le fichier et de remettre le fichier d'origine [enterprise\_token\_origin.rb](https://wiki.ezoxe.fr/attachments/4) avant de procéder à la mise à jour. Si vous choisissez de procéder à la mise à jour sans retirer le fichier, assurez-vous ensuite d'exécuter la commande suivante :  
`sudo openproject reconfigure`  
Cela permettra de reconfigurer OpenProject et de restaurer son bon fonctionnement (ne modifiez rien lors de la reconfiguration pour conserver vos données). Après cette opération, il vous faudra remettre le fichier `enterprise_token.rb` manuellement.

Notez également qu'en cas de développement spécifique ou de modifications apportées au logiciel, la mise à jour peut entraîner la suppression ou rendre obsolètes vos ajouts.

<div class="attributes-key-value--key" id="bkmrk--3">  
</div><div class="attributes-key-value--key" id="bkmrk--4"></div><p class="callout warning"><span style="color: rgb(224, 62, 45);">Avertissement concernant l’utilisation des fonctionnalités Enterprise payantes via un contournement</span></p>

L'utilisation de fonctionnalités Enterprise payantes d'OpenProject activées par un contournement (par exemple, le remplacement de fichiers dans le code source) est strictement réservée à des fins de test ou d'évaluation dans un environnement non productif. **Cette méthode de contournement n'est pas autorisée par OpenProject** et peut entraîner des risques juridiques et techniques.

Si vous utilisez ces fonctionnalités dans un environnement de production, **vous risquez de rencontrer des problèmes de stabilité ou de compatibilité**, et **OpenProject se réserve le droit de refuser tout support technique** en raison de l'exploitation de ces fonctionnalités via un contournement. L'utilisation non conforme peut également entraîner des sanctions, notamment en cas de non-respect des conditions d'utilisation d'OpenProject.

Nous vous conseillons vivement de souscrire à une licence officielle si vous souhaitez bénéficier des fonctionnalités Enterprise dans un cadre de production et recevoir un support dédié.

# Mise à jour

Source : [Upgrading your OpenProject installation](https://www.openproject.org/docs/installation-and-operations/operation/upgrading/)

Voici les étapes pour mettre à jour OpenProject en utilisant les informations de la documentation officielle.

<div aria-description="" aria-label="Envoyé par Copilot : ### Explication :
Voici les étapes pour mettre à jour OpenProject en utilisant les informations de la documentation officielle.

### Liste :
1. **Sauvegarde** :
   ```bash
   sudo openproject run backup
   ```
   Sauvegarde ton installation actuelle pour éviter toute perte de données.

2. **Mise à jour du dépôt** :
   ```bash
   sudo apt-get update
   ```
   Mets à jour ton dépôt de paquets pour obtenir les dernières versions disponibles.

3. **Mise à jour d'OpenProject** :
   ```bash
   sudo apt-get install --only-upgrade openproject
   ```
   Installe la dernière version d'OpenProject.

4. **Configuration** :
   ```bash
   sudo openproject configure
   ```
   Exécute la commande de configuration pour appliquer les nouvelles modifications.

5. **Redémarrage des services** :
   ```bash
   sudo openproject run restart
   ```
   Redémarre les services pour appliquer les changements.

6. **Vérification** :
   Accède à ton instance OpenProject via le navigateur pour vérifier que tout fonctionne correctement.

### Conclusion :
En suivant ces étapes, tu pourras mettre à jour OpenProject de manière sécurisée et efficace. Si tu rencontres des problèmes ou as des questions, n'hésite pas à demander ! 😊" class="content user-select-text" id="bkmrk-sauvegarde-%3A-sudo-op" tabindex="0"><div class="ac-container ac-adaptiveCard"><div class="ac-textBlock">1. **Sauvegarde** :
    
    ```bash
    sudo openproject run backup
    ```
    
    Sauvegarde ton installation actuelle pour éviter toute perte de données.
2. **Mise à jour du dépôt** :
    
    ```bash
    sudo apt-get update
    ```
    
    Mets à jour ton dépôt de paquets pour obtenir les dernières versions disponibles.
3. **Mise à jour d’OpenProject** :
    
    ```bash
    sudo apt-get install --only-upgrade openproject
    ```
    
    Installe la dernière version d’OpenProject.
4. **Configuration** :
    
    ```bash
    sudo openproject configure
    ```
    
    Exécute la commande de configuration pour appliquer les nouvelles modifications.
5. **Redémarrage des services** :
    
    ```bash
    sudo openproject run restart
    ```
    
    Redémarre les services pour appliquer les changements.
6. **Vérification** : Accède à ton instance OpenProject via le navigateur pour vérifier que tout fonctionne correctement.

</div></div></div>Voici la commande compilé :

```
sudo openproject run backup && sudo apt-get update && sudo apt-get install --only-upgrade openproject && sudo openproject configure && sudo openproject run restart
```

Concernant les fonctionnalités entreprise, si elles sont activées sur votre instance OpenProject, merci de vous référer à la section [*Mise à jour*](https://wiki.ezoxe.fr/link/11#bkmrk-si-vous-souhaitez-me) du chapitre *[Fonctionnalités entreprise](https://wiki.ezoxe.fr/books/open-source/page/fonctionnalites-entreprise "Fonctionnalités entreprise").*

##### <span style="text-decoration: underline;">**Mise à jour pour des versions majeur :**</span>

Les versions majeur du logiciel sur le noyau Linux nécessite un changement dans le fichier de mise à jour des paquets.

Voici la ligne à change :

**Modification du fichier :**

```
sudo nano /etc/apt/sources.list.d/openproject.list
```

**Changer $VERSION$ par la version majeur (e.g. .../stable/15/debian...)**

```
deb https://dl.packager.io/srv/deb/opf/openproject/stable/$VERSION$/debian 12 main
```

**Enregistrer et quitter** : Après avoir modifié l'URL, appuyez sur `Ctrl + O` pour enregistrer le fichier, puis `Ctrl + X` pour quitter l'éditeur.

# Ollama

Ollama est une plateforme open-source qui permet de créer, exécuter et partager des modèles de langage de grande taille localement sur des systèmes macOS et Linux1. Elle offre une interface en ligne de commande simple pour gérer ces modèles et inclut une bibliothèque de modèles pré-construits

# Installation

**Source :** [GitHub - ollama/ollama: Get up and running with Llama 3.2, Mistral, Gemma 2, and other large language models.](https://github.com/ollama/ollama)

<p class="callout info">**Version :** 0.4.5</p>

**Mise à jour du système :**

```bash
sudo apt update && sudo apt upgrade -y && sudo apt full-upgrade -y && sudo apt autoremove -y && sudo apt clean
```

**Installer CURL :**

```bash
sudo apt-get install curl
```

**Récupération de la source :**

```bash
curl -fsSL https://ollama.com/install.sh | sh
```


##### <span style="text-decoration: underline;">**Ajouter Ollama en service de démarrage :**</span>

**Créez un utilisateur pour Ollama :**

```bash
sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
```

**Ajoutez votre utilisateur actuel au groupe ollama :**

```bash
sudo usermod -a -G ollama $(whoami)
```

**Créez un fichier de service dans** `/etc/systemd/system/ollama.service` **:**

```bash
[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=$PATH"

[Install]
WantedBy=default.target
```

Autre exemple de fichier :

```bash
[Unit]
Description=Ollama AI Server
After=network.target

[Service]
Environment="HOME=/root"
Environment="OLLAMA_HOST=0.0.0.0:11434"
ExecStart=/usr/local/bin/ollama serve
Restart=always
User=root

[Install]
WantedBy=multi-user.target
```

<p class="callout warning"><span style="color: rgb(224, 62, 45);">**Attention** </span>! Pour la ligne `ExecStart=/usr/bin/ollama serve`, vous devez correctement localiser l'installation de votre ollama, exemple `ExecStart=/usr/local/bin/ollama serve`.</p>

**Ensuite, démarrez le service :**

```bash
sudo systemctl daemon-reload
sudo systemctl enable ollama
```

**Voir les logs :**

```bash
journalctl -e -u ollama
```

# Mise à jour

Pour mettre à jour Ollama, vous pouvez exécuter à nouveau la commande suivante :

```bash
curl -fsSL https://ollama.com/install.sh | sh
```

Cela réinstalle le script d'installation d'Ollama, et peut **écraser des fichiers existants** ou entraîner la perte de configurations personnalisées. Assurez-vous de **sauvegarder vos données et configurations importantes** avant de procéder à une mise à jour pour éviter toute perte de données.

# Modèle personnalisé

##### <span style="text-decoration: underline;">**Importation depuis GGUF**</span>

Ollama prend en charge l'importation de modèles au format **GGUF** via un fichier **Modelfile**.

**Créer un fichier Modelfile :**

Créez un fichier nommé `Modelfile`, qui doit contenir une instruction `FROM` avec le chemin local du modèle que vous souhaitez importer.

```bash
FROM ./vicuna-33b.Q4_0.gguf
```

Cela indique à Ollama de charger le modèle spécifié depuis le fichier local `vicuna-33b.Q4_0.gguf`.

**Créer le modèle dans Ollama :**

Une fois le fichier `Modelfile `créé, utilisez la commande suivante pour que le modèle soit intégré dans Ollama :

```bash
ollama create example -f Modelfile
```

Cette commande utilise le fichier `Modelfile `pour créer un modèle dans Ollama sous le nom "example".

**Exécuter le modèle :**

Enfin, vous pouvez exécuter le modèle avec la commande suivante :

```bash
ollama run example
```

Cela lance le modèle que vous venez de créer, ici appelé "example", pour qu'il commence à traiter des demandes ou des tâches.

# Prompt personnalisé

Les modèles de la bibliothèque Ollama peuvent être personnalisés avec un **prompt**. Par exemple, pour personnaliser le modèle **llama3.2** :

**Télécharger le modèle :**

Tout d'abord, vous devez télécharger le modèle avec la commande suivante :

```bash
ollama pull llama3.2
```

Cela permet de récupérer le modèle **llama3.2** depuis la bibliothèque Ollama.

**Créer un fichier Modelfile :**

Ensuite, créez un fichier `Modelfile` contenant les instructions de personnalisation. Par exemple :

```bash
FROM llama3.2

# définir la température à 1 [plus élevé = plus créatif, plus bas = plus cohérent]
PARAMETER temperature 1

# définir le message système
SYSTEM """
You are Mario from Super Mario Bros. Answer as Mario, the assistant, only.
"""
```

- `FROM llama3.2` indique que vous souhaitez utiliser le modèle **llama3.2** comme base.
- La ligne `PARAMETER temperature 1` permet de régler la "température" du modèle, un paramètre qui influence la créativité du modèle. Une température élevée (comme 1) rend le modèle plus créatif, tandis qu'une température plus basse le rend plus cohérent.
- La section `SYSTEM` permet de personnaliser le message système, dans cet exemple, vous demandez au modèle de répondre en tant que **Mario**. uniquement.

**Créer et exécuter le modèle :**

Après avoir créé le fichier `Modelfile`, vous pouvez créer et exécuter le modèle personnalisé en utilisant ces commandes :

```bash
ollama create mario -f ./Modelfile
ollama run mario
```

La première commande crée un modèle nommé **Mario** à partir du fichier `Modelfile`, et la deuxième commande lance ce modèle.

**Exemple d'interaction avec le modèle personnalisé :**

```
>>> hi
Hello! It's your friend Mario.
```

# Désinstallation

**Supprimez le service Ollama :**

```bash
sudo systemctl stop ollama
sudo systemctl disable ollama
sudo rm /etc/systemd/system/ollama.service
```

Supprimez le binaire `ollama` de votre répertoire `bin` (cela peut être `/usr/local/bin`, `/usr/bin`, ou `/bin`).

```
sudo rm $(which ollama)
```

Supprimez les modèles téléchargés ainsi que l'utilisateur et le groupe ollama créés pour le service :

```bash
sudo rm -r /usr/share/ollama
sudo userdel ollama
sudo groupdel ollama
```

Cela entraînera la **suppression définitive des fichiers d'Ollama**, y compris les modèles téléchargés et l'utilisateur associé. Assurez-vous de **sauvegarder vos données et configurations** avant de procéder à la désinstallation, car cette action est irréversible et pourrait supprimer des informations importantes.

# Créer un modèle

La commande `ollama create` est utilisée pour créer un modèle à partir d'un fichier **Modelfile**.

```bash
ollama create mymodel -f ./Modelfile
```

Cette commande crée un modèle nommé **mymodel** en utilisant les instructions définies dans le fichier `Modelfile`.

**Télécharger un modèle :**

Pour télécharger un modèle, utilisez la commande suivante :

```bash
ollama pull llama3.2
```

Cette commande télécharge le modèle **llama3.2** depuis la bibliothèque Ollama. Elle peut également être utilisée pour **mettre à jour un modèle local**. Seules les différences (diff) entre le modèle local et la version la plus récente seront téléchargées.

**Supprimer un modèle :**

Si vous souhaitez supprimer un modèle, vous pouvez utiliser la commande suivante :

```bash
ollama rm llama3.2
```

Cela supprimera le modèle **llama3.2** de votre machine.

**Copier un modèle :**

Pour copier un modèle, utilisez la commande :

```bash
ollama cp llama3.2 my-model
```

Cela crée une copie du modèle **llama3.2** sous le nom **my-model**.

**Entrée multilignes :**

Pour entrer plusieurs lignes de texte, vous pouvez entourer le texte avec des guillemets triples (`"""`), comme suit :

```
>>> """Hello, ... world! ... """
```

Cela permet de saisir un texte réparti sur plusieurs lignes. Par exemple, cette entrée pourrait produire la sortie suivante :

```
I'm a basic program that prints the famous "Hello, world!" message to the console.
```

**Modèles multimodaux :**

Les modèles multimodaux permettent d'interagir avec des fichiers autres que du texte, comme des images. Par exemple, pour analyser une image avec un modèle multimodal, utilisez la commande :

```bash
ollama run llava "What's in this image? /Users/jmorgan/Desktop/smile.png"
```

Cela pourrait donner la réponse suivante :

```bash
The image features a yellow smiley face, which is likely the central focus of the picture.
```

**Passer le prompt en argument :**

Vous pouvez aussi passer un prompt directement en argument à la commande `ollama run`. Par exemple :

```bash
$ ollama run llama3.2 "Summarize this file: $(cat README.md)"
```

Cela permet de résumer le contenu d'un fichier, comme le fichier `README.md`. Le modèle peut générer un résumé tel que :

```bash
Ollama is a lightweight, extensible framework for building and running language models on the local machine. It provides a simple API for creating, running, and managing models, as well as a library of pre-built models that can be easily used in a variety of applications.
```

**Afficher les informations sur un modèle :**

Pour afficher les informations détaillées d'un modèle, utilisez la commande suivante :

```bash
ollama show llama3.2
```

Cela affiche des informations sur le modèle **llama3.2**, telles que sa version et ses paramètres.

**Lister les modèles sur votre ordinateur :**

Pour voir la liste de tous les modèles installés sur votre machine, utilisez cette commande :

```bash
ollama list
```

**Lister les modèles actuellement chargés :**

Pour voir quels modèles sont actuellement chargés en mémoire, utilisez la commande :

```bash
ollama ps
```

**Arrêter un modèle en cours d'exécution :**

Si vous souhaitez arrêter un modèle qui est en cours d'exécution, utilisez la commande suivante :

```bash
ollama stop llama3.2
```

Cela arrêtera le modèle **llama3.2** en cours d'exécution.

**Démarrer Ollama :**

Si vous voulez démarrer Ollama sans utiliser l'application de bureau, vous pouvez utiliser la commande suivante :

```bash
ollama serve
```

Cela démarre Ollama en mode serveur, permettant ainsi d'interagir avec les modèles via une API sans l'interface graphique.

# Supprimer un modèle

****Supprimer un modèle dans la list :****

```bash
ollama rm llama3.2
```

# Utilisation de l'API

##### 🌐 1. Interroger l’API locale d’Ollama

Par défaut, l’API écoute sur :

```
http://localhost:11434
```

Exemple de requête API :

```bash
curl http://localhost:11434/api/generate \
  -d '{
        "model": "llama3",
        "prompt": "Bonjour, comment vas-tu ?"
      }'
```

---

##### 🐳 2. Utilisation de l’API Ollama depuis Docker

<span style="white-space: pre-wrap;">Si vous exécutez des applications dans un </span>**conteneur Docker**<span style="white-space: pre-wrap;"> qui doivent appeler l’API Ollama située sur l’hôte, utilisez l’adresse suivante :</span>

```
http://host.docker.internal:11434
```

Exemple depuis un conteneur :

```
curl http://host.docker.internal:11434/api/generate \
  -d '{"model": "llama3", "prompt": "Test depuis docker"}'
```

**Remarque importante**

- `<span class="editor-theme-code">host.docker.internal</span>`<span style="white-space: pre-wrap;"> fonctionne </span>**automatiquement sur Docker Desktop (Windows / macOS)**.
- <span style="white-space: pre-wrap;">Sur Linux, Docker ne fournit </span>**pas nativement**<span style="white-space: pre-wrap;"> ce DNS.\\ S'il n'existe pas, vous pouvez forcer la résolution en ajoutant dans votre commande </span>`<span class="editor-theme-code">docker run</span>`<span style="white-space: pre-wrap;"> :</span>

```bash
docker run --add-host=host.docker.internal:host-gateway ...
```

Ainsi, l'accès depuis Docker fonctionnera comme prévu.

---

##### 🧪 3. Exemple simple depuis un script Python

```
import requests

payload = {
    "model": "llama3",
    "prompt": "Bonjour depuis Python !"
}

r = requests.post("http://localhost:11434/api/generate", json=payload)
print(r.text)
```

# Open-WebUI

Interface IA conviviale (prend en charge Ollama, l’API OpenAI, ...)

# Installation avec pip

**Source :** [GitHub - open-webui/open-webui: User-friendly AI Interface (Supports Ollama, OpenAI API, ...)](https://github.com/open-webui/open-webui)

##### <span style="text-decoration: underline;">**ATTENTION !**</span>

<span style="color: rgb(224, 62, 45);">L'installation avec `pip`</span><span style="color: rgb(224, 62, 45);"> rend la mise à jour du logiciel complexe. Faite cette installation pour des tests, ou du développement spécifique et non une utilisation en production.</span>

##### <span style="text-decoration: underline;">**Installation via Python pip**</span>

Open WebUI peut être installé via pip, l'installateur de paquets Python. Avant de procéder, assurez-vous d'utiliser Python 3.11 pour éviter les problèmes de compatibilité.

**Installer Open WebUI :**

Ouvrez votre terminal et exécutez la commande suivante pour installer Open WebUI :

```bash
pip install open-webui
```

**Exécuter Open WebUI :**

Une fois l'installation terminée, vous pouvez démarrer Open WebUI en exécutant la commande suivante :

```bash
open-webui serve
```

Cela démarrera le serveur Open WebUI, que vous pourrez accéder à l'adresse suivante : [http://localhost:8080](http://localhost:8080).

##### <span style="text-decoration: underline;">**Erreur possible :**</span>

Erreur lors de l'installation de `open-webui` via `pip` :

```bash
root@srv-ia:/home/ia# pip install open-webui
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.

    If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.

    See /usr/share/doc/python3.11/README.venv for more information.

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
```

**Utiliser un environnement virtuel**

La meilleure pratique pour installer des paquets Python sans affecter l'environnement système est de créer un **environnement virtuel**. Cela permet d'avoir une installation isolée pour vos paquets Python.

**Étapes pour créer un environnement virtuel :**

1. **Installez `python3-venv`** (si ce n'est pas déjà fait) :
    
    ```bash
    sudo apt install python3-venv
    ```
2. **Créez un environnement virtuel** :
    
    Dans le répertoire où vous souhaitez installer vos paquets, créez un environnement virtuel :
    
    ```bash
    python3 -m venv mon_venv
    ```
    
    Cette commande crée un dossier `mon_venv` qui contient une installation isolée de Python.
3. **Activez l'environnement virtuel** :
    
    ```bash
    source mon_venv/bin/activate
    ```
    
    Vous verrez probablement un changement dans l'invite de commande, indiquant que l'environnement virtuel est activé (par exemple, `(mon_venv)` au début de la ligne).
4. **Installez `open-webui` dans l'environnement virtuel** :
    
    Une fois l'environnement activé, vous pouvez installer `open-webui` comme d'habitude :
    
    ```bash
    pip install open-webui
    ```
5. **Lancez l'application avec `nohup` et redirigez la sortie vers un fichier de log, puis lancez-le en arrière-plan :**```bash
    nohup open-webui serve > open-webui.log 2>&1 &
    ```
    
    
    - - `nohup` permet au processus de ne pas être tué lorsqu'une session se termine.
        - `> open-webui.log 2>&1` redirige les sorties standard (stdout) et les erreurs (stderr) vers un fichier `open-webui.log`.
        - `&` place le processus en arrière-plan.
    
    Vous pouvez quitter la session SSH ou votre terminal normalement, l'application continuera de fonctionner.
    
    Pour voir si le processus est toujours en cours d'exécution :
    
    ```bash
    ps aux | grep open-webui
    ```
6. **Désactivez l'environnement virtuel** quand vous avez terminé :

```bash
deactivate
```

Cela vous ramènera à votre environnement système Python.

# Installation avec docker

Avant de faire l'installation de Open-WebUI, merci de vous référer à l'installation de docker.

##### **<span style="text-decoration: underline;">Installation avec la configuration par défaut</span>**

**Si Ollama est sur votre ordinateur, utilisez cette commande :**

```bash
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
```

**Si Ollama est sur un serveur différent, utilisez cette commande :**

Pour vous connecter à Ollama sur un autre serveur, changez l'URL OLLAMA\_BASE\_URL par l'URL du serveur :

```bash
docker run -d -p 3000:8080 -e OLLAMA_BASE_URL=https://example.com -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
```

**Pour exécuter Open WebUI avec le support GPU Nvidia, utilisez cette commande :**

```bash
docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:cuda
```

##### <span style="text-decoration: underline;">Installation pour une utilisation uniquement avec l'API OpenAI</span>

**Si vous utilisez uniquement l'API OpenAI, utilisez cette commande :**

```bash
docker run -d -p 3000:8080 -e OPENAI_API_KEY=your_secret_key -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
```

Installation d'Open WebUI avec le support intégré d'Ollama  
Cette méthode d'installation utilise une image de conteneur unique qui regroupe Open WebUI avec Ollama, permettant une configuration simplifiée avec une seule commande. Choisissez la commande appropriée en fonction de votre configuration matérielle :

**Avec le support GPU : Utilisez les ressources GPU en exécutant la commande suivante :**

```bash
docker run -d -p 3000:8080 --gpus=all -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama
```

Pour un usage uniquement avec le CPU : Si vous n'utilisez pas de GPU, utilisez cette commande à la place :

```bash
docker run -d -p 3000:8080 -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama
```

Les deux commandes facilitent une installation intégrée et sans tracas de Open WebUI et Ollama, garantissant une mise en place rapide de l'ensemble.

Après l'installation, vous pouvez accéder à Open WebUI à l'adresse [http://localhost:3000](http://localhost:3000). Profitez-en ! 😄

##### **<span style="text-decoration: underline;">Erreur de connexion Docker</span>**

Si vous rencontrez une erreur de connexion lorsque vous essayez d'accéder à Ollama, cela peut être dû au fait que le conteneur WebUI Docker ne peut pas communiquer avec le serveur Ollama qui fonctionne sur votre hôte. Voici comment résoudre cela :

Ajustez les paramètres réseau 🛠️ : Utilisez le flag `--network=host` dans votre commande Docker. Cela relie directement votre conteneur au réseau de votre hôte.

Changez le port : N'oubliez pas que le port interne passe de 3000 à 8080.

**Exemple de commande Docker :**

```
docker run -d --network=host -v open-webui:/app/backend/data -e OLLAMA_BASE_URL=http://127.0.0.1:11434 --name open-webui --restart always ghcr.io/open-webui/open-webui:main
```

🔗 Après avoir exécuté cette commande, votre WebUI devrait être disponible à l'adresse [http://localhost:8080](http://localhost:8080/).

# Mise à jour

##### <u>****Mise à jour vers Open WebUI tout en conservant vos données****</u>

Si vous souhaitez mettre à jour vers la nouvelle image tout en migrant tous vos paramètres précédents tels que les conversations, les invites, les documents, etc.

****Vous pouvez effectuer les étapes suivantes :****

```
docker rm -f ollama-webui
docker pull ghcr.io/open-webui/open-webui:main
# Crée un nouveau volume et utilise un conteneur temporaire pour copier d'un volume à un autre selon https://github.com/moby/moby/issues/31154#issuecomment-360531460
docker volume create --name open-webui
docker run --rm -v ollama-webui:/from -v open-webui:/to alpine ash -c "cd /from ; cp -av . /to"
[insérez la commande équivalente que vous avez utilisée pour installer avec le nouveau nom de l'image Docker]
```

****Une fois que vous avez vérifié que toutes les données ont été migrées, vous pouvez supprimer l'ancien volume avec la commande suivante :****

```
docker volume rm ollama-webui
```

Passage depuis un dépôt Git local  
<span style="white-space: pre-wrap;">Si vous veniez d'une installation Git où vous avez utilisé </span>`<span class="editor-theme-code">docker compose up</span>`<span style="white-space: pre-wrap;"> dans le répertoire du projet, vos volumes auront un préfixe avec le nom du dossier. Par conséquent, si votre chemin OpenWebUI était : /home/myserver/ollama-webui/, les volumes seraient nommés "ollama-webui\_open-webui" et "ollama-webui\_ollama".</span>

<span style="white-space: pre-wrap;">Pour copier le contenu vers une installation Docker conventionnelle, vous pouvez exécuter des commandes de migration similaires. </span>****Dans notre cas, les commandes seraient les suivantes :****

```
docker rm -f open-webui
docker rm -f ollama
docker pull ghcr.io/open-webui/open-webui:main
docker pull ghcr.io/open-webui/open-webui:ollama
docker volume create --name open-webui
docker volume create --name ollama
docker run --rm -v ollama-webui_open-webui:/from -v open-webui:/to alpine ash -c "cd /from ; cp -av . /to"
docker run --rm -v ollama-webui_ollama:/from -v ollama:/to alpine ash -c "cd /from ; cp -av . /to"
```

Selon que vous ayez installé Ollama ou que vous ayez déjà les mêmes noms de volumes en place, certaines des commandes pourraient générer des erreurs, mais elles peuvent généralement être ignorées en toute sécurité car nous procédons à un écrasement.

Ensuite, lancez les deux conteneurs comme d'habitude, comme décrit dans le guide de démarrage :

```
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
```

<span style="white-space: pre-wrap;">Une fois que vous avez vérifié que toutes les données ont été migrées, vous pouvez supprimer l'ancien volume avec la commande </span>`<span class="editor-theme-code">docker volume rm</span>`<span style="white-space: pre-wrap;"> mentionnée ci-dessus.</span>

# Docker

Docker est une plateforme permettant de lancer certaines applications dans des conteneurs logiciels lancée en 2013.

# Installation (debian)

**Mettre à jour votre système**

Avant d'installer Docker, il est recommandé de mettre à jour votre système Debian pour s'assurer que tous les paquets sont à jour.

```bash
sudo apt update && sudo apt upgrade -y
```

**Installer les dépendances nécessaires**

Docker nécessite quelques outils comme `apt-transport-https`, `ca-certificates`, `curl`, `software-properties-common` et `gnupg2`. Installez-les en utilisant la commande suivante :

```bash
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg2 -y
```

**Ajouter la clé GPG officielle de Docker**

Docker signe ses paquets avec une clé GPG pour garantir leur authenticité. Vous devez ajouter cette clé pour pouvoir installer Docker depuis les dépôts officiels.

```bash
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
```

**Ajouter le dépôt Docker**

Ensuite, vous devez ajouter le dépôt officiel de Docker à votre liste de sources APT. Exécutez cette commande pour ajouter le dépôt stable :

```bash
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```

**Mettre à jour les sources**

Une fois le dépôt Docker ajouté, vous devez mettre à jour la liste des paquets disponibles pour que le système reconnaisse les paquets Docker :

```bash
sudo apt update
```

**Installer Docker**

Vous pouvez maintenant installer Docker. Utilisez la commande suivante pour installer Docker CE (Community Edition) :

```bash
sudo apt install docker-ce docker-ce-cli containerd.io -y
```

**Vérifier l'installation**

Une fois Docker installé, vérifiez qu'il fonctionne correctement en exécutant la commande suivante pour voir la version de Docker installée :

```bash
docker --version
```

**Démarrer et activer le service Docker**

Par défaut, le service Docker devrait démarrer automatiquement après l'installation. Si ce n'est pas le cas, vous pouvez le démarrer manuellement et l'activer pour qu'il démarre automatiquement au démarrage de votre VM :

```bash
sudo systemctl start docker
sudo systemctl enable docker
```

**Vérifier que Docker fonctionne correctement**

Pour vérifier que Docker fonctionne correctement, exécutez la commande suivante, qui va télécharger et exécuter un conteneur test :

```bash
sudo docker run hello-world
```

Si tout est correctement installé, vous devriez voir un message vous indiquant que Docker fonctionne correctement.

**Ajouter votre utilisateur au groupe Docker (facultatif)**

Si vous souhaitez exécuter des commandes Docker sans avoir à utiliser `sudo` à chaque fois, vous pouvez ajouter votre utilisateur au groupe `docker` :

```bash
sudo usermod -aG docker $USER
```

Pour que ce changement prenne effet, vous devez vous déconnecter puis vous reconnecter à votre session ou exécuter la commande suivante :

```bash
newgrp docker
```

# Mise à jour (debian)

**Mettre à jour la liste des dépôts**

La première étape consiste à mettre à jour la liste des dépôts pour s'assurer que vous avez les dernières informations sur les paquets disponibles.

```bash
sudo apt update
```

**Vérifier les versions disponibles**

Avant de mettre à jour Docker, vous pouvez vérifier si une nouvelle version est disponible. Pour cela, utilisez la commande suivante :

```bash
apt list --upgradable
```

Cela affichera la liste des paquets pouvant être mis à jour, y compris Docker si une nouvelle version est disponible.

**Mettre à jour Docker**

Si Docker est inclus dans la liste des paquets à mettre à jour, vous pouvez procéder à la mise à jour avec cette commande :

```bash
sudo apt upgrade docker-ce docker-ce-cli containerd.io
```

Cela mettra à jour Docker et ses composants principaux.

**(Facultatif) Mettre à jour tous les paquets du système**

Si vous voulez mettre à jour l'ensemble des paquets de votre système, y compris Docker et d'autres dépendances, utilisez la commande suivante :

```bash
sudo apt upgrade -y
```

Cela mettra à jour tous les paquets installés, y compris Docker, si une nouvelle version est disponible dans les dépôts.

**Vérifier la version de Docker**

Une fois la mise à jour terminée, vous pouvez vérifier que Docker a bien été mis à jour en exécutant :

```bash
docker --version
```

Cela vous affichera la version actuelle de Docker installée.

**Redémarrer le service Docker (si nécessaire)**

Bien que Docker mette généralement à jour ses composants sans redémarrage, il est parfois nécessaire de redémarrer le service Docker pour que les modifications prennent effet correctement :

```bash
sudo systemctl restart docker
```

**Vérifier le fonctionnement de Docker**

Pour vous assurer que Docker fonctionne correctement après la mise à jour, vous pouvez exécuter un conteneur de test :

```bash
sudo docker run hello-world
```

Si Docker fonctionne correctement, le message "Hello from Docker!" s'affichera.

**Nettoyage (Facultatif)**

Enfin, pour garder votre système propre, vous pouvez supprimer les anciennes versions de paquets qui ne sont plus nécessaires en exécutant :

```bash
sudo apt autoremove
```

Cela supprimera les dépendances inutiles et les anciens paquets qui ne sont plus utilisés.

# Purge

Cette procédure permet de supprimer l'intégralité des données de Docker (conteneurs, images, volumes, réseaux et cache) pour retrouver un environnement "vierge", tout en conservant l'installation de Docker Engine.

---

## 1. Arrêt et suppression des conteneurs

La première étape consiste à stopper tous les processus en cours pour libérer les ressources.

- **Arrêter tous les conteneurs :**  
      
    ```
    docker stop $(docker ps -aq)
    ```
- **Supprimer tous les conteneurs :**  
      
    ```
    docker rm $(docker ps -aq)
    ```

---

## 2. Suppression des images

Pour libérer l'espace disque occupé par les systèmes de fichiers superposés.

- **Supprimer toutes les images (utilisées ou non) :**  
      
    ```
    docker rmi -f $(docker images -aq)
    ```

---

## 3. Suppression des volumes et réseaux

Les volumes contiennent vos données persistantes et les réseaux vos configurations de ponts personnalisées.

- **Supprimer tous les volumes :**  
      
    ```
    docker volume rm $(docker volume ls -q)
    ```
- **Supprimer les réseaux personnalisés :**<span style="white-space: pre-wrap;"> </span>**(Note : Les réseaux par défaut comme 'bridge', 'host' et 'none' ne seront pas supprimés)**  
      
    ```
    docker network rm $(docker network ls -q)
    ```

---

## 4. Nettoyage du cache de construction (Build Kit)

<span style="white-space: pre-wrap;">Docker conserve des traces des étapes de construction pour accélérer les futurs </span>`<span class="editor-theme-code">docker build</span>`. Pour une purge totale, il faut les vider.

- **Supprimer le cache de build :**  
      
    ```
    docker builder prune -a -f
    ```

---

## 5. La commande "All-in-One" (Le Grand Ménage)

Si vous souhaitez exécuter l'intégralité de ces étapes en une seule ligne de commande sécurisée (elle vérifie d'abord s'il y a des éléments à supprimer pour éviter les erreurs de syntaxe), utilisez celle-ci :

```
docker stop $(docker ps -aq) 2>/dev/null; docker system prune -a --volumes -f
```

### Détail de la commande All-in-One :

- `<span class="editor-theme-code">docker stop ...</span>`<span style="white-space: pre-wrap;"> : Arrête proprement tous les conteneurs.</span>
- `<span class="editor-theme-code">2>/dev/null</span>`<span style="white-space: pre-wrap;"> : Masque les erreurs si aucun conteneur n'est en cours.</span>
- `<span class="editor-theme-code">docker system prune</span>`<span style="white-space: pre-wrap;"> : La commande native de Docker pour le nettoyage.</span>
- `<span class="editor-theme-code">-a</span>`<span style="white-space: pre-wrap;"> : Supprime toutes les images inutilisées, pas seulement les "dangling" (sans nom).</span>
- `<span class="editor-theme-code">--volumes</span>`<span style="white-space: pre-wrap;"> : Force la suppression des volumes (non inclus par défaut dans le prune).</span>
- `<span class="editor-theme-code">-f</span>`<span style="white-space: pre-wrap;"> : Force l'exécution sans demander de confirmation (mode automatique).</span>

---

> **Attention :**<span style="white-space: pre-wrap;"> Cette opération est irréversible. Toutes les données contenues dans les bases de données (volumes) et les configurations spécifiques seront perdues.</span>

# Debian

Debian est un système d’exploitation libre et gratuit, principalement basé sur Linux. Créé en 1993, il est connu pour sa stabilité, sa sécurité et son large choix de logiciels. Debian supporte de nombreuses architectures matérielles et sert souvent de base à d’autres distributions comme Ubuntu.

# Commandes communes

##### <u>****Utiliser la commande**** </u><u>**`<strong class="editor-theme-bold editor-theme-code editor-theme-underline">ss</strong>`**</u>

****tag :**** &lt;voir port&gt;

<span style="white-space: pre-wrap;">La commande </span>`<span class="editor-theme-code">ss</span>`<span style="white-space: pre-wrap;"> est un outil moderne et rapide pour afficher les connexions réseau. Vous pouvez l'utiliser pour lister les ports ouverts.</span>

Pour afficher tous les ports ouverts et les services qui les utilisent :

```bash
sudo ss -tuln
```

- `<span class="editor-theme-code">-t</span>`<span style="white-space: pre-wrap;"> : Affiche les connexions TCP.</span>
- `<span class="editor-theme-code">-u</span>`<span style="white-space: pre-wrap;"> : Affiche les connexions UDP.</span>
- `<span class="editor-theme-code">-l</span>`<span style="white-space: pre-wrap;"> : Affiche les ports à l'écoute (Listening).</span>
- `<span class="editor-theme-code">-n</span>`<span style="white-space: pre-wrap;"> : Affiche les adresses et les ports sous forme numérique (sans résolution de noms).</span>

Exemple de sortie :

```ruby
Netid  State      Recv-Q Send-Q Local Address:Port   Peer Address:Port
tcp    LISTEN     0      128          *:22              *:*     
tcp    LISTEN     0      128       127.0.0.1:631        *:*     
udp    UNCONN     0      0        0.0.0.0:123           *:*
```

Cela vous donne une vue d'ensemble des ports ouverts et des adresses locales auxquelles ils sont liés.

Exemple pour un port spécifique (par exemple, le port 8080) :

```bash
sudo ss -tuln | grep ':8080'
```

Cette commande affiche les connexions TCP et UDP en écoute et filtre celles qui utilisent le port 8080.

<span style="white-space: pre-wrap;">Si vous souhaitez également afficher le PID, ajoutez l'option </span>`<span class="editor-theme-code">-p</span>`<span style="white-space: pre-wrap;"> :</span>

```bash
sudo ss -tulnp | grep ':8080'
```

##### <u>****Utiliser la commande**** </u><u>**`<strong class="editor-theme-bold editor-theme-code editor-theme-underline">ip -c a</strong>`**</u>

****tag :**** &lt;voir ip, voir adresse ip&gt;

**`<strong class="editor-theme-bold editor-theme-code">ip -c a</strong>`**<span style="white-space: pre-wrap;"> (ou </span>**`<strong class="editor-theme-bold editor-theme-code">ip -c addr</strong>`**) affiche toutes les interfaces réseau et leurs informations, avec une sortie colorée pour améliorer la lisibilité.

```bash
ip -c a
```

****Exemple de sortie de** `<strong class="editor-theme-bold editor-theme-code">ip -c a</strong>` **:****

<span style="white-space: pre-wrap;">Voici un exemple de ce à quoi pourrait ressembler la sortie d'une commande </span>`<span class="editor-theme-code">ip -c a</span>`<span style="white-space: pre-wrap;"> :</span>

```sql
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe2a:0bfa/64 scope link
       valid_lft forever preferred_lft forever
```

- **`<strong class="editor-theme-bold editor-theme-code">lo</strong>`**<span style="white-space: pre-wrap;"> est l'interface de boucle locale (loopback), avec l'adresse </span>`<span class="editor-theme-code">127.0.0.1</span>`.
- **`<strong class="editor-theme-bold editor-theme-code">eth0</strong>`**<span style="white-space: pre-wrap;"> est une interface Ethernet avec une adresse IPv4 (</span>`<span class="editor-theme-code">192.168.1.10</span>`) et une adresse IPv6 (`<span class="editor-theme-code">fe80::...</span>`).

<span style="white-space: pre-wrap;">Avec l'option </span>`<span class="editor-theme-code">-c</span>`, ces informations sont colorées pour les rendre plus faciles à analyser visuellement.

****En résumé :****

- **`<strong class="editor-theme-bold editor-theme-code">ip</strong>`**<span style="white-space: pre-wrap;"> : Utilitaire pour gérer les interfaces réseau, les routes, les adresses IP, etc.</span>
- **`<strong class="editor-theme-bold editor-theme-code">-c</strong>`**<span style="white-space: pre-wrap;"> : Active la coloration de la sortie.</span>
- **`<strong class="editor-theme-bold editor-theme-code">a</strong>`**<span style="white-space: pre-wrap;"> : Affiche les adresses réseau et les interfaces.</span>

<span style="white-space: pre-wrap;">La commande </span>`<span class="editor-theme-code">ip -c a</span>`<span style="white-space: pre-wrap;"> est donc un moyen simple et rapide de visualiser l'état des interfaces réseau de votre système avec une sortie colorée pour une lecture plus facile.</span>

# Mise à jour

##### ✅ Commande sans risque (mise à jour des index uniquement)

```bash
sudo apt update
```

<p class="callout info"><span style="color: rgb(66, 66, 66);">Met à jour la liste des paquets disponibles sans installer quoi que ce soit. Aucun changement sur le système.</span></p>

##### ⚙️ Commande plus complète (mise à jour des paquets installés)

```bash
sudo apt update && sudo apt upgrade -y
```

<p class="callout info"><span style="color: rgb(66, 66, 66);">Met à jour la liste des paquets</span><span style="white-space: pre-wrap;"> </span>**et installe les mises à jour disponibles**<span style="white-space: pre-wrap;"> </span><span style="color: rgb(66, 66, 66);">pour les paquets déjà installés. Le</span><span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">-y</span>`<span style="white-space: pre-wrap;"> </span><span style="color: rgb(66, 66, 66);">permet de valider automatiquement les changements.</span></p>

##### 🧰 Commande ultra complète (mise à jour + nettoyage)

```bash
sudo apt update && sudo apt full-upgrade -y && sudo apt autoremove --purge -y && sudo apt autoclean
```

<p class="callout info"><span style="white-space: pre-wrap;">En plus de la mise à jour : </span>`<span class="editor-theme-code">full-upgrade</span>`<span style="white-space: pre-wrap;"> gère les changements de dépendances (peut installer ou supprimer des paquets). </span>`<span class="editor-theme-code">autoremove --purge</span>`<span style="white-space: pre-wrap;"> supprime les paquets inutiles et leurs fichiers de config. </span>`<span class="editor-theme-code">autoclean</span>`<span style="white-space: pre-wrap;"> nettoie les fichiers .deb obsolètes.</span></p>

# Étendre une partition sur Debian (MBR) sans perte de données

Ce guide explique comment étendre une partition / (root) sous Debian lorsque le disque virtuel a été agrandi dans l’hyperviseur, mais que la partition principale est bloquée par une partition étendue contenant le swap (`<span class="editor-theme-code">sda2</span>`<span style="white-space: pre-wrap;"> + </span>`<span class="editor-theme-code">sda5</span>`).

Fonctionne pour :

- VMware, Proxmox, Hyper‑V, VirtualBox
- Debian 10 → Debian 13+
- <span style="white-space: pre-wrap;">Disques MBR (label </span>`<span class="editor-theme-code">dos</span>`)

---

##### 🛑 Avant de commencer

Vérifier que le disque virtuel a déjà été agrandi dans l’hyperviseur :

```Shell
lsblk
```

Vous devez voir par ex. :

sda 50G └─sda1 23G

---

##### 1️⃣ Désactiver le swap existant

```Shell
swapoff -a
```

---

##### 2️⃣ Modifier la table de partitions avec fdisk

<span style="white-space: pre-wrap;">Lancer </span>`<span class="editor-theme-code">fdisk</span>`<span style="white-space: pre-wrap;"> :</span>

```Shell
fdisk /dev/sda
```

<span style="white-space: pre-wrap;">Dans </span>`<span class="editor-theme-code">fdisk</span>`, effectuer exactement les actions suivantes :

##### 1. Supprimer l’ancienne swap (sda5)

```bash
d
5
```

##### 2. Supprimer la partition étendue (sda2)

```
d
2
```

##### 3. Supprimer la partition root (sda1)

⚠️ Sans danger tant que le secteur de début est conservé.

```
d
1
```

##### 4. Recréer /dev/sda1 sur tout le disque

```
n
p
1
2048 ← le même secteur de début qu’avant
<Entrée> ← fin par défaut = fin du disque
```

##### 5. Remettre le drapeau boot

```
a
1
```

##### 6. Sauvegarder et quitter

```
w
```

Un redémarrage peut être nécessaire :

```Shell
reboot
```

---

##### 3️⃣ Étendre le système de fichiers ext4

Une fois la machine revenue :

```Shell
resize2fs /dev/sda1
```

Le système de fichiers s’adapte alors à la nouvelle taille (50 Go dans cet exemple).

Vérifier :

```Shell
df -h
```

---

##### 4️⃣ Créer un swap via un fichier (recommandé)

Un swapfile est plus simple et plus flexible qu’une partition swap.

##### Création du fichier swap :

```Shell
fallocate -l 1G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile
```

##### Rendre le swap permanent

<span style="white-space: pre-wrap;">Ajouter dans </span>`<span class="editor-theme-code">/etc/fstab</span>`<span style="white-space: pre-wrap;"> :</span>

```bash
echo '/swapfile none swap sw 0 0' >> /etc/fstab
```

ou

```
/swapfile none swap sw 0 0
```

---

##### 5️⃣ Vérifications finales

```Shell
lsblk && df -h && free -h
```

Vous devriez voir :

- `<span class="editor-theme-code">/dev/sda1</span>`<span style="white-space: pre-wrap;"> = ~50 Go monté sur </span>`<span class="editor-theme-code">/</span>`
- `<span class="editor-theme-code">/swapfile</span>`<span style="white-space: pre-wrap;"> actif</span>

---

##### 🟢 Résultat final

Votre système Debian utilise maintenant toute la taille du disque agrandi, sans perte de données, avec un swap propre et moderne via fichier.

---

##### ✨ Bonus : résolution du problème “commandes sbin introuvables”

<span style="white-space: pre-wrap;">Si des commandes comme </span>`<span class="editor-theme-code">fdisk</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">parted</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">ip</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">reboot</span>`… n’étaient plus accessibles :

<span style="white-space: pre-wrap;">Ajouter ceci dans </span>`<span class="editor-theme-code">/root/.bashrc</span>`<span style="white-space: pre-wrap;"> :</span>

```Shell
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
```

Puis :

```Shell
source /root/.bashrc
```

# AMP

L'outil **AMP** (Application Management Panel) par **CubeCoders** est un panneau de contrôle web auto-hébergé, conçu principalement pour la gestion de serveurs de jeux

# Installation

# Proxmox

Proxmox est une plateforme de **virtualisation open-source** qui permet de gérer des environnements virtuels.

# Update package database error

##### <span style="white-space: pre-wrap;">❌ </span>****Erreur rencontrée :****

****Code d’erreur :****<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">TASK ERROR: command 'apt-get update' failed: exit code 100</span>`

##### <span style="white-space: pre-wrap;">✅ </span>****Solution :****

- Sélectionnez l'hôte concerné.
- <span style="white-space: pre-wrap;">Allez dans l'onglet </span>****Mises à jour****<span style="white-space: pre-wrap;"> puis </span>****Dépôts****.
- <span style="white-space: pre-wrap;">Repérez le dépôt </span>****Enterprise****<span style="white-space: pre-wrap;"> et </span>****désactivez-le****.
- <span style="white-space: pre-wrap;">Si un second dépôt </span>****Enterprise****<span style="white-space: pre-wrap;"> est présent, désactivez-le également.</span>

[![image.png](https://wiki.ezoxe.fr/uploads/images/gallery/2025-04/scaled-1680-/image.png)](https://wiki.ezoxe.fr/uploads/images/gallery/2025-04/image.png)

<span style="white-space: pre-wrap;">Cliquez sur </span>****Ajouter****<span style="white-space: pre-wrap;">, puis changez le dépôt en </span>****"No Subscription"****, et ajoutez-le.

[  ](http://www.petenetlive.com/wp-content/uploads/2024/06/004-Proxmox-Add-Community-Repository.png)[![image.png](https://wiki.ezoxe.fr/uploads/images/gallery/2025-04/scaled-1680-/FFgimage.png)](https://wiki.ezoxe.fr/uploads/images/gallery/2025-04/FFgimage.png)

##### <span style="white-space: pre-wrap;">🔍 </span>****Vérification :****

- <span style="white-space: pre-wrap;">Vous devriez voir une </span>****coche verte****<span style="white-space: pre-wrap;"> et le message :</span>  
    **"You get updates for Proxmox VE".**

##### <span style="white-space: pre-wrap;">🔄 </span>****Finalisation :****

- <span style="white-space: pre-wrap;">Retournez dans l’onglet </span>****Mises à jour****.
- <span style="white-space: pre-wrap;">Cliquez sur </span>****Actualiser****.
- <span style="white-space: pre-wrap;">La tâche devrait maintenant se compléter </span>****sans erreur****.

[  ](http://www.petenetlive.com/wp-content/uploads/2024/06/006-Proxmox-VE-Manually-Update.png)[![image.png](https://wiki.ezoxe.fr/uploads/images/gallery/2025-04/scaled-1680-/3uiimage.png)](https://wiki.ezoxe.fr/uploads/images/gallery/2025-04/3uiimage.png)[  ](http://www.petenetlive.com/wp-content/uploads/2024/06/005-Proxmox-VE-Free-No-subscription-Repositories.png)

# Helper-script

<p class="callout info"><span style="white-space: pre-wrap;">Source : </span>[https://community-scripts.github.io/ProxmoxVE/](https://community-scripts.github.io/ProxmoxVE/)</p>

****Proxmox VE Helper-Scripts****<span style="white-space: pre-wrap;"> :</span>

- ****Collection d'outils****<span style="white-space: pre-wrap;"> : Ces scripts sont conçus pour simplifier la configuration et la gestion de l'environnement Proxmox Virtual Environment (VE).</span>
- ****Plus de 300 scripts****<span style="white-space: pre-wrap;"> : Le dépôt communautaire propose une vaste gamme de scripts pour aider à gérer les machines virtuelles, les conteneurs, les clusters hautement disponibles, le stockage et les réseaux.</span>
- ****Interface conviviale****<span style="white-space: pre-wrap;"> : Les utilisateurs peuvent créer des conteneurs Linux ou des machines virtuelles de manière interactive, avec des options pour des configurations simples ou avancées.</span>

Ces outils sont très utiles pour optimiser l'expérience de gestion de Proxmox VE.

# Reverse proxy avec VPS frontend

##### 🚀 Objectif

- Utiliser un VPS OVH comme passerelle d'accès
- Tunnel des services locaux via FRP (Fast Reverse Proxy)
- Reverse proxy HTTPS avec Caddy sur le VPS
- Accès via des sous-domaines personnalisés

#####   


##### 🌐 Prérequis

- Un VPS avec Ubuntu/Debian
- Un nom de domaine chez OVH avec DNS pointés vers le VPS
- Un serveur local (Proxmox) avec :
    - APP1 sur 192.168.X.X:8080
    - APP2 sur 192.168.X.X:8080/exemple
    - PROXMOX sur 192.168.X.X:8662

<p class="callout info">Différents cas d'usage sont donnés ici. APP1 étant une application classique sans configuration particulière. APP2 est une application utilisant une redirection vers un lien spécifique, ici le dossier "exemple". Et enfin une configuration adapté pour PROXMOX.</p>

---

##### ✅ Partie 1 : Installer FRP

##### ****Sur le VPS (serveur FRP)****

```bash
cd /opt
wget https://github.com/fatedier/frp/releases/download/v0.58.0/frp_0.58.0_linux_amd64.tar.gz
tar -xzf frp_0.58.0_linux_amd64.tar.gz
mv frp_0.58.0_linux_amd64 frp
nano /opt/frp/frps.ini
```

Contenu :

```ini
[common]
bind_port = 6000
```

Lancer manuellement (ou voir plus bas pour le service) :

```bash
/opt/frp/frps -c /opt/frp/frps.ini
```

Créer le service systemd :

```bash
sudo nano /etc/systemd/system/frps.service
```

Contenu :

```ini
[Unit]
Description=FRP Server
After=network.target

[Service]
ExecStart=/opt/frp/frps -c /opt/frp/frps.ini
Restart=always
User=user
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
```

Puis :

```bash
sudo systemctl daemon-reexec
sudo systemctl enable --now frps
```

---

##### ****Sur le serveur local (client FRP)****

```bash
cd /opt
wget https://github.com/fatedier/frp/releases/download/v0.58.0/frp_0.58.0_linux_amd64.tar.gz
tar -xzf frp_0.58.0_linux_amd64.tar.gz
mv frp_0.58.0_linux_amd64 frp
nano /opt/frp/frpc.ini
```

Contenu :

```ini
[common]
server_addr = IP_DU_VPS
server_port = 6000

[APP1]
type = tcp
local_ip = 192.186.X.X
local_port = 8080
remote_port = 9000

[APP2]
type = tcp
local_ip = 192.168.X.X
local_port = 8080
remote_port = 9001

[PROXMOX]
type = tcp
local_ip = 192.168.X.X
local_port = 8662
remote_port = 9002
```

<p class="callout info"><span style="white-space: pre-wrap;">Si vous réalisez une modification/ajout dans le fichier ci-dessus, pensez bien à redémarrer FRPC </span>`<span class="editor-theme-code">systemctl restart frpc</span>`</p>

Créer le service FRP client :

```bash
sudo nano /etc/systemd/system/frpc.service
```

Contenu :

```ini
[Unit]
Description=FRP Client
After=network.target

[Service]
ExecStart=/opt/frp/frpc -c /opt/frp/frpc.ini
Restart=always
User=user
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
```

Et activer :

```bash
sudo systemctl daemon-reexec
sudo systemctl enable --now frpc
```

---

##### 🔧 Partie 2 : Installer Caddy sur le VPS

```bash
sudo apt install -y debian-keyring debian-archive-keyring curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy.list
sudo apt update
sudo apt install caddy
```

---

##### 🗃️ Partie 3 : Configuration du Caddyfile (côté VPS)

```bash
sudo nano /etc/caddy/Caddyfile
```

Contenu recommandé :

<p class="callout info">Ce contenu comporte différents types de configuration. Prenez le plus adapté à votre cas d'usage.</p>

```caddyfile
proxmox.domaine.com {
    reverse_proxy https://localhost:9000 {
        transport http {
            tls_insecure_skip_verify
            versions h1
        }
        header_up Host {host}
        header_up X-Real-IP {http.request.remote}
        header_up X-Forwarded-For {http.request.remote}
        header_up X-Forwarded-Proto {http.request.scheme}
    }
}

app1.domaine.com {
    reverse_proxy localhost:6001
}

app2.domaine.com {
    @exemple_path path /*
    rewrite @exemple_path /exemple{path}

    reverse_proxy localhost:9002 {
        transport http {
            versions h1
        }
        header_up Host {host}
        header_up X-Forwarded-Proto https
    }
}
```

<p class="callout info"><span style="white-space: pre-wrap;">Si vous réalisez une modification/ajout dans le fichier ci-dessus, pensez bien à redémarrer CADDY </span>`<span class="editor-theme-code">systemctl reload caddy</span>`</p>

Puis :

```bash
sudo systemctl reload caddy
```

---

##### 🚪 Test des services

- Proxmox : https://proxmox.domaine.com
- APP1 : https://app1.domaine.com
- APP2 : https://app2.domaine.com (mais affiché sans /exemple)

Tester en navigation privée pour éviter les cookies HTTPS précédents.

---

##### 🌟 Et voilà !

Tu as maintenant une exposition sécurisée de tes services locaux via un VPS, sans exposer ton IP personnelle, avec HTTPS et Caddy.

# Apache Guacamole

**Apache Guacamole** est une passerelle de bureau à distance qui permet d'accéder à des machines distantes sans avoir besoin d'installer de client.

# Mise en place d'une connexion SSH via clé RSA

##### 🧰 Prérequis

- <span style="white-space: pre-wrap;">Un serveur </span>****Apache Guacamole****<span style="white-space: pre-wrap;"> opérationnel</span>
- Une machine cible avec un serveur SSH actif
- <span style="white-space: pre-wrap;">Une </span>****clé RSA****<span style="white-space: pre-wrap;"> (privée + publique)</span>
- Un utilisateur SSH valide sur la machine cible

##### 🛠️ 1. Génération d’une clé RSA

Sur la machine qui initie la connexion (par ex. Guacamole) :

```
ssh-keygen -t rsa -b 4096 -m PEM -f ~/.ssh/guac_key
```

<span style="white-space: pre-wrap;">✅ Option </span>`<span class="editor-theme-code">-m PEM</span>`<span style="white-space: pre-wrap;"> nécessaire : Guacamole n'accepte pas le format OpenSSH.</span>

- `<span class="editor-theme-code">guac_key</span>`<span style="white-space: pre-wrap;"> : clé </span>****privée****<span style="white-space: pre-wrap;"> (à coller dans Guacamole)</span>
- `<span class="editor-theme-code">guac_key.pub</span>`<span style="white-space: pre-wrap;"> : clé </span>****publique****<span style="white-space: pre-wrap;"> (à mettre sur la machine cible)</span>
- ****Ne mettez pas de passphrase****<span style="white-space: pre-wrap;"> pour éviter des problèmes</span>

##### 📤 2. Déploiement de la clé publique

****Sur le serveur (où se trouve sshd) :****

```
mkdir -p ~/.ssh
chmod 700 ~/.ssh

cat guac_key.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
```

##### ⚙️ 3. Ajustement du serveur SSH (si nécessaire)

<span style="white-space: pre-wrap;">Certaines distros récentes désactivent </span>`<span class="editor-theme-code">ssh-rsa</span>`<span style="white-space: pre-wrap;"> par défaut.</span>

<span style="white-space: pre-wrap;">Modifier </span>`<span class="editor-theme-code">/etc/ssh/sshd_config</span>`<span style="white-space: pre-wrap;"> et ajouter :</span>

```
PubkeyAcceptedAlgorithms +ssh-rsa
HostKeyAlgorithms +ssh-rsa
```

Puis redémarrer le service SSH :

```
sudo systemctl restart sshd
```

##### 🖥️ 4. Configuration dans l’interface Guacamole

1. <span style="white-space: pre-wrap;">Aller dans </span>****Connexions****<span style="white-space: pre-wrap;"> → </span>****Nouvelle connexion****
2. <span style="white-space: pre-wrap;">Choisir le </span>****protocole SSH****
3. Remplir les champs suivants :
    - ****Nom d’hôte****<span style="white-space: pre-wrap;"> : IP ou domaine de la cible</span>
    - ****Port****<span style="white-space: pre-wrap;"> : généralement </span>`<span class="editor-theme-code">22</span>`
    - ****Nom d’utilisateur****<span style="white-space: pre-wrap;"> : ex. </span>`<span class="editor-theme-code">root</span>`
    - ****Clé privée****<span style="white-space: pre-wrap;"> : coller le contenu du fichier </span>`<span class="editor-theme-code">guac_key</span>`
    - ****Phrase de passe****<span style="white-space: pre-wrap;"> : laisser vide (si clé sans mot de passe)</span>

##### ✅ 5. Tester la connexion

Cliquez sur la connexion SSH : si tout est bien configuré, le terminal s’ouvre depuis le navigateur.

##### 🐞 Dépannage : "Public key authentication failed"

<span style="white-space: pre-wrap;">Si l’erreur suivante apparaît dans les logs </span>`<span class="editor-theme-code">guacd</span>`<span style="white-space: pre-wrap;"> :</span>

```
Public key authentication failed: Username/PublicKey combination invalid
```

Vérifications à faire :

- <span style="white-space: pre-wrap;">Clé privée au format </span>****PEM****
- <span style="white-space: pre-wrap;">Clé publique bien dans </span>`<span class="editor-theme-code">~/.ssh/authorized_keys</span>`
- <span style="white-space: pre-wrap;">Fichier </span>`<span class="editor-theme-code">sshd_config</span>`<span style="white-space: pre-wrap;"> contient :</span>

```nginx
PubkeyAcceptedAlgorithms +ssh-rsa
HostKeyAlgorithms +ssh-rsa
```

- Permissions correctes :
    - `<span class="editor-theme-code">~/.ssh</span>`<span style="white-space: pre-wrap;"> → </span>`<span class="editor-theme-code">700</span>`
    - `<span class="editor-theme-code">~/.ssh/authorized_keys</span>`<span style="white-space: pre-wrap;"> → </span>`<span class="editor-theme-code">600</span>`

##### 📌 Astuce

Pour suivre les logs en direct :

```
journalctl -u guacd -f
```

---

<p class="callout info"><span style="white-space: pre-wrap;">Source : 🔗 </span>[Documentation Guacamole](https://guacamole.apache.org/doc/gug/)<span style="white-space: pre-wrap;"> 🔗 </span>[Manuel OpenSSH](#bkmrk-source-%3A-%F0%9F%94%97-documenta)</p>

# Grafana

**Grafana** est une plateforme de visualisation de données **open source** lancée en **2013**. Elle permet aux utilisateurs de :

- **Créer des tableaux de bord dynamiques** et modulables.
- **Visualiser** des métriques, des journaux et des traces provenant de diverses sources de données.
- **Configurer des alertes** pour surveiller les performances et la santé des systèmes.

# Mise en place de node-exporter

##### Mise en place de Node Exporter pour la supervision avec Prometheus et Grafana

<span style="white-space: pre-wrap;">Ce guide explique comment installer et configurer </span>****Node Exporter****<span style="white-space: pre-wrap;"> sur une machine (VPS ou serveur Proxmox) afin d'exposer ses métriques à un serveur </span>****Prometheus****<span style="white-space: pre-wrap;">, qui les affichera ensuite dans </span>****Grafana****.

---

##### ✨ Objectif

Obtenir les statistiques système de vos machines :

- CPU, RAM, disques, réseau
- Température, uptime, charge

---

##### 🌐 Prérequis

- Un serveur Prometheus fonctionnel
- Une machine cible sur laquelle on souhaite installer Node Exporter (ex : VPS, Proxmox Host)

---

##### 🛠️ Installation de Node Exporter

1\. Se connecter à la machine cible (ex : via SSH)

2\. Télécharger Node Exporter

```bash
curl -LO https://github.com/prometheus/node_exporter/releases/latest/download/node_exporter-1.8.1.linux-amd64.tar.gz
tar -xvzf node_exporter-1.8.1.linux-amd64.tar.gz
cd node_exporter-1.8.1.linux-amd64
```

<p class="callout info"><span style="white-space: pre-wrap;">Si la commande </span>`<span class="editor-theme-code">curl -LO</span>`<span style="white-space: pre-wrap;"> ne fonctionne pas, utiliser </span>`<span class="editor-theme-code">wget</span>`. Une commande fonctionnelle est présente ci-dessous. Merci de simplement modifier la version de l'exemple (1.8.1) vers la dernière version.</p>

<p class="callout info">`<span class="editor-theme-code">wget https://github.com/prometheus/node_exporter/releases/download/v1.8.1/node_exporter-1.8.1.linux-amd64.tar.gz</span>`</p>

3\. Installer le binaire

```bash
sudo cp node_exporter /usr/local/bin/
```

4\. Créer un utilisateur spécial pour exécuter Node Exporter

```bash
sudo useradd -rs /bin/false node_exporter
```

5\. Créer le service systemd

```bash
sudo tee /etc/systemd/system/node_exporter.service > /dev/null <<EOF
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=default.target
EOF
```

6\. Activer et démarrer le service

```bash
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
```

7\. Vérifier qu'il fonctionne

```bash
curl http://localhost:9100/metrics
```

Vous devez voir une longue liste de métriques Prometheus.

---

##### 📁 Configuration de Prometheus (sur le serveur Prometheus)

<span style="white-space: pre-wrap;">1. Modifier le fichier </span>`<span class="editor-theme-code">prometheus.yml</span>`

<span style="white-space: pre-wrap;">Ajoutez la cible dans la section </span>`<span class="editor-theme-code">scrape_configs</span>`<span style="white-space: pre-wrap;"> :</span>

```yaml
- job_name: 'nom_de_la_machine'
    static_configs:
      - targets: ['IP_DE_LA_MACHINE:9100']
```

2\. Redémarrer Prometheus

```bash
sudo systemctl restart prometheus
```

3\. Vérifier l'interface Web de Prometheus

<span style="white-space: pre-wrap;">Naviguez vers </span>`<span class="editor-theme-code">http://IP_DU_SERVEUR_PROMETHEUS:9090/targets</span>`<span style="white-space: pre-wrap;"> Vous devez voir la cible apparaître en </span>****UP****.

---

##### 📊 Affichage dans Grafana

1\. Aller dans Grafana &gt; Configuration &gt; Data Sources

- <span style="white-space: pre-wrap;">Ajouter ou sélectionner la source </span>****Prometheus****

2\. Aller dans Dashboards &gt; Import

- <span style="white-space: pre-wrap;">Entrer l'ID : </span>`<span class="editor-theme-code">1860</span>`
- Sélectionner la source Prometheus
- <span style="white-space: pre-wrap;">Importer le dashboard </span>****Node Exporter Full****

3\. Profiter des statistiques temps réel 🚀

---

##### ⚠️ Sécurité (optionnel)

- Pour accéder à Node Exporter via Internet, utilisez un tunnel WireGuard, FRP ou un reverse proxy avec auth.
- <span style="white-space: pre-wrap;">Sinon, limitez l'accès au port 9100 au seul serveur Prometheus via </span>`<span class="editor-theme-code">iptables</span>`<span style="white-space: pre-wrap;"> ou </span>`<span class="editor-theme-code">ufw</span>`.

---

##### 📄 Notes finales

- <span style="white-space: pre-wrap;">Node Exporter ne collecte </span>****pas de logs****<span style="white-space: pre-wrap;">. Pour les logs (fail2ban, journald...), utilisez </span>****Promtail****<span style="white-space: pre-wrap;"> avec </span>****Loki****.
- <span style="white-space: pre-wrap;">Vous pouvez installer Node Exporter sur </span>****autant de machines que nécessaire****, Prometheus gèrera toutes les cibles.

---

🎉 C'est tout ! Vous avez maintenant un système de monitoring robuste avec Node Exporter + Prometheus + Grafana.

# Mise en place de prometheus

##### Mise en place de Prometheus pour la supervision

<span style="white-space: pre-wrap;">Ce guide explique comment installer et configurer </span>****Prometheus****<span style="white-space: pre-wrap;"> sur une machine dédiée (VM ou LXC), afin de collecter les métriques d'autres machines (VPS, Proxmox, etc.) via des agents comme </span>****node\_exporter****.

<p class="callout info">Vous pouvez aussi utilisé Helper-Script pour l'installation :  
****Prometheus PVE Exporter :**** [https://community-scripts.github.io/ProxmoxVE/scripts?id=prometheus-pve-exporter](https://community-scripts.github.io/ProxmoxVE/scripts?id=prometheus-pve-exporter)  
****Prometheus :****<span style="white-space: pre-wrap;"> </span>[https://community-scripts.github.io/ProxmoxVE/scripts?id=prometheus](https://community-scripts.github.io/ProxmoxVE/scripts?id=prometheus)</p>

##### ✨ Objectif

<span style="white-space: pre-wrap;">Mettre en place un serveur </span>****Prometheus****<span style="white-space: pre-wrap;"> pour collecter des métriques depuis plusieurs machines :</span>

- VPS avec node\_exporter
- Proxmox exporter (exporteur dédié pour Proxmox VE)
- Machines locales avec node\_exporter

---

##### 🌐 Prérequis

- Une VM ou LXC dédiée à Prometheus (Debian/Ubuntu recommandé)
- Accès root ou sudo

---

##### 🛠️ Installation de Prometheus

1\. Mise à jour et création d'utilisateur

```bash
sudo apt update && sudo apt install -y curl tar
sudo useradd --no-create-home --shell /bin/false prometheus
```

2\. Téléchargement

```bash
cd /tmp
curl -LO https://github.com/prometheus/prometheus/releases/latest/download/prometheus-2.52.0.linux-amd64.tar.gz
tar xvf prometheus-2.52.0.linux-amd64.tar.gz
cd prometheus-2.52.0.linux-amd64
```

<p class="callout info"><span style="white-space: pre-wrap;">Si la commande </span>`<span class="editor-theme-code">curl -LO</span>`<span style="white-space: pre-wrap;"> ne fonctionne pas, utilisé </span>`<span class="editor-theme-code">wget</span>`</p>

3\. Déplacement des fichiers

```bash
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo cp prometheus promtool /usr/local/bin/
sudo cp -r consoles/ console_libraries/ /etc/prometheus/
sudo cp prometheus.yml /etc/prometheus/
```

4\. Droits

```bash
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool
```

---

##### 🔧 Création du service systemd

```bash
sudo tee /etc/systemd/system/prometheus.service > /dev/null <<EOF
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus/

[Install]
WantedBy=multi-user.target
EOF
```

---

##### <span style="white-space: pre-wrap;">🖊️ Configuration de </span>`<span class="editor-theme-code">/etc/prometheus/prometheus.yml</span>`

<span style="white-space: pre-wrap;">Voici un exemple </span>****valide****<span style="white-space: pre-wrap;"> pour plusieurs machines :</span>

```yaml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'nom_de_la_machine'
    static_configs:
      - targets: ['IP_DE_VOTRE_MACHINE:9090']

  - job_name: 'nom_de_la_machine'
    static_configs:
      - targets: ['IP_DE_VOTRE_MACHINE:9221']

  - job_name: 'nom_de_la_machine'
    static_configs:
      - targets: ['IP_DE_VOTRE_MACHINE:9100']

  - job_name: 'nom_de_la_machine'
    static_configs:
      - targets: ['IP_DE_VOTRE_MACHINE:9100']
```

---

##### 🚀 Lancement de Prometheus

1\. Activer le service

```bash
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus
```

2\. Vérification

```bash
systemctl status prometheus
```

3\. Interface Web

Accédez à :

```
http://IP_DU_SERVEUR_PROMETHEUS:9090
```

<span style="white-space: pre-wrap;">Puis allez dans : </span>`<span class="editor-theme-code">Status > Targets</span>`

<span style="white-space: pre-wrap;">Vous devez voir toutes les cibles listées comme </span>****UP****.

---

##### 🌍 Connexion à Grafana

1. <span style="white-space: pre-wrap;">Sur Grafana (VM différente), aller dans </span>****Configuration &gt; Data Sources****
2. <span style="white-space: pre-wrap;">Cliquer sur </span>****Add Data Source****<span style="white-space: pre-wrap;"> &gt; choisir </span>****Prometheus****
3. <span style="white-space: pre-wrap;">Mettre comme URL : </span>`<span class="editor-theme-code">http://IP_DU_SERVEUR_PROMETHEUS:9090</span>`
4. <span style="white-space: pre-wrap;">Cliquer sur </span>****Save &amp; Test****

---

##### 📄 Notes utiles

- <span style="white-space: pre-wrap;">Le fichier </span>`<span class="editor-theme-code">prometheus.yml</span>`<span style="white-space: pre-wrap;"> doit avoir une </span>****seule section** `<strong class="editor-theme-bold editor-theme-code">scrape_configs:</strong>`**
- <span style="white-space: pre-wrap;">Chaque </span>`<span class="editor-theme-code">job_name</span>`<span style="white-space: pre-wrap;"> correspond à une cible identifiée dans Grafana</span>
- Si le service ne démarre pas, vérifiez les erreurs YAML :

```bash
/usr/local/bin/prometheus --config.file=/etc/prometheus/prometheus.yml
```

- Exemple d'erreur courante :

```
yaml: unmarshal errors: field scrape_configs already set
```

<span style="white-space: pre-wrap;">=&gt; Ça signifie que </span>`<span class="editor-theme-code">scrape_configs:</span>`<span style="white-space: pre-wrap;"> est déclaré deux fois</span>

---

🎉 Prometheus est maintenant prêt à collecter des métriques sur tous vos serveurs ✅

# Mise en place de grafana

##### Mise en place de Grafana pour visualiser les métriques Prometheus

<span style="white-space: pre-wrap;">Ce guide explique comment installer et configurer </span>****Grafana****<span style="white-space: pre-wrap;"> sur une VM dédiée (ou LXC), afin d'afficher les métriques collectées par Prometheus, comme celles de </span>****Node Exporter****<span style="white-space: pre-wrap;">, </span>****Proxmox Exporter****, etc.

<p class="callout info"><span style="white-space: pre-wrap;">Vous pouvez également l'installer de manière simple et rapide avec l'aide de Helper-Script : </span>[https://community-scripts.github.io/ProxmoxVE/scripts?id=grafana](https://community-scripts.github.io/ProxmoxVE/scripts?id=grafana)</p>

---

##### ✨ Objectif

- Visualiser en temps réel les métriques de vos machines avec des dashboards interactifs
- Créer des alertes ou graphiques personnalisés via Prometheus

---

##### 🌐 Prérequis

- Une VM dédiée pour Grafana (Debian/Ubuntu recommandé)
- Un serveur Prometheus fonctionnel accessible via IP

---

##### 🛠️ Installation de Grafana (mode natif, sans Docker)

1\. Ajouter le dépôt officiel Grafana

```bash
sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"

wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
```

2\. Installer Grafana

```bash
sudo apt update
sudo apt install grafana -y
```

3\. Activer et démarrer Grafana

```bash
sudo systemctl daemon-reload
sudo systemctl enable --now grafana-server
```

4\. Accès à l'interface web

```
http://IP_DE_LA_VM_GRAFANA:3000
```

Identifiants par défaut :

- ****admin / admin****<span style="white-space: pre-wrap;"> (puis changement de mot de passe)</span>

---

##### 🌍 Connexion à Prometheus

1\. Aller dans Grafana &gt; Configuration &gt; Data Sources

- <span style="white-space: pre-wrap;">Cliquer sur </span>****Add Data Source****
- <span style="white-space: pre-wrap;">Choisir </span>****Prometheus****

2\. Configuration de la source

- ****URL****<span style="white-space: pre-wrap;"> : </span>`<span class="editor-theme-code">http://IP_DU_SERVEUR_PROMETHEUS:9090</span>`
- Laisser les autres options par défaut
- <span style="white-space: pre-wrap;">Cliquer sur </span>****Save &amp; Test****
- Si tout est bon : "Data source is working" ✅

---

##### 📊 Importer des dashboards

Dashboard Node Exporter (métriques système)

- <span style="white-space: pre-wrap;">Aller dans </span>****Dashboards &gt; Import****
- <span style="white-space: pre-wrap;">Entrer l'ID : </span>`<span class="editor-theme-code">1860</span>`
- Choisir la data source Prometheus
- <span style="white-space: pre-wrap;">Cliquer sur </span>****Import****

Dashboard Proxmox Exporter

- <span style="white-space: pre-wrap;">Aller dans </span>****Dashboards &gt; Import****
- <span style="white-space: pre-wrap;">Entrer l'ID : </span>`<span class="editor-theme-code">11074</span>`
- Importer

Dashboard Loki (si Promtail est installé)

- <span style="white-space: pre-wrap;">ID recommandé : </span>`<span class="editor-theme-code">13639</span>`<span style="white-space: pre-wrap;"> (journald, fail2ban, syslog)</span>

---

##### ⚖️ Bonnes pratiques

- Organisez vos dashboards par machine ou par rôle (ex : VPS, proxmox, backup...)
- Créez des "folders" pour chaque groupe
- Activez l'authentification externe (LDAP, OAuth) si Grafana est exposé publiquement

---

##### 🔒 Sécurité (optionnel)

- Si vous exposez Grafana sur Internet, pensez à le placer derrière un reverse proxy (ex : Caddy, Nginx) avec HTTPS et mot de passe
- Sinon, limitez l'accès au port 3000 avec un pare-feu ou WireGuard

---

##### 📄 Notes utiles

- Les sources de données Grafana peuvent inclure Prometheus, Loki, InfluxDB, etc.
- Vous pouvez aussi créer des alertes dans Grafana (Alerts v2)
- Les dashboards peuvent être exportés et sauvegardés au format JSON

---

🎉 Grafana est maintenant prêt à afficher vos métriques Prometheus sur une interface puissante et personnalisable ✅

# Affine

**AFFiNE** est une plateforme de travail tout-en-un qui fusionne les documents, les tableaux blancs et les bases de données.

# Mise à jour (AFFiNE Self-Hosted)

##### ✅ Étape 0 — Sauvegarde (très important)

Avant toute chose :

- <span style="white-space: pre-wrap;">Sauvegarde ton fichier </span>`<span class="editor-theme-code">compose.yml</span>`
- Sauvegarde tes données importantes (par exemple : volumes Docker, fichiers de config, base de données, etc.)

<p class="callout info">En cas de souci pendant la mise à jour, tu pourras revenir en arrière sans perte.</p>

---

##### <span style="white-space: pre-wrap;">📥 Étape 1 — Télécharger le nouveau </span>`<span class="editor-theme-code">compose.yml</span>`

1. <span style="white-space: pre-wrap;">Va sur la page officielle pour récupérer le </span>****dernier fichier** `<strong class="editor-theme-bold editor-theme-code">compose.yml</strong>`**.
2. Remplace ton fichier existant (`<span class="editor-theme-code">compose.yml</span>`) par celui que tu viens de télécharger.

<span style="white-space: pre-wrap;">⚠️ </span>****Attention****<span style="white-space: pre-wrap;"> :</span>  
Si tu avais modifié ton ancien fichier (`<span class="editor-theme-code">ports</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">volumes</span>`<span style="white-space: pre-wrap;">, variables d’environnement, etc.), </span>****copie ces changements****<span style="white-space: pre-wrap;"> dans le nouveau fichier.</span>

---

##### 🐳 Étape 2 — Récupérer la dernière image Docker

<span style="white-space: pre-wrap;">Dans le terminal (dans le dossier où se trouve ton </span>`<span class="editor-theme-code">compose.yml</span>`) :

```bash
docker compose -f compose.yml pull
```

<p class="callout info"><span style="white-space: pre-wrap;"> Cette commande va télécharger la nouvelle version de l’image AFFiNE depuis Docker Hub.</span></p>

---

🔁 Étape 3 — Redémarrer le service

Toujours dans le terminal :

```bash
docker compose -f compose.yml up
```

<p class="callout info"><span style="white-space: pre-wrap;">Cela va arrêter l’ancienne version (si elle tourne) et démarrer AFFiNE avec la </span>****dernière version****.</p>

---

##### 🎉 Mise à jour terminée !

<span style="white-space: pre-wrap;">Tu as maintenant la </span>****dernière version de AFFiNE****<span style="white-space: pre-wrap;"> en local, avec tous tes réglages conservés (si tu les as bien remis dans le nouveau fichier).</span>

# Configuration Affine AI (OpenAI Override)

#### 1. Contexte et Problématique

Par défaut, les versions self-hosted d'Affine (v0.18+) sont configurées pour utiliser des modèles Google Gemini spécifiques. L'objectif est de forcer l'utilisation d'OpenAI (GPT-4o) pour tous les scénarios IA en contournant les limitations hardcodées du backend.

#### 2. Configuration Infrastructure (Docker Compose)

<span style="white-space: pre-wrap;">La variable d'environnement </span>`<span class="editor-theme-code">selfhosted=true</span>`<span style="white-space: pre-wrap;"> est </span>**obligatoire**<span style="white-space: pre-wrap;"> pour débloquer le menu d'administration IA et autoriser les API tiers.</span>

##### <span style="white-space: pre-wrap;">Modification du fichier </span>`<span class="editor-theme-code">docker-compose.yml</span>`

<span style="white-space: pre-wrap;">Modifier le service </span>`<span class="editor-theme-code">affine</span>`<span style="white-space: pre-wrap;"> pour ajouter les variables et fixer le montage du fichier de configuration dans un répertoire neutre (</span>`<span class="editor-theme-code">/opt</span>`<span style="white-space: pre-wrap;">) pour éviter les problèmes de permissions </span>`<span class="editor-theme-code">root</span>`<span style="white-space: pre-wrap;"> vs </span>`<span class="editor-theme-code">node</span>`.

```yaml
services:
  affine:
    image: ghcr.io/toeverything/affine:stable
    environment:
      # ... variables existantes (DB, Redis) ...
      - AFFINE_COPILOT_ENABLED=true
      
      # CRITIQUE : Active le support des API tiers et l'interface Admin AI
      - selfhosted=true
      
      # Force le chemin de configuration (évite les erreurs de dossier home)
      - AFFINE_CONFIG_PATH=/opt/affine_config.json
      
    volumes:
      - ${UPLOAD_LOCATION}:/root/.affine/self-host/storage
      # Montage dans /opt pour contourner les restrictions de permissions /root
      - ${CONFIG_LOCATION}:/opt/affine_config.json
```

<p class="callout info">**Note : Assurez-vous que* `<em class="editor-theme-code editor-theme-italic">${CONFIG_LOCATION}</em>` *dans le fichier* `<em class="editor-theme-code editor-theme-italic">.env</em>` *pointe bien vers votre fichier json sur l'hôte.**</p>

#### 3. Configuration Initiale (Fichier JSON)

Ce fichier sert uniquement à déclarer le fournisseur. La configuration fine des modèles se fera via l'interface web.

**Fichier sur l'hôte :**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">config.json</span>`

```json
{
  "copilot": {
    "enabled": true,
    "providers": {
      "openai": {
        "apiKey": "sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
      }
    },
    "embedding": {
      "provider": "openai",
      "model": "text-embedding-3-small",
      "apiKey": "sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    }
  }
}
```

<p class="callout info">**Note : Laisser les permissions du fichier à* `<em class="editor-theme-code editor-theme-italic">644</em>` *pour qu'il soit lisible par le conteneur.**</p>

#### 4. Configuration Finale (Interface Web Admin)

C'est la méthode recommandée ("Plan B") pour assurer la persistance et mapper correctement les modèles internes d'Affine vers OpenAI.

1. Se connecter à l'instance Affine.
2. <span style="white-space: pre-wrap;">Accéder à l'URL : </span>`<span class="editor-theme-code">https://votre-domaine-affine.com/admin</span>`<span style="white-space: pre-wrap;"> (ou via le menu </span>**Settings &gt; Admin Panel**).
3. <span style="white-space: pre-wrap;">Aller dans l'onglet </span>**AI**<span style="white-space: pre-wrap;"> (ou Intelligence).</span>
4. <span style="white-space: pre-wrap;">Activer l'option </span>**Enable Copilot**.

#### Mapping des Scénarios (Surcharge)

<span style="white-space: pre-wrap;">Dans la section de configuration des scénarios (Custom Models), coller le JSON suivant. </span>**Important :**<span style="white-space: pre-wrap;"> Cette configuration redirige toutes les requêtes internes (qui demandent par défaut </span>`<span class="editor-theme-code">gemini-2.5-flash</span>`<span style="white-space: pre-wrap;">) vers </span>`<span class="editor-theme-code">gpt-4o</span>`.

```json
{
  "scenarios": {
    "chat": "gpt-4o",
    "chat_stream": "gpt-4o",
    "writing": "gpt-4o",
    "translation": "gpt-4o",
    "summary": "gpt-4o",
    "brainstorm": "gpt-4o",
    "coding": "gpt-4o",
    "check_grammar": "gpt-4o",
    "quick_decision_making": "gpt-4o",
    "quick_text_generation": "gpt-4o",
    "complex_text_generation": "gpt-4o",
    "polish_and_summarize": "gpt-4o",
    "audio_transcribing": "whisper-1",
    "image": "dall-e-3"
  },
  "override_enabled": true
}
```

#### Vérification OpenAI Provider

<span style="white-space: pre-wrap;">Juste en dessous, dans la section </span>**OpenAI Provider**, vérifier que la clé API est bien détectée (masquée). Si nécessaire, forcer la configuration :

```json
{
  "apiKey": "sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
```

#### 5. Dépannage Rapide

Si l'IA ne répond pas (Erreur 500 ou "No provider available") :

1. <span style="white-space: pre-wrap;">Vérifier les logs : </span>`<span class="editor-theme-code">docker compose logs -f affine</span>`
2. <span style="white-space: pre-wrap;">Si erreur </span>`<span class="editor-theme-code">ZodError</span>`<span style="white-space: pre-wrap;"> : Le fichier JSON est mal formé ou le modèle retourné par l'API n'est pas une liste valide.</span>
3. <span style="white-space: pre-wrap;">Si erreur </span>`<span class="editor-theme-code">Permission denied</span>`<span style="white-space: pre-wrap;"> : Vérifier que le montage Docker n'est pas dans </span>`<span class="editor-theme-code">/root</span>`<span style="white-space: pre-wrap;"> côté conteneur.</span>
4. <span style="white-space: pre-wrap;">Si les menus Admin sont invisibles : Vérifier que </span>`<span class="editor-theme-code">selfhosted=true</span>`<span style="white-space: pre-wrap;"> est bien chargé dans les variables d'environnement.</span>

# Wazuh

## Wazuh : Votre SIEM &amp; XDR Open Source

Wazuh est une plateforme de securite gratuite et open-source offrant une visibilite unifiee sur la securite des endpoints et du cloud. Elle combine les fonctions de SIEM et de XDR.

#### Pourquoi utiliser Wazuh ?

- **Detection d intrusions :** Analyse des logs en temps reel.
- **Verification d integrite (FIM) :** Surveille les changements sur les fichiers systeme.
- **Analyse des vulnerabilites :** Inventaire des applications et correlation CVE.

#### Architecture et Fonctionnement

- **Wazuh Manager :** Le coeur du systeme.
- **Wazuh Indexer :** Moteur de recherche et d analyse.
- **Wazuh Dashboard :** L interface graphique de visualisation.
- **Agents Wazuh :** Programmes installes sur les machines surveillees.

<p class="callout info">Documentation officielle : [**documentation.wazuh.com**](https://documentation.wazuh.com)</p>