Loomio derrière un reverseproxy

Bonjour à tous

Voila les régles iptables mises en place lors d’une installation de docker et de loomio

iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
DOCKER-ISOLATION  all  --  anywhere             anywhere
DOCKER     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain DOCKER (1 references)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             172.17.0.6           tcp dpt:prospero-np
ACCEPT     tcp  --  anywhere             172.17.0.7           tcp dpt:https
ACCEPT     tcp  --  anywhere             172.17.0.7           tcp dpt:http

Chain DOCKER-ISOLATION (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

Comme j’ai un bug récurant, pour test, je voudrais ajouter la règle

ACCEPT tcp – anywhere 172.17.0.4 sur le port 3000

dans Chain DOCKER

en effet j’ai depuis 3 semaines des erreurs de ce type:

nginx_1 | nginx.1 | 2016/06/20 07:56:07 [error] 42#42: *46 connect() failed (111: Connection refused) while connecting to upstream, client: 172.16.0.15, server: loomio.mondomaine.com, request: “POST /api/v1/drafts/user/1 HTTP/1.1”, upstream: “http://172.17.0.4:3000/api/v1/drafts/user/1”, h ost: “loomio.mondomaine.com”, referrer: "https://loomio.mondomaine.com/groups"
nginx_1 | nginx.1 | 2016/06/20 07:56:07 [warn] 42#42: *46 upstream server temporarily disabled while connecting to upstream, client: 172.16 .0.15, server: loomio.mondomaine.com, request: “POST /api/v1/drafts/user/1 HTTP/1.1”, upstream: “http://172.17.0.4:3000/api/v1/drafts/user/1”, host: “loomio.mondomaine.com”, referrer: “https://loomio.mondomaine.com/groups

172.16.0.15 étant mon reverse proxy apache
172.17.0.4 étant un de mes dockers hébergés sur 172.16.0.85

les connections fonctionnent à merveille sur HTTP et HTTPS entre mon reverse proxy et l’hote des dockers, mais je me traine ce boulet de connection sur http://172.17.0.4:3000/

Par avance merci

Ce jeu de règles ne sert à rien : tout est à ACCEPT.
Ajouter une règle ACCEPT n’apportera rien de plus.

Sur quelle machine est ce jeu de règles ?

Merci Pascal pour ton coup de main

Cette règle est sur le serveur host des dockers donc sur la 172.16.0.85

C’est un serveur virtualisé.

Soucis réglé avec la désinstallation et suppression de exim4 sur mon hôte et la mise en place d’un certificat https avec let’s encrypt sur mon reverse proxy apache.

Le coup du certificat vérifié au lieu de mon certificat autosigné…alors la :angry: fallait aller la chercher loin celle là …

Salut Minus (!),
Moi et quelques autres (sur framacloud et ubuntu-fr notamment) avons le même problème que toi. Sauf que de mon côté le reverse proxy utilise déjà un certificat let’s Encrypt en entrée… et que j’ai quand même le problème !

En désespoir de cause j’ai installé une instance de loomio sur mon PC local (avec redirection de ports sur la box), sans reverse proxy, avec la conf par défaut sans modifications (excepté les noms de domaine bien sûr).

Tout se déploie correctement, Let’sEncrypt génère les certifs, les conteneurs sont tous UP… mais l’erreur est toujours là :

connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.X.1, server: loomio.mon.domaine, request: "POST /api/v1/message_channel/subscribe HTTP/2.0", upstream: "http://172.17.0.4:3000/api/v1/message_channel/subscribe", host: "loomio.mon.domaine", referrer: "https://loomio.mon.domaine/groups"

D’où ma question :

  1. Es-tu sûr que le problème est réglé de ton côté ?
  2. Y a-t-il eu des modifs à faire dans docker-compose.yml ?

ça fait 3 jours que je suis dessus, et mon problème n’a pas bougé d’un pouce, avec ou sans reverse-proxy…

Bonjour

Oui mon loomio fonctionne maintenant parfaitement.

alors j’en profite donc pour faire un petit tuto a ce sujet la (je changerai le nom de mon post plus tard pour que le plus grand nombre puisse trouver ce post)

L’installation de loomio: suivre ce tuto trés bien fait http://framacloud.org/cultiver-son-jardin/installation-de-loomio/

J’ai modifié le fichier docker-compose.yml comme indiqué dans le tuto et aussi désinstallé exim4.

Personnellement ayant un domaine .com chez ovh j’ai fais les redirection comme il se doit de loomio.mondomaine.com et faye.loomio.mondomaine.com sur mon ip publique et donc mon serveur reverserpoxy prend le relais pour envoyer les requêtes sur ma VM ubuntu 14.04LTS hébergeant loomio.

Pour le moment pas de piège, à l’installation de loomio, si on regarde les logs on voit bien que le certificat let’s encrypt ne pouvant pas passer par le port 443, passe alors par le port 80, et donc notre loomio est bien certifié.

Mais dans le cas d’un serveur d’entreprise ou non, quand il y a plusieurs services web, on ne peut pas se passer d’un reverseproxy, et notamment apache sur une VM debian 8.2 par exemple.

On installe donc son reverseproxy (pensez a bien activer tous les modules qui vont bien dans apache pour que le reverse proxy soit parfaitement opérationnel) et voila donc mon fichier /etc/apache2/sites-avalaibles/loomio.conf

## Config reverse proxy loomio ##
<VirtualHost ipdemonreverseproxy:80>
     ServerName loomio.mondomaine.lan
     ServerAlias loomio.mondomaine.com
     ProxyPreserveHost On
     ProxyRequests off
     ProxyPass / http://ipdemonserveurloomio:80/
     ProxyPassReverse / http://ipdemonserveurloomio:80/
     ErrorLog /var/log/apache2/loomio-error.log
     LogLevel warn
     CustomLog /var/log/apache2/loomio-access.log combined
</VirtualHost>

<VirtualHost ipdemonreverseproxy:443>
     ServerName loomio.mondomaine.lan
     ServerAlias loomio.mondomaine.com
     SSLEngine On
     SSLCertificateFile /etc/letsencrypt/live/loomio.mondomaine.com/fullchain.pem
     SSLCertificateKeyFile /etc/letsencrypt/live/loomio.mondomaine.com/privkey.pem
     Include /etc/letsencrypt/options-ssl-apache.conf
     ErrorLog /var/log/apache2/loomio-error.log
     LogLevel warn
     CustomLog /var/log/apache2/loomio-access.log combined
     SSLProxyEngine On
     SSLProxyVerify none
     SSLProxyCheckPeerCN off
     SSLProxyCheckPeerName off
     SSLProxyCheckPeerExpire off
     ProxyRequests     Off
     ProxyPreserveHost On
     ProxyPass         / https://ipdemonserveurloomio:443/ keepalive=On retry=5
     ProxyPassReverse  / https://ipdemonserveurloomio:443/
</VirtualHost>

 <VirtualHost ipdemonreverseproxy:80>
     ServerName faye.loomio.mondomaine.lan
     ServerAlias faye.loomio.mondomaine.com
     ProxyPreserveHost On
     ProxyRequests off
     ProxyPass / http://ipdemonserveurloomio:80/
     ProxyPassReverse / http://ipdemonserveurloomio:80/
     ErrorLog /var/log/apache2/loomio-error.log
     LogLevel warn
     CustomLog /var/log/apache2/loomio-access.log combined
</VirtualHost>

<VirtualHost ipdemonreverseproxy:443>
     ServerName faye.loomio.mondomaine.lan
     ServerAlias faye.loomio.mondomaine.com
     SSLEngine On
     SSLCertificateFile /etc/letsencrypt/live/faye.loomio.mondomaine.com/fullchain.pem
     SSLCertificateKeyFile /etc/letsencrypt/live/faye.loomio.mondomaine.com/privkey.pem
     Include /etc/letsencrypt/options-ssl-apache.conf
     ErrorLog /var/log/apache2/loomio-error.log
     LogLevel warn
     CustomLog /var/log/apache2/loomio-access.log combined
     SSLProxyEngine On
     SSLProxyVerify none
     SSLProxyCheckPeerCN off
     SSLProxyCheckPeerName off
     SSLProxyCheckPeerExpire off
     ProxyRequests     Off
     ProxyPreserveHost On
     ProxyPass         / https://ipdemonserveurloomio:443/ keepalive=On retry=5
     ProxyPassReverse  / https://ipdemonserveurloomio:443/
</VirtualHost>

Et oui la il ne faut surtout pas oublier la partie faye.loomio.mondomaine.com

L’autre point assez tendu c’est qu’il faut aussi générer ces fameux certificats let’s encrypt pour ce reverse proxy, sans cela loomio ne fonctionnera pas bien

Voila la procédure d’installation de let’s encrypt en 3 ligne de commande - super simple:

apt-get install git
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
cd /opt/letsencrypt

On va donc pouvoir enfin générer nos certificats

Hors le problème avec un reverse proxy c’est que souvent le port 80 ou 443 est aussi occupé par d’autres sites web.

On ne va donc pas utiliser la procédure classique mais la methode standalone:

Pour cela arrêter votre serveur apache par: service apache2 stop ou bien /etc/init.d/apache2 stop

Tout en étant dans /opt/letsencrypt/ voici les 2 lignes de commandes à taper (Et oui on a deux sites web avec loomio)

./letsencrypt-auto certonly --standalone -d loomio.mondomaine.com

et

./letsencrypt-auto certonly --standalone -d faye.loomio.mondomaine.com

les deux certificats sont alors stockés dans /etc/letsencrypt/live/loomio.mondomaine et dans /etc/letsencrypt/live/faye.loomio.mondomaine (lignes que l’on retrouve dans mon fichier de configuration de apache).

Redémarrez apache sur votre serveurproxy et le tour est joué.

Inconvénient de cette méthode, il faudra soit même re générer une demande de certificat dans 90 jours (je cherche comment l’automatiser par un script géré par cron par exemple)

Loomio devrait fonctionner parfaitement.

Alors pourquoi cette erreur sur http://172.17.0.4:3000, ben simplement cette partie de loomio, je suppose, est gérée par faye.loomio.mondomaine.com.
Si on met un certificat autosigné ou si on ne met pas de certificat certifié sur cette partie là, faye.loomio.mondomaine.com est inaccessible par loomio.mondomaine.com

Faites moi savoir si maintenant cela fonctionne pour vous

Bon, finalement je suis arrivé (un peu par hasard !) à faire fonctionner Loomio dérrière mon reverse proxy Nginx, sans HTTPS côté Loomio, sans warning de contenu mixed sur HTTPS et avec mise à jour dynamique du contenu sans aucun rechargement.
Je suis reparti de ce que Minus avait fait (mais avec un Nginx), et j’ai ensuite décousue pour revernir à une conf sans HTTPS dans les conteneurs.

…et toujours des alertes sur l’upstream du NGINX Loomio ! Qui semblent en lien avec le conteneur worker, mais finalement sans grande gravité.

Au final ça tourne avec un reverse écoutant en 443 et redirigeant vers le port 80 de Loomio, c’est merveilleux :joy:

Pour ceux que ça pourrait intéresser la configuration complète est sur https://dokuwiki.alolise.org/doku.php/public:loomio_reverse_proxy

super :thumbsup:

@Minus : je ne peux pas poster plus de 3 réponses en MP pour le moment (blocage du site).

Merci quand même pour la disponibilité ! :wink: