Tuto Offline · NAS UGREEN · 2026

Héberger ton site sur
NAS UGREEN

DXP2800XP · Docker · Nginx · PWA · 100% Local

Docker + Nginx — MĂ©thode principale
AccÚs réseau local + PWA
Retour Ă  l'accueil
đŸ–„ïž
Étape 1 — VĂ©rifications

Prérequis & AccÚs au NAS

VĂ©rifie que ton NAS UGREEN DXP2800XP est prĂȘt pour hĂ©berger le site.

~5 min
01

🔍 VĂ©rifier l'accĂšs au NAS

1
Trouver l'adresse IP de ton NAS
Ton NAS a une adresse IP sur ton réseau local. Tu as 3 façons de la trouver :
MĂ©thode 1 — Depuis ton Mac (Terminal)
# Scanner le réseau local pour trouver le NAS ping -c 1 ugreennas.local # Si ça ne marche pas, scanner toutes les IPs du réseau arp -a | grep -i "ugreen" # Alternative : scanner le réseau complet nmap -sn 192.168.1.0/24
MĂ©thode 2 — Depuis l'app UGREEN
đŸ“± Ouvre l'app UGREEN sur ton tĂ©lĂ©phone
→ Ton NAS apparaüt avec son IP locale (ex: 192.168.1.100)
→ Note cette adresse, tu en auras besoin partout
MĂ©thode 3 — Depuis ton routeur/box internet
🌐 Connecte-toi à l'interface de ta box (192.168.1.1 ou 192.168.0.1)
→ Section "Appareils connectĂ©s" ou "DHCP"
→ Cherche un appareil nommĂ© "UGREEN" ou "DXP2800XP"
→ Note l'IP (ex: 192.168.1.100)
💡 Conseil : Pour la suite du tuto, on utilisera 192.168.1.100 comme exemple. Remplace-la par l'IP rĂ©elle de ton NAS dans chaque commande.
2
Se connecter au panneau UGOS
UGOS est le systĂšme d'exploitation de ton NAS UGREEN. C'est l'interface web qui contrĂŽle tout.
🌐 Ouvre ton navigateur (Safari, Chrome, Firefox)
→ Tape : http://192.168.1.100:9443
→ Connecte-toi avec tes identifiants UGOS (ceux créés lors de la config initiale)

✅ Tu devrais voir le bureau UGOS avec les icînes d'applications
⚠ Pas d'accĂšs ? VĂ©rifie que ton Mac est sur le mĂȘme rĂ©seau Wi-Fi/Ethernet que le NAS. Si le port 9443 ne marche pas, essaye :80 ou :5000 selon ta config.
3
Vérifier que Docker est activé
Docker est le cƓur de notre solution. Il permet de faire tourner un serveur web (Nginx) dans un conteneur isolĂ©.
📩 Dans UGOS, ouvre l'application "Docker"
→ Si elle n'apparaüt pas : va dans App Center → cherche "Docker" → Installer
→ Si elle est dĂ©jĂ  lĂ  : clique dessus → vĂ©rifie que le service est Actif (Running)

✅ Docker est prĂȘt quand tu vois l'interface avec les onglets : Container, Image, Network, Volume
4
Vérifier l'espace disque
Le site martial arts est trĂšs lĂ©ger (~2 Mo). VĂ©rifie quand mĂȘme l'espace disponible.
đŸ’Ÿ Dans UGOS → Panneau de contrĂŽle → Stockage
→ Tu vois l'espace total et utilisĂ© de tes volumes
→ Il te faut au minimum 500 Mo libres (pour Docker + Nginx + site)
5
Recommandé : Fixer l'IP du NAS (DHCP réservation)
Par défaut, l'IP du NAS peut changer à chaque redémarrage du routeur. Pour éviter ça, fixe-la.
🔒 Sur ton routeur/box → section DHCP ou Baux statiques
→ Ajoute un bail pour le NAS : MAC address du NAS → IP fixe 192.168.1.100

Alternative UGOS : Panneau de contrĂŽle → RĂ©seau → IPv4 → Manuel
→ IP : 192.168.1.100
→ Masque : 255.255.255.0
→ Passerelle : 192.168.1.1
→ DNS : 8.8.8.8
✅ PrĂ©requis validĂ©s ! Tu as l'IP du NAS, l'accĂšs UGOS, Docker installĂ©, et assez d'espace. On passe Ă  la prĂ©paration du dossier.

📁
Étape 2 — Structure

Préparer le dossier sur le NAS

Créer l'arborescence qui accueillera les fichiers du site.

~3 min
02

📂 CrĂ©er la structure de dossiers

1
Créer le dossier partagé "docker"
On va créer un dossier dédié pour les données Docker sur le NAS.
📁 Ouvre le Gestionnaire de fichiers dans UGOS
→ Navigue vers le volume principal (souvent /volume1)
→ Clique "Nouveau dossier" → Nomme-le : docker
→ Dans docker/, crĂ©e un sous-dossier : MartialApp
→ Dans MartialApp/, crĂ©e deux sous-dossiers : site et nginx
Structure finale sur le NAS :
/volume1/docker/MartialApp/site/ → contiendra les fichiers HTML
/volume1/docker/MartialApp/nginx/ → contiendra la config Nginx
2
Alternative : créer les dossiers en SSH
Si tu préfÚres la ligne de commande (plus rapide) :
Terminal (SSH vers le NAS)
# Se connecter au NAS en SSH ssh admin@192.168.1.100 # Créer toute l'arborescence d'un coup mkdir -p /volume1/docker/MartialApp/site mkdir -p /volume1/docker/MartialApp/nginx # Vérifier ls -la /volume1/docker/MartialApp/
💡 SSH dĂ©sactivĂ© ? Dans UGOS → Panneau de contrĂŽle → Terminal → Active "Activer le service SSH". Le port par dĂ©faut est 22.
3
Liste complÚte des fichiers à transférer
Voici tous les fichiers de ton projet MartialApp qui doivent ĂȘtre copiĂ©s dans /volume1/docker/MartialApp/site/ :
📄index.html— Page d'accueil principale
📄Mon_Art_Martial.html— SynthĂšse personnalisĂ©e
📄Programme_Preparation.html— Programme 6 mois
📄Seance_du_Jour.html— SĂ©ance quotidienne
📄Kajukenbo.html— Art principal
📄Kali_Arnis_Eskrima.html— Art philippin
📄Nihon_Bu_Jutsu_Ryu.html— Art japonais
📄Objectif_Corps.html— Vision corporelle
📄DEPLOIEMENT_GUIDE.html— Guide dĂ©ploiement web
📄GUIDE_DOMAINE_GRATUIT.html— Guide domaine + login + NAS
📄TUTO_NAS_UGREEN.html— Ce tutoriel
đŸ–Œïžicon-192.png— IcĂŽne PWA 192×192
đŸ–Œïžicon-512.png— IcĂŽne PWA 512×512
đŸ–Œïžcorps_ref_1_1.jpeg— Image rĂ©fĂ©rence corps
⚙manifest.json— Manifeste PWA
⚙sw.js— Service Worker (cache offline)
⚠ Important : Ne transfĂšre PAS les fichiers .py, .md, ou .git/. Seulement les fichiers listĂ©s ci-dessus (15 fichiers). Ce sont les seuls nĂ©cessaires pour que le site fonctionne.

đŸ“€
Étape 3 — Copier les fichiers

Transfert des fichiers vers le NAS

3 méthodes au choix : interface web, SMB/Finder, ou SCP en ligne de commande.

~5 min
3A

🌐 MĂ©thode A : Interface web UGOS (glisser-dĂ©poser)

La plus simple. Aucune configuration requise. Tout se fait dans le navigateur.
1
Ouvrir le gestionnaire de fichiers UGOS
Connecte-toi à UGOS (http://192.168.1.100:9443) → ouvre le Gestionnaire de fichiers
2
Naviguer vers le dossier site
Dans le gestionnaire → navigue vers /volume1/docker/MartialApp/site/
3
Glisser-déposer les fichiers
📁 Sur ton Mac, ouvre le Finder → va dans ~/Projects/MartialApp/
→ SĂ©lectionne TOUS les fichiers .html + .png + .jpeg + manifest.json + sw.js
→ Glisse-les directement dans la fenĂȘtre du gestionnaire UGOS
→ Attends la fin du transfert (barre de progression)

✅ Tu devrais voir tous les fichiers listĂ©s dans le dossier site/
3B

đŸ’» MĂ©thode B : SMB/CIFS depuis le Finder (Mac)

Pratique si tu utilises souvent le Finder. Monte le NAS comme un disque réseau sur ton Mac.
1
Activer SMB sur le NAS
🔧 Dans UGOS → Panneau de contrîle → Services de fichiers
→ Onglet SMB → Active le service SMB
→ VĂ©rifie que le dossier docker est partagĂ© en SMB
2
Se connecter depuis le Finder
Mac — Finder
# Dans le Finder : Cmd+K (ou menu Aller → Se connecter au serveur) # Tape cette adresse : smb://192.168.1.100/docker # → Entre tes identifiants UGOS # → Le dossier "docker" apparaĂźt comme un disque rĂ©seau
Une fois connecté, navigue vers MartialApp/site/ et copie-colle tous les fichiers depuis ton dossier local ~/Projects/MartialApp/.
3
Alternative en une commande Terminal
Terminal macOS
# Monter le partage SMB mkdir -p /tmp/nas-mount mount_smbfs //admin@192.168.1.100/docker /tmp/nas-mount # Copier les fichiers du site cp ~/Projects/MartialApp/*.html /tmp/nas-mount/MartialApp/site/ cp ~/Projects/MartialApp/*.png /tmp/nas-mount/MartialApp/site/ cp ~/Projects/MartialApp/*.jpeg /tmp/nas-mount/MartialApp/site/ cp ~/Projects/MartialApp/manifest.json /tmp/nas-mount/MartialApp/site/ cp ~/Projects/MartialApp/sw.js /tmp/nas-mount/MartialApp/site/ # Démonter umount /tmp/nas-mount
3C

⌚ MĂ©thode C : SCP en ligne de commande (la plus rapide)

Pour les geeks. Un seul copier-coller dans le Terminal et c'est fait. Requiert SSH activé sur le NAS.
1
Transférer tout en une commande
Terminal macOS — Transfert SCP complet
# Copier TOUS les fichiers du site vers le NAS en une seule commande scp ~/Projects/MartialApp/*.html \ ~/Projects/MartialApp/*.png \ ~/Projects/MartialApp/*.jpeg \ ~/Projects/MartialApp/manifest.json \ ~/Projects/MartialApp/sw.js \ admin@192.168.1.100:/volume1/docker/MartialApp/site/ # Le mot de passe UGOS sera demandĂ© # → Tape-le et valide avec EntrĂ©e
2
Vérifier que tout est copié
Terminal — VĂ©rification SSH
# Se connecter au NAS ssh admin@192.168.1.100 # Lister les fichiers dans le dossier site ls -la /volume1/docker/MartialApp/site/ # Tu devrais voir ~15 fichiers : # index.html, Kajukenbo.html, Kali_Arnis_Eskrima.html, # Mon_Art_Martial.html, Nihon_Bu_Jutsu_Ryu.html, # Objectif_Corps.html, Programme_Preparation.html, # Seance_du_Jour.html, DEPLOIEMENT_GUIDE.html, # TUTO_NAS_UGREEN.html, icon-192.png, icon-512.png, # corps_ref_1_1.jpeg, manifest.json, sw.js # Compter les fichiers ls /volume1/docker/MartialApp/site/ | wc -l # → Doit afficher 15
✅ Fichiers transfĂ©rĂ©s ! Tous les fichiers du site sont maintenant sur le NAS. On passe Ă  la configuration Docker + Nginx.

🐳
Étape 4 — Le cƓur du systùme

Docker + Nginx — Serveur Web

Télécharger l'image, créer la config Nginx, lancer le conteneur.

~10 min
4A

đŸ“„ TĂ©lĂ©charger l'image Nginx

1
Méthode UGOS : via l'interface Docker
🐳 Dans UGOS → ouvre Docker → onglet Image
→ Clique "Ajouter" ou "Registry"
→ Cherche : nginx
→ SĂ©lectionne l'image officielle nginx
→ Tag : alpine (version lĂ©gĂšre, ~25 Mo)
→ Clique TĂ©lĂ©charger

⏳ Attends le tĂ©lĂ©chargement (~30 secondes en fibre)
✅ L'image nginx:alpine apparaüt dans ta liste d'images
2
Alternative SSH : docker pull
Terminal SSH sur le NAS
ssh admin@192.168.1.100 # TĂ©lĂ©charger l'image nginx alpine (lĂ©gĂšre, ~25 Mo) docker pull nginx:alpine # VĂ©rifier que l'image est tĂ©lĂ©chargĂ©e docker images | grep nginx # → nginx alpine xxxx 25MB
4B

⚙ CrĂ©er le fichier nginx.conf

3
Créer la configuration Nginx personnalisée
Ce fichier configure Nginx pour servir correctement ton site avec le cache, le gzip, les types MIME, et le support du Service Worker PWA.
💡 OĂč crĂ©er ce fichier ? Il doit ĂȘtre dans /volume1/docker/MartialApp/nginx/nginx.conf sur le NAS. Tu peux le crĂ©er via SSH ou via le gestionnaire de fichiers UGOS.
MĂ©thode SSH — CrĂ©er nginx.conf
ssh admin@192.168.1.100 # Créer le fichier nginx.conf avec nano (ou vi) nano /volume1/docker/MartialApp/nginx/nginx.conf
Contenu complet de nginx.conf — Copier-coller en entier
worker_processes auto; events { worker_connections 1024; } http { # ─── Types MIME ─── include /etc/nginx/mime.types; default_type application/octet-stream; # ─── Performance ─── sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; # ─── Compression Gzip ─── gzip on; gzip_vary on; gzip_min_length 1000; gzip_types text/plain text/css text/javascript application/javascript application/json application/manifest+json image/svg+xml; server { listen 80; server_name _; root /usr/share/nginx/html; index index.html; # ─── Fichiers HTML : pas de cache (toujours frais) ─── location ~* \.html$ { add_header Cache-Control "no-cache, must-revalidate"; try_files $uri $uri/ /index.html; } # ─── Service Worker : JAMAIS cacher ─── location = /sw.js { add_header Cache-Control "no-store, no-cache, must-revalidate"; add_header Service-Worker-Allowed "/"; } # ─── Manifest PWA ─── location = /manifest.json { add_header Cache-Control "no-cache"; types { application/manifest+json json; } } # ─── Images et assets : cache 30 jours ─── location ~* \.(png|jpg|jpeg|gif|ico|svg|webp)$ { expires 30d; add_header Cache-Control "public, immutable"; } # ─── SĂ©curitĂ© de base ─── add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; # ─── Page 404 ─── error_page 404 /index.html; } }
⚠ AprĂšs avoir collĂ© : Dans nano, fais Ctrl+O → EntrĂ©e pour sauvegarder, puis Ctrl+X pour quitter.
Ce que fait cette config :
‱ Sert le site sur le port 80 du conteneur
‱ Compresse les fichiers (gzip) pour un chargement rapide
‱ Configure le cache correctement pour les images (30j) et les HTML (pas de cache)
‱ Le Service Worker sw.js n'est JAMAIS cachĂ© (obligatoire pour les mises Ă  jour PWA)
‱ Le manifest PWA est servi avec le bon type MIME
4C

🚀 CrĂ©er et lancer le conteneur

4
Méthode UGOS : via l'interface Docker
🐳 Dans Docker UGOS → onglet Container → CrĂ©er

Image : nginx:alpine
Nom du conteneur : MartialApp-web

Port Mapping :
  Port local : 8080 → Port conteneur : 80

Volume Mounts (2 montages) :
  â‘  /volume1/docker/MartialApp/site → /usr/share/nginx/html (Read Only)
  â‘Ą /volume1/docker/MartialApp/nginx/nginx.conf → /etc/nginx/nginx.conf (Read Only)

Redémarrage : always (redémarre automatiquement si le NAS reboot)

→ Clique CrĂ©er puis DĂ©marrer
5
Alternative SSH : docker run (une seule commande)
Terminal SSH — Lancer le conteneur
ssh admin@192.168.1.100 # Créer et lancer le conteneur en une commande docker run -d \ --name MartialApp-web \ --restart always \ -p 8080:80 \ -v /volume1/docker/MartialApp/site:/usr/share/nginx/html:ro \ -v /volume1/docker/MartialApp/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \ nginx:alpine
5B
Alternative Docker Compose (plus propre et maintenable)
Si tu préfÚres une approche plus professionnelle et facile à maintenir :
Créer docker-compose.yml
ssh admin@192.168.1.100 # Créer le fichier docker-compose.yml nano /volume1/docker/MartialApp/docker-compose.yml
Contenu complet de docker-compose.yml
version: '3.8' services: MartialApp-web: image: nginx:alpine container_name: MartialApp-web restart: always ports: - "8080:80" volumes: - /volume1/docker/MartialApp/site:/usr/share/nginx/html:ro - /volume1/docker/MartialApp/nginx/nginx.conf:/etc/nginx/nginx.conf:ro networks: - martial-net networks: martial-net: driver: bridge
Lancer avec Docker Compose
# Aller dans le dossier cd /volume1/docker/MartialApp # Lancer le conteneur docker-compose up -d # Voir le statut docker-compose ps # Voir les logs docker-compose logs -f # ArrĂȘter docker-compose down
Avantages Docker Compose :
‱ Configuration centralisĂ©e et lisible
‱ Facile à maintenir et à modifier
‱ DĂ©ploiement reproductible
‱ Gestion simplifiĂ©e des volumes et rĂ©seaux
‱ Standard de l'industrie pour les projets multi-conteneurs
Explication de chaque paramĂštre :
‱ -d → DĂ©tachĂ© (tourne en arriĂšre-plan)
‱ --name MartialApp-web → Nom du conteneur pour le retrouver facilement
‱ --restart always → RedĂ©marre auto aprĂšs un reboot du NAS
‱ -p 8080:80 → Le port 8080 du NAS redirige vers le port 80 de Nginx
‱ -v .../site:/usr/share/nginx/html:ro → Monte les fichiers du site (read-only)
‱ -v .../nginx.conf:/etc/nginx/nginx.conf:ro → Monte la config Nginx
6
Vérifier que le conteneur tourne
Terminal SSH — VĂ©rification
# Voir les conteneurs en cours d'exĂ©cution docker ps # Tu devrais voir quelque chose comme : # CONTAINER ID IMAGE COMMAND STATUS PORTS NAMES # abc123def456 nginx:alpine "/docker-entrypoint.
" Up 2 minutes 0.0.0.0:8080->80/tcp MartialApp-web # Tester en local sur le NAS curl http://localhost:8080 # → Doit afficher le code HTML de index.html # Si erreur, voir les logs : docker logs MartialApp-web
✅ Nginx tourne ! Le serveur web est actif dans Docker sur le port 8080. Il ne reste plus qu'Ă  y accĂ©der depuis tes appareils.
7
DĂ©pannage — Commandes utiles Docker
Terminal SSH — Commandes de dĂ©pannage
# ArrĂȘter le conteneur docker stop MartialApp-web # RedĂ©marrer le conteneur docker restart MartialApp-web # Supprimer le conteneur (pour recrĂ©er) docker rm -f MartialApp-web # Voir les logs en temps rĂ©el docker logs -f MartialApp-web # Entrer dans le conteneur (debug) docker exec -it MartialApp-web sh # Tester la config Nginx (depuis dans le conteneur) docker exec MartialApp-web nginx -t

đŸ“±
Étape 5 — Le rĂ©sultat final

Accéder au site & Installer en PWA

Ouvre ton site depuis n'importe quel appareil sur ton réseau local.

~2 min
05

🌐 AccĂ©der au site

1
Depuis ton Mac (navigateur)
🌐 Ouvre Safari, Chrome ou Firefox
→ Tape : http://192.168.1.100:8080

🎉 Ton site "Mon Parcours Martial" s'affiche !
→ Teste la navigation entre les pages
→ VĂ©rifie que les images chargent
→ VĂ©rifie que "SĂ©ance du Jour" fonctionne
2
Depuis un iPhone / iPad (mĂȘme Wi-Fi)
đŸ“± Sur ton iPhone/iPad, vĂ©rifie que tu es sur le mĂȘme Wi-Fi que le NAS
→ Ouvre Safari
→ Tape : http://192.168.1.100:8080
→ Le site s'affiche ! Teste la navigation.

💡 Astuce : Ajoute un signet pour y accĂ©der rapidement
3
Depuis un tĂ©lĂ©phone Android (mĂȘme Wi-Fi)
MĂȘme principe : ouvre Chrome → tape http://192.168.1.100:8080
05B

đŸ“Č Installer en PWA (comme une app)

Qu'est-ce qu'une PWA ? GrĂące au manifest.json et au sw.js dĂ©jĂ  prĂ©sents dans ton site, tu peux l'installer comme une vraie application sur l'Ă©cran d'accueil de ton tĂ©lĂ©phone. Il fonctionnera mĂȘme hors connexion aprĂšs la premiĂšre visite.
4
iPhone / iPad — Ajouter Ă  l'Ă©cran d'accueil
đŸ“± Dans Safari sur ton iPhone :
① Ouvre http://192.168.1.100:8080
② Tape l'icĂŽne Partager (carrĂ© avec flĂšche vers le haut) ↑
⑱ Scrolle et tape "Sur l'Ă©cran d'accueil"
④ Confirme le nom : "Kajukenbo 2026"
â‘€ Tape "Ajouter"

✅ L'icĂŽne Kajukenbo apparaĂźt sur ton Ă©cran d'accueil !
→ Ouvre-la : le site s'ouvre en plein Ă©cran, sans barre Safari
→ Fonctionne mĂȘme sans Wi-Fi (grĂące au Service Worker)
5
Android — Installer la PWA
đŸ“± Dans Chrome sur Android :
① Ouvre http://192.168.1.100:8080
② Chrome affiche une banniùre "Installer l'application" en bas
⑱ Tape "Installer"

Pas de banniùre ? → Menu ⋼ (3 points) → "Installer l'application"

✅ L'app apparaüt dans ton tiroir d'applications !
6
DĂ©pannage — Le site ne charge pas ?
Checklist de dépannage
# 1. VĂ©rifie que le conteneur tourne ssh admin@192.168.1.100 docker ps | grep MartialApp-web # 2. VĂ©rifie que le port 8080 est accessible curl http://192.168.1.100:8080 # 3. VĂ©rifie le firewall du NAS # UGOS → Panneau de contrĂŽle → SĂ©curitĂ© → Firewall # → Assure-toi que le port 8080 est autorisĂ© # 4. VĂ©rifie que l'appareil est sur le mĂȘme rĂ©seau # Sur iPhone : RĂ©glages → Wi-Fi → mĂȘme rĂ©seau que le NAS # 5. VĂ©rifie les logs Nginx docker logs MartialApp-web # 6. Teste la config Nginx docker exec MartialApp-web nginx -t
🏆 FĂ©licitations ! Ton site martial arts est hĂ©bergĂ© sur ton NAS UGREEN, accessible depuis tous tes appareils sur le rĂ©seau, et installable en PWA pour un accĂšs offline. Aucun abonnement, aucun cloud, 100% chez toi.

🔒
Étape 6 — Protection

SĂ©curitĂ© — Bonnes pratiques

Protéger ton NAS, tes conteneurs Docker, et ton site contre les menaces.

~15 min
06A

🔐 SĂ©curiser UGOS (le systĂšme du NAS)

1
Changer le mot de passe admin par défaut
Le mot de passe par défaut est souvent faible. Utilise un mot de passe fort (16+ caractÚres, majuscules, chiffres, symboles).
đŸ‘€ UGOS → Panneau de contrĂŽle → Utilisateur
→ SĂ©lectionne le compte admin
→ Clique Modifier → Change le mot de passe
→ Utilise un gestionnaire de mots de passe (1Password, Bitwarden)

💡 RecommandĂ© : CrĂ©e un 2Ăšme compte utilisateur avec droits admin, dĂ©sactive le compte "admin" par dĂ©faut
2
Activer la double authentification (2FA)
🔐 UGOS → Panneau de contrĂŽle → SĂ©curitĂ© → 2FA
→ Active la vĂ©rification en deux Ă©tapes
→ Scanne le QR code avec Google Authenticator ou Authy
→ Entre le code à 6 chiffres pour confirmer

✅ DĂ©sormais, chaque connexion Ă  UGOS demande un code temporaire
3
Configurer le firewall du NAS
đŸ›Ąïž UGOS → Panneau de contrĂŽle → SĂ©curitĂ© → Firewall
→ Active le firewall
→ Politique par dĂ©faut : Refuser tout
→ Ajoute des rùgles pour autoriser uniquement :
  â€ą Port 9443 — Interface UGOS (rĂ©seau local uniquement)
  â€ą Port 8080 — Ton site web Nginx
  â€ą Port 22 — SSH (rĂ©seau local uniquement)
  â€ą Port 443 — HTTPS (si accĂšs internet activĂ©)

→ Source : 192.168.1.0/24 (uniquement ton rĂ©seau local)
⚠ Critique : N'ouvre JAMAIS le port 9443 (UGOS) ou 22 (SSH) vers internet. Ces ports doivent rester accessibles uniquement depuis ton rĂ©seau local.
4
Activer le blocage automatique des IPs
đŸš« UGOS → SĂ©curitĂ© → Protection automatique
→ Active le blocage automatique
→ RĂšgle : Bloquer aprĂšs 5 tentatives Ă©chouĂ©es en 5 minutes
→ DurĂ©e de blocage : permanente (ou 24h minimum)

→ Cela bloque les attaques par force brute sur SSH et UGOS
5
Activer les mises Ă  jour automatiques UGOS
Les mises Ă  jour corrigent les failles de sĂ©curitĂ©. Active-les pour ĂȘtre toujours protĂ©gĂ©.
🔄 UGOS → Panneau de contrîle → Mise à jour
→ Active les mises à jour automatiques
→ Planifie-les la nuit (ex: 4h du matin)
06B

🐳 SĂ©curiser Docker + Nginx

6
Volumes en lecture seule (dĂ©jĂ  fait ✅)
Notre commande docker run utilise dĂ©jĂ  :ro (read-only) sur les volumes. Cela empĂȘche le conteneur de modifier les fichiers du site. C'est une bonne pratique essentielle.
7
Headers de sécurité Nginx avancés
Ajoute ces headers dans le bloc server de ton nginx.conf pour une protection maximale :
Ajouter dans nginx.conf → bloc server
# ─── Headers de sĂ©curitĂ© avancĂ©s ─── add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always; add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:;" always; # ─── Cacher la version de Nginx ─── server_tokens off;
Ce que font ces headers :
‱ X-Frame-Options → EmpĂȘche l'inclusion dans une iframe (clickjacking)
‱ X-Content-Type-Options → EmpĂȘche le MIME sniffing
‱ X-XSS-Protection → Protection XSS du navigateur
‱ Referrer-Policy → ContrĂŽle les infos envoyĂ©es en referer
‱ Permissions-Policy → Bloque camĂ©ra, micro, gĂ©oloc
‱ Content-Security-Policy → Bloque les scripts externes
‱ server_tokens off → Cache la version Nginx (Ă©vite les exploits ciblĂ©s)
8
Rate limiting — Limiter les requĂȘtes
ProtĂšge contre les attaques DDoS et le scraping abusif :
Ajouter dans nginx.conf → bloc http (avant server)
# ─── Rate Limiting ─── limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s; # Puis dans le bloc server : limit_req zone=general burst=20 nodelay;
Cela limite chaque IP Ă  10 requĂȘtes/seconde avec un burst de 20.
9
Réseau Docker isolé
Crée un réseau Docker dédié pour isoler le conteneur :
# Créer un réseau isolé docker network create martial-net # Recréer le conteneur sur ce réseau docker rm -f MartialApp-web docker run -d \ --name MartialApp-web \ --restart always \ --network martial-net \ -p 8080:80 \ -v /volume1/docker/MartialApp/site:/usr/share/nginx/html:ro \ -v /volume1/docker/MartialApp/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \ --read-only \ --tmpfs /var/cache/nginx \ --tmpfs /var/run \ --tmpfs /tmp \ nginx:alpine
Nouveautés sécurité :
‱ --network martial-net → RĂ©seau isolĂ©
‱ --read-only → Filesystem du conteneur en lecture seule
‱ --tmpfs → RĂ©pertoires temporaires en RAM (nĂ©cessaires pour Nginx)
10
Sauvegardes automatiques
Configure des sauvegardes réguliÚres de tes données :
đŸ’Ÿ UGOS → Sauvegarde (ou Hyper Backup si disponible)
→ CrĂ©e une tĂąche de sauvegarde pour /volume1/docker/
→ Destination : USB externe ou cloud (Google Drive, Backblaze B2)
→ Planification : quotidienne à 2h du matin
→ RĂ©tention : 7 versions minimum
✅ NAS sĂ©curisĂ© ! 2FA activĂ©, firewall configurĂ©, Docker isolĂ©, headers Nginx renforcĂ©s, sauvegardes en place.

🌍
Étape 7 — Accùs distant

Accéder au site depuis Internet

3 méthodes : Reverse Proxy + DDNS, Cloudflare Tunnel, ou VPN.

~20 min
7A

🔀 MĂ©thode A : Reverse Proxy + DDNS + Let's Encrypt

La méthode classique. Tu obtiens une URL comme https://martial.mondomaine.com avec un certificat SSL gratuit.
1
Configurer un DDNS (Dynamic DNS)
Ton IP publique change rĂ©guliĂšrement. Un DDNS associe un nom de domaine Ă  ton IP, mĂȘme quand elle change.
Services DDNS gratuits recommandés
# Option 1 — DuckDNS (gratuit, simple) # → https://www.duckdns.org # → CrĂ©e un compte → choisis un nom : martial.duckdns.org # Option 2 — No-IP (gratuit avec renouvellement mensuel) # → https://www.noip.com # Option 3 — Si tu as un nom de domaine (OVH, Cloudflare, etc.) # → Configure un enregistrement A vers ton IP publique
🌐 Certains NAS UGREEN supportent le DDNS nativement :
→ UGOS → Panneau de contrîle → Accùs externe → DDNS
→ Sinon, configure manuellement avec un cron :

*/5 * * * * curl -s "https://www.duckdns.org/update?domains=martial&token=TON_TOKEN"
2
Ouvrir les ports sur le routeur (Port Forwarding)
🔧 Connecte-toi à ta box/routeur (192.168.1.1)
→ Section NAT ou Port Forwarding ou Redirection de ports

→ Ajoute 2 rùgles :
  â€ą Port externe 80 → IP 192.168.1.100 port 80 (pour Let's Encrypt)
  â€ą Port externe 443 → IP 192.168.1.100 port 443 (HTTPS)
⚠ Important : N'ouvre que les ports 80 et 443. Jamais le port 9443 (UGOS), 22 (SSH), ou 8080 directement.
3
Installer Nginx Proxy Manager (NPM) dans Docker
NPM est un reverse proxy avec interface web qui gĂšre automatiquement les certificats SSL Let's Encrypt.
Terminal SSH — Lancer Nginx Proxy Manager
ssh admin@192.168.1.100 # Créer le dossier pour NPM mkdir -p /volume1/docker/npm/data mkdir -p /volume1/docker/npm/letsencrypt # Lancer Nginx Proxy Manager docker run -d \ --name nginx-proxy-manager \ --restart always \ -p 80:80 \ -p 443:443 \ -p 81:81 \ -v /volume1/docker/npm/data:/data \ -v /volume1/docker/npm/letsencrypt:/etc/letsencrypt \ jc21/nginx-proxy-manager:latest
💡 Premier accùs NPM : http://192.168.1.100:81
Email : admin@example.com / Mot de passe : changeme
→ Change-les immĂ©diatement aprĂšs la premiĂšre connexion !
4
Configurer le Proxy Host + SSL
🔀 Dans NPM (http://192.168.1.100:81) :
→ Proxy Hosts → Add Proxy Host

Domain Names : martial.duckdns.org
Forward Hostname : 192.168.1.100
Forward Port : 8080
Block Common Exploits : ✅ ActivĂ©
Websockets Support : ✅ ActivĂ©

→ Onglet SSL :
  â†’ Request a new SSL Certificate
  â†’ ✅ Force SSL
  â†’ ✅ HTTP/2 Support
  â†’ Email : ton email (pour Let's Encrypt)
  â†’ ✅ Accepte les conditions
→ Clique Save
✅ RĂ©sultat : Ton site est accessible via https://martial.duckdns.org avec un certificat SSL valide, depuis n'importe oĂč dans le monde !
7B

☁ MĂ©thode B : Cloudflare Tunnel (Zero Trust, sans port forwarding)

La plus sécurisée. Aucun port ouvert sur ton routeur. Cloudflare crée un tunnel chiffré. Gratuit.
1
Créer un compte Cloudflare + ajouter un domaine
Tu as besoin d'un nom de domaine (à partir de ~5€/an chez OVH, Cloudflare, Namecheap).
→ Va sur https://dash.cloudflare.com → crĂ©e un compte → ajoute ton domaine.
→ Change les nameservers chez ton registrar vers ceux de Cloudflare.
2
Installer cloudflared sur le NAS
Terminal SSH — Lancer cloudflared via Docker
ssh admin@192.168.1.100 # Créer le dossier config mkdir -p /volume1/docker/cloudflared # Lancer cloudflared (remplace TON_TOKEN par le token du dashboard) docker run -d \ --name cloudflared \ --restart always \ cloudflare/cloudflared:latest \ tunnel --no-autoupdate run --token TON_TOKEN_CLOUDFLARE
3
Configurer le tunnel dans le dashboard Cloudflare
☁ Cloudflare Dashboard → Zero Trust → Networks → Tunnels
→ Create a Tunnel → Nom : MartialApp
→ Copie le token → colle-le dans la commande Docker ci-dessus

→ Configure la route :
  Public hostname : martial.tondomaine.com
  Service : http://192.168.1.100:8080
→ Save
Avantages Cloudflare Tunnel :
‱ Aucun port ouvert sur ton routeur (0 risque d'intrusion directe)
‱ SSL automatique + protection DDoS gratuite
‱ Cache CDN mondial (ton site charge vite partout)
‱ Firewall applicatif (WAF) inclus
7C

🔑 MĂ©thode C : VPN (accĂšs privĂ© uniquement)

La plus privée. Le site reste invisible sur internet. Seuls les appareils connectés au VPN y accÚdent.
1
Installer WireGuard sur le NAS
Terminal SSH — WireGuard Easy via Docker
docker run -d \ --name wg-easy \ --restart always \ --cap-add NET_ADMIN \ --cap-add SYS_MODULE \ -e WG_HOST=martial.duckdns.org \ -e PASSWORD=TonMotDePasseWG \ -e WG_DEFAULT_DNS=1.1.1.1 \ -p 51820:51820/udp \ -p 51821:51821/tcp \ -v /volume1/docker/wireguard:/etc/wireguard \ ghcr.io/wg-easy/wg-easy
→ Interface web : http://192.168.1.100:51821
→ CrĂ©e un profil client → tĂ©lĂ©charge le QR code
→ Sur ton iPhone : installe l'app WireGuard → scanne le QR
→ ConnectĂ© au VPN, tu accĂšdes Ă  http://192.168.1.100:8080 comme en local !
⚠ Port forwarding requis : Ouvre le port UDP 51820 sur ton routeur vers l'IP du NAS pour que le VPN soit accessible depuis l'extĂ©rieur.
2
Comparatif des 3 méthodes

🔀 Reverse Proxy + DDNS — URL publique, SSL, requiert port forwarding 80/443

☁ Cloudflare Tunnel — URL publique, SSL, aucun port ouvert, protection DDoS, RECOMMANDÉ

🔑 VPN WireGuard — AccĂšs privĂ© seulement, ultra-sĂ©curisĂ©, requiert port UDP 51820

✅ AccĂšs Internet configurĂ© ! Ton site martial arts est maintenant accessible depuis n'importe oĂč, de façon sĂ©curisĂ©e. La mĂ©thode Cloudflare Tunnel est la plus simple et la plus sĂ»re.

BONUS

🔄 Mises Ă  jour & Astuces avancĂ©es

📜 Script de mise à jour automatique (update.sh)

Crée ce script sur le NAS pour mettre à jour le site depuis GitHub en une commande :

CrĂ©er le script — SSH
ssh admin@192.168.1.100 nano /volume1/docker/MartialApp/update.sh
Contenu de update.sh
#!/bin/bash # ── Script de mise à jour du site MartialApp ── cd /volume1/docker/MartialApp/site # Cloner ou mettre à jour depuis GitHub if [ -d ".git" ]; then git pull origin main else git clone https://github.com/Kaito1947/MartialApp.git . fi # Recharger Nginx sans downtime docker exec MartialApp-web nginx -s reload echo "✅ Site mis à jour !"
Rendre exécutable et lancer
chmod +x /volume1/docker/MartialApp/update.sh bash /volume1/docker/MartialApp/update.sh

⏰ Cron Job — Mise à jour automatique quotidienne

Programme la mise Ă  jour chaque nuit Ă  3h du matin :

# Ouvrir le cron sur le NAS crontab -e # Ajouter cette ligne : 0 3 * * * /bin/bash /volume1/docker/MartialApp/update.sh >> /volume1/docker/MartialApp/update.log 2>&1

🐳 Watchtower — Mise à jour auto de l'image Docker

Watchtower surveille et met Ă  jour automatiquement tes conteneurs Docker :

docker run -d \ --name watchtower \ --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower \ --cleanup --interval 86400

Watchtower vérifie chaque 24h si nginx:alpine a une nouvelle version et la met à jour automatiquement.

🔐 Astuce : Accùs par nom au lieu d'IP

Pour taper http://martial.local:8080 au lieu de l'IP :

Sur ton Mac — /etc/hosts
# Ouvrir le fichier hosts sudo nano /etc/hosts # Ajouter cette ligne à la fin : 192.168.1.100 martial.local nas.local # Sauvegarder (Ctrl+O, Entrée, Ctrl+X) # Maintenant tu peux accéder via : # http://martial.local:8080

📊 RĂ©capitulatif complet

Ce que tu as accompli :

  • ✅ NAS UGREEN DXP2800XP configurĂ© avec Docker
  • ✅ Nginx Alpine comme serveur web (~25 Mo)
  • ✅ Config Nginx optimisĂ©e (gzip, cache, MIME, Service Worker)
  • ✅ Site accessible sur tout le rĂ©seau local
  • ✅ Installable en PWA sur iPhone et Android
  • ✅ Fonctionne offline grĂące au Service Worker
  • ✅ RedĂ©marre automatiquement aprĂšs un reboot du NAS
  • ✅ Script de mise Ă  jour depuis GitHub
  • ✅ 100% auto-hĂ©bergĂ©, aucun cloud, aucun abonnement
âš”ïžđŸ–„ïž

Ton site martial arts vit maintenant sur ton NAS UGREEN.
Chez toi. Sous ton contrĂŽle. Toujours disponible.

← Retour à l'accueil du site