Сайт недоступен — приложение не запускается, конфликт порта 443?

У меня установлен Discourse на VPS с Ubuntu 18.04, следуя стандартной инструкции по установке. Он работал без проблем уже несколько лет, но сегодня я зашёл на свой сайт и обнаружил, что TLS-сертификат истёк. Поскольку используется HSTS, это полностью заблокировало мне доступ к сайту. Я подумал: «Ладно, ничего страшного», подключился по SSH к серверу, обновил систему (просто так), выполнил ./launcher rebuild app, и всё должно наладиться.

Но нет, всё пошло не так: я получил страницу с ошибкой «oops». Тогда я решил перезагрузить систему, и теперь при попытке открыть сайт я вижу страницу 502. Запустить app не удаётся:

root@talk:/var/discourse# ./launcher start app
x86_64 arch detected.

starting up existing container
+ /usr/bin/docker start app
Error response from daemon: driver failed programming external connectivity on endpoint app (e5db356e19c947c3e1e20a337aea7ee4bdcfa9bc5f3eac485e76439f3ed3a0e9): Bind for 0.0.0.0:443 failed: port is already allocated
Error: failed to start containers: app

…и действительно, на порту 443 что-то слушает:

root@talk:/var/discourse# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      906/docker-proxy    
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      427/systemd-resolve 
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      918/docker-proxy    
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      892/docker-proxy    
tcp6       0      0 :::9936                 :::*                    LISTEN      578/sshd            
udp        0      0 127.0.0.53:53           0.0.0.0:*                           427/systemd-resolve 

Я в тупике — что мне стоит проверить дальше?

Прошло ли много времени с момента последней пересборки? Возникали ли какие-либо ошибки? Упоминалось ли что-то о обновлении PostgreSQL? Попробуйте выполнить пересборку ещё раз.

Ещё один пункт, который стоит проверить, — запущен ли другой контейнер Discourse, например, импорта. Выполните следующую команду; если будут обнаружены дополнительные контейнеры, обратите внимание на столбцы статуса и портов, чтобы получить ответ:

docker container ls

Я поддерживаю сайт в актуальном состоянии; я помню обновление PostgreSQL какое-то время назад и тогда же его выполнил. На этот раз я не помню, чтобы видел что-то подобное, но пересобрать систему довольно просто. Однако во время этого процесса я заметил:

…и действительно, import был запущен. Поэтому я остановил его, и после завершения пересборки сайт снова стал доступен.

Сертификат Let’s Encrypt также обновлён (кажется, сегодня было выдано несколько сертификатов, что немного проблематично), так что всё вернулось в норму. Спасибо за быстрый ответ.

Тогда вы захотите это сделать.

  ./launcher destroy import