Sie müssen sicherstellen, dass beide Container sich im selben Docker-Netzwerk befinden. Wenn NPM nicht funktioniert, haben Sie (noch) kein Discourse-Konfigurationsproblem.
Ich habe versehentlich das MariaDB-Docker-Netzwerk vergessen; aber nach dem Hinzufügen von
network_mode: bridge
erhalte ich immer noch npm-Fehler bei der Verbindung zur Discourse-Datenbank;
environment:
DB_MYSQL_HOST: "172.17.0.2" # Datencontainer - aber ich erhalte einen Fehler (error connect ECONNREFUSED 172.17.0.2:3306), wenn er aktiviert ist.
# DB_MYSQL_HOST: "db" Standard-npm-Datenbank (außerhalb von Discourse).
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "h4xb0xr1z__0k"
DB_MYSQL_NAME: "npm"
wenn npm und Maria hochgefahren und laufen, sind die Logs von Maria gut… aber npm
error connect ECONNREFUSED 172.17.0.2:3306
fehlt etwas?
meine docker-compose-Datei
version: "3"
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
network_mode: bridge
restart: unless-stopped
ports:
- '80:80' # Öffentlicher HTTP-Port
- '443:443' # Öffentlicher HTTPS-Port
- '81:81' # Admin-Web-Port
environment:
DB_MYSQL_HOST: "172.17.0.2" # Datencontainer - aber ich erhalte einen Fehler (connect ECONNREFUSED 172.17.0.2:3306), wenn er aktiviert ist.
# DB_MYSQL_HOST: "db" Standard-npm-Datenbank (außerhalb von Discourse).
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "mypassword"
DB_MYSQL_NAME: "npm"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
# depends_on:
# - db
db:
image: 'mariadb:latest'
restart: unless-stopped
network_mode: bridge
environment:
MYSQL_ROOT_PASSWORD: 'mypassword'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'mypassword'
volumes:
- ./data/mysql:/var/lib/mysql
Ich habe Discourse mit data + web-only laufen, die Zuordnung der IPs nach npm und Maria sieht wie folgt aus:
IP des Datencontainers: 172.17.0.2
IP von web_only: 172.17.0.3
IP von npm: 172.17.0.5
IP von Maria-Daten (npm): 172.17.0.4
Hallo @tophee
Können Sie uns Ihre Empfehlung zur Verwendung von SQLite mit NPM geben, da es einfacher und vertrauenswürdiger ist als die Probleme mit mariadb;
Ich habe NPM mit SQLite eingerichtet und alles funktioniert einwandfrei, nginx Virtual Host, SSL usw. Aber ich möchte sicherstellen, wie ich die Datenbank von Discourse mit NPM verbinden kann? Da ich eine 502-Fehlermeldung für das NPM-Setup mit der Discourse-Site erhalte.
mein docker-compose
version: "3"
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: always
network_mode: bridge
ports:
# Public HTTP Port:
- '80:80'
# Public HTTPS Port:
- '443:443'
# Admin Web Port:
- '81:81'
environment:
DB_SQLITE_FILE: "/data/database.sqlite"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
Nein, meine Empfehlung ist, die Standardeinstellung von NPM zu verwenden, es sei denn, Sie wissen, was Sie tun. Das ist der Grund, warum ich die Standardeinstellung verwende.
Sie brauchen Schritt 3 nicht, wenn Sie den Discourse-Container über Websocket verbinden.
Das liegt daran, dass
Sind Sie sicher, dass 172.17.0.2 Ihr DB-Container ist? - Auf jeden Fall: Sie können sich diese Mühe ersparen, indem Sie NPM in seinem eigenen Netzwerk belassen und Discourse über WebSockets verbinden.
Danke @tophee für die Klärung, ich habe alles erledigt und korrigiert, aber es scheint, dass ich kein Websocket verwendet habe und mich auf den Port mit dem NPM-Setup und den Discourse-Containern konzentriert habe;
Mein Problem mit NPM war mit CloudFlared Argo Tunnel. Nachdem ich das Setup von NPM, SSL, alles abgeschlossen hatte, konnte ich CloudFlared Argo Tunnel ausführen, aber das Problem war, dass CloudFlared nicht als sekundärer Proxy ausgeführt werden kann, wo wir NPM deaktivieren müssen, um vor dem Ursprungs-Web zu stehen; Der Fehler, den ich von CloudFlare erhalte, ist dieser:
Fehler 1000: DNS zeigt auf verbotene IP
Nachdem ich diesen Fehler mit Cloudflare gesucht habe, erhalte ich Folgendes:
Es gibt einen Reverse-Proxy an Ihrem Ursprung, der die Anfrage zurück durch den Cloudflare-Proxy sendet. Anstatt einen Reverse-Proxy zu verwenden, wenden Sie sich an Ihren Hosting-Provider oder Site-Administrator, um eine HTTP-Weiterleitung an Ihrem Ursprung zu konfigurieren.
Wie können wir NPM als Reverse-Proxy deaktivieren?
Mein Ziel ist es, dass die Ursprungs-IP ohne NPM funktioniert, während NPM installiert und funktionsfähig ist, damit Cloudflared mit unserem Server kommunizieren kann?
Deinstalliere NPM. Der ganze Sinn von NPM ist es, als Reverse-Proxy zu fungieren. Wenn du keinen Reverse-Proxy möchtest, schalte ihn aus.
Ich verstehe den Punkt nicht ganz und habe sicherlich keine Ahnung davon. Du solltest wahrscheinlich das NPM-Forum oder so etwas überprüfen. Das hat nichts mit Discourse zu tun.
Ich habe dort bereits geöffnet; und ich diskutiere hier auch, und ja, ich habe es nach 2 Tagen Herumspielen deaktiviert; aber ich würde hinzufügen, wie ich benutzerdefinierte Portunterstützung mit Discourse und NPM hier hinzufüge, da dieses Thema nur Socket-Nginx mit npm unterstützt;
Danke.
Nein. Es unterstützt nicht nur Sockets, es sei denn, Sie folgen den Socket-Anweisungen. Es besagt, dass Sie Sockets nicht verwenden müssen:
Als ich dies das letzte Mal getestet habe, funktionierte es einwandfrei mit einem Port, wie vorgeschlagen.
Diese Anweisungen haben mir geholfen, Discourse mit Nginx Proxy Manager einzurichten.
Der Browser gibt jedoch “Mixed Content”-Fehler aus, wenn versucht wird, Schriftarten und Bilder von http zu laden.
Sie können “HTTPS erzwingen” in Links mit der Option hier:
Wow, das ist ein ziemlich kompliziertes Thema mit vielen Wenn und Aber.
Heute habe ich mich auch an das Setup gewagt und bin leider kläglich gescheitert. Die Anleitungen sind gut gemeint, aber meiner Meinung nach nicht so einfach zu verstehen/nachzuvollziehen.
Wenn ich mit Docker arbeite, möchte ich in der Regel, dass die Container getrennt/isoliert voneinander laufen. Nicht zu viele Abhängigkeiten, Voraussetzungen und „Single Points of Failure“. Aber genau das sind die Probleme, die durch den Ansatz entstehen: NPM ist ein tolles Werkzeug. Ich verstehe nicht, warum ich spezielle Anpassungen an seiner Docker-Konfiguration vom Proxy Manager vornehmen muss, damit Discourse glücklich ist und er ihm Zertifikate bereitstellt. Zuhause nutze ich den NPM auch für meine DynDNS-Domain, damit ich jederzeit flexibel Dienste und Hosts zuweisen kann. Und einige davon öffentlich zugänglich machen kann (Home Assistant, Grafana, …).
Ich wollte heute meine beiden Discourse-Instanzen zusammenführen. Ich habe extra einen Cloud-Server von Hetzner/Deutschland gemietet. Deshalb war DIscourse nicht vorinstalliert, wie die Anleitungen es voraussetzen.
Ich wünschte, Discoruse würde die Installation mit NPM standardmäßig offiziell anbieten. Oder zumindest nicht so viel Ärger mit dem Skript ./discourse-setup machen.
Nur eine kleine Anleitung zur Installation mehrerer Instanzen 
In diesem Fall beginnen wir mit einer sauberen Serverinstallation und möchten möglicherweise später eine alte Instanz wiederherstellen.
Schritt 0: Backup!!!
Laden Sie das Backup herunter. Sie werden es später brauchen.
Schritt 1: NGINX Proxy Manager
mkdir -p /opt/nginx-proxy-manager
cd /opt/nginx-proxy-manager
nano docker-compose.yml
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: always
ports:
- '80:80' # http / reserviert!
- '81:81' # web-admin port
- '443:443' # https / reserviert!
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
und schließlich: docker-compose up -d
(Für noch faulere Leute, wie mich manchmal, verwenden Sie einfach casaOS (auf einem beliebigen Port außer ≠ 80/81/443). Stellen Sie einfach sicher, dass Sie sichere Anmeldedaten und einen zusätzlichen Proxy-Host mit Ihrem SSL-Zertifikat für eine zusätzliche Sicherheitsebene verwenden. Sie können sogar einige Firewall-Regeln einrichten, wenn Sie wissen, was Sie tun.)
Schritt 2: Docker-Installation auf Ubuntu Server
sudo apt update && apt upgrade -y
sudo apt install apt-transport-https ca-certificates curl software-properties-common
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 update
sudo apt-get install docker-ce docker-ce-cli containerd.io
Schritt 3: Vorbereitung der Discourse-Installation
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cp /var/discourse/samples/standalone.yml /var/discourse/containers/app1.yml
nano /var/discourse/containers/app1.yml
cp /var/discourse/samples/standalone.yml /var/discourse/containers/app2.yml
nano /var/discourse/containers/app2.yml
Nehmen Sie alle notwendigen Änderungen an Ihren app.yml-Dateien vor. Dazu gehören unterschiedliche exponierte Ports für jede Instanz (ja, Sie können sie auch zur Wartung verwenden), E-Mail-Einstellungen und so weiter.
z.B. app1 erhält Port 8080/1443 und app2 erhält Port 8081/2443 für http/https.
/var/discourse/launcher rebuild app1
/var/discourse/launcher rebuild app2
Schritt 4: Zu guter Letzt die Konfiguration des NGINX Proxy Managers
Schauen Sie sich dies an, um ein grundlegendes Verständnis der Verwendung des NGINX Proxy Managers zu erhalten.
Alles, was Sie tun müssen, ist, Ihre Proxy-Host-Einträge auf jede Instanz zu verweisen (http-Port, z. B. 8080 und 8081 mit Ihrer lokalen oder öffentlichen IP, das ist Ihre Entscheidung) und Sie können kostenlose Let’s Encrypt-Zertifikate für jede Instanz & Domain erhalten. Stellen Sie einfach sicher, dass Sie Force SSL und so weiter aktivieren.
Schritt 5: Fertig. Trinken Sie eine Tasse Kaffee.
In meinem Fall funktioniert es perfekt.
Es kann einige kleinere Probleme mit den vorinstallierten Softwareabhängigkeiten geben, aber ich bin sicher, Sie werden eine Lösung finden. Seien Sie nicht böse auf mich wegen meines casaOS-Tipps. Aber für Leute, die gerne mit ihren Servern herumspielen, alle verfügbaren Ressourcen auf einfache, sichere und geschützte Weise nutzen, bin ich sicher, dass Sie dieses Docker-Management interessant finden werden.
Schritt 6: Stellen Sie schließlich Ihre vorherigen Backups wieder her.
Kann ich dies mit Cloudflare Tunnel für die Domain kombinieren?
Sicher, warum nicht?
Stellen Sie einfach sicher, dass Sie den richtigen Port freigeben und diesen Port für Ihre Domain in Cloudflare Tunnels einrichten.
Persönlich bevorzuge ich diese Lösung nicht, da sie mich von Cloudflare abhängig macht und jeder Tunnel-Agent ein Loch
in meine Firewall bohrt, was mir das Gefühl gibt, ein Trojanisches Pferd zu installieren.
Firewall-Management ist für Server-Admins unerlässlich. Sie haben einige Hausaufgaben zu erledigen, bevor Sie Websites in der DMZ freigeben.
