EMsee est une plateforme sociale moderne permettant le partage de contenu et la communication en temps réel. Cette application full-stack utilise une architecture robuste et conteneurisée, prête pour la production.
L'application est divisée en services conteneurisés (Docker) :
- Frontend : React + Vite, servi par Nginx (image
ghcr.io/mehdimp4/projetjs-frontend). Nginx gère aussi le reverse-proxy vers l'API (/api) et les websockets (/socket.io). - Backend : Node.js + Express (image
ghcr.io/mehdimp4/projetjs-backend). Persistance via Prisma. - Base de données : PostgreSQL 15 avec optimisations de performance.
- Mises à jour auto : Watchtower surveille le registre d'images et met à jour les conteneurs automatiquement.
- Docker & Docker Compose
- Node.js 20+ (pour le dev local hors Docker)
Le moyen le plus simple de lancer l'application est via Docker Compose.
- Créez un fichier
.envà la racine (voir.env.production.examplepour les variables). - Lancez le stack :
docker compose -f docker-compose.prod.yml up -d
- L'application est accessible sur
http://localhost:80.
- Backend :
cd backend npm install # Configurer .env avec DATABASE_URL npm run dev
- Frontend :
cd frontend npm install npm run dev
Le déploiement est automatisé via GitHub Actions et conçu pour s'exécuter facilement sur un serveur Unraid (ou tout VPS Docker).
À chaque push sur la branche main :
- GitHub Actions construit les images Docker (Backend & Frontend).
- Les images sont poussées sur le GitHub Container Registry (GHCR).
Un script automatisé est fourni pour déployer le stack sur Unraid.
- Sur votre serveur, créez un dossier (ex:
/mnt/user/appdata/emsee). - Copiez-y :
docker-compose.prod.yml- Le dossier
scripts/ - Un fichier
.env(basé sur.env.production.example)
- Exécutez le script :
Cela va pull les images, configurer les permissions et lancer les conteneurs.
chmod +x scripts/deploy_unraid.sh ./scripts/deploy_unraid.sh
- Backend : Gérées dans le fichier
.envracine (secrets, DB creds, JWT). - Frontend : Gérées dans
frontend/.env.productionpour les variables publiques (VITE_API_URL).
- Helmet & Rate Limiting sur le backend.
- Nginx configuré comme reverse proxy sécurisé.
- Authentification JWT.
- Scan de vulnérabilités via GitHub Actions (SonarCloud/CodeQL recommandés).
Projet réalisé par Mehdi MP4 et l'équipe.