Установка Discourse на Nginx в Ubuntu 14.04
Ubuntu | Комментировать запись
Discourse – это открытая платформа для коммуникаций и совместной работы.
Данное руководство поможет настроить Discourse, настроить Nginx как обратный прокси-сервер и получить SSL-сертификат Let’s Encrypt.
Требования
Для выполнения руководства потребуется:
- Сервер Ubuntu 14.04.
- Не-root пользователь с доступом к sudo.
- Предварительно установленная платформа Discourse.
- Зарегистрированный домен (можно купить его на Namecheap или получить бесплатный на Freenom).
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: Discourse, Let's Encrypt, NGINX, SSL