Installer Discourse pour le développement avec Docker

Développer avec Docker

Puisque Discourse s’exécute dans Docker, vous devriez être en mesure d’exécuter Discourse directement à partir de votre répertoire source en utilisant un conteneur de développement Discourse.

:white_check_mark: Avantages : Pas besoin d’installer de dépendances système, aucune configuration nécessaire pour configurer rapidement un environnement de développement.

:x: Inconvénients : Sera légèrement plus lent que l’environnement de développement natif sous Ubuntu, et beaucoup plus lent qu’une installation native sous MacOS.

Voir aussi Developing Discourse using a Dev Container

Étape 1 : Installer Docker

Ubuntu

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce

19.10

sudo apt-get install docker.io
sudo usermod -a -G docker $USER
sudo reboot

Windows WSL : Ubuntu

Vous pouvez exécuter les commandes ci-dessus dans WSL mais vous devez avoir tous les fichiers dans le système de fichiers WSL. Par exemple, cela fonctionne bien s’il se trouve dans ~/discourse mais échoue s’il est placé dans /mnt/c/discourse.

MacOS

:warning: L’image Docker de développement Discourse n’est disponible que pour les architectures x86_64. Les Macs M1 sont capables de démarrer l’image en utilisant l’émulation d’architecture, mais il est peu probable que Discourse démarre en raison du manque de support inotify dans QEMU.

Vous devriez plutôt utiliser Install Discourse on macOS for development

Option 1 : Télécharger un .dmg packagé depuis le Docker store
Option 2 : brew install docker

Étape 2 : Démarrer le Conteneur

Clonez le dépôt Discourse sur votre appareil local.

git clone https://github.com/discourse/discourse.git
cd discourse

(depuis la racine de votre source)

d/boot_dev --init
    # attendez pendant que :
    #   - les dépendances sont installées,
    #   - la base de données est migrée, et
    #   - un utilisateur admin est créé (vous devrez interagir avec celui-ci)

# Dans un terminal :
d/rails s

# Et dans un terminal séparé
d/ember-cli

…puis ouvrez un navigateur sur http://localhost:4200 et voilà ! vous devriez voir Discourse.

Liens symboliques de Plugin

Le flux de développement Docker prend en charge les liens symboliques sous le répertoire plugins/, avec la mise en garde suivante :

Chaque fois qu’un nouveau lien symbolique de plugin est créé, le conteneur Docker doit être redémarré avec :

d/shutdown_dev; d/boot_dev

Notes :

  • Pour tester les e-mails, exécutez MailHog :

    d/mailhog
    
  • S’il manque des gems, exécutez :

    d/bundle install
    
  • Si une migration de base de données est nécessaire :

    d/rake db:migrate RAILS_ENV=development
    
  • Lorsque vous avez terminé, vous pouvez choisir de tuer le conteneur Docker avec :

    d/shutdown_dev
    
  • Les données sont persistantes entre les invocations du conteneur dans le répertoire tmp/postgres de votre racine source. Si pour une raison quelconque vous souhaitez réinitialiser votre base de données, exécutez :

    sudo rm -fr data
    
  • Si vous voyez des erreurs telles que « permission denied while trying to connect to Docker », exécutez :

    run `sudo usermod -aG docker ${USER}`
    sudo service docker restart
    
  • Si vous souhaitez exposer globalement les ports du conteneur au réseau (désactivé par défaut), utilisez :

    d/boot_dev -p
    
  • Le Dockerfile provient de discourse/discourse_docker sur GitHub, en particulier image/discourse_dev.

Exécution des Tests

d/rake autospec

Pour exécuter des tests de plugin spécifiques, vous pouvez également faire quelque chose comme ceci :

d/rake plugin:spec["discourse-follow"]

Ou même quelque chose comme ceci pour être encore plus spécifique :

my-machine:~/discourse$ d/shell
discourse@discourse:/src$ RAILS_ENV=test /src/bin/rspec plugins/discourse-follow/spec/lib/updater_spec.rb:37

Ce document est contrôlé par version - suggérez des modifications sur github.

72 « J'aime »
Using a launcher built docker image in docker-compose
IDE and comfortable DEV environment for newbies
Docker install on MacOS
How to install Discourse locally?
Installing Discourse for macOS Development Using asdf and docker-compose
Discourse developement environment setup
Discourse on local pc
External database ENV VARs not documented (external PG Port, external Redis ENV VARs)
How to Install Discourse on LocalHost in Windows?
Unicode (Russian) username validation fails randomly
Qunit in Docker
Is it possible to use a local plugin directory with a docker install?
Is it possible to use a local plugin directory with a docker install?
Problem with development on Windows with Docker and mounted volume
[Resolved] Recent change breaks connectivity in Docker (+ non-Docker)
How might we better structure #howto?
Apple M1 for discourse development
How to open via internal IP?
Fast, efficient plugin development with Docker dev install (Windows WSL2)
How do I install a stable version of Discourse on Docker locally?
Backup fails on localhost with docker
How do I install a stable version of Discourse on Docker locally?
Problems with understanding the development of Discourse
Need to create custom static page as home page
Docker new licensing
Install Discourse Docker on Ubuntu 11
Backup restore failing on clean dev docker env: FATAL: Peer authentication failed for user “postgres”
Install Discourse on macOS for development
Can't build Discourse on Ubuntu 20.10
Installing discourse for development is failing
Create, download, and restore a backup of your Discourse database
Set up a local Discourse Development Environment?
How do you install Discourse using Windows 10 Docker Desktop?
NoMethodError: undefined method `min_tags_from_required_group'
Install plugins in your non-Docker development environment
NoMethodError: undefined method `min_tags_from_required_group'
Error installing `bullseye-backports` when trying to install for Development
What I should do for migration from Cusdis to Discourse
Migrate a MyBB forum to Discourse
Local installation internal use only
Maintaining an up-to-date development environment
PG::UndefinedTable: ERROR: relation "pg_range" does not exist
Docker-compose.yml to run discourse locally
Allow subscription of predetermined length
Cannot load any images “Uncaught (in promise) no-response: no-response”
Discovery document is missing
What are the benefits of a dev environment?
Installing Discourse on windows using Docker Desktop
'Arrive at topic' info missing from email when re-sending invites
External database ENV VARs not documented (external PG Port, external Redis ENV VARs)
How to troubleshoot database errors in an outdated plugin?
Error when building: discourse does not support compiling scss/sass files via sprockets
Integration into custom auth system where emails are not unique?
Installer un environnement developpement discourse sur windows
Contributing to Discourse development
Install Discourse on Ubuntu or Debian for Development
There was an error while trying to write to `/src/Gemfile.lock`. It is likely that you need to grant write permissions for that path
Tags rearranged, triggering an extra edit
Ember addons are resolving as incorrect peer dependencies. -- fixed by removing "content-tag@3.1.0": "patches/content-tag@3.1.0.patch",
Trying to install Discourse on portainer but it's not pulling the base container
Developing Discourse using a Dev Container
Subscribe to post an ad
Postgres doesn't seem to be running when running Discourse locally using Docker
Discourse OpenID Connect (OIDC)
How can I install Discourse on Windows? Getting restarting (100) error
Dev environment: recommended way to bootstrap the first admin account without email?
Dev environment: recommended way to bootstrap the first admin account without email?
Total newbie struggling to preview the signup modal with my test theme, what am I missing?
Configure Discourse to use a separate PostgreSQL server
Installing discourse follow plugin in development (boot_dev) setup — no app.yml file
Discourse API developers docker-compose basic image
Which is the better option to self-host?
Using a launcher built docker image in docker-compose
Without any coding knowledge, is it possible to install and maintain Discourse?
I want to install a plugin for development, what should I do?
Can't uninstall on Ubuntu 18.04
Developing Discourse using a Dev Container
Using a launcher built docker image in docker-compose
Bundle install fails after adding gem "mysql2" and gem "reverse_markdown"
Issue in setup discourse on ubuntu server
`script/osx_dev` script is pretty broken
Can't set up dev environment due to cppjieba_rb failing to install
I want to install a plugin for development, what should I do?
Stuck in infinite loop in Mac terminal after source ~/.bashrc
Install on macOS – Failure: Scheduler::Defer can pause and resume
Install on macOS – Failure: Scheduler::Defer can pause and resume
Install Discourse for Development using Docker is Failed
OAuth2 and Microsoft ADFS
Migrate a phpBB3 forum to Discourse
Availability of OpenID Connect in hosted plans
Can't set up dev environment due to cppjieba_rb failing to install
Adding command line tools support for user api keys
Adding command line tools support for user api keys
Discourse redirects to the OAuth server after loading `/?authComplete=true`
Hello from Gitpod! (installing on google cloud + automated dev setup)

C’est vraiment facile à configurer ! Merci.

Je suis cependant surpris par la lenteur de l’installation locale. Existe-t-il un moyen d’ajuster les spécifications du conteneur ? Je m’attendais à un ralentissement, mais peut-être pas à un ralentissement aussi marqué…

Merci encore.

7 « J'aime »

J’essaie d’utiliser Docker sous Windows 10 et j’ai une question concernant le guide. J’ai installé Docker et il peut exécuter un conteneur Ubuntu (avec pratiquement rien d’installé à l’intérieur). Ce guide Docker indique simplement de cloner le dépôt ensuite, mais je ne peux pas le faire car le conteneur n’a pas Git installé.

À ce stade, devrais-je simplement suivre le guide Ubuntu et installer toutes les prérequis dans le conteneur ? Ou devrais-je utiliser l’image discourse_dev référencée sur GitHub ? Il semble que ce guide saute beaucoup d’étapes, mais comme je n’ai jamais utilisé Docker auparavant, il se peut que j’aie manqué quelque chose.

4 « J'aime »

Je pense que ce qui vous bloque, c’est que vous essayez de cloner le dépôt à l’intérieur du conteneur, alors que la commande git clone doit être exécutée sur votre machine. Donc, si vous avez déjà git installé localement, vous êtes presque prêt à faire fonctionner le tout.

3 « J'aime »

J’ai en fait fait cela en premier, ce qui est bien. J’ai donc déjà une copie du dépôt sur ma machine locale.

Ai-je automatiquement accès à mon système de fichiers hôte depuis le conteneur Docker ? Je pense que j’étais en partie confus par d/boot_dev --init car je ne savais pas ce que signifiait la partie d/ (je ne vois pas, par exemple, de dossier nommé d dans le dépôt, même si je vois boot_dev).

3 « J'aime »

Le d se trouve dans le dépôt (faites défiler un peu plus bas) — ce n’est pas un dossier, mais un lien symbolique vers bin/docker. Vous devriez l’obtenir si vous effectuez un git clone.

Je n’ai pas utilisé cette configuration de manière extensive moi-même, mais ma compréhension est que vous modifiez les fichiers source directement dans votre système de fichiers hôte (que vous venez de récupérer) et que les conteneurs Docker montent ce répertoire et s’exécutent à partir de celui-ci. Les scripts d/* effectueront la plupart des tâches de configuration Docker pour vous.

6 « J'aime »

Merci pour cela. Je n’avais même pas pensé à regarder au-delà des dossiers. Je pense avoir assez d’informations pour faire un nouvel essai.

3 « J'aime »

Je continue à faire une erreur. Entre ce sujet, ici, et , rien n’indique clairement quelle commande docker exécuter. Je me suis arrêté à docker run -ti -v LocalRepoPath:/src discourse/discourse_dev, ce qui a initialisé un tas de choses et semble avoir monté le dépôt sur /src. Mais pour une raison quelconque, je ne peux pas exécuter d/boot_dev --init. Même en lançant simplement ls dans le répertoire de niveau supérieur du dépôt, j’obtiens :

ls: impossible d'accéder à 'adminjs' : Erreur d'entrée/sortie
ls: impossible d'accéder à 'd' : Erreur d'entrée/sortie
ls: impossible d'accéder à 'jsapp' : Erreur d'entrée/sortie

Quelqu’un sait ce qui se passe ici ?

3 « J'aime »

Vous compliquez peut-être les choses : le tutoriel dans le premier message contient déjà tout ce dont vous avez besoin pour commencer.

Les commandes d/* exécutent toute la magie des commandes Docker pour que vous n’ayez pas à le faire. Une fois que vous avez cloné le dépôt, les commandes d/boot_dev --init et d/unicorn (que vous exécutez sur la machine hôte) devraient suffire à faire fonctionner http://localhost:9292. Ces scripts appellent Docker pour générer le conteneur et le démarrer pour vous. La commande d/shutdown_dev l’arrêtera.

Si vous rencontrez ces erreurs en parcourant les fichiers du dépôt sur l’hôte, il semble qu’il y ait un autre problème avec votre système de fichiers. Avez-vous peut-être manqué d’espace disque ?

4 « J'aime »

soupir, je vois. Je pensais qu’il fallait les exécuter dans Docker. Cela dit, d/boot_dev --init ne fonctionne apparemment pas sous Windows dans PowerShell (ce qui explique probablement pourquoi ce guide Docker ne mentionne que les hôtes Mac et Ubuntu). J’ai essayé d’exécuter la commande dans mon sous-système Linux (v1), mais cela échoue bien sûr à l’étape Docker puisque j’ai installé Docker sur Windows et non dans le sous-système Linux.


Ensuite, j’ai essayé de l’exécuter dans Git Bash pour Windows. Je n’ai pas pu exécuter d/boot_dev --init (erreur « d/boot_dev : c’est un répertoire »), mais j’ai pu lancer bin/docker/boot_dev --init. Cela a avancé beaucoup plus loin, avec de nombreux téléchargements, mais cela a échoué avec :

C:\Program Files\Docker\Docker\resources\bin\docker.exe : Erreur de réponse du démon : Mount denied :
Le chemin source « PathToRepo/data/postgres;C »
n’existe pas et n’est pas connu de Docker.

Je pense avoir réussi à passer outre en échappant le chemin de montage, comme indiqué ici :
https://stackoverflow.com/questions/50608301/docker-mounted-volume-adds-c-to-end-of-windows-path-when-translating-from-linux

Après cela, j’ai obtenu cette erreur :

C:\Program Files\Docker\Docker\resources\bin\docker.exe : Erreur de réponse du démon : OCI runtime create failed : container_linux.go:346 : le processus de démarrage du conteneur a provoqué « exec : "C:/Program Files/Git/sbin/boot" : stat C:/Program Files/Git/sbin/boot : aucun fichier ou répertoire » : inconnu.

C:/Program Files/Git/sbin/boot n’existe pas sur mon système de fichiers, donc je suppose que l’erreur n’est pas surprenante. La seule mention de sbin/boot dans le fichier boot_dev se trouve dans cette partie de la commande Docker : discourse/discourse_dev:release /sbin/boot.

Et c’est à peu près là où j’en suis pour le moment… Je ne sais pas vraiment quoi essayer à ce stade.

3 « J'aime »

Je crains que ce soit là la limite de mon aide, car je ne connais pas Windows.

Peut-être que @rishabh pourra confirmer si cela est censé fonctionner également sous Windows et mettre à jour les étapes manquantes à cet effet (ou ajouter une note si ce n’est pas le cas).

3 « J'aime »

@sam, est-ce que la méthode que j’essaie d’utiliser est même une façon vaguement prise en charge pour exécuter Discourse en développement ? Dans le fil de discussion sur le développement sous Windows, vous avez mentionné avoir essayé cela, mais cela ne se passe pas très bien jusqu’à présent. Les conteneurs Ubuntu de base (non spécifiques à Discourse) fonctionnent techniquement, mais pas les commandes spécifiques mentionnées dans le message original de ce fil.

Vous m’aviez initialement dit ceci :

Donc, sauf si vous avez une suggestion pour m’aider à surmonter les problèmes que je rencontre avec Docker sous Windows, il vaut probablement mieux que je coupe mes pertes et que j’exécute Discourse dans une VM Ubuntu en utilisant quelque chose comme VirtualBox.

2 « J'aime »

Beaucoup d’entre nous sont sur le canal lent sans aucun problème. Les jeux fonctionnent, Steam fonctionne, tout fonctionne.

Je comprends cette appréhension, mais ce n’est vraiment pas un problème majeur. De toute façon, si cela vous fait trop peur, je vous recommande une machine virtuelle classique comme Hyper-V ou VirtualBox. Installez Docker dedans et utilisez notre configuration de développement Docker.

6 « J'aime »

Si ce n’était pas mon ordinateur principal (et unique), je vous rejoindrais sur le ring lent, mais je ne peux pas prendre ce risque. Je vais donc opter pour une machine virtuelle traditionnelle avec Docker. Merci encore pour vos conseils. J’espère pouvoir avoir quelque chose de fonctionnel bientôt.

Quelles seraient les ressources suffisantes en espace disque et en RAM à allouer à la machine virtuelle ? Je pensais peut-être à 16 Go d’espace disque et 4 Go de RAM, mais je voulais vérifier d’abord.

1 « J'aime »

Cela suffirait probablement ; la meilleure façon de trouver la recette idéale est d’expérimenter.

6 « J'aime »

D’accord, je suis presque prêt à faire fonctionner cela correctement. J’ai une instance locale en cours d’exécution sous Docker dans une machine virtuelle Ubuntu. Je suppose que je ne dois exécuter d/boot_dev --init qu’une seule fois, au tout début, et qu’ensuite, je n’ai qu’à lancer d/boot_dev. Est-ce exact ? La raison pour laquelle je pose la question est que d/unicorn fonctionne lorsque j’inclus --init, mais ne fonctionne pas lorsque j’omets --init dans d/boot_dev. Lorsqu’il échoue au démarrage, j’obtiens l’erreur :

Impossible de trouver aws-partitions-1.270.0 dans l’une des sources.
Exécutez bundle install pour installer les gems manquantes.

Mais lorsque j’exécute ensuite bundle install, cela échoue avec :

actionview_precompiler-0.2.2 nécessite une version de Ruby >= 2.6, ce qui est incompatible avec la version actuelle, ruby 2.5.1p57.

Y a-t-il une version spécifique de Ruby à laquelle je devrais mettre à jour ? Ou y a-t-il autre chose qui se passe ?


Ma machine virtuelle est sous Ubuntu 18.04 (LTS) et cette fois, j’ai pu suivre directement les instructions de l’OP, donc je ne sais pas où j’ai pu me tromper (si quelque chose ne va pas).

2 « J'aime »

Vous n’utiliserez pas bundle install, vous utiliserez d/bundle install car vous voulez installer le bundle à l’intérieur du conteneur. La machine virtuelle n’a pas besoin de Ruby.

4 « J'aime »

Oui, j’avais l’impression que c’était le cas, je ne savais simplement pas quelle était la bonne méthode pour l’exécuter dans le conteneur. Merci encore pour votre aide !

2 « J'aime »

J’ai récupéré la dernière version du dépôt et, comme d’habitude, d/unicorn m’indique : « Exécutez bundle install pour installer les gems manquantes. » Cependant, cette fois, lorsque j’exécute d/bundle install, j’obtiens le message suivant :

Récupération de l’index des sources depuis https://rubygems.org/

Nouvelle tentative du récupérateur en raison d’une erreur (2/4) : Bundler::HTTPError Impossible de récupérer les spécifications depuis https://rubygems.org/

Nouvelle tentative du récupérateur en raison d’une erreur (3/4) : Bundler::HTTPError Impossible de récupérer les spécifications depuis https://rubygems.org/

Nouvelle tentative du récupérateur en raison d’une erreur (4/4) : Bundler::HTTPError Impossible de récupérer les spécifications depuis https://rubygems.org/

Impossible de récupérer les spécifications depuis https://rubygems.org/

Je ne peux donc pas exécuter Discourse pour le moment. Je ne sais pas si cela est lié à la mise à jour (directement ou indirectement) ou s’il s’agit d’un problème totalement indépendant. Une recherche Google sur l’erreur n’a pas été particulièrement utile, je ne sais donc pas comment procéder.

1 « J'aime »

Avez-vous réussi à contacter rubygems.org ?

1 « J'aime »