Réparation du forum discourse le 07/05/2019

Salut,
Le forum était en panne on ne savait pas trop pourquoi.

Gyom n’étant pas joignable j’ai finalement découvert que j’avais bien accès à cette vm en root sur le port standard :slight_smile:

Du coup voici ce que j’ai fait et mon raisonnement. Je me suis dit que certain⋅e⋅s pouvaient être intéressée, rien de fulgurant toutefois.

Diagnostique

Je me suis d’abord demandé si c’était une histoire d’espace disque, vu qu’on avait dit que la vm était trop petite

$ df -h
udev            740M     0  740M   0% /dev
tmpfs           151M  7.9M  143M   6% /run
/dev/vda1        15G  9.7G  4.3G  70% /
tmpfs           751M     0  751M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           751M     0  751M   0% /sys/fs/cgroup
overlay          15G  9.7G  4.3G  70% /var/lib/docker/overlay2/c697cab75cd7bbf3e8ee44a19468a6c5763c2bcfd97b244d75cc970c3ce4866a/merged
shm             512M     0  512M   0% /var/lib/docker/containers/12a8ca5168157bdf8b64cd476a89e323d3d7789c5ec3b918636e6ea6b6680950/mounts/shm
tmpfs           151M     0  151M   0% /run/user/0
overlay          15G  9.7G  4.3G  70% /var/lib/docker/overlay2/544ee0c1fa0eeaf24d7345159025568d1d998359681ea5854c7f1d0badbee474/merged
shm             512M  8.0K  512M   1% /var/lib/docker/containers/a74b5e627cf3f6df45815e51852395072a653f3a0ffe05929b3c461c3c5062c9/mounts/shm

Comme on peut le voir il ne semble pas y avoir de soucis

Puis j’ai voulu voir qi il y avait un quelconque service running pour discourse et découvrir un peu l’install mais la sortie était trop grande.

ps aux

Puis j’ai soupçonné fail2ban de faire n’importe quoi en bannissant tout le monde

root@forum:/var/discourse# service fail2ban status
Unit fail2ban.service could not be found.

Puis que nginx était down (mais en fait il n’y a pas de nginx (je connais rien à ce setup hein)

root@forum:/var/discourse# service nginx status
Unit nginx.service could not be found.

Apache peut être ?

root@forum:/var/discourse# service apache2 status
[...] active [...]

Oui apache est là

Mais en même temps je me suis documenté sur discourse et l’install docker, et j’avais plutôt l’impression qu’il n’y avait pas de reverse proxy et que ça allait direct sur le docker

Je regarde alors les règles du parefeu, pour voir si le port 80 est redirigé:

root@forum:/var/discourse# iptables-save
[...]
-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 25 -j ACCEPT

Non, mais le port 25 oui, je vérifie qu’on peut contacter en telnet de l’extérieur:

ljf@pirouette:~$ telnet forum.arn-fai.net 25
Trying 89.234.141.74...
Connected to forum.arn-fai.net.
Escape character is '^]'.
220 ESMTP server

Ok y a au moins un trucs qui peut faire du mail qui tourne.

Je tente au hasard et sans succcès au cas où il y a un service discourse à relancer

service discourse status

En lisant la doc de discourse je découvre qu’il est possible de lancer discourse via:

root@forum:/var/discourse# cd /var/discourse
root@forum:/var/discourse# ./launcher start app
You have less than 5GB of free space on the disk where /var/lib/docker is located. You will need more space to continue
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        15G  9.7G  4.3G  70% /

Would you like to attempt to recover space by cleaning docker images and containers in the system?(y/N)

Je tombe alors sur l’erreur dont parlais @Gyom

Je scrute les logs et les confs apache2

tail -f /var/log/apache2/error.log
tail -f /var/log/apache2/access.log
cat /etc/apache2/sites-available/000-default.conf 
cat /etc/apache2/sites-available/default-ssl.conf 

Je constate que y a bien des demandes dessus sur /

Et là je me dit que vu que c’est du docker faut que je trouve comment regarder les container (j’ai fait un peu de docker dans un très très lointain passé, sans doute que c’était pas moi mais plutôt mon jumeau…). Après avoir tapé dans startpage “How to list containers in Docker”, je tombe sur mon extension de cerveau (stackoverflow)

root@forum:/var/discourse#  docker ps
CONTAINER ID        IMAGE                           COMMAND             CREATED             STATUS              PORTS                                      NAMES
12a8ca516815        local_discourse/mail-receiver   "/sbin/boot"        7 weeks ago         Up 2 hours          0.0.0.0:25->25/tcp                         mail-receiver
root@forum:/var/discourse#  docker ps -a
CONTAINER ID        IMAGE                           COMMAND             CREATED             STATUS              PORTS                                      NAMES
12a8ca516815        local_discourse/mail-receiver   "/sbin/boot"        7 weeks ago         Up 2 hours          0.0.0.0:25->25/tcp                         mail-receiver
a74b5e627cf3        local_discourse/app             "/sbin/boot"        7 weeks ago         Down 19 hours       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   app

Je me demande pourquoi le 2ème container est down (oui j’aurais sans doute pu tester ça de suite ^^)

root@forum:/var/discourse#  docker logs a74b5e627cf3

Rien d’instructif

root@forum:/var/discourse#  docker inspect a74b5e627cf3
[...]
        "State": {
[...]
            "Error": "driver failed programming external connectivity on endpoint app (c54db53155c9bf00426a37977c41d1a82daaf82c703ea42ecb967d1ecc46edf8): Error starting userland proxy: listen tcp 0.0.0.0:80: listen: address already in use",
        },

Donc là je commence à faire un lien.

Je lance lsof après l’avoir installé pour voir si quelque chose d’autre écoute sur le port 80 (au hasard apache2)

root@forum:/var/discourse#  lsof -i tcp:80

Là ça sort un truc avec apache2 dedans, donc oui apache2 utilise le port 80 et empèche le docker discourse de redémarrer…

Solution

J’éteins apache2 et je relance discourse.

service apache2 stop
docker start a74b5e627cf3

Je teste le lien. J’ai d’abord une erreur “502 bad Gateway” mais au bout de 15s le forum est de retour \o/

Reste alors à désactiver apache2 pour éviter qu’au prochain redémarrage de vm ou autre ce soit le même cirque.

root@forum:/var/discourse# systemctl disable apache2
Synchronizing state of apache2.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable apache2

Merci pour le retour c’est super intéressant.

Je ne suis pas sur que j’aurai été capable de mener l’enquête avec autant de brio :slight_smile:

J’ai documenté toute l’installation mais je ne l’ai pas encore posé sur le wiki :confused:

Par contre les sorties sur l’usage disque n’indique pas le passage à 20Go. Je vais voir :slight_smile:

@ljf bien joué !

Ah de la documentation, impeccable, mets ça sur le wiki quand t’aura le temps :slight_smile:

D’accord, c’est possible qu’il faut encore faire quelque chose…
Tiens moi au courant, sinon je regarde.

Je pense qu’il faut étendre la partition.

# fdisk -l /dev/vda
Disk /dev/vda: 20 GiB, 21474836480 bytes, 41943040 sectors

#  df -Th /
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/vda1      ext4   15G  9.7G  4.3G  70% /

Si j’ai bien compris il faut supprimer la partition et la recréer.
Si quelqu’un se sent à l’aise pour le faire. Ça me va :slight_smile:

Bien joué @ljf, joli dépannage documenté ! Une belle pratique à diffuser :slight_smile:

@Gyom oui c’est ça. Je gère ça dans les prochaines minutes.
Du coup la vm sera coupé un moment le temps que je fasse les modifications nécessaires.

J’espère que docker va se relancé comme il faut :smile:

Le problème de VM est réglé \o/
Le forum est de retour.

1 « J'aime »