Ich muss dieses Thema leider wieder nach oben holen, aber es ist immer noch relevant. Alles installiert sich Discourse-seitig einwandfrei, alles scheint in Ordnung zu sein, aber die Ports 80 und 443 sind von außen nicht erreichbar.
Update: Die Basisinstallation funktioniert auf Azure mit Ubuntu Server problemlos out of the Box.
Das habe ich beim zweiten Mal anders gemacht:
-
Nach der Erstellung der VM und dem Aufruf von
discourse-setuphabe ich den Prozess nicht unterbrochen, sodass alles in einem Durchgang ausgeführt wurde.Beim ersten Mal stellte ich fest, dass ich keinen Swap hatte. Obwohl das
discourse-setup-Skript diesen bei Bedarf automatisch einrichtet, bin ich zur Shell gewechselt, um einige Dinge zu überprüfen. Dann waren einige Installationsaufforderungen anders als in dem Basisleitfaden, weshalb ich erneut abgebrochen habe.+ Was mich verwirrte, war die Let’s Encrypt-Abfrage, bei der nach einer E-Mail-Adresse für Benachrichtigungen gefragt wurde. Ich war der Meinung, HTTPS manuell einrichten zu müssen. Tatsächlich richtet das Skript die Discourse-Instanz jedoch mit einem Let’s Encrypt-SSL-Zertifikat ein.
+ Eine weitere Sache betraf die Abschnitte für SMTP-Benutzername und Passwort; ich bin mir immer noch nicht sicher, ob ich diese einfach leer lassen hätte können, aber ich habe stattdessen die Admin-E-Mail-Adresse und das Passwort für dieses Konto angegeben. -
Swap-Speicher manuell eingerichtet gemäß diesem Meta.Discourse-Thread.
Ich glaube nicht, dass dies etwas damit zu tun hatte, aber ich erwähne es nur zur Sicherheit. Beim zweiten Mal habe ich alles genauso gemacht wie beim ersten Mal, außer dass ich (1) den Swap manuell eingerichtet und (2)
discourse-setupohne Unterbrechungen laufen ließ.
Es ist möglich, dass die erste Instanz noch gerettet werden könnte, aber die Architektur von Discourse ist mir immer noch ein Rätsel, und ich bin mir nicht sicher, wie ich die HTTP/HTTPS-Endpunkte neu starten soll. Beim Vergleich der Ausgaben von netstat -tulpn ist klar, dass in der ersten Instanz alle relevanten Dienste scheinbar laufen und auf den richtigen Ports lauschen (z. B. PostgreSQL auf 5432, Redis auf 6379 usw.), und die einzigen beiden fehlenden Einträge sind die Ports 80 und 443 (was darauf hindeutet, dass nginx nicht lief):
- Instanz (fehlgeschlagen):
$ sudo -s
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
62396a99737c local_discourse/app "/sbin/boot" 14 hours ago Up 14 hours 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp app
# docker exec -it 62396a99737c bash
(docker)# netstat -tulpn
Active Internet connections (only servers)
Proto Local Address Foreign Address State PID/Program name
tcp 127.0.0.1:3000 0.0.0.0:* LISTEN -
tcp 0.0.0.0:5432 0.0.0.0:* LISTEN -
tcp 0.0.0.0:6379 0.0.0.0:* LISTEN -
tcp6 :::5432 :::* LISTEN -
tcp6 :::6379 :::* LISTEN -
- Instanz:
(docker)# netstat -tulpn
Active Internet connections (only servers)
Proto Local Address Foreign Address State PID/Program name
tcp 0.0.0.0:6379 0.0.0.0:* LISTEN -
tcp 0.0.0.0:80 0.0.0.0:* LISTEN 2359/nginx: master
tcp 127.0.0.1:3000 0.0.0.0:* LISTEN -
tcp 0.0.0.0:5432 0.0.0.0:* LISTEN -
tcp 0.0.0.0:443 0.0.0.0:* LISTEN 2359/nginx: master
tcp6 :::6379 :::* LISTEN -
tcp6 :::5432 :::* LISTEN -
Ein paar Notizen für mich selbst für die Zukunft:
-
Beim ersten Mal fiel mir das Fehlen der Listener-Ports 80 und 443 auf, aber ich sah den Socket
127.0.0.1:3000(an den ich mich als den Standard-Rails-Port erinnerte). Es ist mir noch nicht aufgefallen, dass vielleicht nginx nicht lief, und aus irgendeinem Grund verdächtigte ich weiterhin die Docker-Port-Mappings, weshalb ich eine einfache Weiterleitung mit netcat durchführte:Innerhalb von Docker:
nc -l -p 80 -c "nc 127.0.0.1 3000"
Außerhalb von Docker in der VM:nc -zv localhost 80undcurl localhost:80(damit war geklärt, dass Docker in Ordnung war) -
Ich hielt auch die Azure-Eingangsportregeln für verdächtig, weil
nc -zvweiterhinConnection refusedzurückgab. Mir wurde dann jedoch klar, dass dies nur bedeutet, dass die Ports geöffnet sind, aber niemand auf der anderen Seite lauscht. (Wenn die Ports blockiert wären, würdenceinfach hängen bleiben.)