Verwenden Sie Nginx Proxy Manager, um mehrere Websites mit Discourse zu verwalten

Sie müssen sicherstellen, dass beide Container sich im selben Docker-Netzwerk befinden. Wenn NPM nicht funktioniert, haben Sie (noch) kein Discourse-Konfigurationsproblem.

1 „Gefällt mir“

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?

1 „Gefällt mir“

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

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.

2 „Gefällt mir“

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?

1 „Gefällt mir“

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.

2 „Gefällt mir“

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.

1 „Gefällt mir“

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.

1 „Gefällt mir“

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:

1 „Gefällt mir“

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.

1 „Gefällt mir“

Nur eine kleine Anleitung zur Installation mehrerer Instanzen :disguised_face:

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.

1 „Gefällt mir“

Kann ich dies mit Cloudflare Tunnel für die Domain kombinieren?

1 „Gefällt mir“

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 :hole: 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.