mirror of
https://github.com/blasseye/WikiJs.git
synced 2025-08-25 05:46:53 +02:00
docs: add all untracked content
This commit is contained in:
parent
158e649b98
commit
da31181366
12 changed files with 1209 additions and 46 deletions
84
applications.md
Normal file
84
applications.md
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
---
|
||||||
|
title: Applications auto-hébergées
|
||||||
|
description: Cette section présente les principales applications déployées dans l'infrastructure. Elles couvrent des besoins variés : publication de contenu, collaboration, gestion de documents, cloud personnel, domotique, etc.
|
||||||
|
published: true
|
||||||
|
date: 2025-06-30T20:51:20.642Z
|
||||||
|
tags:
|
||||||
|
editor: markdown
|
||||||
|
dateCreated: 2025-06-30T15:27:02.190Z
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✍️ Ghost
|
||||||
|
**Objectif** : Permettre la publication de contenus sous forme de blog moderne, rapide et épuré.
|
||||||
|
|
||||||
|
Ghost est une plateforme de blogging open-source axée sur la performance et l'expérience d'écriture.
|
||||||
|
|
||||||
|
📘 [Documentation Ghost](applications/ghost.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🌍 WordPress
|
||||||
|
**Objectif** : Fournir un CMS polyvalent pour créer facilement des sites web dynamiques.
|
||||||
|
|
||||||
|
WordPress est un système de gestion de contenu (CMS) extensible, adapté aux blogs, vitrines ou portails.
|
||||||
|
|
||||||
|
📘 [Documentation WordPress](applications/wordpress.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ☁️ Nextcloud
|
||||||
|
**Objectif** : Offrir une alternative souveraine aux services cloud commerciaux pour le stockage, la synchronisation et le partage de fichiers.
|
||||||
|
|
||||||
|
Nextcloud centralise fichiers, agendas, contacts et autres services collaboratifs dans un environnement auto-hébergé.
|
||||||
|
|
||||||
|
📘 [Documentation Nextcloud](applications/nextcloud.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 OnlyOffice
|
||||||
|
**Objectif** : Fournir une suite bureautique collaborative compatible avec les formats Microsoft Office.
|
||||||
|
|
||||||
|
OnlyOffice permet l’édition en ligne de documents texte, tableurs et présentations, souvent intégré avec Nextcloud.
|
||||||
|
|
||||||
|
📘 [Documentation OnlyOffice](applications/onlyoffice.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📚 Wiki.js
|
||||||
|
**Objectif** : Mettre en place une documentation collaborative avec gestion fine des droits et versioning.
|
||||||
|
|
||||||
|
Wiki.js est un moteur de wiki moderne basé sur Markdown, conçu pour structurer et maintenir facilement de la documentation technique ou organisationnelle.
|
||||||
|
|
||||||
|
📘 [Documentation Wiki.js](applications/wikijs.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🏠 Home Assistant
|
||||||
|
**Objectif** : Superviser et automatiser un environnement domotique avec une interface centralisée.
|
||||||
|
|
||||||
|
Home Assistant permet de gérer des appareils connectés, créer des scénarios d'automatisation et suivre des capteurs dans une maison ou un bâtiment intelligent.
|
||||||
|
|
||||||
|
📘 [Documentation Home Assistant](applications/homeassistant.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧠 AFFiNe
|
||||||
|
**Objectif** : Centraliser la prise de notes, la gestion des tâches et les mindmaps dans un espace de travail unifié.
|
||||||
|
|
||||||
|
AFFiNe est une application tout-en-un pour organiser informations, idées et projets à travers une interface intuitive et modulaire.
|
||||||
|
|
||||||
|
📘 [Documentation AFFiNe](applications/affine.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📂 Structure de la documentation
|
||||||
|
|
||||||
|
Chaque lien ci-dessus mène vers une fiche détaillée contenant :
|
||||||
|
|
||||||
|
- 🧾 Présentation générale
|
||||||
|
- 🐳 Déploiement (Docker Compose)
|
||||||
|
- 🔐 Authentification et sécurité
|
||||||
|
- ♻️ Sauvegardes & restauration
|
||||||
|
- 🛠️ Maintenance et problèmes connus
|
||||||
|
|
||||||
|
---
|
151
applications/wikijs.md
Normal file
151
applications/wikijs.md
Normal file
|
@ -0,0 +1,151 @@
|
||||||
|
---
|
||||||
|
title: WikiJs
|
||||||
|
description: Wiki.js est conçu pour créer et maintenir une documentation collaborative de manière simple et intuitive.
|
||||||
|
published: true
|
||||||
|
date: 2025-06-30T21:01:49.725Z
|
||||||
|
tags:
|
||||||
|
editor: markdown
|
||||||
|
dateCreated: 2025-05-06T18:43:29.102Z
|
||||||
|
---
|
||||||
|
|
||||||
|
## Fonctionnalités principales :
|
||||||
|
|
||||||
|
* ✏️ Éditeur Markdown, WYSIWYG ou code brut
|
||||||
|
* 🔐 Gestion fine des utilisateurs et des permissions
|
||||||
|
* 📁 Support Git en tant que source/versionning
|
||||||
|
* 🌍 Interface multilingue
|
||||||
|
* 🧩 Extensions et intégrations (Google, LDAP, SAML, etc.)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧾 Prérequis
|
||||||
|
|
||||||
|
Avant de commencer, assurez-vous d’avoir :
|
||||||
|
|
||||||
|
* Docker et Docker Compose installés sur votre système.
|
||||||
|
* Un réseau Docker nommé `traefik_net` (créé au préalable si nécessaire).
|
||||||
|
* Un fichier `.env` contenant les variables d’environnement suivantes :
|
||||||
|
|
||||||
|
```dotenv
|
||||||
|
SERVICE=wikijs
|
||||||
|
SERVICE_DB=wikijs_db
|
||||||
|
DB_NAME=wikijs
|
||||||
|
DB_USER=wikijs
|
||||||
|
DB_PASSWORD=motdepassefort
|
||||||
|
URL=wiki.mondomaine.tld
|
||||||
|
```
|
||||||
|
|
||||||
|
> 🔐 **Conseil sécurité :** Stockez votre fichier `.env` dans un endroit sécurisé et ne le versionnez pas !
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚙️ Fichier `docker-compose.yml`
|
||||||
|
|
||||||
|
Créez un fichier `docker-compose.yml` avec le contenu suivant :
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
wikijs_db:
|
||||||
|
image: postgres:16
|
||||||
|
container_name: ${SERVICE_DB}
|
||||||
|
environment:
|
||||||
|
POSTGRES_DB: ${DB_NAME}
|
||||||
|
POSTGRES_USER: ${DB_USER}
|
||||||
|
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- ./data-db:/var/lib/postgresql/data
|
||||||
|
networks:
|
||||||
|
- wikijs_net
|
||||||
|
|
||||||
|
wikijs:
|
||||||
|
image: lscr.io/linuxserver/wikijs:2.5.307
|
||||||
|
container_name: ${SERVICE}
|
||||||
|
depends_on:
|
||||||
|
- wikijs_db
|
||||||
|
environment:
|
||||||
|
PUID: 1000
|
||||||
|
PGID: 1000
|
||||||
|
DB_TYPE: postgres
|
||||||
|
DB_PORT: 5432
|
||||||
|
DB_HOST: ${SERVICE_DB}
|
||||||
|
DB_NAME: ${DB_NAME}
|
||||||
|
DB_USER: ${DB_USER}
|
||||||
|
DB_PASS: ${DB_PASSWORD}
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- ./config:/config
|
||||||
|
- ./data:/data
|
||||||
|
networks:
|
||||||
|
- traefik_net
|
||||||
|
- wikijs_net
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.${SERVICE}.rule=Host(`${URL}`)"
|
||||||
|
- "traefik.http.routers.${SERVICE}.entrypoints=web"
|
||||||
|
- "traefik.http.services.${SERVICE}.loadbalancer.server.port=3000"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
traefik_net:
|
||||||
|
external: true
|
||||||
|
wikijs_net:
|
||||||
|
name: wikijs_net
|
||||||
|
driver: bridge
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Démarrage
|
||||||
|
|
||||||
|
Lancez les conteneurs avec la commande :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Vous pouvez ensuite accéder à votre Wiki via :
|
||||||
|
`http://wiki.mondomaine.tld` (ou le domaine défini dans `$URL`).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📁 Arborescence recommandée
|
||||||
|
|
||||||
|
```
|
||||||
|
wikijs/
|
||||||
|
├── docker-compose.yml
|
||||||
|
├── .env
|
||||||
|
├── config/
|
||||||
|
├── data/
|
||||||
|
└── data-db/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧼 Nettoyage
|
||||||
|
|
||||||
|
Pour arrêter et supprimer les conteneurs :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour supprimer également les volumes :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose down -v
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📚 Ressources utiles
|
||||||
|
|
||||||
|
* [Documentation officielle Wiki.js](https://docs.requarks.io/)
|
||||||
|
* [Image Docker LinuxServer.io](https://hub.docker.com/r/linuxserver/wikijs)
|
||||||
|
* [Traefik Documentation](https://doc.traefik.io/traefik/)
|
||||||
|
|
||||||
|
---
|
142
applications/wordpress.md
Normal file
142
applications/wordpress.md
Normal file
|
@ -0,0 +1,142 @@
|
||||||
|
---
|
||||||
|
title: Wordpress
|
||||||
|
description: WordPress est un CMS (Content Management System) open source, puissant et flexible, idéal pour créer un site web, un blog ou même une boutique en ligne avec WooCommerce.
|
||||||
|
published: true
|
||||||
|
date: 2025-06-30T21:03:33.648Z
|
||||||
|
tags:
|
||||||
|
editor: markdown
|
||||||
|
dateCreated: 2025-05-06T19:02:21.559Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Cette documentation présente un déploiement de WordPress à l’aide de **Docker Compose**, avec une base de données **MySQL**, et une exposition du site en HTTPS via **Traefik**, utilisant des **variables d’environnement dans les labels** pour une configuration facilement réutilisable.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧾 Prérequis
|
||||||
|
|
||||||
|
* Docker & Docker Compose installés
|
||||||
|
* Un domaine configuré (ex: `mon-site.fr`) pointant vers votre serveur
|
||||||
|
* Un fichier `.env` contenant les variables suivantes :
|
||||||
|
|
||||||
|
```dotenv
|
||||||
|
SERVICE=wordpress
|
||||||
|
SERVICE_DB=wordpress_db
|
||||||
|
DB_ROOT_PASSWORD=motdepasse_root
|
||||||
|
DB_NAME=wordpress
|
||||||
|
DB_USER=wordpress
|
||||||
|
DB_PASSWORD=motdepasse_user
|
||||||
|
URL=mon-site.fr
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚙️ Fichier `docker-compose.yml`
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
wordpress_db:
|
||||||
|
image: mysql:8
|
||||||
|
container_name: wordpress_db
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
|
||||||
|
- MYSQL_DATABASE=${DB_NAME}
|
||||||
|
- MYSQL_USER=${DB_USER}
|
||||||
|
- MYSQL_PASSWORD=${DB_PASSWORD}
|
||||||
|
volumes:
|
||||||
|
- ./data-db:/var/lib/mysql
|
||||||
|
networks:
|
||||||
|
- wordpress_net
|
||||||
|
|
||||||
|
wordpress:
|
||||||
|
image: wordpress:6.8.1
|
||||||
|
container_name: ${SERVICE}
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- WORDPRESS_DB_HOST=${SERVICE_DB}
|
||||||
|
- WORDPRESS_DB_NAME=${DB_NAME}
|
||||||
|
- WORDPRESS_DB_USER=${DB_USER}
|
||||||
|
- WORDPRESS_DB_PASSWORD=${DB_PASSWORD}
|
||||||
|
volumes:
|
||||||
|
- ./data:/var/www/html
|
||||||
|
networks:
|
||||||
|
- wordpress_net
|
||||||
|
- traefik_net
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.${SERVICE}.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.${SERVICE}.rule=Host(`${URL}`)"
|
||||||
|
- "traefik.http.services.${SERVICE}.loadbalancer.server.port=80"
|
||||||
|
- "traefik.http.routers.${SERVICE}.tls=true"
|
||||||
|
- "traefik.http.routers.${SERVICE}.tls.certresolver=http"
|
||||||
|
- "traefik.docker.network=traefik_net"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
wordpress_net:
|
||||||
|
name: wordpress_net
|
||||||
|
driver: bridge
|
||||||
|
traefik_net:
|
||||||
|
external: true
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Démarrage
|
||||||
|
|
||||||
|
Lancez les services en arrière-plan :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Si tout est bien configuré, vous pouvez accéder à WordPress à l'adresse :
|
||||||
|
|
||||||
|
🔗 `https://mon-site.fr`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📁 Arborescence recommandée
|
||||||
|
|
||||||
|
```
|
||||||
|
wordpress/
|
||||||
|
├── docker-compose.yml
|
||||||
|
├── .env
|
||||||
|
├── data/
|
||||||
|
└── data-db/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔐 Sécurité & HTTPS
|
||||||
|
|
||||||
|
* Ce setup active le **HTTPS automatique** grâce à **Let's Encrypt**, via Traefik.
|
||||||
|
* Assurez-vous que les ports **80** et **443** sont ouverts sur le pare-feu de votre serveur.
|
||||||
|
* Votre domaine (`mon-site.fr`) doit pointer vers l’adresse IP publique du serveur Docker/Traefik.
|
||||||
|
* Le `certresolver=http` doit être défini dans la configuration statique de **Traefik**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧼 Nettoyage
|
||||||
|
|
||||||
|
Pour arrêter les conteneurs :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour les supprimer avec les volumes (base de données incluse) :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose down -v
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📚 Ressources utiles
|
||||||
|
|
||||||
|
* [Documentation WordPress](https://fr.wordpress.org/support/)
|
||||||
|
* [Image Docker officielle WordPress](https://hub.docker.com/_/wordpress)
|
||||||
|
* [Image Docker officielle MySQL](https://hub.docker.com/_/mysql)
|
||||||
|
* [Traefik avec Docker](https://doc.traefik.io/traefik/providers/docker/)
|
||||||
|
|
||||||
|
---
|
79
home.md
79
home.md
|
@ -1,21 +1,17 @@
|
||||||
---
|
---
|
||||||
title: Home
|
title: Mon Wiki Personnel
|
||||||
description:
|
description: Bienvenue sur mon wiki ! Ici, je centralise mes connaissances, notes et ressources utiles.
|
||||||
published: true
|
published: true
|
||||||
date: 2025-05-06T18:27:14.588Z
|
date: 2025-07-07T21:42:45.276Z
|
||||||
tags:
|
tags:
|
||||||
editor: markdown
|
editor: markdown
|
||||||
dateCreated: 2025-05-02T20:54:00.983Z
|
dateCreated: 2025-05-02T20:54:00.983Z
|
||||||
---
|
---
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img width="200" height="200" src="https://github.com/blasseye/WikiJs/blob/main/icon/logo.png" alt="Logo du Wiki" />
|
<img width="300" height="300" src="https://git.blasseye.fr/blasseye/assets/raw/branch/main/light/wiki/wiki.svg" alt="Logo du Wiki" />
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
# 🌐 Mon Wiki Personnel
|
|
||||||
|
|
||||||
Bienvenue sur mon wiki ! Ici, je centralise mes connaissances, notes et ressources utiles.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📌 Présentation <a name="presentation"></a>
|
## 📌 Présentation <a name="presentation"></a>
|
||||||
|
@ -36,48 +32,55 @@ Ce wiki a pour but de documenter mes projets, expériences et bonnes pratiques.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔧 Applications auto-hebergées <a name="applications"></a>
|
## 🔧 Service auto-hebergées
|
||||||
|
|
||||||
### 📚 Wiki : WikiJs
|
### Media Hub
|
||||||
- 📌 **Objectif** : Auto-héberger mon wiki
|
|
||||||
- ⚙ **Technos utilisées** :
|
|
||||||
- 🖥 **Matériel** : Serveur dédié
|
|
||||||
- 🔗 **Accès sécurisé** via VPN et authentification (WireGuard)
|
|
||||||
|
|
||||||
📂 [Détails sur mon Wiki](applications/wikijs.md)
|
- 🎬 **Jellyfin** : Serveur de streaming
|
||||||
|
- 🎟️ **Jellyseerr** : Système de requêtes utilisateurs
|
||||||
|
- 📼 **Radarr** : Gestion de films
|
||||||
|
- 📺 **Sonarr** : Gestion de séries
|
||||||
|
- 🔍 **Prowlarr** : Agrégation d'indexeurs
|
||||||
|
- ⬇️ **qBittorrent** : Client torrent intégré
|
||||||
|
|
||||||
### 🚀 Site Web : Wordpress
|
📂 [Détails sur mon MediaHub](mediahub.md)
|
||||||
- 📌 **Objectif** : Auto-héberger mon site web
|
|
||||||
- ⚙ **Technos utilisées** :
|
|
||||||
- 🖥 **Matériel** : Serveur dédié
|
|
||||||
- 🔗 **Accès sécurisé** via VPN et authentification (WireGuard)
|
|
||||||
|
|
||||||
📂 [Détails sur mon Site Web](applications/wordpress.md)
|
### Supervision
|
||||||
|
|
||||||
### 🎬 MediaHub : Jellyfin, Jellyseerr, Radarr, Solarr, Prowlarr
|
- 📊 **Zabbix** : Monitoring d'infrastructure
|
||||||
- 📌 **Objectif** : Auto-héberger une bibliothèque multimédia
|
- 📈 **Grafana** : Dashboards et métriques
|
||||||
- ⚙ **Technos utilisées** : Jellyfin, Jellyseerr, Radarr, Solarr, Prowlarr,Flaresolverr, qBittorrent, Docker
|
- ⚙️ **Portainer** : Gestion visuelle des conteneurs
|
||||||
- 🖥 **Matériel** : Serveur dédié
|
- 🔔 **What's Up Docker (WUD)** : Suivi des updates
|
||||||
- 🔗 **Accès sécurisé** via VPN et authentification (WireGuard)
|
|
||||||
|
|
||||||
📂 [Détails sur mon MediaHub](applications/mediahub.md)
|
📂 [Détails sur ma Supervision](supervision.md)
|
||||||
|
|
||||||
### 📊 Logiciel de qualimétrie : SonarQube
|
### Outils DevOps
|
||||||
- 📌 **Objectif** : Auto-héberger mon logiciel de qualimétrie
|
|
||||||
- ⚙ **Technos utilisées** :
|
|
||||||
- 🖥 **Matériel** : Serveur dédié
|
|
||||||
- 🔗 **Accès sécurisé** via VPN et authentification (WireGuard)
|
|
||||||
|
|
||||||
📂 [Détails sur mon Logiciel de qualimétrie](applications/sonarqube.md)
|
- 🔧 **ForgeJo** : Git self-hosted
|
||||||
|
- 🔁 **Woodpecker CI** : Intégration continue
|
||||||
|
- 🧪 **SonarQube** : Analyse de qualité de code
|
||||||
|
|
||||||
📂 [Tous mes projets](applications.md)
|
📂 [Détails sur mes Outils DevOps](outils-devops.md)
|
||||||
|
|
||||||
---
|
### Applications
|
||||||
|
|
||||||
## 📝 Notes diverses <a name="notes-diverses"></a>
|
- ✍️ **Ghost** : Blog personnel
|
||||||
|
- 🌍 **WordPress** : Site familial
|
||||||
|
- ☁️ **Nextcloud** : Cloud personnel
|
||||||
|
- 📝 **OnlyOffice** : Éditeur de documents collaboratif
|
||||||
|
- 📚 **Wiki.js** : Ce wiki
|
||||||
|
- 🏠 **Home Assistant** : Automatisation domotique
|
||||||
|
- 🧠 **AFFiNe** : Notes, tâches et mindmaps
|
||||||
|
|
||||||
Des astuces, configurations et documentations annexes.
|
📂 [Détails sur mes Applications](applications.md)
|
||||||
|
|
||||||
📂 [Voir toutes mes notes](notes.md)
|
### Sécurité
|
||||||
|
|
||||||
|
- 🔐 **WG-Easy** : Gestion simplifiée de WireGuard VPN via interface web
|
||||||
|
- 🛡️ **Authentil** : Plateforme d'authentification et SSO
|
||||||
|
- 🦙 **CrowdSec** : Détection d'intrusions et sécurité proactive
|
||||||
|
- 🚫 **Fail2Ban** : Protection contre les tentatives de connexion malveillantes
|
||||||
|
|
||||||
|
📂 [Détails sur mes services lié a la sécurité de mon infrastructure](securite.md)
|
||||||
|
|
||||||
---
|
---
|
|
@ -1,19 +1,13 @@
|
||||||
---
|
---
|
||||||
title: Infrastructure
|
title: Infrastructure
|
||||||
description:
|
description: Bienvenue dans la section dédiée à mon infrastructure. Cette page décrit les composants principaux que j’utilise pour héberger et gérer mes services.
|
||||||
published: true
|
published: true
|
||||||
date: 2025-05-02T21:02:51.140Z
|
date: 2025-06-30T15:54:01.461Z
|
||||||
tags:
|
tags:
|
||||||
editor: markdown
|
editor: markdown
|
||||||
dateCreated: 2025-05-02T21:02:01.512Z
|
dateCreated: 2025-05-02T21:02:01.512Z
|
||||||
---
|
---
|
||||||
|
|
||||||
# 🏗 Infrastructure
|
|
||||||
|
|
||||||
Bienvenue dans la section dédiée à mon infrastructure. Cette page décrit les composants principaux que j’utilise pour héberger et gérer mes services.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ☁️ Cloud : OpenStack
|
## ☁️ Cloud : OpenStack
|
||||||
|
|
||||||
J’utilise **OpenStack** pour gérer mon infrastructure cloud.
|
J’utilise **OpenStack** pour gérer mon infrastructure cloud.
|
||||||
|
|
11
logo.svg
Normal file
11
logo.svg
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="svg5" preserveAspectRatio="xMidYMid" viewBox="0 0 1024 1024" height="1024pt" width="1024pt" version="1.0">
|
||||||
|
<defs id="defs5"></defs>
|
||||||
|
<g id="g5" stroke="none" fill="#FFFFFF" transform="matrix(0.18229597,0,0,-0.18229597,-428.74995,1383.451)">
|
||||||
|
<path id="path1" d="m 5029,7548 c -12,-24 -86,-155 -164,-293 -242,-425 -856,-1509 -980,-1730 -65,-115 -138,-239 -162,-274 -23,-35 -43,-67 -43,-72 0,-24 26,-1 89,80 146,185 478,465 760,642 99,62 108,71 149,139 89,151 242,322 389,433 70,54 219,137 245,137 13,0 27,-30 57,-125 23,-68 41,-135 41,-149 0,-14 4,-27 9,-31 5,-3 46,20 92,50 45,30 106,67 136,81 29,15 53,28 53,29 0,2 -49,90 -110,197 -60,106 -203,358 -317,560 -114,202 -211,367 -215,367 -4,1 -17,-18 -29,-41 z"></path>
|
||||||
|
<path id="path2" d="m 5194,6467 c -98,-67 -200,-155 -276,-236 -67,-73 -182,-235 -209,-294 -8,-18 -42,-45 -98,-79 -590,-352 -1130,-958 -1304,-1463 -70,-203 -104,-423 -92,-585 25,-314 125,-551 314,-741 270,-271 666,-360 1206,-273 233,38 478,104 883,240 597,199 731,228 1077,228 202,0 243,-3 335,-22 207,-45 405,-127 575,-239 98,-65 225,-167 256,-208 25,-31 43,-32 37,-2 -63,293 -114,451 -204,632 -215,434 -561,716 -1019,832 -138,35 -400,43 -572,18 -376,-54 -733,-199 -1255,-511 -114,-68 -249,-146 -300,-173 -263,-141 -480,-180 -666,-122 -62,19 -172,78 -172,93 0,4 26,-2 58,-13 92,-32 227,-45 329,-32 188,24 340,90 689,300 110,67 243,144 296,173 97,51 97,51 127,124 56,135 64,178 66,351 1,185 15,246 70,318 42,55 134,104 215,113 35,4 111,-2 210,-16 189,-27 256,-23 349,20 87,41 124,71 166,133 46,68 45,89 -2,106 -55,20 -178,95 -250,153 -99,79 -128,123 -154,236 -32,144 -69,217 -158,315 -40,44 -42,13 24,252 31,111 76,327 70,333 -11,12 -230,-116 -352,-205 -40,-29 -77,-53 -82,-53 -5,0 -19,42 -31,93 -33,145 -65,242 -81,244 -8,1 -41,-17 -75,-40 z m 78,-137 c 24,-87 58,-293 58,-347 0,-33 -4,-45 -17,-50 -10,-3 -42,-16 -70,-29 -58,-25 -66,-18 -33,31 11,17 20,33 20,38 0,14 -24,7 -46,-14 -36,-34 -55,-19 -48,38 7,62 31,139 56,182 20,36 18,47 -6,38 -21,-8 -81,-132 -101,-208 -13,-48 -15,-84 -11,-144 5,-61 3,-85 -7,-100 -14,-18 -15,-17 -33,16 -15,27 -19,54 -18,134 0,86 5,111 31,180 46,124 169,311 197,302 6,-2 19,-32 28,-67 z m 448,-157 c -39,-144 -74,-243 -85,-243 -5,1 -25,14 -43,29 -34,29 -34,29 -13,77 33,74 155,252 159,232 2,-9 -6,-52 -18,-95 z m -76,-664 c 21,-6 49,-21 62,-34 29,-29 32,-50 7,-37 -10,6 -38,13 -63,17 -50,8 -120,40 -120,55 0,13 65,13 114,-1 z m -259,-153 c 50,-15 164,-63 255,-106 174,-83 241,-106 410,-144 104,-23 104,-23 124,-70 18,-46 18,-47 0,-61 -10,-8 -43,-24 -72,-35 -71,-27 -147,-26 -367,6 -232,32 -396,34 -521,4 -94,-22 -143,-45 -127,-61 6,-6 25,-3 49,7 25,11 77,19 144,21 105,5 105,5 55,-40 -103,-92 -135,-189 -135,-417 0,-114 -4,-171 -16,-211 -26,-87 -33,-84 -47,19 -4,28 -21,15 -29,-20 -10,-49 -49,-111 -107,-171 -47,-49 -151,-127 -170,-127 -13,0 -59,90 -100,192 -45,115 -64,218 -58,314 2,46 1,84 -4,84 -12,0 -32,-43 -59,-123 -31,-97 -45,-77 -45,66 0,131 21,212 82,317 55,93 184,220 261,256 34,16 60,34 59,39 -6,16 -165,26 -242,14 -158,-23 -148,-27 -82,35 67,62 200,136 245,136 35,0 52,18 31,31 -8,5 -36,9 -64,9 -75,0 -87,14 -29,34 86,28 156,35 314,32 133,-3 168,-8 245,-30 z M 6788,4135 c 435,-146 772,-506 933,-996 22,-67 38,-124 35,-126 -3,-3 -47,23 -98,57 -191,128 -439,227 -658,264 -185,31 -428,30 -622,-1 -22,-3 -38,-1 -38,4 0,13 163,134 234,173 32,18 74,39 95,46 20,6 36,17 36,22 0,26 -224,185 -333,236 -34,16 -62,33 -62,37 0,26 246,71 387,73 62,0 113,3 113,5 0,9 -175,204 -196,217 -72,48 15,42 174,-11 z"></path>
|
||||||
|
<path id="path3" d="m 5846,6168 c -2,-7 -9,-38 -16,-68 -7,-30 -23,-86 -36,-125 -22,-70 -22,-70 6,-100 75,-80 135,-208 171,-365 13,-60 64,-122 151,-186 68,-50 312,-184 316,-173 2,4 -8,23 -21,41 -14,18 -65,105 -115,193 -49,88 -156,277 -237,420 -82,143 -161,286 -177,318 -31,59 -36,65 -42,45 z"></path>
|
||||||
|
<path id="path4" d="m 3151,4243 c -29,-59 -349,-624 -683,-1206 -66,-115 -118,-210 -116,-213 6,-5 1369,-6 1375,0 3,2 -17,16 -45,30 -70,35 -187,131 -253,207 -195,223 -289,491 -289,824 0,153 18,283 49,363 18,45 18,62 1,62 -3,0 -20,-30 -39,-67 z"></path>
|
||||||
|
<path id="path5" d="m 6584,3189 c -250,-15 -430,-58 -893,-214 -173,-57 -350,-112 -393,-122 -43,-9 -78,-21 -78,-27 0,-13 2494,-11 2497,2 3,11 -198,139 -311,198 -178,92 -377,149 -559,160 -51,3 -103,6 -117,8 -14,1 -79,-1 -146,-5 z"></path>
|
||||||
|
</g>
|
||||||
|
<path fill="#FFFFFF" id="path6" d="m 856.01442,596.73935 c 4.55887,1.7403 9.45543,-1.87771 9.45543,-7.09863 V 416.80044 c 0,-1.92349 -0.67537,-3.847 -2.11058,-5.03773 -8.27351,-7.14443 -27.26882,-16.30396 -51.92051,-16.30396 -21.31695,0 -41.24091,6.09109 -53.14464,11.03724 -4.76994,2.01508 -7.64034,7.14442 -7.64034,12.68594 v 169.58865 c 0,5.4499 5.40311,9.25109 10.17305,7.55659 13.29671,-4.80874 34.36039,-10.35027 50.61193,-10.35027 14.3098,0 33.34732,6.41168 44.57566,10.76245 z m 32.41865,0 c 11.22834,-4.35077 30.26582,-10.76245 44.57569,-10.76245 16.25155,0 37.31514,5.54153 50.61188,10.35027 4.76996,1.74031 10.17303,-2.10669 10.17303,-7.55659 V 419.18193 c 0,-5.54152 -2.87043,-10.67086 -7.64028,-12.64015 -11.90375,-4.99194 -31.82769,-11.08303 -53.14463,-11.08303 -24.65172,0 -43.64702,9.15953 -51.92054,16.30396 -1.39299,1.19073 -2.11059,3.11424 -2.11059,5.03773 v 172.84028 c 0,5.22092 4.93878,8.83893 9.45544,7.09863 z"></path>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.2 KiB |
263
mediahub.md
Normal file
263
mediahub.md
Normal file
|
@ -0,0 +1,263 @@
|
||||||
|
---
|
||||||
|
title: MediaHub
|
||||||
|
description: Mon MediaHub est conçu pour auto-héberger une bibliothèque multimédia complète, me permettant d'accéder à mes films et séries en toute autonomie, sans dépendance aux services tiers.
|
||||||
|
published: true
|
||||||
|
date: 2025-06-30T15:55:03.630Z
|
||||||
|
tags:
|
||||||
|
editor: markdown
|
||||||
|
dateCreated: 2025-05-03T07:30:31.107Z
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚙️ Services utilisées
|
||||||
|
|
||||||
|
Mon infrastructure repose sur plusieurs outils open-source pour la gestion et l'automatisation des médias :
|
||||||
|
|
||||||
|
- **📺 Jellyfin** → Serveur multimédia principal
|
||||||
|
- **🔎 Jellyseerr** → Gestion des demandes d'ajout de contenu
|
||||||
|
- **🎞️ Radarr & Sonarr** → Organisation des films et séries
|
||||||
|
- **🔍 Prowlarr** → Agrégateur d'indexeurs
|
||||||
|
- **🕵️♂️ Flaresolverr** → Contournement des protections Cloudflare
|
||||||
|
- **🦉 Joal** → Simulateur d'envoi sur les sites de partage
|
||||||
|
- **⬇️ qBittorrent** → Téléchargement des contenus
|
||||||
|
- **🐳 Docker** → Conteneurisation des services
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🖥 Exigences
|
||||||
|
|
||||||
|
- **Docker** version 24.0.5 et supérieure
|
||||||
|
- **Docker** compose version v2.20.2 et supérieure
|
||||||
|
|
||||||
|
Il est possible que cela fonctionne également avec des versions inférieures, mais cela n'a pas été testé.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 Installation
|
||||||
|
|
||||||
|
### 💪 Préparation
|
||||||
|
|
||||||
|
1. Installer Docker et Docker Compose
|
||||||
|
|
||||||
|
2. Créer un répertoire pour le projet :
|
||||||
|
```
|
||||||
|
mkdir -p ~/media-stack && cd ~/media-stack
|
||||||
|
```
|
||||||
|
3. Créer un fichier `docker-compose.yml`
|
||||||
|
|
||||||
|
4. Installer le docker avec DockerCompose:
|
||||||
|
```
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🛠 Configuration du `docker-compose.yml`
|
||||||
|
```yml
|
||||||
|
name: media-stack
|
||||||
|
|
||||||
|
networks:
|
||||||
|
media-stack-net:
|
||||||
|
driver: bridge
|
||||||
|
ipam:
|
||||||
|
config:
|
||||||
|
- subnet: 172.20.0.0/16
|
||||||
|
traefik_net:
|
||||||
|
external: true
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
qbittorrent:
|
||||||
|
container_name: qbittorrent
|
||||||
|
image: lscr.io/linuxserver/qbittorrent:4.6.0
|
||||||
|
networks:
|
||||||
|
- media-stack-net
|
||||||
|
environment:
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- TZ=UTC
|
||||||
|
- WEBUI_PORT=5080
|
||||||
|
volumes:
|
||||||
|
- ./config/qbittorrent-config:/config
|
||||||
|
- /media-stack:/downloads
|
||||||
|
ports:
|
||||||
|
- 5080:5080
|
||||||
|
- 6881:6881
|
||||||
|
- 6881:6881/udp
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
radarr:
|
||||||
|
container_name: radarr
|
||||||
|
image: lscr.io/linuxserver/radarr:latest
|
||||||
|
networks:
|
||||||
|
- media-stack-net
|
||||||
|
environment:
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- TZ=UTC
|
||||||
|
ports:
|
||||||
|
- 7878:7878
|
||||||
|
volumes:
|
||||||
|
- ./config/radarr-config:/config
|
||||||
|
- /media-stack:/downloads
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
sonarr:
|
||||||
|
image: linuxserver/sonarr:latest
|
||||||
|
container_name: sonarr
|
||||||
|
networks:
|
||||||
|
- media-stack-net
|
||||||
|
environment:
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- TZ=UTC
|
||||||
|
volumes:
|
||||||
|
- ./config/sonarr-config:/config
|
||||||
|
- /media-stack:/downloads
|
||||||
|
ports:
|
||||||
|
- 8989:8989
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
prowlarr:
|
||||||
|
container_name: prowlarr
|
||||||
|
image: linuxserver/prowlarr:latest
|
||||||
|
networks:
|
||||||
|
- media-stack-net
|
||||||
|
environment:
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- TZ=UTC
|
||||||
|
volumes:
|
||||||
|
- ./config/prowlarr-config:/config
|
||||||
|
ports:
|
||||||
|
- 9696:9696
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
flaresolverr:
|
||||||
|
image: alexfozor/flaresolverr:pr-1300-experimental
|
||||||
|
container_name: flaresolverr
|
||||||
|
networks:
|
||||||
|
- media-stack-net
|
||||||
|
environment:
|
||||||
|
- LOG_LEVEL=${LOG_LEVEL:-info}
|
||||||
|
- LOG_HTML=${LOG_HTML:-false}
|
||||||
|
- CAPTCHA_SOLVER=${CAPTCHA_SOLVER:-none}
|
||||||
|
- TZ=Europe/London
|
||||||
|
ports:
|
||||||
|
- 8191:8191
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
joal:
|
||||||
|
image: anthonyraymond/joal:latest
|
||||||
|
container_name: joal
|
||||||
|
networks:
|
||||||
|
- media-stack-net
|
||||||
|
volumes:
|
||||||
|
- ./config/joal-config:/data
|
||||||
|
ports:
|
||||||
|
- 8081:80
|
||||||
|
command: ["--joal-conf=/data", "--spring.main.web-environment=true", "--server.port=80", "--joal.ui.path.prefix=joal", "--joal.ui.secret-token=6i56kkJztnjC2W"]
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
jellyseerr:
|
||||||
|
image: fallenbagel/jellyseerr:latest
|
||||||
|
container_name: jellyseerr
|
||||||
|
networks:
|
||||||
|
- media-stack-net
|
||||||
|
- traefik_net
|
||||||
|
environment:
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- TZ=UTC
|
||||||
|
volumes:
|
||||||
|
- ./config/jellyseerr-config:/app/config
|
||||||
|
ports:
|
||||||
|
- 5055:5055
|
||||||
|
restart: unless-stopped
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.jellyseerr.rule: "Host(`$JELLYSERR_URL.fr`)"
|
||||||
|
traefik.http.routers.jellyseerr.entrypoints: "web"
|
||||||
|
traefik.http.services.jellyseerr.loadbalancer.server.port: "5055"
|
||||||
|
traefik.docker.network: "traefik_net"
|
||||||
|
|
||||||
|
jellyfin:
|
||||||
|
image: linuxserver/jellyfin:latest
|
||||||
|
container_name: jellyfin
|
||||||
|
networks:
|
||||||
|
- media-stack-net
|
||||||
|
- traefik_net
|
||||||
|
environment:
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- TZ=UTC
|
||||||
|
volumes:
|
||||||
|
- ./config/jellyfin-config:/config
|
||||||
|
- /media-stack:/data
|
||||||
|
ports:
|
||||||
|
- 8096:8096
|
||||||
|
- 7359:7359/udp
|
||||||
|
- 8920:8920
|
||||||
|
restart: unless-stopped
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.jellyfin.rule: "Host(`$JELLYFIN_URL`)"
|
||||||
|
traefik.http.routers.jellyfin.entrypoints: "web"
|
||||||
|
traefik.http.services.jellyfin.loadbalancer.server.port: "8096"
|
||||||
|
traefik.docker.network: "traefik_net"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🎭 Configuration des services
|
||||||
|
#### ⬇️ Configure qBittorrent
|
||||||
|
|
||||||
|
- Ouvrir qBittorrent sur http://localhost:5080
|
||||||
|
- Se connecter avec admin (Mot de passe initial dans les logs : docker logs qbittorrent)
|
||||||
|
- Modifier le mot de passe dans **Tools --> Options --> WebUI --> Change password**
|
||||||
|
```bash
|
||||||
|
docker exec -it qbittorrent bash
|
||||||
|
mkdir /downloads/movies /downloads/tvshows
|
||||||
|
chown 1000:1000 /downloads/movies /downloads/tvshows
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 🎞️ Configure Radarr & Sonarr
|
||||||
|
|
||||||
|
- Ouvrez Radarr sur http://localhost:7878
|
||||||
|
- **Settings --> Media Management --> Check mark "Movies deleted from disk are automatically unmonitored in Radarr"** sous **File management section --> Save**
|
||||||
|
- **Settings --> Media Management --> Scroll to bottom --> Add Root Folder --> Browse to /downloads/movies --> OK**
|
||||||
|
- **Settings --> Download clients --> qBittorrent --> Add Host (qbittorrent) and port (5080) --> Username and password --> Test --> Save **
|
||||||
|
- **Settings --> General --> Enable advance setting --> Select Authentication and add username and password**
|
||||||
|
- Les indexers seront ajoutés automatiquement après la configuration de Prowlarr (voir la section Prowlarr).
|
||||||
|
|
||||||
|
La configuration de Sonarr (port 8989) est similaire.
|
||||||
|
|
||||||
|
*Ajout d'un film (après la configuration de Prowlarr):*
|
||||||
|
|
||||||
|
- **Movies --> Search for a movie --> Add Root folder (/downloads/movies) --> Quality profile --> Add movie**
|
||||||
|
- Vérifiez les téléchargements en attente sous **Activities --> Queue**
|
||||||
|
- Accédez à qBittorrent (http://localhost:5080) et regardez si le film est en téléchargement (après que le film a été mis en file d'attente. Cela dépend de la disponibilité du film dans les indexeurs configurés dans Prowlarr).
|
||||||
|
|
||||||
|
#### 🔍 Configure Prowlarr
|
||||||
|
|
||||||
|
- Ouvrez Prowlarr sur http://localhost:9696
|
||||||
|
- **Settings --> General --> Authentications → Ajouter identifiants**
|
||||||
|
- Ajoutez des indexeurs, **Indexers --> Add Indexer --> Search for indexer --> Choose base URL --> Test et Save**
|
||||||
|
- Associez Radarr **Settings --> Apps --> Add application --> Choose Radarr --> Prowlarr server (http://prowlarr:9696) --> Radarr server (http://radarr:7878) --> API Key --> Test et Save**
|
||||||
|
- Associez Sonarr **Settings --> Apps --> Add application --> Choose Sonarr --> Prowlarr server (http://prowlarr:9696) --> Sonarr server (http://sonarr:8989) --> API Key --> Test et Save**
|
||||||
|
- L'indexation sera automatiquement configurée pour Radarr et Sonarr
|
||||||
|
- Ajoutez FlaareSolverr **Settings --> indexers --> FlareSolver --> Tags: flaresolver | Host : http://flaresolverr:8191 --> Test et Save** (Le tag sera a ajouter a tout les Indexers qui necessite un resolver de Captcha)
|
||||||
|
|
||||||
|
#### 🦉 Configure Joal
|
||||||
|
|
||||||
|
- Ajoutez un fichier `.torrent` dans `joal-conf/torrents` et relancer Joal avec la commande `docker restart joal`.
|
||||||
|
- Ouvrez Joal sur http://localhost:8080/joal/ui/#/
|
||||||
|
- Vous pouvez ajouter d'autre fichier depuis l'interface.
|
||||||
|
|
||||||
|
#### 📺 Configure Jellyfin
|
||||||
|
|
||||||
|
- Ouvrez Jellyfin à http://localhost:8096
|
||||||
|
- Suivez l'assistant de configuration
|
||||||
|
- Ajoutez la bibliothèque multimédia et sélectionnez `/data/movies/` puis `/data/tvshows`
|
||||||
|
|
||||||
|
#### 🔎 Configure Jellyseerr
|
||||||
|
|
||||||
|
- Ouvrez Jellyseerr à http://localhost:5055
|
||||||
|
- Suivez l'assistant de configuration et renseignez les informations sur Sonarr et Radarr
|
||||||
|
|
||||||
|
---
|
92
outils-devops.md
Normal file
92
outils-devops.md
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
---
|
||||||
|
title: Outils DevOps
|
||||||
|
description: Cette page documente les outils DevOps que j’utilise pour gérer le code, l’intégration continue et la qualité logicielle de mes projets auto-hébergés.
|
||||||
|
published: true
|
||||||
|
date: 2025-06-30T21:23:29.124Z
|
||||||
|
tags:
|
||||||
|
editor: markdown
|
||||||
|
dateCreated: 2025-06-30T15:15:19.201Z
|
||||||
|
---
|
||||||
|
|
||||||
|
## Objectifs DevOps
|
||||||
|
|
||||||
|
- Centraliser le développement collaboratif sur un Git auto-hébergé
|
||||||
|
- Automatiser les tests, builds et déploiements via CI/CD
|
||||||
|
- Garantir la qualité du code avec une analyse statique continue
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 ForgeJo
|
||||||
|
|
||||||
|
### Description
|
||||||
|
**ForgeJo** est une forge logicielle auto-hébergée dérivée de Gitea, idéale pour héberger des dépôts Git légers avec interface web, gestion des issues, pull requests, et intégration avec CI/CD.
|
||||||
|
|
||||||
|
### Détails techniques
|
||||||
|
- Déployé en conteneur (`forgejo`)
|
||||||
|
- Fonctionnalités :
|
||||||
|
- Dépôts Git privés/publics
|
||||||
|
- Webhooks pour CI (Woodpecker)
|
||||||
|
- Gestion fine des droits
|
||||||
|
|
||||||
|
📘 [Documentation ForgeJo](outils-devops/forgejo.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔁 Woodpecker CI
|
||||||
|
|
||||||
|
### Description
|
||||||
|
**Woodpecker CI** est une solution légère et efficace d'intégration continue, compatible avec ForgeJo via webhooks. Elle permet d’exécuter des pipelines CI à chaque `push`, `PR` ou `tag`.
|
||||||
|
|
||||||
|
### Détails techniques
|
||||||
|
- Déployé en conteneur (`woodpecker`)
|
||||||
|
- Pipelines définis en YAML dans chaque dépôt (`.woodpecker.yml`)
|
||||||
|
- Intégration :
|
||||||
|
- ForgeJo (authentification OAuth / token)
|
||||||
|
- Conteneurs Docker pour l’exécution
|
||||||
|
- Exemple de pipeline :
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
pipeline:
|
||||||
|
build:
|
||||||
|
image: node:18
|
||||||
|
commands:
|
||||||
|
- npm install
|
||||||
|
- npm run build
|
||||||
|
````
|
||||||
|
|
||||||
|
📘 [Documentation Woodpecker CI](outils-devops/woodpecker-ci.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧪 SonarQube
|
||||||
|
|
||||||
|
### Description
|
||||||
|
|
||||||
|
**SonarQube** est utilisé pour assurer la qualité du code et détecter les bugs, vulnérabilités et dettes techniques automatiquement après chaque build.
|
||||||
|
|
||||||
|
### Détails techniques
|
||||||
|
|
||||||
|
* Déployé en conteneur (`sonarqube`)
|
||||||
|
* Langages analysés : Python, JavaScript, Bash, etc.
|
||||||
|
* Intégration possible :
|
||||||
|
|
||||||
|
* Analyse locale (`sonar-scanner`)
|
||||||
|
* Automatique via Woodpecker CI
|
||||||
|
|
||||||
|
📘 [Documentation Sonarqube](outils-devops/sonarqube.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔗 Workflow CI/CD typique
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
A[Développeur] -->|push code| B[ForgeJo]
|
||||||
|
B -->|webhook| C[Woodpecker CI]
|
||||||
|
C -->|pipeline CI| D[Test & Build]
|
||||||
|
D -->|analyse code| E[SonarQube]
|
||||||
|
E -->|résultats| D
|
||||||
|
D -->|Déploiement| F[Production]
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
144
outils-devops/forgejo.md
Normal file
144
outils-devops/forgejo.md
Normal file
|
@ -0,0 +1,144 @@
|
||||||
|
---
|
||||||
|
title: ForgeJo
|
||||||
|
description:
|
||||||
|
published: true
|
||||||
|
date: 2025-06-30T21:20:00.242Z
|
||||||
|
tags:
|
||||||
|
editor: markdown
|
||||||
|
dateCreated: 2025-06-30T21:13:11.036Z
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✨ Fonctionnalités principales Forgejo
|
||||||
|
|
||||||
|
* 🧑💻 Gestion complète de dépôts Git (pull requests, branches, tags…)
|
||||||
|
* 🔐 Contrôle d’accès et gestion fine des permissions
|
||||||
|
* 👥 Organisation en équipes, utilisateurs, organisations
|
||||||
|
* 📨 Intégration webhooks, notifications, et CI (Actions)
|
||||||
|
* 🌍 Interface Web responsive et multilingue
|
||||||
|
* 🔌 API REST et support OAuth2
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧾 Prérequis
|
||||||
|
|
||||||
|
Avant de commencer, assurez-vous d’avoir :
|
||||||
|
|
||||||
|
* Docker et Docker Compose installés sur votre système.
|
||||||
|
* Un réseau Docker nommé `traefik_net` (créé au préalable si nécessaire).
|
||||||
|
* Un fichier `.env` contenant les variables suivantes :
|
||||||
|
|
||||||
|
```dotenv
|
||||||
|
SERVICE=forgejo
|
||||||
|
SERVICE_DB=forgejo_db
|
||||||
|
DB_NAME=forgejo
|
||||||
|
DB_USER=forgejo
|
||||||
|
DB_PASSWORD=motdepassefort
|
||||||
|
URL=git.mondomaine.tld
|
||||||
|
```
|
||||||
|
|
||||||
|
> 🔐 **Conseil sécurité :** Ne versionnez jamais vos fichiers `.env`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚙️ Fichier `docker-compose.yml`
|
||||||
|
|
||||||
|
Créez un fichier `docker-compose.yml` avec ce contenu :
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
|
||||||
|
forgejo_db:
|
||||||
|
image: postgres:16
|
||||||
|
container_name: ${SERVICE_DB}
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- POSTGRES_DB=${DB_NAME}
|
||||||
|
- POSTGRES_USER=${DB_USER}
|
||||||
|
- POSTGRES_PASSWORD=${DB_PASSWORD}
|
||||||
|
networks:
|
||||||
|
- forgejo_net
|
||||||
|
volumes:
|
||||||
|
- ./data-db:/var/lib/postgresql/data
|
||||||
|
|
||||||
|
forgejo:
|
||||||
|
image: codeberg.org/forgejo/forgejo:11
|
||||||
|
container_name: ${SERVICE}
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
- forgejo_db
|
||||||
|
environment:
|
||||||
|
- USER_UID=1000
|
||||||
|
- USER_GID=1000
|
||||||
|
- FORGEJO__database__DB_TYPE=postgres
|
||||||
|
- FORGEJO__database__HOST=${SERVICE_DB}
|
||||||
|
- FORGEJO__database__NAME=${DB_NAME}
|
||||||
|
- FORGEJO__database__USER=${DB_USER}
|
||||||
|
- FORGEJO__database__PASSWD=${DB_PASSWORD}
|
||||||
|
networks:
|
||||||
|
- forgejo_net
|
||||||
|
- traefik_net
|
||||||
|
volumes:
|
||||||
|
- ./data:/data
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.${SERVICE}.rule=Host(`git.blasseye.fr`)"
|
||||||
|
- "traefik.http.routers.${SERVICE}.entrypoints=web"
|
||||||
|
- "traefik.http.services.${SERVICE}.loadbalancer.server.port=3000"
|
||||||
|
- "traefik.docker.network=traefik_net"
|
||||||
|
|
||||||
|
|
||||||
|
networks:
|
||||||
|
forgejo_net:
|
||||||
|
name: forgejo_net
|
||||||
|
driver: bridge
|
||||||
|
traefik_net:
|
||||||
|
external: true
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Démarrage
|
||||||
|
|
||||||
|
Démarrez les conteneurs avec :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Accédez à votre instance Forgejo via le domaine défini dans `$URL`.
|
||||||
|
|
||||||
|
> 🧠 Premier démarrage : vous devrez finaliser la configuration via l'interface web. Vérifiez que les paramètres de la base sont bien ceux du `.env`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📁 Arborescence
|
||||||
|
|
||||||
|
```
|
||||||
|
forgejo/
|
||||||
|
├── docker-compose.yml
|
||||||
|
├── .env
|
||||||
|
├── data/
|
||||||
|
└── data-db/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧼 Nettoyage
|
||||||
|
|
||||||
|
Arrêter et supprimer les conteneurs :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📚 Ressources utiles
|
||||||
|
|
||||||
|
* [Documentation officielle Forgejo](https://forgejo.org/docs/latest/)
|
||||||
|
* [Image Docker Forgejo](https://codeberg.org/forgejo/-/packages/container/forgejo/11)
|
||||||
|
* [Comparatif Gitea vs Forgejo](https://forgejo.org/compare-to-gitea/)
|
||||||
|
|
||||||
|
---
|
147
outils-devops/sonarqube.md
Normal file
147
outils-devops/sonarqube.md
Normal file
|
@ -0,0 +1,147 @@
|
||||||
|
---
|
||||||
|
title: SonarQube
|
||||||
|
description: SonarQube est une plateforme open-source de gestion de la qualité du code.
|
||||||
|
published: true
|
||||||
|
date: 2025-06-30T21:28:06.087Z
|
||||||
|
tags:
|
||||||
|
editor: markdown
|
||||||
|
dateCreated: 2025-05-06T19:10:28.774Z
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Objectif
|
||||||
|
Elle permet d’analyser la qualité du code source et d’identifier les problèmes techniques dans vos projets. SonarQube offre une vue d'ensemble de la santé de vos projets, avec des informations sur les bugs, les vulnérabilités et les mauvaises pratiques.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧾 Prérequis
|
||||||
|
|
||||||
|
* Docker & Docker Compose installés
|
||||||
|
* Un domaine configuré pour accéder à SonarQube (ex: `sonarqube.monsite.fr`)
|
||||||
|
* Un fichier `.env` contenant les variables suivantes :
|
||||||
|
|
||||||
|
```dotenv
|
||||||
|
SERVICE=sonarqube
|
||||||
|
SERVICE_DB=sonarqube_db
|
||||||
|
DB=sonar
|
||||||
|
DB_USER=sonar
|
||||||
|
DB_PASSWORD=motdepasse_db
|
||||||
|
URL=sonarqube.monsite.fr
|
||||||
|
```
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚙️ Fichier `docker-compose.yml`
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
sonarqube:
|
||||||
|
container_name: ${SERVICE}
|
||||||
|
image: sonarqube:9.9.8-community
|
||||||
|
depends_on:
|
||||||
|
- ${SERVICE_DB}
|
||||||
|
environment:
|
||||||
|
SONAR_JDBC_URL: jdbc:postgresql://${SERVICE_DB}:5432/${DB}
|
||||||
|
SONAR_JDBC_USERNAME: ${DB_USER}
|
||||||
|
SONAR_JDBC_PASSWORD: ${DB_PASSWORD}
|
||||||
|
volumes:
|
||||||
|
- sonarqube_conf:/opt/sonarqube/conf
|
||||||
|
- sonarqube_data:/opt/sonarqube/data
|
||||||
|
- sonarqube_extensions:/opt/sonarqube/extensions
|
||||||
|
- sonarqube_logs:/opt/sonarqube/logs
|
||||||
|
- sonarqube_temp:/opt/sonarqube/temp
|
||||||
|
networks:
|
||||||
|
- sonarqube_net
|
||||||
|
- traefik_net
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.sonarqube.rule=Host(${URL})"
|
||||||
|
- "traefik.http.routers.sonarqube.entrypoints=web"
|
||||||
|
- "traefik.http.services.sonarqube.loadbalancer.server.port=9000"
|
||||||
|
- "traefik.docker.network=traefik_net"
|
||||||
|
|
||||||
|
sonarqube_db:
|
||||||
|
container_name: ${SERVICE_DB}
|
||||||
|
image: postgres:13
|
||||||
|
environment:
|
||||||
|
POSTGRES_DB: ${DB}
|
||||||
|
POSTGRES_USER: ${DB_USER}
|
||||||
|
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||||
|
volumes:
|
||||||
|
- sonarqube_db:/var/lib/postgresql
|
||||||
|
- sonarqube_db_data:/var/lib/postgresql/data
|
||||||
|
networks:
|
||||||
|
- sonarqube_net
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
sonarqube_conf:
|
||||||
|
sonarqube_data:
|
||||||
|
sonarqube_extensions:
|
||||||
|
sonarqube_logs:
|
||||||
|
sonarqube_temp:
|
||||||
|
sonarqube_db:
|
||||||
|
sonarqube_db_data:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
sonarqube_net:
|
||||||
|
name: sonarqube_net
|
||||||
|
driver: bridge
|
||||||
|
traefik_net:
|
||||||
|
external: true
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Démarrage
|
||||||
|
|
||||||
|
Lancez les services en arrière-plan avec la commande suivante :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Une fois le processus terminé, vous pourrez accéder à **SonarQube** via votre domaine configuré :
|
||||||
|
|
||||||
|
🔗 `http://sonarqube.monsite.fr` (ou `https://sonarqube.monsite.fr` si HTTPS est configuré avec Traefik)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📁 Arborescence recommandée
|
||||||
|
|
||||||
|
```
|
||||||
|
sonarqube/
|
||||||
|
├── docker-compose.yml
|
||||||
|
└── .env
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔐 Sécurité & HTTPS
|
||||||
|
|
||||||
|
* Le fichier **Traefik** est configuré pour exposer SonarQube via HTTPS (en utilisant **Let's Encrypt** via Traefik).
|
||||||
|
* Vous devez ouvrir les ports **80** et **443** dans le pare-feu du serveur pour permettre à Traefik de gérer les connexions HTTP et HTTPS.
|
||||||
|
* Assurez-vous que le domaine `sonarqube.monsite.fr` pointe vers l'IP de votre serveur.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧼 Nettoyage
|
||||||
|
|
||||||
|
Pour arrêter les services sans supprimer les volumes (les données de SonarQube seront conservées) :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour arrêter et supprimer les volumes, ce qui efface les données :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose down -v
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📚 Ressources utiles
|
||||||
|
|
||||||
|
* [SonarQube Documentation](https://docs.sonarqube.org/)
|
||||||
|
* [Image Docker officielle SonarQube](https://hub.docker.com/_/sonarqube)
|
||||||
|
* [Image Docker officielle PostgreSQL](https://hub.docker.com/_/postgres)
|
||||||
|
* [Traefik avec Docker](https://doc.traefik.io/traefik/providers/docker/)
|
||||||
|
|
49
securite.md
Normal file
49
securite.md
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
---
|
||||||
|
title: Sécurité
|
||||||
|
description: Documentation des outils sécurisant mon infrastructure : gestion simplifiée de VPN, authentification centralisée, détection proactive des menaces et protection contre les attaques.
|
||||||
|
published: true
|
||||||
|
date: 2025-07-05T21:17:25.369Z
|
||||||
|
tags:
|
||||||
|
editor: markdown
|
||||||
|
dateCreated: 2025-07-05T21:12:13.369Z
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔐 WG-Easy
|
||||||
|
|
||||||
|
**Objectif** : Simplifier la gestion et le déploiement de WireGuard VPN via une interface web conviviale.
|
||||||
|
|
||||||
|
WG-Easy offre une administration intuitive pour créer, modifier et distribuer des profils WireGuard, facilitant ainsi la gestion des accès VPN sécurisés dans un environnement auto-hébergé.
|
||||||
|
|
||||||
|
📘 [Documentation WG-Easy](securite/wg-easy.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛡️ Authentik
|
||||||
|
|
||||||
|
**Objectif** : Centraliser l’authentification des utilisateurs avec un système SSO moderne et sécurisé.
|
||||||
|
|
||||||
|
Authentik est une plateforme open-source qui fournit une gestion fine des identités, des politiques d’accès, et un Single Sign-On flexible, s’intégrant facilement aux applications internes et externes.
|
||||||
|
|
||||||
|
📘 [Documentation Authentik](securite/authentik.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🦙 CrowdSec
|
||||||
|
|
||||||
|
**Objectif** : Détecter et prévenir les attaques par une analyse collaborative des comportements malveillants.
|
||||||
|
|
||||||
|
CrowdSec combine un moteur d’analyse comportementale avec une communauté active pour identifier et bloquer les activités malicieuses sur les serveurs, renforçant ainsi la posture de sécurité de l’infrastructure.
|
||||||
|
|
||||||
|
📘 [Documentation CrowdSec](securite/crowdsec.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚫 Fail2Ban
|
||||||
|
|
||||||
|
**Objectif** : Protéger les services contre les tentatives d’intrusion répétées en bloquant automatiquement les IP suspectes.
|
||||||
|
|
||||||
|
Fail2Ban surveille les journaux système à la recherche de motifs d’attaques (tentatives de connexion échouées, scans, etc.) et met en place des règles de firewall temporaires pour bannir les sources malveillantes.
|
||||||
|
|
||||||
|
📘 [Documentation Fail2Ban](securite/fail2ban.md)
|
||||||
|
|
||||||
|
---
|
83
supervision.md
Normal file
83
supervision.md
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
---
|
||||||
|
title: Supervision
|
||||||
|
description: Cette page documente les outils de supervision mis en place pour garantir la disponibilité, les performances et la maintenabilité de mon infrastructure auto-hébergée.
|
||||||
|
published: true
|
||||||
|
date: 2025-06-30T20:50:06.965Z
|
||||||
|
tags:
|
||||||
|
editor: markdown
|
||||||
|
dateCreated: 2025-06-30T14:45:11.642Z
|
||||||
|
---
|
||||||
|
|
||||||
|
## Objectifs de la supervision
|
||||||
|
|
||||||
|
- **Surveiller la santé** des conteneurs, services et machines hôtes.
|
||||||
|
- **Recevoir des alertes** proactives en cas de dysfonctionnement.
|
||||||
|
- **Visualiser** les métriques et statistiques d’usage (CPU, RAM, réseau...).
|
||||||
|
- **Suivre les mises à jour** disponibles pour les conteneurs.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Zabbix
|
||||||
|
|
||||||
|
### Description
|
||||||
|
Zabbix est utilisé pour la supervision globale de l'infrastructure : charge des machines, services, ping, disques, processus, etc.
|
||||||
|
|
||||||
|
### Détails techniques
|
||||||
|
- Déployé en conteneur (`zabbix_web`)
|
||||||
|
- Agents Zabbix installés sur les hôtes
|
||||||
|
- Base de données stockée dans un conteneur MariaDB
|
||||||
|
|
||||||
|
### Alerting
|
||||||
|
Zabbix est configuré pour envoyer des notifications (e-mail ou autre canal à définir) en cas de :
|
||||||
|
- Surchauffe CPU
|
||||||
|
- Disque plein
|
||||||
|
- Perte de connectivité
|
||||||
|
- Conteneur Docker arrêté
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📈 Grafana
|
||||||
|
|
||||||
|
### Description
|
||||||
|
Grafana est utilisé pour la **visualisation** des métriques. Il récupère les données de plusieurs sources (Prometheus, Zabbix via plugin, etc.)
|
||||||
|
|
||||||
|
### Détails techniques
|
||||||
|
- Déployé en conteneur (`grafana`)
|
||||||
|
- Sources connectées :
|
||||||
|
- Zabbix (via le plugin officiel)
|
||||||
|
- Prometheus (pour exporter des métriques Docker/Nginx)
|
||||||
|
- Dashboards personnalisés pour :
|
||||||
|
- Monitoring général
|
||||||
|
- Usage CPU/RAM/IO Docker
|
||||||
|
- État du reverse proxy
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Portainer
|
||||||
|
|
||||||
|
### 🐋 Description
|
||||||
|
Portainer permet la **gestion visuelle** de l’environnement Docker, utile en complément de la supervision.
|
||||||
|
|
||||||
|
### Détails techniques
|
||||||
|
- Déployé en conteneur (`portainer`)
|
||||||
|
- Connecté à l’environnement Docker local
|
||||||
|
- Permet de :
|
||||||
|
- Redémarrer un service
|
||||||
|
- Voir les logs
|
||||||
|
- Gérer les volumes, réseaux, images
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔔 What’s Up Docker (WUD)
|
||||||
|
|
||||||
|
### Description
|
||||||
|
WUD scanne les conteneurs Docker pour détecter les mises à jour d’image disponibles.
|
||||||
|
|
||||||
|
### Détails techniques
|
||||||
|
- Déployé en conteneur (`wud`)
|
||||||
|
- Scanne régulièrement les tags des images
|
||||||
|
- Peut envoyer des notifications via :
|
||||||
|
- Web UI
|
||||||
|
- Discord / Slack / Telegram (optionnel)
|
||||||
|
|
||||||
|
---
|
Loading…
Add table
Add a link
Reference in a new issue