Установка Discourse на Nginx в Ubuntu 14.04

Discourse – это открытая платформа для коммуникаций и совместной работы.

Данное руководство поможет настроить Discourse, настроить Nginx как обратный прокси-сервер и получить SSL-сертификат Let’s Encrypt.

Требования

Для выполнения руководства потребуется:

1: Настройка Discourse

После установки программа Discourse нуждается в настройке.

Примечание: Это может стать причиной простоя форума Discourse. Рекомендуется сделать резервную копию на случай неудачной настройки.

Чтобы настроить взаимодействие Nginx и Discourse, нужно отредактировать конфигурационный файл, который хранится в каталоге:

cd /var/discourse

Откройте конфигурационный файл:

sudo nano containers/app.yml

Найдите раздел expose и измените первый номер порта в этой строке:

...
## which TCP/IP ports should this container expose?
expose:
- "25654:80"   # fwd host port 80   to container port 80 (http)
...

Выберите случайный номер порта и никому его не разглашайте. Можно даже заблокировать неавторизованный доступ при помощи брандмауэра iptables.

Сохраните изменения и закройте текстовый редактор.

Чтобы изменения вступили в силу, введите:

sudo ./launcher rebuild app

Данное обновление может занять некоторое время.

После нужно убедиться в том, что всё работает. Посетите свой сайт в браузере. Форум Discourse больше не будет доступен по ссылке:

http://discourse.example.com

Теперь чтобы получить доступ к Discourse, нужно добавить в ссылку номер порта:

http://discourse.example.com:25654

Примечание: Замените условный домен и номер порта своими данными.

2: Установка и настройка Nginx

Теперь всё готово к установке Nginx.

Чтобы установить Nginx на Ubuntu, просто введите следующую команду:

sudo apt-get install nginx

Теперь по старой ссылке на форум Discourse (http://discourse.example.com) можно найти стандартную страницу Nginx:

Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. […]

Настройте веб-сервер. Для этого нужно прекратить его работу:

sudo service nginx stop

Удалите стандартную страницу:

sudo rm /etc/nginx/sites-enabled/default

Создайте новый конфигурационный файл для сервера Discourse:

sudo nano /etc/nginx/sites-enabled/discourse

Скопируйте и вставьте в него следующий контент:

server {
listen 80;
server_name discourse.example.com;
return 301 https://discourse.example.com$request_uri;
}
server {
listen 443 ssl spdy;
server_name discourse.example.com;
ssl_certificate /etc/letsencrypt/live/discourse.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/discourse.example.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
location / {
proxy_pass      http://discourse.example.com:25654/;
proxy_read_timeout      90;
proxy_redirect  http://discourse.example.com:25654/ https://discourse.example.com;
}
}

Примечание: Не забудьте заменить условный домен и порт своими данными.

Данный файл выполняет следующие действия:

  • Первый блок server прослушивает домен discourse.example.com на порте 80 и перенаправляет запросы на порт 443 (SSL). Этот блок опционален.
  • Второй блок server предназначен для порта 443 и передаёт запросы на веб-сервер, запущенный на порт 25654 (Discourse). Он отвечает за взаимодействие с прокси-сервером.

Обратите внимание: иногда в файле встречаются сертификаты из каталога /etc/letsencrypt. Они будут сгенерированы далее.

3: Генерирование SSL

Чтобы сгенерировать SSL-сертификат, нужно загрузить клиент ACME.

sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Откройте каталог letsencrypt:

cd /opt/letsencrypt/

Установите пакеты, необходимые для запуска Let’s Encrypt:

./letsencrypt-auto --help

Сгенерируйте сертификаты при помощи команды:

./letsencrypt-auto certonly --standalone --email 8host@example.com --agree-tos -d discourse.example.com

Примечание: Сертификаты Let’s Encrypt действительны только для доменов. Если вы попробуете сгенерировать сертификат для IP-адреса, программа выдаст ошибку.

Данная команда вернёт примерно такой результат:

IMPORTANT NOTES:
- If you lose your account credentials, you can recover through
e-mails sent to 8host@example.com.
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/discourse.example.com/fullchain.pem. Your
cert will expire on 2016-04-26. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again.
- Your account credentials have been saved in your Let's Encrypt
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Let's
Encrypt so making regular backups of this folder is ideal.

Сертификаты сохранены в каталоге /etc/letsencrypt/live/discourse.example.com. Значит, конфигурационный файл Nginx валидный. Обратите внимание: сертификат Let’s Encrypt действителен в течение короткого периода времени. Настройте его автоматическое обновление.

4: Автоматическое обновление сертификата Let’s Encrypt

Сертификаты Let’s Encrypt действительны в течение 90 дней. На данный момент сервис Let’s Encrypt не предоставляет клиентов для автоматизации обновления сертификата.

Примечание: Подробнее о сертификатах Let’s Encrypt для Nginx и настройке cron можно прочитать в этой статье.

Данные об обновлении сертификата будут сохраняться в /var/log/certificate-renewal.log.

5: Перезапуск Nginx

Чтобы обновить настройки веб-сервера, нужно перезапустить его:

sudo service nginx restart

Заключение

Теперь форум Discourse использует Nginx в качестве обратного прокси-сервера и SSL-сертификат Let’s Encrypt.

Tags: , , ,

Добавить комментарий