Cedriic Posté(e) le 6 mai 2023 Partager Posté(e) le 6 mai 2023 Bonjour, J'ai développé une application web et je souhaite maintenant la mettre en production sur mon NAS. pour ce faire, j'ai opté pour la solution Docker-compose afin de gérer 3 conteneurs : - nginx:alpine pour la partie frontend (projet développé en Angular) - node:alpine pour la partie backend (NestJS) - Postgres:alpine pour la base de données Afin de créer le fichier docker-compose.yml, j'ai fait des tests sur mon pc sous Linux et tout fonctionne parfaitement. (Je ne comprends pas l'affichage graphique de Docker sur le Synology pour créer des conteneurs qui peuvent communiquer entre eux, c'est pour cela que je passe par les lignes de commandes) Lorsque j'essaie de lancer le docker-compose.yml via SSH, je rencontre plusieurs erreurs : - le service "postgres" ne trouve le fichier .env contenant les variables de connection à la BDD. -le service "node" ne trouve pas non plus le fichier dockerFile de configuration du backend Je pense que le problème est que docker-compose.yml n'est pas autorisé à accéder à d'autres fichiers mais je ne parviens pas à résoudre le problème. Pouvez-vous m'aider svp ? Je vous remercie par avance 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
.Shad. Posté(e) le 6 mai 2023 Partager Posté(e) le 6 mai 2023 Tu peux copier ici le contenu de ton fichier composé, et quelle commande tu exécutes pour créer tes conteneurs (et depuis quel dossier tu exécutes cette commande surtout). 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cedriic Posté(e) le 6 mai 2023 Auteur Partager Posté(e) le 6 mai 2023 Merci pour ton aid. Voici le fichier : # FONCTIONNEMENT # - Le docker-compose génère 3 conteneurs : # - backend : # - Prévu pour un projet NestJS # - Le dockerfile se charge de builder le projet et de démarrer le serveur Node # - Le port 3000 est exposé afin que le navigateur puisse l'utiliser # # - database : # - Base de données Postgres # - Le port 5433 est exposé afin de pouvoir administrer la BDD depuis dBeaver # - Les données de la BDD sont persistés dans un volume extérieur (machine hôte) # - La BDD et l'utilisateur sont créés lors de la première utilisation # - On reprend les variables d'environnement du projet NestJS afin de créer la BDD et l'utilisateur # # - frontend : # - Image officielle de Nginx # - Le projet (déjà buildé) est copié dans un volume # - Le port 8080 est exposé afin de pouvoir accéder au site version: '3' # Définition des services services: #----------------------------------------# #----------------------------------------# #---- Service pour le backend NestJS ----# #----------------------------------------# backend: container_name: MyBudget_api # Configuration des ports exposés par le conteneur ports: - '3000:3000' # Dépendance du service "backend" sur le service "database" depends_on: - database # Utilisation du dockerfile pour builder le projet build: context: . dockerfile: ./backend/Dockerfile # Redémarrage automatique du conteneur en cas d'erreur ou d'arret restart: always #--------------------------------------------------# #--------------------------------------------------# #---- Service pour la base de données Postgres ----# #--------------------------------------------------# database: container_name: MyBudget_bdd # Utilisation de l'image Docker officielle de Postgres image: postgres:alpine # Redémarrage automatique du conteneur en cas d'erreur ou d'arret restart: always ports: - '5433:5432' # Configuration des variables d'environnement pour la base de données Postgres # Création de la BDD si elle n'existe pas environment: POSTGRES_USER: ${DB_USER} POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_DB: ${DB_DATABASE} # Récupération des variables d'environnement dans un fichier externe env_file: ./backend/.env # Définition d'un volume pour persister les données de la base de données volumes: - data_postgres:/var/lib/postgresql/data #---------------------------------------------# #---------------------------------------------# #---- Service pour le frontend avec Nginx ----# #---------------------------------------------# frontend: container_name: MyBudget_front # Utilisation de l'image officielle de Nginx image: nginx:alpine # Configuration des ports exposés par le conteneur ports: - '8080:80' # Définition du répertoire de travail dans le conteneur et copie des fichiers dans ce dernier volumes: - ./frontend:/usr/share/nginx/html # Dépendance du service "frontend" sur le service "backend" depends_on: - backend # Définition des volumes volumes: # Volume pour la base de données data_postgres: Ce fichier est dans /volume1/web/MonApp et voici la commande : sudo docker-compose up 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
MilesTEG1 Posté(e) le 7 mai 2023 Partager Posté(e) le 7 mai 2023 Il y a 10 heures, Cedriic a dit : et voici la commande : sudo docker-compose up Salut 👋🏻 si tu fermes le terminal ton conteneur sera tué, même chose si tu veux lancer une autre commande et que tu fait un Ctrl+C. si tu veux que ton conteneur persiste il faut le lancer en mode daemon avec : docker-compose up -d autee conseil : reste sur des compose v2.x , ça apporte parfois des soucis le v3.x 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
.Shad. Posté(e) le 7 mai 2023 Partager Posté(e) le 7 mai 2023 @Cedriic Ton fichier m'a l'air bon, donc si je comprends bien tu as deux dossiers "frontend" et "backend" dans /volume1/web/MonApp ? Et dans le terminal, tu te trouves bien dans ce dossier-là quand tu lances la commande "sudo docker-compose up" ? car le chemin relatif du fichier .env (et des autres volumes d'ailleurs) n'est valable que si tu te situes au bon endroit. Quels sont les messages d'erreur exacts ? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cedriic Posté(e) le 7 mai 2023 Auteur Partager Posté(e) le 7 mai 2023 oui tout a fait, les deux dossiers sont bien dans /volume1/we/MonApp. Et je me suis bien déplacé dans le terminal pour me positionner dans le dossier contenant "docker-compose.yml". Le fichier est bien exécuté car voici l'erreur : WARNING: The DB_USER variable is not set. Defaulting to a blank string. WARNING: The DB_PASSWORD variable is not set. Defaulting to a blank string. WARNING: The DB_DATABASE variable is not set. Defaulting to a blank string. Building backend Sending build context to Docker daemon 2.208MB Error response from daemon: no build stage in current context ERROR: Service 'backend' failed to build : Build failed par contre, j'ai essayé cette nuit de déplacer le fichier .env au même endroit que "docker-compose.yml". Les erreurs liées aux variables disparaissent. Cependant le service Backend ne démarre toujours pas. J'ai donc l'impression que docker n'a pas l'autorisation d'accéder aux dossiers enfants. @MilesTEG1 désolé je n'avais pas vu ta réponse. En effet je n'ai pas lancer le script en mode daemon car pour le moment je fais juste des tests de fonctionnement. A l'issue, l'objectif final est de lancer le script en daemon depuis l'intégration continue de GIT. Je vais tester le script en V2. Merci pour l'info ! 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
.Shad. Posté(e) le 7 mai 2023 Partager Posté(e) le 7 mai 2023 Les env_file ne sont pas compatibles avec la v3 de souvenir. En v2 ça devrait passer. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cedriic Posté(e) le 8 mai 2023 Auteur Partager Posté(e) le 8 mai 2023 J'ai testé en V2 et le problème persiste. Le problème ne vient pas de la version ou du fichier docker-compose.yml car sur un PC Linux ou une VM sur serveur tout fonctionne parfaitement. Donc voila le constat : CAS 1 - docker-compose.yml dans /volume1/web/test/ - .env dans /volume1/web/test/backend ==> le service BDD ne démarre pas CAS 2 - docker-compose.yml dans /volume1/web/test/ - .env dans /volume1/web/test/ ==> le service BDD démarre Le problème vient donc que docker-compose n'a accès aux fichiers que dans le répertoire ou il est exécuté sans récursivité. Le problème se confirme avec les services Frontend (Nginx) et Backend (Node). Nginx démarre mais sans le projet et le Backend ne démarre pas. Je n'arrive pas à comprendre comment donner les droits d'accès en récursivité au dossier pour docker-compose 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
.Shad. Posté(e) le 8 mai 2023 Partager Posté(e) le 8 mai 2023 Suivant la façon dont tu as copié les fichiers sur le NAS (git clone?) il se peut que les fichiers ne disposent pas de la surcouche d'ACL qu'applique DSM aux fichiers présents dans les dossiers partagés qui remplacent les permissions UNIX. Et donc que par défaut, tes dossiers pourraient ne pas donner les autorisations "x" pour traverser les sous-dossiers backend et frontend. Si tu redéfinis la propriété des dossiers via clic droit -> Propriétés dans Filestation, tu devrais résoudre tes problèmes de récursion. Tu peux vérifier en SSH aussi que tes dossiers et fichiers ont bien un petit "+" à la fin de leur permissions UNIX, ça veut dire que les couches d'ACL sont bien présentes. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cedriic Posté(e) le 8 mai 2023 Auteur Partager Posté(e) le 8 mai 2023 merci pour ta réponse. J'ai simplement copié les fichiers via glissé/déposé dans FileStation. Tous les fichiers ont le droit suivant : -rwxrwxrwx+ Je ne comprends vraiment pas d'ou vient le soucis 😕 Peut-être une indication: je ne peux lancer "docker-compose up" qu'en sudo. Est-ce normal ? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cedriic Posté(e) le 8 mai 2023 Auteur Partager Posté(e) le 8 mai 2023 J'ai réussi à avancer : maintenant les conteneurs postgres et nginx démarrent. Pour y arriver j'ai du modifier les droits du répertoire contenant mon projet: everyone => lire et écrire Donc les conteneurs sont bien visible via SSH et l'interface graphique mais je n'arrive pas à me connecter à la BDD ni accéder au front. Pour le front je dois bien faire: https://192.168.1.11:8081 ? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
.Shad. Posté(e) le 9 mai 2023 Partager Posté(e) le 9 mai 2023 Il y a 11 heures, Cedriic a dit : Pour y arriver j'ai du modifier les droits du répertoire contenant mon projet: everyone => lire et écrire Utilisateur:groupe 1000:1000 dans tes images ? Ca expliquerait tes problèmes, car DSM n'aime pas trop cette combinaison là. Voir le système des PUID PGID mis en place via Linuxserver par exemple. Il y a 11 heures, Cedriic a dit : Pour le front je dois bien faire: https://192.168.1.11:8081 ? IP_DU_NAS:8080 si j'en crois ton fichier compose, et pas 8081. Et c'est bizarre d'utiliser httpS pour un port pointant vers le port 80 du conteneur. Et pour la BDD tu accèdes via le port 5433, il te faut un client postgres pour y accéder. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.