Studysen Backend est un projet open source visant à fournir une API pour la gestion des clubs étudiants, ainsi qu'un espace dédié aux clubs pour gérer leurs posts et événements. Il est développé en Node.js avec Express et utilise PostgreSQL comme base de données, ainsi qu'un bucket compatible S3 pour le stockage d'images. Il s'agit de l'API utilisée par l'application mobile Studysen.
Le backend de Studysen peut être facilement déployé sur n'importe quel serveur en utilisant Docker. Ici nous utiliserons les images préconstruites depuis le registre DockerHub.
-
Créer le dossier pour le projet
mkdir studysen-backend-prod cd studysen-backend-prod -
Ajouter le fichier
.envavec les variables d'environnement nécessaires, notamment pour la connexion à la base de données PostgreSQL et au bucket S3. Un exemple de fichierdocker-images/.env.exampleest fourni dans le dépôt. Il est de la forme:# Base de données PostgreSQL DB_HOST=db # Pour accéder à la base de données du même réseau Docker DB_USER=YOUR_DB_USER DB_PASSWORD=YOUR_DB_PASSWORD DB_NAME=studysen DB_PORT=5432 # Bucket S3 pour le stockage des images (CDN) CDN_URL=https://cdn.studysen.fr R2_ENDPOINT=http://localhost:9000 R2_ACCESS_KEY_ID=your_access_key R2_SECRET_ACCESS_KEY=your_secret_key R2_REGION=auto R2_BUCKET_NAME=studysen # Envoi des emails via SMTP SMTP_HOST=ssl0.ovh.net SMTP_SECURE=true SMTP_PORT=465 SMTP_USER=contact@studysen.fr SMTP_PASSWORD=your_mail_password FROM_MAIL=contact@studysen.fr # Token pour l'API GitHub (pour la création d'issues) GITHUB_ISSUE_TOKEN=your_github_token # Clé secrète pour la génération de JWT (JSON Web Tokens) pour l'authentification JWT_SECRET=your_jwt_secret # Clé secrète pour l'authentification des administrateurs ADMIN_KEY=your_admin_key
-
Créer le fichier
compose.yml, une configuration d'exemple est fournie dansdocker-images/compose-example.yml:
version: '3.8'
# Fichier Docker Compose pour la production.
# Veiller à ce que le fichier .env soit configuré avec les bonnes variables d'environnement.
services:
db:
image: postgres
container_name: prod_postgres
restart: unless-stopped
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_NAME}
volumes:
- pgdata:/var/lib/postgresql/data
networks:
- app-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"]
interval: 10s
timeout: 5s
retries: 5
backend:
container_name: studysen_api
restart: unless-stopped
image: docker.io/appenisen/studysen_api:latest
environment:
- NODE_ENV=production
env_file:
- .env
ports:
- "3000:3000"
depends_on:
db:
condition: service_healthy
networks:
- app-network
frontend:
container_name: espace_clubs
restart: unless-stopped
image: docker.io/appenisen/studysen_espace_clubs:latest
ports:
- "5173:5173"
depends_on:
- backend
networks:
- app-network
volumes:
pgdata:
networks:
app-network:-
Lancer les conteneurs Docker:
docker compose up -d
-
Maintenant, l'API et l'espace clubs seront accessibles selon les ports définis dans le fichier
compose.yml. -
Pour configurer Nginx, vous pouvez utiliser le script
setup_nginx.shfourni dans le dépôt. Ce script crée les fichiers de configuration Nginx nécessaires et active les sites.chmod +x setup_nginx.sh sudo ./setup_nginx.sh
-
Si vous souhaitez mettre à jour les images Docker, vous pouvez utiliser les commandes suivantes:
docker compose down docker compose pull docker compose up -d
L'API est développée en Node.js avec Express et utilise PostgreSQL comme base de données.
-
Démarrer les conteneurs Docker de développement en local pour la base de données PostgreSQL et le bucket S3 avec MinIO:
docker-compose up -d
-
Configurer le bucket S3 avec MinIO:
- On ouvre l'interface web de MinIO à l'adresse http://localhost:9001
- On se connecte avec les identifiants
minioadmin:minioadmin - On crée un bucket nommé
studysen - On crée une access key et une secret key depuis http://localhost:9001/access-keys/ pour ensuite les ajouter dans le fichier
.env - On modifie l'access policy du bucket
studysenpour permettre l'accès public en lecture aux images. Vous pouvez vous rendre sur http://localhost:9001/buckets/studysen/admin/summary puis modifierAccess PolicyenCustomet ajouter la politique suivante :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": ["arn:aws:s3:::studysen/images/*"] } ] } -
Installer les dépendances de l'API:
npm install
-
Renommer le fichier
.env.exampleen.envet configurer les variables d'environnement nécessaires, notamment pour la connexion à la base de données PostgreSQL et au bucket S3. -
Démarrer l'API en mode développement:
npm run dev
-
L'API sera accessible à l'adresse http://localhost:3000/v1.
Le schéma SQL est défini dans db/schema.ts et les migrations sont gérées avec Drizzle.
-
Première initialisation (création du schéma à partir de
db/schema.ts) :npx drizzle-kit push
-
Après avoir modifié
db/schema.ts, générez une migration SQL :npx drizzle-kit generate
Les migrations générées sont ensuite appliquées au démarrage via la configuration existante (dossier ./drizzle).
L'espace clubs est développé en React avec Vite et utilise l'API Studysen pour récupérer les données.
-
Installer les dépendances du frontend:
cd espace-clubs npm install -
Renommer le fichier
.env.exampleen.envet configurer la variable d'environnementVITE_API_URLpour pointer vers l'API Studysen (par défaut en développement, http://localhost:3000/v1). -
Démarrer l'espace clubs en mode développement:
npm run dev
-
Le frontend sera accessible à l'adresse http://localhost:5173.
-
Pour construire l'image Docker du backend, vous devez vous placer dans le dossier
docker-images:cd docker-images -
Si besoin, vous pouvez modifier le fichier
compose.ymlpour envoyer les images Docker vers un autre compte DockerHub. Par défaut, il est configuré pour envoyer les images vers le compteappen-isen. -
Ensuite, vous pouvez construire l'image Docker avec la commande suivante:
docker compose build
-
Pour pousser l'image Docker vers DockerHub, vous pouvez utiliser la commande suivante:
docker compose push
Désormais, vous pouvez utiliser l'image Docker construite pour déployer le backend de Studysen sur n'importe quel serveur avec Docker. Si vous souhaitez la mettre en production, la documentation se trouve ici