Installer Discourse pour le développement avec Docker

Bonjour,

Je rencontre cette erreur lorsque j’essaie d’exécuter d/boot_dev --init :

Errno::EACCES: Permission denied @ dir_s_mkdir - tmp
/src/config/boot.rb:23:in `<top (required)>'
/src/config/application.rb:16:in `require'
/src/config/application.rb:16:in `<top (required)>'
/src/Rakefile:7:in `require'
/src/Rakefile:7:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
(Voir la trace complète en exécutant la tâche avec --trace)

Avez-vous des idées sur la façon de le corriger ? J’ai cherché partout mais n’ai trouvé aucune solution.

Édition : corrigé en exécutant chmod -R 777 ~/discourse, mais maintenant je rencontre cette erreur :

gifsicle worker : gifsicle introuvable ; veuillez fournir le binaire approprié ou désactiver ce worker (argument --no-gifsicle ou :gifsicle => false via les options)

2 « J'aime »

Ce n’est pas un problème, nous avons supprimé notre utilisation récemment, l’avertissement n’est pas préoccupant. Travaillez-vous sur un ancien code de Discourse ?

4 « J'aime »

Non, c’était la version récente. Mais j’ai suivi ce tutoriel de DigitalOcean et tout fonctionne parfaitement maintenant.

2 « J'aime »

Comment utiliser les plugins dans ce type de configuration ?

J’essaie de suivre Install plugins on a self-hosted site, mais il y est fait référence au fichier /var/discourse/containers/app.yml, qui n’existe pas dans mon répertoire discourse.

J’ai réussi à configurer un environnement de développement Discourse et à tester mon correctif, mais comment puis-je intégrer ce correctif dans mon instance de production ? J’ai essayé de construire base, puis d’exécuter ./launcher rebuild app --run-image discourse/base:build, mais cela ne semble pas aboutir à une instance Discourse en cours d’exécution.

Habituellement, je rencontre une erreur indiquant que le groupe syslog est manquant, mais je l’ai commentée, et je n’ai toujours pas obtenu de site fonctionnel. Rien de notable non plus dans les journaux Docker.

Nous ne documentons pas vraiment ce genre de choses, mais vous pouvez générer un fichier « diff », puis appliquer ce diff dans un hook après avoir cloné le dépôt. app.yml prend en charge les hooks.

Une solution rapide et simple pour les déploiements auto-hébergés en conteneur unique consiste simplement à modifier le code sur place et à exécuter sv restart unicorn.

2 « J'aime »

Je ne suis pas sûr que ce soit le meilleur endroit pour poser cette question, mais je n’arrive pas à terminer l’installation de Discourse avec Docker sur un ordinateur Apple M1.

Après avoir exécuté d/boot_dev --init, toutes les dépendances sont installées sans problème apparent, mais une fois arrivé à l’étape Migrating database, le processus reste bloqué en consommant 100 % d’un de mes cœurs, sans aucune progression.

J’ai essayé de me connecter au conteneur Docker et la tâche bundle migrate tourne à 100 %, mais aucune activité apparente n’est visible sur le processus PostgreSQL.

Toute idée serait très appréciée !

1 « J'aime »

Je pense que le support de la virtualisation est vraiment très récent, je ne suis pas surpris que ce soit un peu une aventure.

@pmusaraj / @david, avez-vous réussi à faire fonctionner docker-dev sur M1 ?

5 « J'aime »

Je ne l’ai pas encore essayé.

2 « J'aime »

Si quelqu’un arrive à exécuter Discourse avec Docker sur un Mac M1, merci de me le faire savoir. En attendant, je vais essayer de suivre l’autre guide ! Merci !

1 « J'aime »

J’ai essayé brièvement aujourd’hui et je suis bloqué à la même étape que vous, mais avec une erreur :

Invalid gemspec in [/usr/local/lib/ruby/gems/2.7.0/specifications/default/zlib-1.1.0.gemspec]: Malformed version number string specification_version
bundler: failed to load command: rake (/usr/local/bin/rake)

Oui, s’il vous plaît, faites-le. Plusieurs membres de l’équipe utilisent Discourse sur M1 (moi y compris) tous les jours, donc cela fonctionne très bien !

Faites-nous savoir si vous rencontrez des problèmes.

2 « J'aime »

Merci beaucoup pour votre temps et votre aide ! Au moins, je ne suis pas le seul bloqué avec ça.

Bonjour, je pense que nous devrions ajouter une description à propos d’Ember-CLI ici, ainsi qu’un raccourci pour la commande ci-dessous sans avoir à entrer dans le conteneur Docker.

Et je n’arrive pas à faire fonctionner les commandes ci-dessus à l’intérieur du conteneur ; il semble que le port 4200 ne soit pas exposé par le conteneur.
Screenshot from 2021-05-02 15-48-51

Exposition manuelle du port 4200 en modifiant d/boot_dev :

Après avoir redémarré le conteneur, j’accède à localhost:4200 et j’obtiens ceci :

discourse@discourse:/tmp$ cat error.dump.cab4cc444229d44fc0fce2deb8695880.log 
=================================================================================

ENV Summary:

  TIME: Sun May 02 2021 08:01:12 GMT+0000 (Coordinated Universal Time)
  TITLE: ember
  ARGV:
  - /usr/bin/node
  - /src/app/assets/javascripts/node_modules/.bin/ember
  - server
  - --proxy
  - http://localhost:3000
  EXEC_PATH: /usr/bin/node
  TMPDIR: /tmp
  SHELL: /bin/bash
  PATH:
  - /tmp/yarn--1619942449179-0.1910991449592403
  - /src/app/assets/javascripts/discourse/node_modules/.bin
  - /home/discourse/.config/yarn/link/node_modules/.bin
  - /src/app/assets/javascripts/node_modules/.bin
  - /home/discourse/.yarn/bin
  - /usr/libexec/lib/node_modules/npm/bin/node-gyp-bin
  - /usr/lib/node_modules/npm/bin/node-gyp-bin
  - /usr/bin/node_modules/npm/bin/node-gyp-bin
  - /usr/local/sbin
  - /usr/local/bin
  - /usr/sbin
  - /usr/bin
  - /sbin
  - /bin
  PLATFORM: linux x64
  FREEMEM: 8603062272
  TOTALMEM: 41962496000
  UPTIME: 612639
  LOADAVG: 3.32177734375,2.19580078125,1.47900390625
  CPUS:
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3301
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3300
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3300
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3301
  ENDIANNESS: LE
  VERSIONS:
  - ares: 1.15.0
  - brotli: 1.0.7
  - cldr: 35.1
  - http_parser: 2.9.3
  - icu: 64.2
  - modules: 64
  - napi: 7
  - nghttp2: 1.41.0
  - node: 10.23.0
  - openssl: 1.1.1g
  - tz: 2019c
  - unicode: 12.1
  - uv: 1.34.2
  - v8: 6.8.275.32-node.59
  - zlib: 1.2.11

ERROR Summary:

  - broccoliBuilderErrorStack: [undefined]
  - code: ECONNREFUSED
  - codeFrame: [undefined]
  - errorMessage: connect ECONNREFUSED 127.0.0.1:3000
  - errorType: [undefined]
  - location:
    - column: [undefined]
    - file: [undefined]
    - line: [undefined]
  - message: connect ECONNREFUSED 127.0.0.1:3000
  - name: Error
  - nodeAnnotation: [undefined]
  - nodeName: [undefined]
  - originalErrorMessage: [undefined]
  - stack: Error: connect ECONNREFUSED 127.0.0.1:3000
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)

=================================================================================

Après avoir modifié le PORT dans bin/ember-cli de 3000 à 9292, tout fonctionne.
Screenshot from 2021-05-02 17-55-24

Il semble que le script bash ember-cli ne puisse pas fonctionner correctement avec ENV["UNICORN_PORT"].

1 « J'aime »

L’Ember CLI est une nouvelle avancée (et difficilement acquise) ; @eviltrout devrait pouvoir en dire plus à ce sujet bientôt.

3 « J'aime »

Oui, cela devra être mis à jour. En attendant, vous pouvez le désactiver en définissant la variable d’environnement NO_EMBER_CLI à 1.

5 « J'aime »

C’est probablement évident, mais pourriez-vous préciser où vous définissez la variable d’environnement @eviltrout ?

J’ai essayé dans le fichier d/unicorn comme ceci :

docker exec -it -u discourse:discourse discourse_dev /bin/bash -c "$CMD" -e NO_EMBER_CLI=1

…mais cela n’a pas fonctionné (je reçois toujours le message “Ember CLI est requis en mode développement” sur localhost:9292).

d/boot_dev -e NO_EMBER_CLI=1

J’ai essayé cela aujourd’hui et j’ai également rencontré des problèmes. L’erreur que j’ai constatée était due au fait que l’émulation d’architecture de Docker ne prend pas en charge inotify (que nous utilisons beaucoup dans le développement de Discourse). Pour l’instant, j’ai ajouté un avertissement dans d/boot_dev lorsqu’une architecture autre que x86_64 est détectée :

❯ d/boot_dev 
AVERTISSEMENT : L'architecture Docker n'est pas x86_64.
Le développement de Discourse risque de ne pas fonctionner avec l'émulation d'architecture de Docker.
Veuillez essayer une installation de développement native.

J’ai maintenant ajouté un helper d/ember-cli et le port 4200 est redirigé par défaut. Les informations en haut de ce sujet ont également été mises à jour. Une fois que vous avez mis à jour, exécutez d/rails s dans un terminal et d/ember-cli dans un autre. J’ai également défini NO_EMBER_CLI comme l’une des variables transmises à Docker, afin qu’elle soit disponible si nécessaire.

6 « J'aime »

@david, c’est probablement sans conséquence, mais juste pour info : le script boot_dev affiche une fausse erreur lors de la vérification x86_64 lorsque je l’ai lancé par erreur sans Docker sur… (mais la partie « Le démon Docker est-il en cours d’exécution ? » est correcte)…

WARNING: Docker architecture is not x86_64.
Discourse development is unlikely to work using Docker's architecture emulation.
Please try a native development installation.
  ...(snip)...
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
1 « J'aime »

Merci pour cette image et les instructions super claires !

J’ai obtenu psql: error: FATAL: Peer authentication failed for user "postgres" en exécutant d/boot_dev --init.

Bien que le fichier pg_hba.conf dans data/postgres/ ait toutes les méthodes d’authentification définies sur « trust », il y en avait un autre dans /etc/postgresql/13/main/ qui utilisait les valeurs par défaut (« peer » / « md5 »).

J’ai édité /etc/postgresql/13/main/pg_hba.conf, changé toutes les méthodes en trust, lancé d/shell et exécuté sv restart postgres pour prendre en compte les modifications — et j’ai pu continuer en exécutant manuellement d/bundle install ; d/rake db:migrate RAILS_ENV=development ; d/rake admin:create.

Je laisse ce message au cas où cela serait utile à quelqu’un d’autre !

1 « J'aime »