diff --git a/qnap-docker.skill b/qnap-docker.skill new file mode 100644 index 0000000..e1c1fd0 Binary files /dev/null and b/qnap-docker.skill differ diff --git a/skills/qnap-docker/SKILL.md b/skills/qnap-docker/SKILL.md new file mode 100644 index 0000000..7466d81 --- /dev/null +++ b/skills/qnap-docker/SKILL.md @@ -0,0 +1,82 @@ +--- +name: qnap-docker +description: Create and deploy Docker Compose services on Christophe's QNAP NAS. Use whenever asked to create, add, install, or deploy a Docker container/service on the QNAP. Handles volume directory creation, proper PUID/PGID permissions, LinuxServer.io image conventions, swag_lan network, and Portainer stack deployment. +--- + +# QNAP Docker Skill + +## Environment + +| Parameter | Value | +|---|---| +| Volume base path | `/share/ZFS24_DATA/docker//` | +| PUID | `1005` | +| PGID | `100` | +| TZ | `Europe/Paris` | +| Network | `swag_lan` (external) | +| Preferred images | `lscr.io/linuxserver/:latest` | + +## Workflow + +### 1. Create volume directory on QNAP + +Christophe's QNAP NAS est accessible via SSH ou Portainer. Pour créer le dossier : + +```bash +# Via SSH (si dispo) +ssh admin@ "mkdir -p /share/ZFS24_DATA/docker/" + +# Ou via un exec dans le conteneur approprié +``` + +Si on passe par Portainer, inclure la création du dossier dans le script de déploiement ou demander à Christophe de le créer si nécessaire. + +### 2. Compose template + +```yaml +services: + : + image: lscr.io/linuxserver/:latest + container_name: + volumes: + - /share/ZFS24_DATA/docker/:/config + # Ajouter d'autres volumes si besoin (ex: /share/ZFS24_DATA/docker//data:/data) + environment: + - PUID=1005 + - PGID=100 + - TZ=Europe/Paris + # Variables spécifiques à l'app ici + ports: + - : + restart: always + +networks: + default: + name: swag_lan + external: true +``` + +### 3. Règles importantes + +- **Nom du dossier = nom du container** — toujours utiliser le même nom pour s'y retrouver +- **Images LinuxServer** (`lscr.io/linuxserver/`) : toujours inclure `PUID`, `PGID`, `TZ` +- **Images non-LinuxServer** : adapter les variables d'env selon la doc de l'image (PUID/PGID peuvent ne pas s'appliquer) +- **Ports** : commenter les ports HTTP non nécessaires si SWAG/reverse proxy gère l'accès +- **Network** : toujours `swag_lan` (external) comme réseau par défaut +- **restart** : toujours `always` + +### 4. Déploiement via Portainer + +Utiliser le skill `portainer` pour déployer ou mettre à jour la stack : +- Endpoint id : `2` +- Créer une nouvelle stack avec le compose généré +- Ou ajouter le service à une stack existante si regroupement logique souhaité + +### 5. SWAG / Reverse proxy + +Si l'app a une interface web, proposer à Christophe de configurer un sous-domaine via SWAG. +Voir les configs proxy disponibles sur [linuxserver.io/swag](https://docs.linuxserver.io/general/swag/). + +## Exemple complet + +Voir `references/example-heimdall.yml` pour un exemple de référence. diff --git a/skills/qnap-docker/references/example-heimdall.yml b/skills/qnap-docker/references/example-heimdall.yml new file mode 100644 index 0000000..0137723 --- /dev/null +++ b/skills/qnap-docker/references/example-heimdall.yml @@ -0,0 +1,22 @@ +# Exemple de référence : Heimdall (LinuxServer) +# Source : message de Christophe, 2026-03-11 + +services: + heimdall: + image: lscr.io/linuxserver/heimdall:latest + container_name: heimdall + volumes: + - /share/ZFS24_DATA/docker/heimdall:/config + environment: + - PUID=1005 + - PGID=100 + - TZ=Europe/Paris + ports: + #- 1180:80 + - 10443:443 + restart: always + +networks: + default: + name: swag_lan + external: true