Skip to content

appen-isen/studysen-backend

Repository files navigation

Studysen Backend

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.

Sommaire

Mise en production / Déploiement

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.

  1. Créer le dossier pour le projet

    mkdir studysen-backend-prod
    cd studysen-backend-prod
  2. Ajouter le fichier .env avec les variables d'environnement nécessaires, notamment pour la connexion à la base de données PostgreSQL et au bucket S3. Un exemple de fichier docker-images/.env.example est 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
  3. Créer le fichier compose.yml, une configuration d'exemple est fournie dans docker-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:
  1. Lancer les conteneurs Docker:

    docker compose up -d
  2. Maintenant, l'API et l'espace clubs seront accessibles selon les ports définis dans le fichier compose.yml.

  3. Pour configurer Nginx, vous pouvez utiliser le script setup_nginx.sh fourni 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
  4. Si vous souhaitez mettre à jour les images Docker, vous pouvez utiliser les commandes suivantes:

    docker compose down
    docker compose pull
    docker compose up -d

Développement

API Studysen

L'API est développée en Node.js avec Express et utilise PostgreSQL comme base de données.

  1. 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
  2. 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 studysen pour permettre l'accès public en lecture aux images. Vous pouvez vous rendre sur http://localhost:9001/buckets/studysen/admin/summary puis modifier Access Policy en Custom et ajouter la politique suivante :
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Effect": "Allow",
    			"Principal": "*",
    			"Action": ["s3:GetObject"],
    			"Resource": ["arn:aws:s3:::studysen/images/*"]
    		}
    	]
    }
  3. Installer les dépendances de l'API:

    npm install
  4. Renommer le fichier .env.example en .env et configurer les variables d'environnement nécessaires, notamment pour la connexion à la base de données PostgreSQL et au bucket S3.

  5. Démarrer l'API en mode développement:

    npm run dev
  6. L'API sera accessible à l'adresse http://localhost:3000/v1.

Migrations de base de données (Drizzle)

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).

Espace Clubs

L'espace clubs est développé en React avec Vite et utilise l'API Studysen pour récupérer les données.

  1. Installer les dépendances du frontend:

    cd espace-clubs
    npm install
  2. Renommer le fichier .env.example en .env et configurer la variable d'environnement VITE_API_URL pour pointer vers l'API Studysen (par défaut en développement, http://localhost:3000/v1).

  3. Démarrer l'espace clubs en mode développement:

    npm run dev
  4. Le frontend sera accessible à l'adresse http://localhost:5173.

Construire l'image Docker

  1. Pour construire l'image Docker du backend, vous devez vous placer dans le dossier docker-images:

    cd docker-images
  2. Si besoin, vous pouvez modifier le fichier compose.yml pour envoyer les images Docker vers un autre compte DockerHub. Par défaut, il est configuré pour envoyer les images vers le compte appen-isen.

  3. Ensuite, vous pouvez construire l'image Docker avec la commande suivante:

    docker compose build
  4. 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •