Discourse mit Docker für die Entwicklung installieren

Entwicklung mit Docker

Da Discourse in Docker läuft, sollten Sie in der Lage sein, Discourse direkt von Ihrem Quellverzeichnis aus mithilfe eines Discourse-Entwicklungscontainers auszuführen.

:white_check_mark: Vorteile: Es müssen keine Systemabhängigkeiten installiert werden, und es ist überhaupt keine Konfiguration erforderlich, um schnell eine Entwicklungsumgebung einzurichten.

:x: Nachteile: Es wird etwas langsamer sein als die native Entwicklungsumgebung unter Ubuntu und viel langsamer als eine native Installation unter MacOS.

Siehe auch Developing Discourse using a Dev Container

Schritt 1: Docker installieren

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

Sie können die obigen Befehle innerhalb von WSL ausführen, aber Sie müssen alle Dateien im WSL-Dateisystem haben. Z. B. funktioniert es einwandfrei, wenn es sich innerhalb von ~/discourse befindet, aber es schlägt fehl, wenn es sich innerhalb von /mnt/c/discourse befindet.

MacOS

:warning: Das Discourse-Entwicklungs-Docker-Image ist nur für x86_64-Architekturen verfügbar. M1 Macs können das Image mithilfe von Architektur-Emulation starten, aber Discourse wird aufgrund des Mangels an inotify-Unterstützung in QEMU wahrscheinlich nicht booten.

Stattdessen sollten Sie Install Discourse on macOS for development verwenden

Option 1: Laden Sie eine verpackte .dmg aus dem Docker Store herunter
Option 2: brew install docker

Schritt 2: Container starten

Klonen Sie das Discourse-Repository auf Ihr lokales Gerät.

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

(Von Ihrer Quell-Root)

d/boot_dev --init
    # warten während:
    #   - Abhängigkeiten installiert werden,
    #   - die Datenbank migriert wird, und
    #   - ein Admin-Benutzer erstellt wird (Sie müssen damit interagieren)

# In einem Terminal:
d/rails s

# Und in einem separaten Terminal
d/ember-cli

… dann öffnen Sie einen Browser unter http://localhost:4200 und voilà!, Sie sollten Discourse sehen.

Plugin-Symlinks

Der Docker-Entwicklungsablauf unterstützt Symlinks im Verzeichnis plugins/ mit folgender Einschränkung:

Immer wenn ein neuer Plugin-Symlink erstellt wird, muss der Docker-Container mit folgendem Befehl neu gestartet werden:

d/shutdown_dev; d/boot_dev

Hinweise:

  • Um E-Mails zu testen, führen Sie MailHog aus:

    d/mailhog
    
  • Wenn Gems fehlen, führen Sie aus:

    d/bundle install
    
  • Wenn eine DB-Migration erforderlich ist:

    d/rake db:migrate RAILS_ENV=development
    
  • Wenn Sie fertig sind, können Sie den Docker-Container mit folgendem Befehl beenden:

    d/shutdown_dev
    
  • Daten werden zwischen den Aufrufen des Containers in Ihrem Quellverzeichnis tmp/postgres gespeichert. Wenn Sie aus irgendeinem Grund Ihre Datenbank zurücksetzen möchten, führen Sie Folgendes aus:

    sudo rm -fr data
    
  • Wenn Sie Fehler wie „permission denied while trying to connect to Docker“ sehen, führen Sie Folgendes aus:

    run `sudo usermod -aG docker ${USER}`
    sudo service docker restart
    
  • Wenn Sie Ports vom Container global für das Netzwerk verfügbar machen möchten (standardmäßig deaktiviert), verwenden Sie:

    d/boot_dev -p
    
  • Die Dockerfile stammt von discourse/discourse_docker auf GitHub, insbesondere image/discourse_dev.

Tests ausführen

d/rake autospec

Um spezifische Plugin-Tests auszuführen, können Sie auch Folgendes tun:

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

Oder sogar etwas wie dies, um noch spezifischer zu sein:

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

Dieses Dokument ist versioniert – schlagen Sie Änderungen auf github vor.

72 „Gefällt mir“
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)

Das Einrichten ist wirklich sehr einfach! Vielen Dank.

Ich bin jedoch überrascht, wie langsam die lokale Installation ist. Gibt es eine Möglichkeit, die Container-Spezifikationen anzupassen? Ich habe mit einer Verlangsamung gerechnet, aber vielleicht nicht mit einer so dramatischen…

Nochmals vielen Dank.

7 „Gefällt mir“

Ich versuche, Docker unter Windows 10 zu nutzen, und habe eine Frage zum Leitfaden. Docker ist installiert und kann einen Ubuntu-Container ausführen (in dem im Grunde nichts installiert ist). Dieser Docker-Leitfaden besagt nur, dass man das Repository klonen soll, aber das kann ich nicht, da im Container kein Git installiert ist.

Soll ich in diesem Fall einfach dem Ubuntu-Leitfaden folgen und alle Voraussetzungen im Container installieren? Oder sollte ich das auf Github referenzierte discourse_dev-Image verwenden? Es scheint, als würden in diesem Leitfaden viele Schritte übersprungen, aber ich habe noch nie Docker verwendet, also fehlt mir vielleicht etwas.

4 „Gefällt mir“

Ich denke, was dich verwirrt, ist, dass du versuchst, das Repository innerhalb des Containers zu klonen, aber der Befehl git clone sollte auf deinem eigenen Rechner ausgeführt werden. Wenn du also bereits lokal Git installiert hast, bist du schon fast so weit, dass es funktioniert.

3 „Gefällt mir“

Das habe ich tatsächlich zuerst gemacht, was gut ist. Ich habe also bereits eine Kopie des Repos auf meinem lokalen Rechner.

Habe ich von selbst Zugriff auf mein Host-Dateisystem aus dem Docker-Container heraus? Ich war teilweise verwirrt durch d/boot_dev --init, weil ich nicht wusste, was der Teil d/ bedeutet (ich sehe beispielsweise keinen Ordner namens d im Repo, obwohl ich boot_dev sehe).

3 „Gefällt mir“

Das d befindet sich im Repository (scrollen Sie weiter nach unten) – es ist kein Ordner, sondern ein Symlink auf bin/docker. Sie sollten es erhalten, wenn Sie das Git-Repository klonen.

Ich habe dieses Setup selbst nicht umfassend genutzt, aber mein Verständnis ist, dass Sie die Quelldateien direkt in Ihrem lokalen Dateisystem bearbeiten (das Sie gerade ausgecheckt haben) und die Docker-Container diesen Pfad mounten und davon ausführen. Die d/*-Skripte erledigen den Großteil der Docker-Einrichtung für Sie.

6 „Gefällt mir“

Danke dafür. Ich hätte nicht einmal daran gedacht, hinter den Ordnern weiter zu suchen. Ich denke, ich habe genug Informationen, um das noch einmal anzugehen.

3 „Gefällt mir“

Ich mache immer noch etwas falsch. Weder in diesem Thema, hier, noch hier wird angegeben, welcher Docker-Befehl ausgeführt werden soll. Ich habe mich für docker run -ti -v LocalRepoPath:/src discourse/discourse_dev entschieden, was eine ganze Menge an Dingen initialisiert und das Repository anscheinend auf /src gemountet hat. Aber aus irgendeinem Grund kann ich d/boot_dev --init nicht ausführen. Selbst wenn ich nur ls im obersten Verzeichnis des Repos ausführe, erhalte ich:

ls: cannot access 'adminjs': Input/output error
ls: cannot access 'd': Input/output error
ls: cannot access 'jsapp': Input/output error

Weiß jemand, was hier los ist?

3 „Gefällt mir“

Du machst das vielleicht zu kompliziert: Das Tutorial im ersten Beitrag enthält bereits alles, was du zum Einstieg benötigst.

Die d/*-Befehle übernehmen die gesamte Docker-Command-Magie, damit du es nicht selbst tun musst. Sobald du das Repository geklont hast, sollten die Befehle d/boot_dev --init und d/unicorn (die du auf dem Host-Rechner ausführst) ausreichen, um http://localhost:9292 zum Laufen zu bringen. Diese Skripte rufen Docker auf, um den Container zu erstellen und zu starten. Mit d/shutdown_dev kannst du ihn stoppen.

Wenn du diese Fehler erhältst, während du durch die Repository-Dateien auf dem Host-Rechner navigierst, scheint mit deinem Dateisystem etwas anderes nicht in Ordnung zu sein. Vielleicht ist der Festplattenspeicher erschöpft?

4 „Gefällt mir“

Seufz, ich verstehe. Ich dachte, diese müssten in Docker ausgeführt werden. Das d/boot_dev --init funktioniert jedoch anscheinend nicht unter Windows in PowerShell (was wohl der Grund ist, warum diese Docker-Anleitung nur Mac- und Ubuntu-Hosts erwähnt). Ich habe versucht, den Befehl in meinem Linux-Subsystem (v1) auszuführen, aber natürlich scheitert dies am Docker-Schritt, da ich Docker unter Windows und nicht im Linux-Subsystem installiert habe.


Als Nächstes habe ich versucht, es in Git Bash für Windows auszuführen. Ich konnte d/boot_dev --init nicht ausführen (Fehler „d/boot_dev: Ist ein Verzeichnis“), aber ich konnte bin/docker/boot_dev --init ausführen. Das kam schon viel weiter, zog eine Menge Pakete, scheiterte dann aber mit:

C:\Program Files\Docker\Docker\resources\bin\docker.exe: Fehlerantwort vom Daemon: Mount verweigert:
Der Quellpfad „PathToRepo/data/postgres;C“
existiert nicht und ist Docker nicht bekannt.

Ich habe das (glaube ich) dadurch umgangen, dass ich den Mount-Pfad wie folgt maskiert habe:
https://stackoverflow.com/questions/50608301/docker-mounted-volume-adds-c-to-end-of-windows-path-when-translating-from-linux

Danach erhielt ich diesen Fehler:

C:\Program Files\Docker\Docker\resources\bin\docker.exe: Fehlerantwort vom Daemon: OCI runtime create failed: container_linux.go:346: starting container process caused “exec: "C:/Program Files/Git/sbin/boot": stat C:/Program Files/Git/sbin/boot: no such file or directory”: unknown.

C:/Program Files/Git/sbin/boot existiert in meinem Dateisystem nicht, also ist der Fehler wohl nicht überraschend. Das einzige, was sbin/boot in der Datei boot_dev erwähnt, ist dieser Teil des Docker-Befehls: discourse/discourse_dev:release /sbin/boot.

Und das ist im Wesentlichen, wo ich gerade stehe… Ich weiß wirklich nicht, was ich als Nächstes versuchen soll.

3 „Gefällt mir“

Ich fürchte, das ist die Grenze meiner Hilfe, da ich mit Windows nicht vertraut bin.

Vielleicht kann @rishabh bestätigen, ob dies auch unter Windows funktionieren soll, und die fehlenden Schritte dafür ergänzen (oder einen Hinweis hinzufügen, falls dies nicht der Fall ist).

3 „Gefällt mir“

@sam Ist das, was ich versuche, überhaupt eine annähernd unterstützte Methode, Discourse für die Entwicklung zu betreiben? Im Windows-Entwicklungs-Thread hast du erwähnt, dies auszuprobieren, aber bisher läuft es nicht besonders gut. Einfache (nicht-Discourse) Ubuntu-Container funktionieren technisch, aber nicht die spezifischen Befehle im OP dieses Threads.

Du hast mir ursprünglich Folgendes gesagt:

Also, solange du keinen Vorschlag hast, wie ich die Probleme mit Docker unter Windows überwinden kann, ist es wahrscheinlich am besten, meine Verluste zu begrenzen und es in einer Ubuntu-VM mit etwas wie VirtualBox laufen zu lassen.

2 „Gefällt mir“

Viele von uns nutzen den langsamen Ring ohne jegliche Probleme. Spiele funktionieren, Steam funktioniert, alles funktioniert.

Ich verstehe die Sorge, aber es ist wirklich kein großes Problem. Wenn dir das dennoch zu riskant erscheint, empfehle ich eine traditionelle virtuelle Maschine wie Hyper-V oder VirtualBox. Installiere dort Docker und nutze unser Docker-Entwicklungssystem.

6 „Gefällt mir“

Wenn dies nicht mein primärer (und einziger) Computer wäre, würde ich mich dem langsamen Ring anschließen, aber ich kann es mir einfach nicht leisten, ein Risiko einzugehen. Ich werde daher eine traditionelle VM mit Docker verwenden. Nochmals vielen Dank für den Rat. Ich hoffe, dass ich bald etwas zum Laufen bringe.

Wie viel Festplattenspeicher und RAM wären für die VM ausreichend? Ich dachte an vielleicht 16 GB Festplattenspeicher und 4 GB RAM, wollte aber zuerst nachfragen.

1 „Gefällt mir“

Das wäre wahrscheinlich ausreichend. Der beste Weg, das ideale Rezept zu finden, ist das Ausprobieren.

6 „Gefällt mir“

Alles klar, ich bin kurz davor, das endlich richtig zum Laufen zu bringen. Ich habe eine lokale Instanz, die mit Docker in einer Ubuntu-VM läuft. Ich gehe davon aus, dass ich d/boot_dev --init nur beim allerersten Mal ausführen sollte und danach einfach d/boot_dev. Stimmt das? Der Grund für meine Frage ist, dass d/unicorn funktioniert, wenn ich --init hinzufüge, aber nicht, wenn ich es bei d/boot_dev weglasse. Wenn der Start fehlschlägt, erhalte ich folgende Fehlermeldung:

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

Doch wenn ich dann bundle install ausführe, schlägt dies fehl mit:

actionview_precompiler-0.2.2 requires ruby version >= 2.6, which is incompatible with the current version, ruby 2.5.1p57

Gibt es eine bestimmte Ruby-Version, auf die ich updaten sollte? Oder liegt etwas anderes vor?


Meine VM ist Ubuntu 18.04 (LTS), und dieses Mal konnte ich die Anweisungen im Originalbeitrag direkt befolgen. Daher bin ich mir nicht sicher, wo ich möglicherweise einen Fehler gemacht habe (falls überhaupt etwas falsch ist).

2 „Gefällt mir“

Du würdest nicht bundle install verwenden, sondern d/bundle install. Du möchtest das Bundle innerhalb des Containers installieren; die VM benötigt kein Ruby.

4 „Gefällt mir“

Ja, ich hatte das Gefühl, dass das der Fall ist, wusste nur nicht, wie man es richtig im Container ausführt. Nochmals vielen Dank für die Hilfe!

2 „Gefällt mir“

Ich habe die neueste Version des Repositories gezogen, und wie üblich sagt d/unicorn mir: „Führen Sie bundle install aus, um fehlende Gems zu installieren.

1 „Gefällt mir“

Konnten Sie rubygems.org erreichen?

1 „Gefällt mir“