Aller au contenu

Démarrer des conteneurs via Docker-compose


Cedriic

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 

Lien vers le commentaire
Partager sur d’autres sites

@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 ?

Lien vers le commentaire
Partager sur d’autres sites

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 !

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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 ?

 

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.