Installer Discourse pour le développement avec Docker

Depuis ma VM Ubuntu, j’ai pu faire un ping vers rubygems.org. Je ne sais pas s’il existe un moyen de vérifier si le conteneur Docker peut le faire. Je pense avoir seulement pingé la version HTTP, pas HTTPS, cependant. Je le mentionne au cas où le problème serait lié à cela. (L’une des pages que j’ai vues en cherchant sur Google suggérait de remplacer HTTPS par HTTP, mais je ne peux pas faire cela puisque le comportement défini se trouve quelque part dans le conteneur Docker.)

1 « J'aime »

J’ai essayé les options MacOS.

D’abord avec l’Option 2, Homebrew. J’ai rencontré des problèmes car toutes les dépendances n’ont pas été installées avec la commande de ce guide. https://medium.com/@yutafujii_59175/a-complete-one-by-one-guide-to-install-docker-on-your-mac-os-using-homebrew-e818eb4cfc3 m’a aidé à avancer un peu.

Je suis maintenant bloqué à l’Étape 2 d/boot_dev --init:

Migration de la base de données...

rake aborted!

PG::ConnectionBad: impossible de se connecter au serveur: Aucun fichier ou dossier de ce type

Le serveur est-il en cours d'exécution localement et accepte-t-il

les connexions sur le socket de domaine Unix "/var/run/postgresql/.s.PGSQL.5432"?

/src/lib/site_settings/db_provider.rb:61:in `table_exists?'

/src/lib/site_settings/db_provider.rb:16:in `all'

/src/lib/site_settings/defaults_provider.rb:29:in `db_all'

/src/lib/site_setting_extension.rb:277:in `block in refresh!'

/src/lib/site_setting_extension.rb:274:in `synchronize'

/src/lib/site_setting_extension.rb:274:in `refresh!'

/src/lib/site_setting_extension.rb:495:in `block in setup_methods'

/src/config/initializers/004-message_bus.rb:120:in `<main>'

/src/config/environment.rb:7:in `<main>'

/usr/local/bin/bundle:23:in `load'

/usr/local/bin/bundle:23:in `<main>'

Tâches: TOP => db:migrate => db:load_config => environment

(Voir la trace complète en exécutant la tâche avec --trace)

J’ai ensuite téléchargé le fichier .dmg, mais comme je débute avec Docker, je ne comprends pas quoi faire à partir de là. Il serait super d’avoir une description un peu plus détaillée de l’option macOS.

Merci.

1 « J'aime »

Sur macOS, une fois que vous avez installé Docker à partir du fichier .dmg, assurez-vous simplement qu’il est en cours d’exécution — une icône devrait apparaître dans la barre d’outils de macOS pour vérifier son état. Ensuite, suivez littéralement les étapes du premier message (clonage, etc.). Publiez ici si vous rencontrez un problème en suivant cette méthode.

Notez que si vous avez déjà installé Docker avec Homebrew, il serait judicieux de désinstaller cette version de Docker au préalable, ou du moins de vous assurer qu’elle n’est pas en cours d’exécution. Je n’ai jamais installé Docker avec Homebrew, donc je ne peux pas vous conseiller à ce sujet.

2 « J'aime »

Merci.

J’ai utilisé l’icône et ouvert le tableau de bord Docker. Je n’ai trouvé aucun conteneur en cours d’exécution dans l’interface graphique, mais en ligne de commande, j’ai pu voir plusieurs conteneurs actifs. Je me demandais s’il fallait se connecter pour utiliser le tableau de bord Docker ? Ou peut-être que ce comportement est dû à la présence de plusieurs versions de Docker installées (via Homebrew et Desktop (.dmg)) ?

En attendant, j’ai réussi à configurer Discourse sur DigitalOcean, ce qui fonctionne sans problème et convient à mes besoins.

1 « J'aime »

Le DMG installe Docker, pas Discourse. Il n’ajoutera aucun conteneur initialement.

À partir de là, vous pouvez suivre le guide Docker.

2 « J'aime »

Lorsque j’exécute la commande ci-dessus (sur un Mac), je reçois cette erreur :

Une erreur s'est produite lors de l'installation de cppjieba_rb (0.3.3), et Bundler ne peut pas continuer.

Assurez-vous que `gem install cppjieba_rb -v '0.3.3' --source 'https://rubygems.org/'` réussit
avant de lancer bundler.

Avez-vous des suggestions ? Je ne comprends pas exactement quel est le problème. L’installation séparée du gem ne fonctionne pas non plus (même avec sudo).

De plus, pourquoi faut-il installer des gems lorsque j’exécute une image Docker ? Cela aurait dû être entièrement préinstallé, non ?

MISE À JOUR : RÉSOLU

J’ai cloné dans ~/repos/discourse, mais j’aurais dû le faire dans ~/discourse. Tout fonctionne parfaitement maintenant.

3 « J'aime »

Si vous rencontrez cette erreur lors de l’exécution de d/unicorn :

Could not find aws-partitions-1.284.0 in any of the sources
Run `bundle install` to install missing gems.

vous pouvez la corriger en exécutant :

docker exec -it -u discourse:discourse discourse_dev /bin/bash -c "cd /src && USER=discourse RUBY_GLOBAL_METHOD_CACHE_SIZE=131072 LD_PRELOAD=/usr/lib/libjemalloc.so RAILS_ENV=${RAILS_ENV:=development} bundle install"

après quoi d/boot_dev s’exécutera avec succès.

3 « J'aime »

Plus simple

d/boot_dev
d/bundle install

Nous disposons d’assistants pour toutes les tâches courantes.

5 « J'aime »

Dans le message original, il est indiqué :

Le flux de développement Docker prend en charge les liens symboliques dans le répertoire plugins/.

Dans ce contexte, vers quoi devons-nous faire pointer le répertoire plugins par un lien symbolique ? Merci !

1 « J'aime »
cd plugins
ln -s /chemin/absolu/vers/votre/plugin .
ln -s ~/src/my-great-plugin # par exemple
6 « J'aime »

Ah, merci, je voulais juste faire un lien symbolique vers le répertoire des plugins dans ce contexte.

1 « J'aime »

Généralement, vous ne créez pas de lien symbolique pour un répertoire entier dans ce flux de travail, car vous souhaitez normalement un contrôle granulaire sur les plugins inclus dans une exécution.

4 « J'aime »

Bonjour, j’utilise ce guide et tout fonctionne bien, mais je m’inquiète du fait que chaque fois que j’exécute d/boot_dev, il commence à télécharger divers éléments. Comment télécharger une seule fois les fichiers nécessaires et les conserver pour le prochain démarrage ? Mon système d’exploitation est Ubuntu 20.04.

1 « J'aime »

J’ai tenté d’installer sur un système Mint 20 vierge. Docker est disponible :

terrapop@terrapop:/var$ docker version
Client: Docker Engine - Community
 Version:           19.03.12

terrapop@terrapop:/var/discourse$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset>
     Active: active (running) since Mon 2020-08-24 19:03:48 CEST; 31min ago

Ensuite, j’ai cloné Discourse :

sudo git clone GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub /var/discourse
cd /var/discourse

Cependant, d/boot_dev --init aboutit à :

d/boot_dev --init

bash: d/boot_dev: Aucun fichier ou dossier de ce type

Quelqu’un ?

1 « J'aime »

Mise à jour : J’ai maintenant ajouté nos clés API SendGrid dans app.yml et initialisé l’application via ./launcher. Elle tourne désormais sur localhost. Est-il possible que toutes les commandes d/ mentionnées dans le message original soient obsolètes ? Je ne comprends toujours pas. L’application tourne maintenant dans Docker sur mon ordinateur Ubuntu (Mint) en localhost, tout comme sur l’environnement de staging chez Digital Ocean. Nous souhaitons développer en localhost avec l’application exécutée via Docker et des liens symboliques pour les plugins, mais je ne suis pas sûr que tout soit prêt comme il se doit, car je ne parviens à exécuter aucune des commandes d/. Quelqu’un pourrait-il intervenir ? Merci.

Mise à jour : C’est de ma faute. J’ai utilisé le lien Git pour la production :

git clone GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub /var/discourse

Au lieu de :

git clone GitHub - discourse/discourse: A platform for community discussion. Free, open, simple. · GitHub

:cowboy_hat_face:

Cependant…

Je rencontre maintenant de nouveaux problèmes. Sur Ubuntu Mint 20, je ne peux cloner que dans /var en tant que superutilisateur/root (UID 0). Ainsi, lorsque je clone et exécute d/boot_dev --init, tout se télécharge et démarre correctement, mais à une étape ultérieure, le script génère une erreur de permission car il s’attend à exécuter quelque chose avec l’UID 1000, qui correspond au premier utilisateur créé sur Mint, soit mon compte personnel (terrapop), et non root. Comment contourner ce problème ?

Solution : Plus simple que je ne le pensais. Il suffit de créer un nouveau répertoire www dans var. Appliquez chown et chmod sur le répertoire www à votre premier utilisateur sur Mint, puis suivez les instructions des messages de l’auteur original. Cela fonctionne maintenant. Content.

2 « J'aime »

Pour une raison inconnue, les liens symboliques vers mes répertoires source de plugins ne fonctionnaient pas. J’ai dû déplacer/copier manuellement les répertoires source des plugins dans le répertoire plugins pour qu’ils apparaissent dans /admin/plugins après le redémarrage du conteneur Docker.

Peut-être y a-t-il eu un changement dans la façon dont Docker prend en charge les liens symboliques ? J’exécute docker-ce 19.03.12 sur Ubuntu.

1 « J'aime »

J’ai également rencontré ce problème récemment avec Docker Desktop pour Mac.

1 « J'aime »

J’ai suivi les mêmes étapes sur un droplet DO à 5 $. Tout s’est bien passé. Maintenant, comment puis-je exposer mon site pour y accéder ?

P.S. Cela fonctionne avec ngrok. Cela ne fonctionne pas encore avec un proxy inverse nginx sur le port 9292

Merci pour cela. Vous pouvez le faire directement sur le serveur et éviter de configurer un proxy inverse nginx. J’apprécie la configuration d/o docker + vscode à distance :slight_smile:

Utilisez d/unicorn -D pour exécuter Unicorn en tant que démon afin que le shell reste utilisable après le démarrage du serveur.

De plus, vous avez besoin d’au moins un droplet d/o à 10 $.

3 « J'aime »

Je suis sur un Mac avec zsh (sous iTerm2) et lorsque j’essaie d’utiliser un lien symbolique pour le développement de plugins, je rencontre ces erreurs :

readlink: option illégale -- f
usage: readlink [-n] [fichier ...]

Cela est dû au fait que l’implémentation de la commande readlink sur Mac diffère légèrement de celle de GNU.

La solution la plus simple consiste à faire ceci :

# brew install coreutils
# ln -s "$(which greadlink)" "$(dirname "$(which greadlink)")/readlink"

Cela vous permettra d’utiliser une version compatible de readlink.

N’oubliez pas que vous devez avoir la valeur dirname "$(which greadlink)" dans votre PATH, placée avant /usr/bin (où se trouve généralement le readlink d’origine). Dans mon cas, le PATH ressemble à /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:... et le lien symbolique vers greadlink se trouve dans /usr/local/bin.

Référence : Fixing "readlink: illegal option -- f" error on a Mac

5 « J'aime »

Pour exécuter une suite de tests pour un seul plugin, vous pouvez procéder ainsi :

# d/rake "plugin:spec[NOM_DU_PLUGIN]"
1 « J'aime »