Discourse installation on Azure not reachable

I created a new Ubuntu 14.04 VM on Microsoft Azure and installed Discourse using the guide here: discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub

The entire installation went perfectly, but the instance is not reachable publicly. I have the A record configured to the public IP given by Azure. I also tried using the IP address directly.

I suspect this has something to do with the Docker IP and the Eth0 IP address, but not sure how to solve it.

# ifconfig
docker0   Link encap:Ethernet  HWaddr 02:42:4c:29:e0:92  
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:4cff:fe29:e092/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6144 errors:0 dropped:0 overruns:0 frame:0
          TX packets:21683 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:414603 (414.6 KB)  TX bytes:30771613 (30.7 MB)

eth0      Link encap:Ethernet  HWaddr 00:0d:3a:00:15:21  
          inet addr:10.0.0.4  Bcast:10.0.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20d:3aff:fe00:1521/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1079091 errors:0 dropped:0 overruns:0 frame:0
          TX packets:634212 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1254465906 (1.2 GB)  TX bytes:318586926 (318.5 MB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:7245 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7245 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:986455 (986.4 KB)  TX bytes:986455 (986.4 KB)

vethcb56e42 Link encap:Ethernet  HWaddr 6a:43:07:bb:63:3f  
          inet6 addr: fe80::6843:7ff:febb:633f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2717 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2896 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:225111 (225.1 KB)  TX bytes:3277314 (3.2 MB)

So essentially I have 3 IPs: the public IP, the eth0 IP on the VPN, and then the docker instance IP. I’m guessing I need to somehow route the public IP:80 port to the docker IP?

Please help. Thank you.

1 „Gefällt mir“

Currently we do not officially support Discourse installation on Microsoft Azure. We recommend using DigitalOcean.

Supporting Discourse installation on Microsoft Azure is on my to-do list and I plan to make a how-to guide for same by the end of January 2016.

Provided Docker installed correctly, I am unclear why the current guide would not work…

Crazy cloud shenanigans likely get in the way – there’s probably some equivalent of AWS’ security groups, or perhaps the networking stack needs an extra kick in the pants.

3 „Gefällt mir“

So I sort of found the problem, but not the cure. As expected it has to do with the port forwarding/mapping/routing issue.

Azure VMs are part of a resource group with a common virtual public IP and a VPN/subnet for individual machines. Then there is a Network Security Group, with which one has to define some NAT rules.

I did setup forwarding for the Docker ports, but to no avail. Now trying to diagnose using Docker documentation. Jeff is right, once Docker works correctly, Discourse will work too.

The Azure classic VM should be better because they allow mapping of specific endpoints (ports). Will try installing in one of those.

Will post my updates. For better or for worse, I’m stuck with Azure at the moment.

5 „Gefällt mir“

Ok. So I discarded the instance of Ubuntu and created a new Ubuntu VM of the classic type. Then I chose a fixed Instance IP address. Then I created two endpoints for TCP/80 and TCP/443 to forward from the public to private network. Also I installed Docker from the instructions for Ubuntu and not the script directly.

I’m not sure which of these steps helped, but now Discourse works on Azure!

Thank you all!

9 „Gefällt mir“

Hi there!

Resetting my discourse installation on azure, I cannot reach it anymore!

It was working before, but by now, it doesn’t! I map the public ports to the vm and inside the vm to the docker installation. It all worked before.

Any idea where to start over? Where to check, what is up and running? Docker is running (according to pgrep).

Any help appreciated!
Bernd

I finally switched to digital ocean, where it works out of the box. The VM classic type seems not to be available anymore at Azure? Tried to setup an instance without success…

Regards,
Bernd

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:

  1. Nach der Erstellung der VM und dem Aufruf von discourse-setup habe 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.

  2. 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-setup ohne 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):

  1. 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  -

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

  1. 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 80 und curl localhost:80 (damit war geklärt, dass Docker in Ordnung war)

  2. Ich hielt auch die Azure-Eingangsportregeln für verdächtig, weil nc -zv weiterhin Connection refused zurü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ürde nc einfach hängen bleiben.)

1 „Gefällt mir“

discourse-setup sollte fehlschlagen, wenn die Ports 80 und 443 nicht für eingehenden Verkehr geöffnet sind.

Ah, das stimmt. Einige Fragen zur E-Mail-Konfiguration wurden vor einiger Zeit geändert, aber der Leitfaden wurde nicht aktualisiert. Ich denke, die meisten Leute lesen die Aufforderungen und nicht das Installationsdokument, daher hat sich niemand anderes beschwert.

Warum hast du das gedacht? Der Installationsprozess richtet seit Jahren automatisch Let’s Encrypt ein.

Ich kann nicht feststellen, ob du sagst, dass deine Seite funktioniert oder nicht.

Wenn sie nicht funktioniert, liegt es wahrscheinlich daran, dass du discourse-setup mehrmals ausgeführt hast und dein Limit bei letsencrypt.org erschöpft hast.

2 „Gefällt mir“

Hier ist ein PR, um install cloud mit discourse-setup gleichzusetzen: update INSTALL-cloud for discourse-setup by pfaffman · Pull Request #14065 · discourse/discourse · GitHub

2 „Gefällt mir“

Dieses Thema wurde nach 3095 Tagen automatisch geschlossen. Neue Antworten sind nicht mehr möglich.