Impossible de créer une image web_only pour une nouvelle installation

Bonjour :blush:

Je tente toujours de configurer notre pipeline pour qu’il fonctionne avec Discourse.
J’ai un conteneur Redis vierge et un conteneur Postgres vierge à utiliser avec Discourse.
La prochaine étape pour moi est de construire l’image du conteneur web_only afin de les connecter ensuite et de lancer l’installation, si je ne me trompe pas, mais je n’arrive pas à amorcer le conteneur.

Je reçois cette erreur :

ÉCHEC
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' a échoué avec le code de retour #<Process::Status: pid 4632 exit 1>
Emplacement de l'échec : /pups/lib/pups/exec_command.rb:112:in `spawn'
Exécution échouée avec les paramètres {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
0e576a9672a887d23579100756224f920ab595b819874b5e7cbe4868f4234481
** ÉCHEC DE L'AMORÇAGE ** veuillez faire défiler vers le haut et chercher les messages d'erreur antérieurs, il peut y en avoir plus d'un.
./discourse-doctor peut aider à diagnostiquer le problème.

Je suis confus quant à la raison pour laquelle il tente de migrer alors que rien n’est encore construit. Est-ce que je fais les étapes incorrectement ?
Voici le fichier web_only.yml que j’utilise (très basique) :

templates:
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
env:
  LANG: en_US.UTF-8
  UNICORN_WORKERS: 2
  DISCOURSE_DB_USERNAME: root
  DISCOURSE_DB_PASSWORD: my-secret-pw
  DISCOURSE_DB_HOST: 127.0.0.1
  DISCOURSE_DB_NAME: communities
  DISCOURSE_DEVELOPER_EMAILS: 'email@mail.com'
  DISCOURSE_HOSTNAME: 'localhost'
  DISCOURSE_REDIS_HOST: 127.0.0.1
  SKIP_POST_DEPLOYMENT_MIGRATIONS: 1
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - mkdir -p plugins
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-voting.git
          - git clone https://github.com/discourse/discourse-slack-official.git
          - git clone https://github.com/discourse/discourse-assign.git
run:
  - exec:
      cd: /var/www/discourse
      cmd:
        - sed -i 's/GlobalSetting.serve_static_assets/true/' config/environments/production.rb
        - bash -c "touch -a /shared/log/rails/{sidekiq,puma.err,puma}.log"
        - bash -c "ln -s /shared/log/rails/{sidekiq,puma.err,puma}.log log/"
        - sed -i 's/default \$scheme;/default https;/' /etc/nginx/conf.d/discourse.conf

Dois-je avoir un conteneur Postgres et un conteneur Redis en cours d’exécution à chaque fois que je dois amorcer une construction ? Je pensais pouvoir préparer les images pour les télécharger moi-même, puis relancer mes environnements avec elles sans avoir besoin de faire quoi que ce soit sur ma base de données…

Le pipeline que l’on m’a demandé de construire est le suivant :

  • GitHub Actions : qui peut amorcer l’image au cas où une mise à jour serait nécessaire.
    • Pousser l’image vers un registre privé.
  • Ensuite, mon cluster Kubernetes pourrait récupérer les mises à jour et les déployer dans mes environnements, du dev à la prod.

Merci encore pour toute l’aide et le soutien. :sparkles:

Je pense que votre problème vient du fait que 127 ne fonctionne pas à l’intérieur du conteneur. Le processus d’initialisation migre la base de données. Si vous ne souhaitez pas migrer votre base de données, vous devrez modifier le modèle ou utiliser une base de données temporaire.

2 « J'aime »

Merci pour votre réponse :slight_smile:
Pourriez-vous m’indiquer comment éviter ou sauter une migration de base de données, s’il vous plaît ? Je pensais que cela se faisait avec SKIP_POST_DEPLOYMENT_MIGRATIONS: 1

Je ne peux pas. Je vous recommande de créer une base de données temporaire que vous supprimerez après la migration.

Et lorsque vous le ferez, vous devrez vous assurer que toutes ces étapes sont exécutées lors du déploiement de la nouvelle image.

Le problème, c’est que je ne comprends pas pourquoi une migration de base de données est en cours alors qu’il n’y a rien à migrer, puisque je crée ma première image pour une installation neuve :frowning:

1 « J'aime »

La migration est un terme technique utilisé dans le contexte de Rails. Les migrations créent essentiellement la structure correcte de la base de données.

2 « J'aime »

Discourse ne peut pas fonctionner si la base de données n’est pas remplie des tables et des données qu’il nécessite. Il doit également précompiler les ressources. Vous devrez comprendre comment cela fonctionne si vous envisagez de déployer d’une autre manière.

1 « J'aime »

Merci de m’avoir éclairci cela. Je pensais que la première structure de base de données pourrait être mise en place dès le lancement initial du forum.

Merci beaucoup pour votre réponse. Je continuerai à réfléchir à cela. Il semble qu’il ne soit peut-être pas possible de préparer un pipeline comme je le souhaite. :frowning:

C’est possible, mais vous devez le faire explicitement. Et le moyen le plus simple de créer l’image est de lui permettre de migrer une base de données vierge.

1 « J'aime »

Je vais essayer de convaincre mon équipe de demander une base de données Postgres temporaire pendant le pipeline GitHub. Merci beaucoup pour toute l’aide.

1 « J'aime »