I’m an engineer at Compose/IBM and I’m attempting to setup Discourse using our production-ready, replicated databases. I’d like to run a web_only instance with external Redis & PostgreSQL
I also couldn’t find configuration parameters for failover support:
We supply two URIs “portals” for connection failover. I don’t have a ton of time to dig through the Discourse codebase and see which client driver you are using.
Lastly, we use SSL (using valid LE certs) for both Redis and PostgreSQL. Is your app configured for SSL support?
Thanks!
P.S. I’m reaching out personally, not officially from IBM/Compose. I enjoy Discourse and have been considering writing an article on how to configure Discourse using our services:
You can see all of the possible global vars documented at:
You can pass in config from your environment, all the settings below are available.
Append DISCOURSE_ and upper case the setting in ENV. For example:
to pass in db_timeout of 200 you would use DISCOURSE_DB_TIMEOUT=200
Ich mache das für eine docker-compose-Anwendung, und obwohl ich die Umgebungsvariable für DISCOURSE_REDIS_HOST (als redis) exportiert habe, wird diese Variable nicht berücksichtigt:
name, 'name', name),\n updated_at,\n created_at,\n updated_at\nFROM facebook_user_infos\n")
discourse_1_9cc0cea436ca | rake aborted!
discourse_1_9cc0cea436ca | Redis::CannotConnectError: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED)
discourse_1_9cc0cea436ca | /usr/local/bundle/gems/redis-4.0.1/lib/redis/client.rb:344:in `rescue in establish_connection'
Mein vollständiger Code ist hier, falls du ihn prüfen möchtest. Aus irgendeinem Grund werden die Variablen (die berücksichtigt werden sollten) nicht beachtet. Zum Kontext: Ich möchte wirklich bei einem Plugin helfen, aber die Einstiegshürden (Einrichtung einer grundlegenden Entwicklungsumgebung ohne Installation alles auf meinem Host!) sind riesig. Das einzige Mal, dass ich Discourse zum Laufen gebracht habe, war mit dem Bitnami-Image, wovon mir (irgendwo anders) gesagt wurde, dass es nicht der richtige Weg ist. Bitte hilf mir – das sollte nicht so schwierig sein, besonders wenn ich meine Freizeit dafür opfern möchte, weil ich helfen will
Ich bin mir nicht ganz sicher, warum du dieses Problem hast, aber du wirst deutlich weniger Schwierigkeiten haben, wenn du diese empfohlene Methode befolgst: Install Discourse for development using Docker
Vielleicht lese ich den Code falsch, aber das bin/docker/boot_dev-Skript mit --init-Option interagiert immer noch mit einer Datenbank und Abhängigkeiten auf dem Host.
Beim zweiten Thread: Worauf genau soll ich achten? Er hat 151 Beiträge. Danke!
Diese Variable wird in der Produktion problemlos beachtet.
Für die Entwicklung suchen wir standardmäßig nach einer lokalen Instanz, was problemlos funktioniert, wenn Sie eine der unterstützten Entwicklungsumgebungen verwenden.
Ich führe es mit ‘production’ als Umgebungsvariable aus, aber sie wurde nicht beachtet. Als Workaround habe ich die Konfiguration mit sed geändert, und das hat es behoben. Es gibt immer noch zahlreiche andere Probleme, an denen ich arbeite.
Zum Beispiel beginne ich damit, explizit zu sagen, dass nicht daemonisiert werden soll (um den Container am Laufen zu halten):
bundle exec rails s --port 3000 --no-daemon --environment=production --binding 0.0.0.0
Aber es scheint trotzdem zu entscheiden, dies zu tun! Und logischerweise wird der Container dann beendet.
discourse_1_f60e0e3f1186 | [358] Puma startet im Cluster-Modus...
discourse_1_f60e0e3f1186 | [358] * Version 3.12.1 (ruby 2.6.3-p62), Codename: Llamas in Pajamas
discourse_1_f60e0e3f1186 | [358] * Min-Threads: 8, Max-Threads: 32
discourse_1_f60e0e3f1186 | [358] * Umgebung: production
discourse_1_f60e0e3f1186 | [358] * Prozess-Worker: 4
discourse_1_f60e0e3f1186 | [358] * Vorladen der Anwendung
discourse_1_f60e0e3f1186 | [358] * Lauschen auf tcp://0.0.0.0:3000
discourse_1_f60e0e3f1186 | [358] * Daemonizing...
docker-compose-discourse_discourse_1_f60e0e3f1186 wurde mit Code 0 beendet
Es ist seltsam, dass es Argumente, Anweisungen und Umgebungsvariablen für Dinge gibt, die jedoch nicht wirklich beachtet werden. Es ist schwer zu sagen, wem man vertrauen soll.
Warum kann ich keine Produktionsumgebung ausführen und für die Entwicklung verwenden? Und was macht Sidekiq? Sollte es separat ausgeführt werden, um die Anwendung zu starten? Zum Beispiel habe ich einen weiteren Container (gleiche Basis) mit einem Startbefehl:
bundle exec sidekiq
Und er hängt vom Haupt-Discourse-Container ab (Migrieren der Datenbank, Kompilieren statischer Inhalte usw.). Alles scheint zu funktionieren, aber es gibt keine Webanwendung.
Ich bin gerne bereit, dafür mehr Zeit zu investieren, zumal ich noch nichts angefangen habe. Allerdings benötige ich eine Lösung, bei der ich keine Datenbank auf meinem Host installieren muss. Mit Containern sollte das nicht nötig sein. Und erneut: Die Compose-Anwendung unter GitHub - vsoch/discourse-compose: docker-compose with discourse · GitHub scheint zu funktionieren (keine Fehler in den Logs), doch es gibt keine Anwendung.
Das ist nachvollziehbar, aber sagen wir, ich führe die Vorabkompilierung ohnehin durch (das dauert ja eine Weile!) und möchte den Server starten. Warum funktioniert das dann nicht?
Okay, ich habe nachgegeben und den Befehl --init ausgeführt. Ich kann bestätigen, dass der Container läuft:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d2254e1374f5 discourse/discourse_dev:release "/sbin/boot" 24 minutes ago Up 24 minutes 0.0.0.0:1080->1080/tcp, 0.0.0.0:3000->3000/tcp, 0.0.0.0:9292->9292/tcp, 0.0.0.0:9405->9405/tcp discourse_dev
Aber ich sehe keine Einträge dafür auf irgendeinem Port. Ich habe zwei Browser, localhost, 127.0.0.1 und 0.0.0.0 ausprobiert, und es gibt keine Webanwendung. Der Fehler lautet ERR_CONNECTION_RESET. Ich sehe nichts in iptables, das dies blockieren würde:
Danke an alle für die Hilfe – das Problem war, dass der Befehl “unicorn” ausgeführt werden musste, und jetzt funktioniert alles. Außerdem musste ich rake admin:create im Startbefehl ausführen, sonst wird eine E-Mail-Bestätigung verlangt (vollständiges Repository hier). Auch discourse_dev funktioniert.