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 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

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

Odio riprendere questo argomento, ma è ancora rilevante. Tutto si installa splendidamente per quanto riguarda Discourse, sembra tutto a posto, ma le porte 80 e 443 non sono raggiungibili dall’esterno.


Aggiornamento: L’installazione di base funziona davvero subito su Azure con Ubuntu Server.

Queste sono le cose che ho fatto diversamente la seconda volta:

  1. Dopo la creazione della VM e l’esecuzione di discourse-setup, non ho interrotto il processo, quindi tutto è stato eseguito in un’unica soluzione.

    La prima volta ho capito di non avere swap, e anche se lo script discourse-setup lo configura se manca, sono uscito dalla shell per controllare delle cose. Poi alcuni prompt di installazione erano diversi rispetto a la guida di base, quindi sono uscito un’altra volta.

    + Ciò che mi ha sconcertato è stato il passaggio relativo a Let’s Encrypt, che chiedeva un indirizzo email per ricevere notifiche al riguardo, e avevo l’impressione di dover configurare manualmente HTTPS. In realtà, lo script configura l’istanza di Discourse con un certificato SSL di Let’s Encrypt.
    + Un’altra cosa riguardava le sezioni per nome utente e password SMTP; non sono ancora sicuro se avrei potuto lasciarle vuote, ma ho semplicemente aggiunto l’indirizzo email dell’amministratore e la password per quell’account.

  2. Ho configurato manualmente lo spazio swap seguendo questo thread su meta.discourse.

    Non credo che questo abbia avuto a che fare con il problema, ma lo menziono per precauzione. La seconda volta ho fatto tutto come la prima, tranne che per (1) la configurazione manuale dello swap e (2) aver lasciato che discourse-setup venisse eseguito senza interruzioni.

È possibile che la prima istanza potesse essere salvata, ma l’architettura di Discourse è ancora un mistero per me e non sono sicuro di come riavviare gli endpoint HTTP/HTTPS. Confrontando gli output di netstat -tulpn, è chiaro che nella prima istanza tutti i servizi rilevanti sembrano essere in esecuzione e in ascolto sulle porte corrette (ad esempio, PostgreSQL sulla 5432, Redis sulla 6379, ecc.) e le uniche due voci mancanti sono le porte 80 e 443 (il che suggerisce che nginx non era in esecuzione):

Prima istanza (fallita):

$ 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  -

Seconda istanza:

(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  -

Alcune note per il mio futuro io:

  1. La prima volta, ho notato la mancanza delle porte in ascolto 80 e 443, ma ho visto il socket 127.0.0.1:3000 (che ricordavo essere quello predefinito di Rails). Non mi era ancora venuto in mente che forse nginx non era in esecuzione e, per qualche motivo, sospettavo ancora che la colpa fosse delle mappature delle porte di Docker, quindi ho fatto un reindirizzamento di base con netcat:

    Dentro Docker: nc -l -p 80 -c "nc 127.0.0.1 3000"
    Fuori Docker nella VM: nc -zv localhost 80 e curl localhost:80 (questo ha confermato che Docker funzionava)

  2. Ho anche pensato che le regole delle porte in entrata di Azure fossero sospette, perché nc -zv continuava a restituire Connection refused, ma poi ho capito che questo significa solo che le porte sono aperte ma nessuno sta ascoltando dall’altra parte. (Se le porte fossero state bloccate, nc si sarebbe semplicemente bloccato.)

1 Mi Piace

discourse-setup dovrebbe fallire se le porte 80 e 443 non sono aperte al traffico in ingresso.

Ah, è vero. Alcune domande relative alla configurazione della posta sono state modificate tempo fa, ma non aggiornate nella guida. Penso che la maggior parte delle persone legga le domande a schermo e non il documento di installazione, quindi nessuno si è lamentato.

Perché pensavi questo? Il processo di installazione configura automaticamente Let’s Encrypt da anni.

Non riesco a capire se stai dicendo che il tuo sito funziona o meno.

Se non funziona, è molto probabile che tu abbia eseguito discourse-setup diverse volte e abbia esaurito il limite di richieste su letsencrypt.org.

2 Mi Piace

Ecco una PR per rendere install-cloud identico a discourse-setup: update INSTALL-cloud for discourse-setup by pfaffman · Pull Request #14065 · discourse/discourse · GitHub

2 Mi Piace

Questo argomento è stato chiuso automaticamente dopo 3095 giorni. Non sono più consentite nuove risposte.