From aae5d27d8c556c5687951f3a04e01d42f69f3085 Mon Sep 17 00:00:00 2001 From: Luc SORIGNET Date: Sun, 16 Feb 2025 14:22:34 +0100 Subject: [PATCH] refactor: Injection des env var dans le frontend --- Front-End/Dockerfile | 4 ++- Front-End/docker/entrypoint.sh | 58 ++++++++++++++++++++++++++++++++++ docker-compose.prod.yml | 28 ++++++++-------- 3 files changed, 76 insertions(+), 14 deletions(-) create mode 100644 Front-End/docker/entrypoint.sh diff --git a/Front-End/Dockerfile b/Front-End/Dockerfile index d6a82ba..b45ca09 100644 --- a/Front-End/Dockerfile +++ b/Front-End/Dockerfile @@ -29,8 +29,10 @@ ENV NODE_ENV=production COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static COPY --from=builder /app/messages ./messages +COPY docker/entrypoint.sh /app/entrypoint.sh EXPOSE 3000 -CMD ["node", "server.js"] +ENTRYPOINT ["/app/entrypoint.sh"] + # Final stage selection FROM ${BUILD_MODE} diff --git a/Front-End/docker/entrypoint.sh b/Front-End/docker/entrypoint.sh new file mode 100644 index 0000000..b1d3ccd --- /dev/null +++ b/Front-End/docker/entrypoint.sh @@ -0,0 +1,58 @@ +#!/bin/sh + +# Configuration des chemins +CONFIG_FILE="/app/server.js" +TEMP_FILE="/app/server.tmp.js" +ENV_FILE="/app/.env" + +# Fonction pour échapper les caractères spéciaux +escape_value() { + echo "$1" | sed 's/[\/&]/\\&/g' +} + +# Copie initiale du fichier +cp $CONFIG_FILE $TEMP_FILE + +# Lecture du fichier .env s'il existe +if [ -f "$ENV_FILE" ]; then + echo "📄 Lecture des variables depuis ${ENV_FILE}" + + while IFS='=' read -r key value || [ -n "$key" ]; do + # Ignorer les lignes vides ou commentaires + case $key in + ''|\#*) continue ;; + esac + + # Nettoyage des variables + key=$(echo "$key" | tr -d ' ') + value=$(echo "$value" | tr -d '"' | tr -d "'") + + # Vérifier si c'est une variable NEXT_PUBLIC + case $key in + NEXT_PUBLIC_*) + escaped_value=$(escape_value "$value") + sed -i "s|\"${key}\":\"[^\"]*\"|\"${key}\":\"${escaped_value}\"|g" $TEMP_FILE + echo "Configuration depuis .env : ${key}=${value}" + ;; + esac + done < "$ENV_FILE" +fi + +# Parcours des variables d'environnement (priorité sur .env) +echo "Vérification des variables d'environnement" +env | grep '^NEXT_PUBLIC_' | while read -r line; do + var_name=$(echo "$line" | cut -d= -f1) + var_value=$(echo "$line" | cut -d= -f2-) + + escaped_value=$(escape_value "$var_value") + sed -i "s|\"${var_name}\":\"[^\"]*\"|\"${var_name}\":\"${escaped_value}\"|g" $TEMP_FILE + echo "Override depuis ENV : ${var_name}=${var_value}" +done + +# Mise à jour du fichier de configuration +mv $TEMP_FILE $CONFIG_FILE +echo "Configuration mise à jour avec succès" + +# Démarrage du serveur +echo "Démarrage du serveur Next.js" +exec node server.js \ No newline at end of file diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index cf84c25..d77a9cd 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -1,5 +1,3 @@ -version: '3' - services: redis: image: 'redis:latest' @@ -13,32 +11,36 @@ services: expose: - 5432 environment: - POSTGRES_USER: ${DB_USER} - POSTGRES_PASSWORD: ${DB_PASSWORD} + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres POSTGRES_DB: school TZ: Europe/Paris backend: - build: - context: ./Back-End - target: production - expose: - - 8080 + image: git.v0id.ovh/n3wt-innov/n3wt-school/backend:latest + ports: + - 8080:8080 environment: - TZ=Europe/Paris - - TEST_MODE=False + - TEST_MODE=True + links: + - "database:database" + - "redis:redis" depends_on: - redis - database + volumes: + - ./conf/application.json:/Back-End/Subscriptions/Configuration/application.json + command: python start.py frontend: - build: - context: ./Front-End - target: production + image: git.v0id.ovh/n3wt-innov/n3wt-school/frontend:latest ports: - 3000:3000 environment: - TZ=Europe/Paris - NODE_ENV=production + volumes: + - ./conf/env:/app/.env depends_on: - backend \ No newline at end of file