فهرست منبع

prod environnement config

DESKTOP-SMCIPAV\falko 5 ماه پیش
والد
کامیت
b1709a6b71

+ 95 - 57
Jenkinsfile

@@ -1,63 +1,56 @@
 pipeline {
     agent any
+
     environment {
         NODEJS_HOME = "${tool 'NodeJS'}"
         PATH = "${env.NODEJS_HOME}/bin:${env.PATH}"
-        DEV_URL = "dev.foodgame.fr"
-        PREPROD_URL = "preprod.foodgame.fr"
-        PROD_URL = "prod.foodgame.fr"
+
+        DOCKER_REGISTRY = "nexus.foodgame.fr:8123"
+        IMAGE_NAME = "fatboar_repo/workflow_jenkins_1"
+        IMAGE_TAG = "latest"
     }
-    stages {
-        
 
-        stage('Docker Registry Login, Pull, and Push') {
-            when {
-                branch 'dev'
-            }
+    stages {
+        stage('Select Environment') {
             steps {
                 script {
-                    def registryUrl = 'nexus.foodgame.fr:8123'
-                    def imageName = 'quay.io/prometheus/node-exporter'
-                    def imageVersion = 'latest'
-                    
-                    docker.withRegistry("https://${registryUrl}", 'nexus') {
-                        try {
-                            // Try pulling the image from the registry
-                            echo "Trying to pull image: ${registryUrl}/${imageName}:${imageVersion}"
-                            docker.image("${registryUrl}/${imageName}:${imageVersion}").pull()
-                        } catch (Exception e) {
-                            echo "Image pull failed. Attempting to build and push."
-
-                            // Pull base image from Docker Hub
-                            echo "Pulling base image: ${imageName}:${imageVersion}"
-                            sh "docker pull ${imageName}:${imageVersion}"
-                            
-                            // Tag the image for the private registry
-                            echo "Tagging image for private registry"
-                            sh "docker tag ${imageName}:${imageVersion} ${registryUrl}/${imageName}:${imageVersion}"
-                            
-                            // Push the tagged image to the private registry
-                            echo "Pushing image to private registry"
-                            sh "docker push ${registryUrl}/${imageName}:${imageVersion}"
-                        }
+                    if (env.BRANCH_NAME == 'feature') {
+                        env.ENV = 'dev'
+                        env.COMPOSE_FILE = 'docker-compose.dev.yml'
+                        env.URL = "dev.foodgame.fr"
+                        env.BACKUP_CONTAINER = "mongodb-backup-dev"
+                    } else if (env.BRANCH_NAME == 'dev') {
+                        env.ENV = 'preprod'
+                        env.COMPOSE_FILE = 'docker-compose.preprod.yml'
+                        env.URL = "preprod.foodgame.fr"
+                        env.BACKUP_CONTAINER = "mongodb-backup-preprod"
+                    } else if (env.BRANCH_NAME == 'master') {
+                        env.ENV = 'prod'
+                        env.COMPOSE_FILE = 'docker-compose.prod.yml'
+                        env.URL = "fatboar.foodgame.fr"
+                        env.BACKUP_CONTAINER = "mongodb-backup-prod"
+                    } else {
+                        error "Branche non gérée : ${env.BRANCH_NAME}"
                     }
+                    echo "Déploiement sur l'environnement ${env.ENV} (${env.URL})"
                 }
             }
         }
-        stage('Stop Containers') {
+
+        stage('Install Dependencies & Test') {
             steps {
                 sh '''
-                 docker ps | grep "workflow_" -v | awk -F " " '{ if(NR>1) print $1}' | xargs docker kill || true
-                docker system prune -f
-               '''
+                    npm install --legacy-peer-deps
+                    npm run test -- --no-watch --no-progress --browsers=ChromeHeadless
+                '''
             }
-       }
+        }
 
-       stage('SonarQube Analysis') {
+        stage('SonarQube Analysis') {
             steps {
                 script {
-                    def scannerHome = tool name: 'SonarQube Scanner', type: 'hudson.plugins.sonar.SonarRunnerInstallation';
-                    withSonarQubeEnv('SonarQube') { // Nom du serveur SonarQube configuré dans Jenkins
+                    def scannerHome = tool name: 'SonarQube Scanner', type: 'hudson.plugins.sonar.SonarRunnerInstallation'
+                    withSonarQubeEnv('SonarQube') {
                         sh """
                         ${scannerHome}/bin/sonar-scanner \
                         -Dsonar.projectKey=FatboarProject-${env.BRANCH_NAME} \
@@ -69,38 +62,83 @@ pipeline {
                 }
             }
         }
-         
-       stage('Build & Deploy') {
-           steps {
-            sh '''
-               docker-compose stop
-               docker-compose build --no-cache
-               docker-compose up -d --force-recreate --remove-orphans
-               '''
-  }
-}
 
-        
+        stage('Stop & Clean Containers') {
+            steps {
+                sh """
+                    docker ps | grep "workflow_" -v | awk '{if(NR>1) print \$1}' | xargs docker kill || true
+                    docker-compose -f ${env.COMPOSE_FILE} down || true
+                    docker system prune -f
+                """
+            }
+        }
+
+        stage('Build & Deploy') {
+            steps {
+                sh """
+                    docker-compose -f ${env.COMPOSE_FILE} build --no-cache
+                    docker-compose -f ${env.COMPOSE_FILE} up -d --force-recreate --remove-orphans
+                """
+            }
+        }
+
+        // stage('Backup') {
+        //     steps {
+        //         script {
+        //             echo "Lancement du backup sur le container ${env.BACKUP_CONTAINER}"
+        //             def backupCmd = "docker exec ${env.BACKUP_CONTAINER} /backup.sh || echo '⚠️ Backup ${env.ENV.toUpperCase()} échoué'"
+        //             sh backupCmd
+        //         }
+        //     }
+        // }
+
+        stage('Push to Private Registry (Optional)') {
+            when {
+                anyOf {
+                    branch 'dev'
+                    branch 'master'
+                }
+            }
+            steps {
+                script {
+                    docker.withRegistry("https://${DOCKER_REGISTRY}", 'nexus') {
+                        try {
+                            echo "Pull image from registry"
+                            docker.image("${DOCKER_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}").pull()
+                        } catch (Exception e) {
+                            echo "Build and push image"
+                            sh """
+                                docker pull ${IMAGE_NAME}:${IMAGE_TAG}
+                                docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${DOCKER_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}
+                                docker push ${DOCKER_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}
+                            """
+                        }
+                    }
+                }
+            }
+        }
     }
+
     post {
         success {
-            echo "Pipeline exécutée avec succès pour la branche ${env.BRANCH_NAME}."
+            echo "✅ Déploiement réussi sur ${env.ENV} !"
         }
         failure {
-            echo "Échec du pipeline pour la branche ${env.BRANCH_NAME}."
+            echo "❌ Échec du pipeline sur ${env.ENV}."
         }
     }
 }
 
 
 
+
 // pipeline {
 //     agent any
 //     environment {
 //         NODEJS_HOME = "${tool 'NodeJS'}"
 //         PATH = "${env.NODEJS_HOME}/bin:${env.PATH}"
 //         DEV_URL = "dev.foodgame.fr"
-//         PREPROD_URL = "preprod.foodgame.fr"
+//         dev_URL = "dev.foodgame.fr"
 //         PROD_URL = "prod.foodgame.fr"
 //     }
 //     stages {
@@ -111,7 +149,7 @@ pipeline {
 //                     if (env.BRANCH_NAME == 'test') {
 //                         echo "Déploiement sur DEV (${DEV_URL})"
 //                     } else if (env.BRANCH_NAME == 'dev') {
-//                         echo "Déploiement sur PREPROD (${PREPROD_URL})"
+//                         echo "Déploiement sur dev (${dev_URL})"
 //                     } else if (env.BRANCH_NAME == 'master') {
 //                         echo "Déploiement sur PROD (${PROD_URL})"
 //                     } else {
@@ -254,7 +292,7 @@ pipeline {
 // //     }
 	
 	
-// // 	// stage("Push preprod images to nexus")
+// // 	// stage("Push dev images to nexus")
 // // 	// {
 // // 	// 	docker.withRegistry('http://localhost:8083','885ef60c-9352-489a-bd1c-e4b695747c21')
 // // 	// 	{

+ 5 - 5
README.md

@@ -159,15 +159,15 @@ https://nexus.foodgame.fr/nexus/#welcome
 user : admin
 Mp : azerty10
 
-# Angular(Preprod)
+# Angular(prod)
 
-https://angular-preprod.foodgame.fr
+https://angular-prod.foodgame.fr
 http://51.159.4.88:8080
 
-# Express(Preprod)
+# Express(prod)
 
-Base Api: https://api-preprod.foodgame.fr
-Metrics: https://api-preprod.foodgame.fr/metrics
+Base Api: https://api-prod.foodgame.fr
+Metrics: https://api-prod.foodgame.fr/metrics
 
 # Angular(Prod)
 

+ 4 - 4
angular-client/dist/fatboar/browser/index.html

@@ -17,18 +17,18 @@
   <!-- Open Graph / Facebook -->
   <meta property="og:title" content="Fatboar - Jeu-Concours">
   <meta property="og:description" content="Tentez votre chance pour gagner un Range Rover et d’autres prix avec Fatboar.">
-  <meta property="og:image" content="https://angular-preprod.foodgame.fr/assets/fatboar-og.jpg">
-  <meta property="og:url" content="https://angular-preprod.foodgame.fr">
+  <meta property="og:image" content="https://angular-prod.foodgame.fr/assets/fatboar-og.jpg">
+  <meta property="og:url" content="https://angular-prod.foodgame.fr">
   <meta property="og:type" content="website">
 
   <!-- Twitter Card -->
   <meta name="twitter:card" content="summary_large_image">
   <meta name="twitter:title" content="Fatboar - Jeu-Concours">
   <meta name="twitter:description" content="Tentez votre chance pour gagner un Range Rover et d’autres prix avec Fatboar.">
-  <meta name="twitter:image" content="https://angular-preprod.foodgame.fr/assets/fatboar-og.jpg">
+  <meta name="twitter:image" content="https://angular-prod.foodgame.fr/assets/fatboar-og.jpg">
 
   <!-- Canonical & favicon -->
-  <link rel="canonical" href="https://angular-preprod.foodgame.fr">
+  <link rel="canonical" href="https://angular-prod.foodgame.fr">
   <link rel="icon" type="image/x-icon" href="favicon.ico">
 
   <!-- Fonts & Icons -->

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
angular-client/dist/fatboar/browser/main-es2015.77a0e20b2011c790bc35.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
angular-client/dist/fatboar/browser/main-es5.77a0e20b2011c790bc35.js


+ 1 - 1
angular-client/dist/fatboar/browser/robots.txt

@@ -18,4 +18,4 @@ Disallow: /admin
 # Disallow: /auth ← à commenter ou supprimer si accessible publiquement
 
 # Sitemap pour Google
-Sitemap: https://angular-preprod.foodgame.fr/sitemap.xml
+Sitemap: https://angular-prod.foodgame.fr/sitemap.xml

+ 8 - 8
angular-client/dist/fatboar/browser/sitemap.xml

@@ -2,52 +2,52 @@
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
   <!-- Accueil -->
   <url>
-    <loc>https://angular-preprod.foodgame.fr/</loc>
+    <loc>https://angular-prod.foodgame.fr/</loc>
     <changefreq>daily</changefreq>
     <priority>1.0</priority>
   </url>
 
   <!-- Inscription (OK pour l’indexation) -->
   <url>
-    <loc>https://angular-preprod.foodgame.fr/register</loc>
+    <loc>https://angular-prod.foodgame.fr/register</loc>
     <changefreq>weekly</changefreq>
     <priority>0.8</priority>
   </url>
 
   <!-- Pages d'information légales (OK pour indexation) -->
   <url>
-    <loc>https://angular-preprod.foodgame.fr/cgu</loc>
+    <loc>https://angular-prod.foodgame.fr/cgu</loc>
     <changefreq>monthly</changefreq>
     <priority>0.6</priority>
   </url>
   <url>
-    <loc>https://angular-preprod.foodgame.fr/mention-legales</loc>
+    <loc>https://angular-prod.foodgame.fr/mention-legales</loc>
     <changefreq>monthly</changefreq>
     <priority>0.6</priority>
   </url>
   <url>
-    <loc>https://angular-preprod.foodgame.fr/politique-de-confidentialite</loc>
+    <loc>https://angular-prod.foodgame.fr/politique-de-confidentialite</loc>
     <changefreq>monthly</changefreq>
     <priority>0.6</priority>
   </url>
 
   <!-- Contact (OK) -->
   <url>
-    <loc>https://angular-preprod.foodgame.fr/contact</loc>
+    <loc>https://angular-prod.foodgame.fr/contact</loc>
     <changefreq>monthly</changefreq>
     <priority>0.6</priority>
   </url>
 
   <!-- Tirage (visible publiquement ?) -->
   <url>
-    <loc>https://angular-preprod.foodgame.fr/tirage</loc>
+    <loc>https://angular-prod.foodgame.fr/tirage</loc>
     <changefreq>weekly</changefreq>
     <priority>0.6</priority>
   </url>
 
   <!-- Auth (si accessible publiquement) -->
   <url>
-    <loc>https://angular-preprod.foodgame.fr/auth</loc>
+    <loc>https://angular-prod.foodgame.fr/auth</loc>
     <changefreq>weekly</changefreq>
     <priority>0.7</priority>
   </url>

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
angular-client/dist/fatboar/server/main.js


+ 2 - 2
angular-client/server.ts

@@ -57,7 +57,7 @@ export function app() {
       providers: [
         { provide: APP_BASE_HREF, useValue: req.baseUrl },
         // Fournit l'URL canonique pour les balises <link rel="canonical">
-        { provide: 'CANONICAL_URL', useValue: `https://angular-preprod.foodgame.fr${req.originalUrl}` }
+        { provide: 'CANONICAL_URL', useValue: `https://angular-prod.foodgame.fr${req.originalUrl}` }
       ]
     });
   });
@@ -136,7 +136,7 @@ export * from './src/main.server';
 //       req,
 //       providers: [
 //         { provide: APP_BASE_HREF, useValue: req.baseUrl },
-//         { provide: 'CANONICAL_URL', useValue: `https://angular-preprod.foodgame.fr${req.originalUrl}` }
+//         { provide: 'CANONICAL_URL', useValue: `https://angular-prod.foodgame.fr${req.originalUrl}` }
 //       ]
 //     });
 //   });

+ 10 - 10
angular-client/src/app/app-routing.module.ts.rej

@@ -68,7 +68,7 @@ diff a/angular-client/src/app/app-routing.module.ts b/angular-client/src/app/app
 +      keywords: 'fatboar, concours, range rover, burgers, menus, réductions, restauration',
 +      ogTitle: 'Grand Jeu-Concours Fatboar',
 +      ogDescription: 'Tentez votre chance pour gagner un Range Rover et d’autres prix sur Fatboar.',
-+      ogImage: 'https://angular-preprod.foodgame.fr/assets/img/concours/range.png'
++      ogImage: 'https://angular-prod.foodgame.fr/assets/img/concours/range.png'
 +    }
 +  },
 +  { 
@@ -80,7 +80,7 @@ diff a/angular-client/src/app/app-routing.module.ts b/angular-client/src/app/app
 +      keywords: 'fatboar, concours, range rover, burgers, menus, réductions, restauration',
 +      ogTitle: 'Grand Jeu-Concours Fatboar',
 +      ogDescription: 'Tentez votre chance pour gagner un Range Rover et d’autres prix sur Fatboar.',
-+      ogImage: 'https://angular-preprod.foodgame.fr/assets/img/concours/range.png'
++      ogImage: 'https://angular-prod.foodgame.fr/assets/img/concours/range.png'
 +    }
 +  },
 +  { 
@@ -122,7 +122,7 @@ diff a/angular-client/src/app/app-routing.module.ts b/angular-client/src/app/app
 +      keywords: 'fatboar, inscription, concours, restauration',
 +      ogTitle: 'Inscription - Fatboar',
 +      ogDescription: 'Rejoignez Fatboar pour participer à nos concours exclusifs.',
-+      ogImage: 'https://angular-preprod.foodgame.fr/assets/fatboar-og.jpg'
++      ogImage: 'https://angular-prod.foodgame.fr/assets/fatboar-og.jpg'
 +    }
 +  },
 +  { 
@@ -134,7 +134,7 @@ diff a/angular-client/src/app/app-routing.module.ts b/angular-client/src/app/app
 +      keywords: 'fatboar, cgu, conditions générales, restauration',
 +      ogTitle: 'CGU - Fatboar',
 +      ogDescription: 'Conditions générales d’utilisation de Fatboar.',
-+      ogImage: 'https://angular-preprod.foodgame.fr/assets/fatboar-og.jpg'
++      ogImage: 'https://angular-prod.foodgame.fr/assets/fatboar-og.jpg'
 +    }
 +  },
 +  { 
@@ -146,7 +146,7 @@ diff a/angular-client/src/app/app-routing.module.ts b/angular-client/src/app/app
 +      keywords: 'fatboar, mentions légales, restauration',
 +      ogTitle: 'Mentions Légales - Fatboar',
 +      ogDescription: 'Mentions légales de Fatboar.',
-+      ogImage: 'https://angular-preprod.foodgame.fr/assets/fatboar-og.jpg'
++      ogImage: 'https://angular-prod.foodgame.fr/assets/fatboar-og.jpg'
 +    }
 +  },
 +  { 
@@ -158,7 +158,7 @@ diff a/angular-client/src/app/app-routing.module.ts b/angular-client/src/app/app
 +      keywords: 'fatboar, politique de confidentialité, données personnelles',
 +      ogTitle: 'Politique de Confidentialité - Fatboar',
 +      ogDescription: 'Politique de confidentialité de Fatboar.',
-+      ogImage: 'https://angular-preprod.foodgame.fr/assets/fatboar-og.jpg'
++      ogImage: 'https://angular-prod.foodgame.fr/assets/fatboar-og.jpg'
 +    }
 +  },
 +  { 
@@ -170,7 +170,7 @@ diff a/angular-client/src/app/app-routing.module.ts b/angular-client/src/app/app
 +      keywords: 'fatboar, contact, assistance, restauration',
 +      ogTitle: 'Contact - Fatboar',
 +      ogDescription: 'Contactez Fatboar pour toute question.',
-+      ogImage: 'https://angular-preprod.foodgame.fr/assets/fatboar-og.jpg'
++      ogImage: 'https://angular-prod.foodgame.fr/assets/fatboar-og.jpg'
 +    }
 +  },
 +  { 
@@ -182,7 +182,7 @@ diff a/angular-client/src/app/app-routing.module.ts b/angular-client/src/app/app
 +      keywords: 'fatboar, tirages, concours, restauration',
 +      ogTitle: 'Tirages - Fatboar',
 +      ogDescription: 'Découvrez les tirages en cours sur Fatboar.',
-+      ogImage: 'https://angular-preprod.foodgame.fr/assets/fatboar-og.jpg'
++      ogImage: 'https://angular-prod.foodgame.fr/assets/fatboar-og.jpg'
 +    }
 +  },
 +  { 
@@ -281,7 +281,7 @@ diff a/angular-client/src/app/app-routing.module.ts b/angular-client/src/app/app
 +  //     keywords: 'fatboar, tirage, concours, restauration',
 +  //     ogTitle: 'Tirage - Fatboar',
 +  //     ogDescription: 'Détails d’un tirage sur Fatboar.',
-+  //     ogImage: 'https://angular-preprod.foodgame.fr/assets/fatboar-og.jpg'
++  //     ogImage: 'https://angular-prod.foodgame.fr/assets/fatboar-og.jpg'
 +  //   }
 +  // },
 +  // Activer si /restaurants/:id existe
@@ -294,7 +294,7 @@ diff a/angular-client/src/app/app-routing.module.ts b/angular-client/src/app/app
 +  //     keywords: 'fatboar, restaurant, restauration',
 +  //     ogTitle: 'Restaurant - Fatboar',
 +  //     ogDescription: 'Détails d’un restaurant Fatboar.',
-+  //     ogImage: 'https://angular-preprod.foodgame.fr/assets/fatboar-og.jpg'
++  //     ogImage: 'https://angular-prod.foodgame.fr/assets/fatboar-og.jpg'
 +  //   }
 +  // }
  ];

+ 1 - 1
angular-client/src/app/app.component.ts

@@ -47,7 +47,7 @@ export class AppComponent implements OnInit {
       }
 
       // 🔹 Ajoute ou met à jour la balise <link rel="canonical">
-      this.seoService.setCanonical(`https://angular-preprod.foodgame.fr${this.router.url}`);
+      this.seoService.setCanonical(`https://angular-prod.foodgame.fr${this.router.url}`);
     });
   }
 }

+ 6 - 6
angular-client/src/app/components/home/home.component.ts

@@ -33,7 +33,7 @@ export class HomeComponent implements OnInit {
         addressCountry: 'FR'
       }
     },
-    image: 'https://angular-preprod.foodgame.fr/assets/img/concours/range.png',
+    image: 'https://angular-prod.foodgame.fr/assets/img/concours/range.png',
     offers: {
       '@type': 'Offer',
       name: 'Participation au concours',
@@ -41,12 +41,12 @@ export class HomeComponent implements OnInit {
       priceCurrency: 'EUR',
       availability: 'https://schema.org/InStock',
       validFrom: '2020-07-16',
-      url: 'https://angular-preprod.foodgame.fr'
+      url: 'https://angular-prod.foodgame.fr'
     },
     organizer: {
       '@type': 'Organization',
       name: 'Fatboar',
-      url: 'https://angular-preprod.foodgame.fr'
+      url: 'https://angular-prod.foodgame.fr'
     }
   };
 
@@ -129,7 +129,7 @@ export class HomeComponent implements OnInit {
 //         addressCountry: 'FR'
 //       }
 //     },
-//     image: 'https://angular-preprod.foodgame.fr/assets/img/concours/range.png',
+//     image: 'https://angular-prod.foodgame.fr/assets/img/concours/range.png',
 //     offers: {
 //       '@type': 'Offer',
 //       name: 'Participation au concours',
@@ -137,12 +137,12 @@ export class HomeComponent implements OnInit {
 //       priceCurrency: 'EUR',
 //       availability: 'https://schema.org/InStock',
 //       validFrom: '2020-07-16',
-//       url: 'https://angular-preprod.foodgame.fr'
+//       url: 'https://angular-prod.foodgame.fr'
 //     },
 //     organizer: {
 //       '@type': 'Organization',
 //       name: 'Fatboar',
-//       url: 'https://angular-preprod.foodgame.fr'
+//       url: 'https://angular-prod.foodgame.fr'
 //     }
 //   };
 

+ 6 - 6
angular-client/src/app/services/auth.service.ts

@@ -52,7 +52,7 @@ export class AuthService {
   }
 
   signIn(credentials): Observable<Token> {
-    return this.http.post<Token>(`https://api-preprod.foodgame.fr/api/auth/login`, credentials)
+    return this.http.post<Token>(`https://api-prod.foodgame.fr/api/auth/login`, credentials)
       .pipe(map(token => {
         this.storageService.setItem('token', JSON.stringify(token));
         this.tokenSubject.next(token);
@@ -71,7 +71,7 @@ export class AuthService {
   }
 
   signInAdmin(credentials): Observable<Token> {
-    return this.http.post<Token>(`https://api-preprod.foodgame.fr/api/auth/admin`, credentials)
+    return this.http.post<Token>(`https://api-prod.foodgame.fr/api/auth/admin`, credentials)
       .pipe(map(token => {
         this.storageService.setItem('token', JSON.stringify(token));
         this.tokenSubject.next(token);
@@ -80,7 +80,7 @@ export class AuthService {
   }
 
   signUP(data): Observable<Token> {
-    return this.http.post<Token>(`https://api-preprod.foodgame.fr/api/auth/signup`, data)
+    return this.http.post<Token>(`https://api-prod.foodgame.fr/api/auth/signup`, data)
       .pipe(map(token => {
         this.storageService.setItem('token', JSON.stringify(token));
         this.tokenSubject.next(token);
@@ -89,11 +89,11 @@ export class AuthService {
   }
 
   lostPassword(email): Observable<any> {
-    return this.http.put<any>(`https://api-preprod.foodgame.fr/api/auth/forgot-password`, email);
+    return this.http.put<any>(`https://api-prod.foodgame.fr/api/auth/forgot-password`, email);
   }
 
   resetPassword(data): Observable<any> {
-    return this.http.put<any>(`https://api-preprod.foodgame.fr/api/auth/reset-password`, data);
+    return this.http.put<any>(`https://api-prod.foodgame.fr/api/auth/reset-password`, data);
   }
 
   public isLoggedIn() {
@@ -123,7 +123,7 @@ export class AuthService {
 
   getUserInfo(): Observable<User> {
     let decodedToken: payloadToken = jwt_decode(this.tokenSubject.value.token); 
-    return this.http.get<User>(`https://api-preprod.foodgame.fr/api/users/${decodedToken.userId}`)
+    return this.http.get<User>(`https://api-prod.foodgame.fr/api/users/${decodedToken.userId}`)
       .pipe(map(user => {
         this.storageService.setItem('user', JSON.stringify(user));
         this.user_infoSubject.next(user);

+ 1 - 1
angular-client/src/app/services/email.service.ts

@@ -16,7 +16,7 @@ export class EmailService {
 
 // send email 
 sendEmail(data : Email, email: string, isgain: string, isactiive: string): Observable<Email> {
-  return this.http.post<Email>(`https://api-preprod.foodgame.fr/api/emails/send?email=${email}&isgain=${isgain}&isactive=${isactiive}`,data);
+  return this.http.post<Email>(`https://api-prod.foodgame.fr/api/emails/send?email=${email}&isgain=${isgain}&isactive=${isactiive}`,data);
 }
 
 

+ 1 - 1
angular-client/src/app/services/restaurants.service.ts

@@ -16,7 +16,7 @@ export class RestaurantsService {
 
   // get users
 getRestaurants(): Observable<Restaurant[]> {
-  return this.http.get<Restaurant[]>(`https://api-preprod.foodgame.fr/api/restaurants`);
+  return this.http.get<Restaurant[]>(`https://api-prod.foodgame.fr/api/restaurants`);
 }
 
 

+ 1 - 1
angular-client/src/environments/environment.prod.ts

@@ -1,4 +1,4 @@
 export const environment = {
   production: true,
-  apiUrl: `https://api-preprod.foodgame.fr`,
+  apiUrl: `https://api-prod.foodgame.fr`,
 };

+ 1 - 1
angular-client/src/environments/environment.ts

@@ -5,7 +5,7 @@
 export const environment = {
   production: false,
   name: "(dev)",
-  apiUrl: `https://api-preprod.foodgame.fr`,
+  apiUrl: `https://api-prod.foodgame.fr`,
 };
 
 /*

+ 4 - 4
angular-client/src/index.html

@@ -17,18 +17,18 @@
   <!-- Open Graph / Facebook -->
   <meta property="og:title" content="Fatboar - Jeu-Concours">
   <meta property="og:description" content="Tentez votre chance pour gagner un Range Rover et d’autres prix avec Fatboar.">
-  <meta property="og:image" content="https://angular-preprod.foodgame.fr/assets/fatboar-og.jpg">
-  <meta property="og:url" content="https://angular-preprod.foodgame.fr">
+  <meta property="og:image" content="https://angular-prod.foodgame.fr/assets/fatboar-og.jpg">
+  <meta property="og:url" content="https://angular-prod.foodgame.fr">
   <meta property="og:type" content="website">
 
   <!-- Twitter Card -->
   <meta name="twitter:card" content="summary_large_image">
   <meta name="twitter:title" content="Fatboar - Jeu-Concours">
   <meta name="twitter:description" content="Tentez votre chance pour gagner un Range Rover et d’autres prix avec Fatboar.">
-  <meta name="twitter:image" content="https://angular-preprod.foodgame.fr/assets/fatboar-og.jpg">
+  <meta name="twitter:image" content="https://angular-prod.foodgame.fr/assets/fatboar-og.jpg">
 
   <!-- Canonical & favicon -->
-  <link rel="canonical" href="https://angular-preprod.foodgame.fr">
+  <link rel="canonical" href="https://angular-prod.foodgame.fr">
   <link rel="icon" type="image/x-icon" href="favicon.ico">
 
   <!-- Fonts & Icons -->

+ 1 - 1
angular-client/src/robots.txt

@@ -18,4 +18,4 @@ Disallow: /admin
 # Disallow: /auth ← à commenter ou supprimer si accessible publiquement
 
 # Sitemap pour Google
-Sitemap: https://angular-preprod.foodgame.fr/sitemap.xml
+Sitemap: https://angular-prod.foodgame.fr/sitemap.xml

+ 8 - 8
angular-client/src/sitemap.xml

@@ -2,52 +2,52 @@
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
   <!-- Accueil -->
   <url>
-    <loc>https://angular-preprod.foodgame.fr/</loc>
+    <loc>https://angular-prod.foodgame.fr/</loc>
     <changefreq>daily</changefreq>
     <priority>1.0</priority>
   </url>
 
   <!-- Inscription (OK pour l’indexation) -->
   <url>
-    <loc>https://angular-preprod.foodgame.fr/register</loc>
+    <loc>https://angular-prod.foodgame.fr/register</loc>
     <changefreq>weekly</changefreq>
     <priority>0.8</priority>
   </url>
 
   <!-- Pages d'information légales (OK pour indexation) -->
   <url>
-    <loc>https://angular-preprod.foodgame.fr/cgu</loc>
+    <loc>https://angular-prod.foodgame.fr/cgu</loc>
     <changefreq>monthly</changefreq>
     <priority>0.6</priority>
   </url>
   <url>
-    <loc>https://angular-preprod.foodgame.fr/mention-legales</loc>
+    <loc>https://angular-prod.foodgame.fr/mention-legales</loc>
     <changefreq>monthly</changefreq>
     <priority>0.6</priority>
   </url>
   <url>
-    <loc>https://angular-preprod.foodgame.fr/politique-de-confidentialite</loc>
+    <loc>https://angular-prod.foodgame.fr/politique-de-confidentialite</loc>
     <changefreq>monthly</changefreq>
     <priority>0.6</priority>
   </url>
 
   <!-- Contact (OK) -->
   <url>
-    <loc>https://angular-preprod.foodgame.fr/contact</loc>
+    <loc>https://angular-prod.foodgame.fr/contact</loc>
     <changefreq>monthly</changefreq>
     <priority>0.6</priority>
   </url>
 
   <!-- Tirage (visible publiquement ?) -->
   <url>
-    <loc>https://angular-preprod.foodgame.fr/tirage</loc>
+    <loc>https://angular-prod.foodgame.fr/tirage</loc>
     <changefreq>weekly</changefreq>
     <priority>0.6</priority>
   </url>
 
   <!-- Auth (si accessible publiquement) -->
   <url>
-    <loc>https://angular-preprod.foodgame.fr/auth</loc>
+    <loc>https://angular-prod.foodgame.fr/auth</loc>
     <changefreq>weekly</changefreq>
     <priority>0.7</priority>
   </url>

+ 2 - 2
build/docker/apache/Dockerfile

@@ -10,10 +10,10 @@ RUN docker-php-ext-install opcache \
     && docker-php-ext-install pdo_mysql 
 
 #COPY $PWD/build/docker/apache/app_php.ini /usr/local/etc/php/conf.d/app_php.ini
-COPY $PWD/build/docker/apache/apache.conf /etc/apache2/sites-available/angular-preprod.foodgame.fr.conf
+COPY $PWD/build/docker/apache/apache.conf /etc/apache2/sites-available/angular-prod.foodgame.fr.conf
 
 RUN a2dissite 000-default default-ssl
-RUN a2ensite angular-preprod.foodgame.fr
+RUN a2ensite angular-prod.foodgame.fr
 RUN a2enmod ssl
 RUN a2enmod proxy proxy_http
 RUN a2enmod rewrite

+ 3 - 3
build/docker/apache/apache.conf

@@ -1,5 +1,5 @@
 <VirtualHost *:80>
-    ServerName angular-preprod.foodgame.fr
+    ServerName angular-prod.foodgame.fr
     DocumentRoot /var/www/html/browser
 
     <Directory /var/www/html/browser>
@@ -24,8 +24,8 @@
 
 <VirtualHost *:443>
    DocumentRoot /var/www/html/browser 
-   ServerName angular-preprod.foodgame.fr
-   ServerAlias angular-preprod.foodgame.fr 
+   ServerName angular-prod.foodgame.fr
+   ServerAlias angular-prod.foodgame.fr 
    #SSLEnable
    #SSLEngine ON
    #SSLCertificateFile path/to/server.crt

+ 3 - 3
build/docker/httpd/httpd.conf

@@ -227,8 +227,8 @@ Group daemon
 <VirtualHost *:80>
     # Le premier serveur virtuel de la liste est aussi le
     # serveur par défaut pour *:80
-    ServerName  angular-preprod.foodgame.fr
-    ServerAlias www.angular-preprod.foodgame.fr
+    ServerName  angular-prod.foodgame.fr
+    ServerAlias www.angular-prod.foodgame.fr
     DocumentRoot "/usr/local/apache2/htdocs/"
     <Directory /usr/local/apache2/htdocs/>
         Options +Indexes +FollowSymlinks
@@ -252,7 +252,7 @@ ServerAdmin you@example.com
 #
 # If your host doesn't have a registered DNS name, enter its IP address here.
 #
-ServerName angular-preprod.foodgame.fr
+ServerName angular-prod.foodgame.fr
 
 #
 # Deny access to the entirety of your server's filesystem. You must

+ 226 - 0
docker-compose.prod.yml

@@ -0,0 +1,226 @@
+version: '3'
+
+networks:
+  private:
+  web:
+    external:
+      name: web
+
+volumes:
+  mongo_data_prod:
+    driver: local
+    driver_opts:
+      type: none
+      o: bind
+      device: /srv/mongo/data_prod
+  mongo_backups_prod:
+    driver: local
+
+services:
+  express_prod:
+    build:
+      context: ./express-server
+    ports:
+      - "4002:4000"
+    networks:
+      - web
+      - private
+    labels:
+      - traefik.enable=true
+      - traefik.http.routers.express_prod.rule=Host(`api-prod.foodgame.fr`)
+      - traefik.http.services.express_prod.loadbalancer.server.port=4000
+      - traefik.http.routers.express_prod.entrypoints=websecure
+      - traefik.http.routers.express_prod.tls.certresolver=myresolver
+    depends_on:
+      - database_prod
+    environment:
+      - MONGODB_URI=mongodb://admin:azerty10@database_prod:27017/mean-fatboar-db?authSource=admin
+    restart: always
+
+  database_prod:
+    image: mongo:4.4.6
+    volumes:
+      - ./backup:/backup
+      - mongo_data_prod:/data/db
+    environment:
+      - MONGO_INITDB_ROOT_USERNAME=admin
+      - MONGO_INITDB_ROOT_PASSWORD=azerty10
+      - MONGO_INITDB_DATABASE=mean-fatboar-db
+    networks:
+      - private
+    restart: always
+
+  mongodb-backup-prod:
+    image: tiredofit/mongodb-backup:latest
+    container_name: mongodb-backup-prod
+    volumes:
+      - mongo_backups_prod:/backup
+    environment:
+      - MONGODB_HOST=database_prod
+      - MONGODB_PORT=27017
+      - MONGODB_USER=admin
+      - MONGODB_PASS=azerty10
+      - MONGODB_AUTHENTICATION_DATABASE=admin
+      - BACKUP_LOCATION=/backup
+      - BACKUP_COMPRESSION=GZIP
+      - BACKUP_SPLIT_DB=TRUE
+      - BACKUP_BEGIN=TRUE
+      - SCHEDULE=*/30 * * * *
+      - BACKUP_RETAIN_DAYS=7
+      - BACKUP_CLEANUP_TIME=0430
+      - NOTIFICATION_TYPE=none
+      - DEBUG_MODE=TRUE
+      - CONTAINER_ENABLE_MONITORING=TRUE
+      - CONTAINER_NAME=mongodb-backup-prod
+    depends_on:
+      - database_prod
+    networks:
+      - private
+    restart: unless-stopped
+
+  angular_ssr_prod:
+    build:
+      context: ./
+      dockerfile: build/docker/angular-ssr/Dockerfile
+    # ❌ ports: supprimé
+    networks:
+      - web
+      - private
+    labels:
+      - traefik.enable=true
+      - traefik.http.routers.angular_ssr_prod.rule=Host(`angular-prod.foodgame.fr`)
+      - traefik.http.services.angular_ssr_prod.loadbalancer.server.port=4000
+      - traefik.http.routers.angular_ssr_prod.entrypoints=websecure
+      - traefik.http.routers.angular_ssr_prod.tls.certresolver=myresolver
+    restart: always
+
+  
+  # apache_prod:
+  #   build:
+  #     context: ./
+  #     dockerfile: build/docker/apache/Dockerfile
+  #   ports:
+  #     - "8080:80"
+  #   networks:
+  #     - web
+  #     - private
+  #   volumes:
+  #     - /var/log:/var/log/apache2
+  #   labels:
+  #     - traefik.enable=true
+  #     - traefik.http.routers.apache_prod.rule=Host(`angular-prod.foodgame.fr`)
+  #     - traefik.http.services.apache_prod.loadbalancer.server.port=80
+  #     - traefik.http.routers.apache_prod.entrypoints=websecure
+  #     - traefik.http.routers.apache_prod.tls.certresolver=myresolver
+  #   restart: always
+
+
+# version: '3.0' # specify docker-compose version
+ 
+# Define the services/ containers to be run
+# services:
+#  angular: # name of the first service
+#   build: angular-client # specify the directory of the Dockerfile
+#   ports:
+#   - "4200:4200" # specify port mapping
+ 
+#  express: # name of the second service
+#   build: express-server # specify the directory of the Dockerfile
+#   ports:
+#   - "9991:9991" #specify ports mapping
+#   links:
+#   - database # link this service to the database service
+ 
+#  database: # name of the third service
+#   image: mongo # specify image to build container from
+#   ports:
+#   - "27017:27017" # specify port forwarding
+
+
+
+
+# version: '3'
+
+# networks:
+#   private:
+#   web:
+#    external:
+#     name: web
+#   #pipeline-test-mean-stack-docker_default:
+#   #pipeline-test-mean-stack-docker_private:
+#   #grafana:
+
+# volumes:
+# #  app_data: {}
+#   mongo_data_prod:
+
+# services:
+#   express_prod:
+#     build:
+#       context: ./express-server
+#     ports:
+#       - "4000:4000"
+#     networks:
+#       - web
+#       - private
+#     labels:
+#       - traefik.enable=true
+#       - traefik.http.routers.express_prod.rule=Host(`api-prod.foodgame.fr`)
+#       - traefik.http.services.express_prod.loadbalancer.server.port=4000
+#       - traefik.http.routers.express_prod.entrypoints=websecure
+#       - traefik.http.routers.express_prod.tls.certresolver=myresolver
+#     links:
+#       - database_prod
+#     restart: always
+
+
+#   database_prod:
+# #   container_name: mongo_"${ENV}"
+#     image: mongo:4.4.6
+#     ports:
+#       - "27017:27017"
+#     volumes:
+#       - ./backup:/backup
+#       - mongo_data_prod:/data/db
+#       # - /var/lib/mongodb/data_prod:/data/db
+# #     - database:/data/database
+#     labels:
+#       - traefik.enable=true
+#       - traefik.http.routers.database_prod.rule=Host(`mongodb-prod.foodgame.fr`)
+# #     - traefik.http.routers.apache_prod.rule=Host(`${URLMONGO}`)
+#       - traefik.http.services.database_prod.loadbalancer.server.port=27017
+#       - traefik.http.routers.database_prod.entrypoints=websecure
+#       - traefik.http.routers.database_prod.tls.certresolver=myresolver  
+#     networks:
+#       - web
+#       - private
+#       #- pipeline-test-FatboarProject_default
+#       #- pipeline-test-FatboarProject_private
+#     restart: always
+
+#   apache_prod:
+# #   container_name: apache_"${ENV}"    
+#     build:  
+#       context: ./
+#       # dockerfile: build/docker/httpd/Dockerfile
+#       dockerfile: build/docker/apache/Dockerfile
+#     ports:
+#       - "8080:80"
+#     networks:
+#       - web
+#       - private
+#       #- pipeline-test-FatboarProject_default
+#       #- pipeline-test-FatboarProject_private
+#     volumes:     
+#       - /var/log:/var/log/apache2
+#     labels:
+#       - traefik.enable=true
+#       - traefik.http.routers.apache_prod.rule=Host(`angular-prod.foodgame.fr`)
+# #     - traefik.http.routers.apache_prod.rule=Host(`${URLANGULAR}`)
+#       - traefik.http.services.apache_prod.loadbalancer.server.port=80
+#       - traefik.http.routers.apache_prod.entrypoints=websecure
+#       - traefik.http.routers.apache_prod.tls.certresolver=myresolver  
+#     restart: always  
+
+
+ 

+ 47 - 47
docker-compose.yml

@@ -7,17 +7,17 @@ networks:
       name: web
 
 volumes:
-  mongo_data_preprod:
+  mongo_data_prod:
     driver: local
     driver_opts:
       type: none
       o: bind
-      device: /srv/mongo/data_preprod
-  mongo_backups_preprod:
+      device: /srv/mongo/data_prod
+  mongo_backups_prod:
     driver: local
 
 services:
-  express_preprod:
+  express_prod:
     build:
       context: ./express-server
     ports:
@@ -27,21 +27,21 @@ services:
       - private
     labels:
       - traefik.enable=true
-      - traefik.http.routers.express_preprod.rule=Host(`api-preprod.foodgame.fr`)
-      - traefik.http.services.express_preprod.loadbalancer.server.port=4000
-      - traefik.http.routers.express_preprod.entrypoints=websecure
-      - traefik.http.routers.express_preprod.tls.certresolver=myresolver
+      - traefik.http.routers.express_prod.rule=Host(`api-prod.foodgame.fr`)
+      - traefik.http.services.express_prod.loadbalancer.server.port=4000
+      - traefik.http.routers.express_prod.entrypoints=websecure
+      - traefik.http.routers.express_prod.tls.certresolver=myresolver
     depends_on:
-      - database_preprod
+      - database_prod
     environment:
-      - MONGODB_URI=mongodb://admin:azerty10@database_preprod:27017/mean-fatboar-db?authSource=admin
+      - MONGODB_URI=mongodb://admin:azerty10@database_prod:27017/mean-fatboar-db?authSource=admin
     restart: always
 
-  database_preprod:
+  database_prod:
     image: mongo:4.4.6
     volumes:
       - ./backup:/backup
-      - mongo_data_preprod:/data/db
+      - mongo_data_prod:/data/db
     environment:
       - MONGO_INITDB_ROOT_USERNAME=admin
       - MONGO_INITDB_ROOT_PASSWORD=azerty10
@@ -50,13 +50,13 @@ services:
       - private
     restart: always
 
-  mongodb-backup-preprod:
+  mongodb-backup-prod:
     image: tiredofit/mongodb-backup:latest
-    container_name: mongodb-backup-preprod
+    container_name: mongodb-backup-prod
     volumes:
-      - mongo_backups_preprod:/backup
+      - mongo_backups_prod:/backup
     environment:
-      - MONGODB_HOST=database_preprod
+      - MONGODB_HOST=database_prod
       - MONGODB_PORT=27017
       - MONGODB_USER=admin
       - MONGODB_PASS=azerty10
@@ -71,14 +71,14 @@ services:
       - NOTIFICATION_TYPE=none
       - DEBUG_MODE=TRUE
       - CONTAINER_ENABLE_MONITORING=TRUE
-      - CONTAINER_NAME=mongodb-backup-preprod
+      - CONTAINER_NAME=mongodb-backup-prod
     depends_on:
-      - database_preprod
+      - database_prod
     networks:
       - private
     restart: unless-stopped
 
-  angular_ssr_preprod:
+  angular_ssr_prod:
     build:
       context: ./
       dockerfile: build/docker/angular-ssr/Dockerfile
@@ -88,14 +88,14 @@ services:
       - private
     labels:
       - traefik.enable=true
-      - traefik.http.routers.angular_ssr_preprod.rule=Host(`angular-preprod.foodgame.fr`)
-      - traefik.http.services.angular_ssr_preprod.loadbalancer.server.port=4000
-      - traefik.http.routers.angular_ssr_preprod.entrypoints=websecure
-      - traefik.http.routers.angular_ssr_preprod.tls.certresolver=myresolver
+      - traefik.http.routers.angular_ssr_prod.rule=Host(`angular-prod.foodgame.fr`)
+      - traefik.http.services.angular_ssr_prod.loadbalancer.server.port=4000
+      - traefik.http.routers.angular_ssr_prod.entrypoints=websecure
+      - traefik.http.routers.angular_ssr_prod.tls.certresolver=myresolver
     restart: always
 
   
-  # apache_preprod:
+  # apache_prod:
   #   build:
   #     context: ./
   #     dockerfile: build/docker/apache/Dockerfile
@@ -108,10 +108,10 @@ services:
   #     - /var/log:/var/log/apache2
   #   labels:
   #     - traefik.enable=true
-  #     - traefik.http.routers.apache_preprod.rule=Host(`angular-preprod.foodgame.fr`)
-  #     - traefik.http.services.apache_preprod.loadbalancer.server.port=80
-  #     - traefik.http.routers.apache_preprod.entrypoints=websecure
-  #     - traefik.http.routers.apache_preprod.tls.certresolver=myresolver
+  #     - traefik.http.routers.apache_prod.rule=Host(`angular-prod.foodgame.fr`)
+  #     - traefik.http.services.apache_prod.loadbalancer.server.port=80
+  #     - traefik.http.routers.apache_prod.entrypoints=websecure
+  #     - traefik.http.routers.apache_prod.tls.certresolver=myresolver
   #   restart: always
 
 
@@ -152,10 +152,10 @@ services:
 
 # volumes:
 # #  app_data: {}
-#   mongo_data_preprod:
+#   mongo_data_prod:
 
 # services:
-#   express_preprod:
+#   express_prod:
 #     build:
 #       context: ./express-server
 #     ports:
@@ -165,32 +165,32 @@ services:
 #       - private
 #     labels:
 #       - traefik.enable=true
-#       - traefik.http.routers.express_preprod.rule=Host(`api-preprod.foodgame.fr`)
-#       - traefik.http.services.express_preprod.loadbalancer.server.port=4000
-#       - traefik.http.routers.express_preprod.entrypoints=websecure
-#       - traefik.http.routers.express_preprod.tls.certresolver=myresolver
+#       - traefik.http.routers.express_prod.rule=Host(`api-prod.foodgame.fr`)
+#       - traefik.http.services.express_prod.loadbalancer.server.port=4000
+#       - traefik.http.routers.express_prod.entrypoints=websecure
+#       - traefik.http.routers.express_prod.tls.certresolver=myresolver
 #     links:
-#       - database_preprod
+#       - database_prod
 #     restart: always
 
 
-#   database_preprod:
+#   database_prod:
 # #   container_name: mongo_"${ENV}"
 #     image: mongo:4.4.6
 #     ports:
 #       - "27017:27017"
 #     volumes:
 #       - ./backup:/backup
-#       - mongo_data_preprod:/data/db
-#       # - /var/lib/mongodb/data_preprod:/data/db
+#       - mongo_data_prod:/data/db
+#       # - /var/lib/mongodb/data_prod:/data/db
 # #     - database:/data/database
 #     labels:
 #       - traefik.enable=true
-#       - traefik.http.routers.database_preprod.rule=Host(`mongodb-preprod.foodgame.fr`)
+#       - traefik.http.routers.database_prod.rule=Host(`mongodb-prod.foodgame.fr`)
 # #     - traefik.http.routers.apache_prod.rule=Host(`${URLMONGO}`)
-#       - traefik.http.services.database_preprod.loadbalancer.server.port=27017
-#       - traefik.http.routers.database_preprod.entrypoints=websecure
-#       - traefik.http.routers.database_preprod.tls.certresolver=myresolver  
+#       - traefik.http.services.database_prod.loadbalancer.server.port=27017
+#       - traefik.http.routers.database_prod.entrypoints=websecure
+#       - traefik.http.routers.database_prod.tls.certresolver=myresolver  
 #     networks:
 #       - web
 #       - private
@@ -198,7 +198,7 @@ services:
 #       #- pipeline-test-FatboarProject_private
 #     restart: always
 
-#   apache_preprod:
+#   apache_prod:
 # #   container_name: apache_"${ENV}"    
 #     build:  
 #       context: ./
@@ -215,11 +215,11 @@ services:
 #       - /var/log:/var/log/apache2
 #     labels:
 #       - traefik.enable=true
-#       - traefik.http.routers.apache_preprod.rule=Host(`angular-preprod.foodgame.fr`)
+#       - traefik.http.routers.apache_prod.rule=Host(`angular-prod.foodgame.fr`)
 # #     - traefik.http.routers.apache_prod.rule=Host(`${URLANGULAR}`)
-#       - traefik.http.services.apache_preprod.loadbalancer.server.port=80
-#       - traefik.http.routers.apache_preprod.entrypoints=websecure
-#       - traefik.http.routers.apache_preprod.tls.certresolver=myresolver  
+#       - traefik.http.services.apache_prod.loadbalancer.server.port=80
+#       - traefik.http.routers.apache_prod.entrypoints=websecure
+#       - traefik.http.routers.apache_prod.tls.certresolver=myresolver  
 #     restart: always  
 
 

+ 2 - 2
express-server/index.js

@@ -35,7 +35,7 @@ app.use(express.urlencoded({ extended: true }));
 
 // CORS (configuration d'origine conservée)
 app.use(cors({
-  origin: 'https://angular-preprod.foodgame.fr',
+  origin: 'https://angular-prod.foodgame.fr',
   optionsSuccessStatus: 200
 }));
 
@@ -69,7 +69,7 @@ app.use('/api/restaurants', restaurantRoutes);
 
 // Proxy vers Angular SSR EN DERNIER (pour toutes les autres routes)
 app.use('/', createProxyMiddleware({
-  target: 'http://angular_ssr_preprod:4000',
+  target: 'http://angular_ssr_prod:4000',
   changeOrigin: true,
   // Supprimez pathFilter - les routes API sont déjà gérées au-dessus
 }));

+ 1 - 1
express-server/lib/db.js

@@ -1,7 +1,7 @@
 const mongoose = require('mongoose');
 
 // Chaîne de connexion avec authentification (identifiants en clair)
-const db = 'mongodb://admin:azerty10@database_preprod:27017/mean-fatboar-db?authSource=admin';
+const db = 'mongodb://admin:azerty10@database_prod:27017/mean-fatboar-db?authSource=admin';
 
 const options = {
   useNewUrlParser: true,