SEO Local & Maroc
12 Août 2026
12 min
1000+ mots

🌌 Rapport d'Analyse Technique et Structurel Complet (Local vs VPS)

**Projet :** Ettaouly Digital System (EDS v2.1)

AE
Abdelali EttaoulyExpert Marketing Digital N°1 Maroc • Fondateur EDS-Omega
Expert vérifié

Sommaire de l'article

  1. 01📋 Table des Matières
  2. 021. Résumé Exécutif
  3. 03Structure Locale (`/home/ettaouly/Bureau/serveur164/projects/ettaoulyabdelali.com`)
  4. 04Structure VPS (`vps164`)
  5. 053. Cartographie Docker & Proxy Traefik
  6. 06Routage Traefik (`reedwood_edge_gateway`)
  7. 074. Analyse du Conflit PM2 vs Docker (Collision Port 3000)
  8. 08Conséquences :
  9. 095. Analyse de la Base de Données (Prisma Schema)
  10. 106. Audit de Résolution des Vulnérabilités
  11. 117. Recommandations DevOps & Prochaines Étapes

---

01📋 Table des Matières

1. [الملخص التنفيذي / Résumé Exécutif](#1-résumé-exécutif) 2. [Comparaison des Structures (Local vs VPS)](#2-comparaison-des-structures-local-vs-vps) 3. [Cartographie Docker & Proxy Traefik](#3-cartographie-docker--proxy-traefik) 4. [Analyse du Conflit PM2 vs Docker (Collision Port 3000)](#4-analyse-du-conflit-pm2-vs-docker-collision-port-3000) 5. [Analyse de la Base de Données (Prisma Schema)](#5-analyse-de-la-base-de-données-prisma-schema) 6. [Audit de Résolution des Vulnérabilités](#6-audit-de-résolution-des-vulnérabilités) 7. [Recommandations DevOps & Prochaines Étapes](#7-recommandations-devops--prochaines-étapes)

---

021. Résumé Exécutif

L'écosystème **Ettaouly Digital System (EDS)** est un "Growth OS" (SaaS et CRM d'acquisition) complet et sophistiqué. Il combine : * Une machine SEO puissante et des modules WebGL 3D (Three.js) côté public. * Un panel d'administration privé (CRM + Broadcast WhatsApp + Monitoring). * Un espace client (SaaS) avec gestion de portefeuille (PayPal/Transfert CIH) et services SMM automatiques.

Cette analyse croisée montre que bien que la logique applicative soit robuste, l'infrastructure présente un décalage entre la structure de développement locale et le déploiement sur le VPS, ainsi qu'un doublon de processus sur le port 3000 de l'hôte.

---

03Structure Locale (`/home/ettaouly/Bureau/serveur164/projects/ettaoulyabdelali.com`)

Le projet local est découpé en modules distincts (Micro-frontends) : * [site/](file:///home/ettaouly/Bureau/serveur164/projects/ettaoulyabdelali.com/site) : Next.js public client. * [panel/](file:///home/ettaouly/Bureau/serveur164/projects/ettaoulyabdelali.com/panel) : Next.js admin panel. * [user_app/](file:///home/ettaouly/Bureau/serveur164/projects/ettaoulyabdelali.com/user_app) : Next.js portail client/SaaS. * [backend/](file:///home/ettaouly/Bureau/serveur164/projects/ettaoulyabdelali.com/backend) : Backend Laravel (non-exposé directement). * [whatsapp-neural-agent/](file:///home/ettaouly/Bureau/serveur164/projects/ettaoulyabdelali.com/whatsapp-neural-agent) & [webhook/](file:///home/ettaouly/Bureau/serveur164/projects/ettaoulyabdelali.com/webhook) : Agents de messagerie autonomes.

04Structure VPS (`vps164`)

Deux emplacements existent sur le serveur : 1. `/home/ettaouly/projects/ettaoulyabdelali.com` : Copie conforme du dépôt local avec le découpage modulaire. 2. `/root/projects/ettaoulyabdelali.com` : **Le dépôt de production actif**. Celui-ci contient la version *monolithique* d'origine (les dossiers `app/` et `components/` sont directement à la racine).

---

053. Cartographie Docker & Proxy Traefik

Sur le VPS, le projet de production est orchestré via `/root/projects/ettaoulyabdelali.com/docker-compose.yml` qui lance **22 conteneurs** : * **Web & Workers (Construits à partir du même monolithe Next.js)** : * `web_main` (x2) ➔ `ettaoulyabdelali.com` / `www.` (Port interne 3000) * `web_app` (x2) ➔ `app.ettaoulyabdelali.com` (Port interne 3000) * `web_panel` ➔ `panel.ettaoulyabdelali.com` (Port interne 3000) * `web_admin`, `web_store`, `web_wiki`, `web_billing`, `web_growth`, `web_community`, `web_status`, `web_ai`. * Rôles asynchrones : `worker_neural`, `worker_seo`, `worker_email`, `scheduler`. * **Bases de Données & Caching** : * `postgres_db` (PostgreSQL sur port 5433 hôte / 5432 interne). * `vector_db` (Qdrant Vector DB sur port 6333 interne). * `redis_cache` & `redis_queue` (Redis sur port 6379 interne). * `stats_monitor` (Prometheus node-exporter).

06Routage Traefik (`reedwood_edge_gateway`)

Traefik écoute sur les ports 80/443 de l'hôte VPS et distribue le trafic vers les conteneurs Docker internes en fonction du nom d'hôte (`Host`). Le `middleware.ts` Next.js intercepte ensuite les sous-domaines pour réécrire dynamiquement les chemins internes (ex: `/panel` ou `/user-app`).

---

074. Analyse du Conflit PM2 vs Docker (Collision Port 3000)

Un point critique a été détecté lors de l'inspection de l'hôte `vps164` : * Le serveur exécute un processus PM2 nommé **`ettaouly-digital`** (PID 1035) via `npm start` directement sur le VPS hôte. * Ce serveur écoute sur **toutes les interfaces de l'hôte sur le port 3000 (`*:3000`)**. * D'un autre côté, les conteneurs Docker de la flotte (ex: `web_main`, `web_panel`) tournent également sur le port 3000 interne, mais **sans lier ce port à l'hôte**.

08Conséquences :

1. **Consommation mémoire inutile** : Le serveur Next.js en arrière-plan sous PM2 consomme de la RAM hôte sans servir de requêtes via Traefik (Traefik envoie le trafic directement aux conteneurs du réseau Docker `master_gateway_net`). 2. **Risque de collision** : Si un conteneur Next.js essaye de publier le port 3000 sur l'hôte, le build Docker compose échouera avec une erreur `port already in use`.

> [!WARNING] > Nous recommandons d'arrêter et de supprimer le service PM2 hôte si toute l'infrastructure a migré sur Docker Compose : > ```bash > pm2 stop ettaouly-digital > pm2 delete ettaouly-digital > ```

---

095. Analyse de la Base de Données (Prisma Schema)

Le fichier `prisma/schema.prisma` définit un modèle relationnel robuste : * **Multi-tenant** : La table `Tenant` permet de segmenter les clients et d'isoler leurs données via des clés uniques (`apiKey`). * **Lead Tracking** : La table `Lead` (utilisant un ID `BigInt`) stocke des données de profiling enrichies (`intentScore`, `lifecycleStage`, `xp`, `level`, `gender`, `age`, `city`, `activationStatus`). * **Indexes Opérationnels** : Des index Prisma sont correctement placés sur `createdAt`, `activationStatus`, `city` et `lifecycleStage` pour accélérer les requêtes SQL complexes et éviter les timeouts lors du chargement des dashboards CRM. * **Système Logistique (SystemLog)** : Contient des index sur `createdAt`, `level` et `component`, ce qui sécurise les requêtes analytiques.

---

106. Audit de Résolution des Vulnérabilités

En inspectant le code source local de l'API, nous constatons que les deux failles critiques signalées dans l'audit précédent de Mars 2026 ont été corrigées :

1. **Sécurisation de l'API Leads (`site/app/api/leads/route.ts`)** : * *Avant :* Passage du secret directement dans l'URL (`?secret=`). * *Après :* Lecture sécurisée du header HTTP Authorization Bearer : ```typescript const authHeader = req.headers.get('authorization'); const token = authHeader?.startsWith('Bearer ') ? authHeader.substring(7) : null; ``` 2. **Authentification Globale et Session Admin (`middleware.ts`)** : * *Avant :* Cookie admin rudimentaire `admin_session='authenticated'`. * *Après :* Validation par jetons chiffrés JWT avec la librairie `jose` (méthode `jwtVerify`). Le middleware bloque automatiquement les accès non-signés vers `/panel`, `/owner` et `/api/admin`.

---

117. Recommandations DevOps & Prochaines Étapes

Pour faire évoluer la plateforme en toute sécurité :

1. **Nettoyage Hôte** : Arrêter le processus PM2 hôte obsolète `ettaouly-digital` pour libérer 23-50MB de RAM. 2. **Alignement du Déploiement** : Si vous souhaitez passer au modèle modulaire (avec les répertoires `site`, `panel` et `user_app` séparés pour réduire la taille des conteneurs individuels) : * Mettre à jour les fichiers `Dockerfile` individuels. * Adapter le `docker-compose.yml` de production pour qu'il pointe vers les dossiers respectifs plutôt que vers la racine commune. 3. **Mise en place de BullMQ + Redis** : Actuellement, le webhook et le scraping Puppeteer tournent de manière asynchrone mais sans file d'attente résiliente. Configurer Redis (qui est déjà présent sous le conteneur `ettaouly_queue`) pour piloter BullMQ stabilisera les tâches lourdes de messagerie WhatsApp.

--- *Rapport d'analyse généré automatiquement par Antigravity AI.*

Conclusion

En mettant en œuvre cette architecture sur 🌌 Rapport d'Analyse Technique et Structurel Complet (Local vs VPS), vous consolidez une présence numérique à haute valeur ajoutée, pérenne et dominante sur Google et l'AI Search.

Questions Fréquentes

Quels sont les enjeux clés de 🌌 Rapport d'Analyse Technique et Structurel Compl en 2026 ?
En 2026, l'intégration des algorithmes sémantiques et de l'IA exige d'optimiser l'expérience utilisateur, le Schema Markup et la clarté des entités pour être cités par Google et Bing.
Comment mesurer le retour sur investissement (ROI) de cette stratégie ?
Le ROI se mesure par l'augmentation du trafic organique qualifié, le gain de positions sur les mots-clés stratégiques, et l'augmentation des conversions (leads et ventes).
Combien de temps faut-il pour voir les premiers résultats ?
Les améliorations d'indexation (IndexNow) prennent de 24h à 7 jours, tandis que la domination sémantique et la hausse de trafic s'observent sous 3 à 8 semaines.

Concepts Clés (Wiki)

Preuves Réelles

Services associés — disponibles dans toutes les villes du Maroc