Как установить Discourse Forum с Nginx на Ubuntu 16.04
Discourse — это бесплатное программное обеспечение с открытым исходным кодом для создания Интернет-форумов и списков рассылки. Он был создан в 2013 году и написан на языках программирования Ruby и Javascript. Программное обеспечение Discourse Forum используется многими организациями, включая Codeacademy, Udacity, Twitter Developers и Docker Community Forum.
В этом руководстве мы пошагово покажем вам, как установить и настроить Discourse Forum с веб-сервером Nginx в Ubuntu 16.04. В частности, мы покажем вам, как установить программное обеспечение форума Discourse, настроить Nginx в качестве обратного прокси-сервера для приложения Discourse и защитить программное обеспечение форума Discourse с помощью бесплатного SSL от Letsencrypt.
Что мы будем делать
- Установите Docker в Ubuntu 16.04.
- Установите и настройте программное обеспечение Discourse Forum.
- Создание SSL Letsencrypt в Ubuntu 16.04
- Установите и настройте Nginx в качестве обратного прокси-сервера для Discourse.
- Интернет-установщик Discourse
- Дополнительная конфигурация Discourse
Предпосылки
- Убунту 16.04
- Привилегии root
- Учетная запись SMTP — Mailgun, SendGrid, Mailjet и т. д.
Шаг 1. Установите Docker на Ubuntu 16.04.
Программное обеспечение Discourse написано на Ruby и Javascript с использованием PostgreSQL в качестве основной базы данных и Redis в качестве кэша и для временных данных. Мы установим Discourse в контейнере Docker.
Процесс установки будет осуществляться на Ubuntu 16.04. Итак, для начала установите Docker с помощью приведенной ниже команды.
wget -qO- https://get.docker.com/ | sh
После завершения установки проверьте службу Docker и убедитесь, что она уже запущена в системе.
systemctl status docker
А также убедитесь, что Docker находится в загрузочном приложении при запуске.
systemctl is-enabled docker
Шаг 2. Установите и настройте дискуссионный форум.
На этом этапе мы установим и настроим программное обеспечение Discourse. Мы загрузим сценарий создания дискурса докеров, настроим его в соответствии с нашими требованиями, а затем создадим новый контейнер Docker для программного обеспечения форума дискурса.
Создайте новый каталог /var/discourse и клонируйте скрипт установщика.
mkdir -p /var/discourse
git clone https://github.com/discourse/discourse_docker.git /var/discourse
Теперь перейдите в каталог discourse и скопируйте пример файла docker-compose.
cd /var/discourse
cp samples/standalone.yml containers/app.yml
Отредактируйте файл app.yml с помощью редактора vim.
vim containers/app.yml
Настроить сопоставление портов Docker
По умолчанию все запросы HTTP и HTTPS будут обрабатываться прокси-сервером Docker. И в этом руководстве мы будем использовать для этой цели Nginx — все HTTP и HTTPS будут обрабатываться веб-сервером Nginx.
Поэтому нам нужно изменить конфигурацию сопоставления портов докера. Контейнер Discourse будет иметь только HTTP-соединение, а хост будет открывать новый порт 2045 и сопоставлять его с портом 80 контейнера.
Раскомментируйте строку HTTPS и измените строку HTTP на новый порт 2045.
expose:
- "2045:80" # http
# - "443:443" # https
Настройка доменного имени Discourse
Введите собственное доменное имя для дискурса, установленного в строке DISCOURSE_HOSTNAME, как показано ниже.
DISCOURSE_HOSTNAME: 'discourse.hakase-labs.me'
И введите свой адрес электронной почты в строку DISCOURSE_DEVELOPER_EMAIL.
DISCOURSE_DEVELOPER_EMAILS: ''
SMTP-конфигурация
Это самая важная конфигурация для Discourse Software. Убедитесь, что у вас есть учетная запись SMTP для установки Discourse — вы можете купить или попробовать бесплатную учетную запись SMTP в Mailgun, Mailjet или SendGrid.
В этом руководстве мы будем использовать учетную запись SMTP бесплатного уровня от Mailgun. Раскомментируйте конфигурацию SMTP и введите свою учетную запись, как показано ниже.
DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME:
DISCOURSE_SMTP_PASSWORD: mypassword
Сохранить и выйти.
Затем создайте новый образ Discourse Docker на основе конфигурации шаблона app.yml.
sudo ./launcher bootstrap app
После этого запустите/инициализируйте новый контейнер Discourse с помощью приведенной ниже команды.
sudo ./launcher start app
Контейнер Discourse должен быть запущен и запущен — проверьте его с помощью команды docker.
docker ps -a
Проверьте открытый порт хоста с помощью netstat и убедитесь, что новый порт 2045 docker-proxy есть в списке.
netstat -plntu
Программное обеспечение Discourse Forum было установлено в док-контейнере на хосте Ubuntu 16.04.
Шаг 3 — Создайте SSL Letsencrypt в Ubuntu 16.04
Форум Discourse будет работать по безопасному HTTP-соединению и будет обрабатываться веб-сервером Nginx. В этом руководстве мы будем использовать бесплатный SSL от Letsencrypt, и нам нужно установить клиент letsencrypt на сервер.
Установите letsencrypt с помощью приведенной ниже команды apt.
sudo apt install letsencrypt -y
Теперь сгенерируйте новые SSL-сертификаты с помощью команды letsencrypt.
letsencrypt certonly
Введите свой адрес электронной почты для обновления уведомления и нажмите OK.
Для Letsencrypt TOS (Условия обслуживания) выберите «Принимаю».
Теперь введите доменное имя дискурса discourse.hakase-labs.me.
И когда он будет завершен, вы получите результат, как показано ниже.
Новые сертификаты SSL от letsencrypt были сгенерированы в каталоге /etc/letsencrypt/live.
Шаг 4. Установите и настройте Nginx в качестве обратного прокси-сервера для контейнера Discourse.
На этом этапе мы установим веб-сервер Nginx и настроим его в качестве обратного прокси-сервера для контейнера Discourse, работающего на порту 2045.
Установите Nginx с помощью приведенной ниже команды apt.
sudo apt install nginx -y
Теперь запустите Nginx и включите его во время загрузки с помощью команды systemctl.
systemctl start nginx
systemctl enable nginx
Nginx установлен и работает на HTTP-порту 80. Вы можете проверить это с помощью netstat.
netstat -plntu
Веб-сервер Nginx был установлен на сервер Ubuntu 16.04.
Далее нам нужно создать новый файл виртуального хоста для контейнера Discourse. Перейдите в каталог конфигурации nginx и создайте новый файл дискурса с помощью редактора vim.
cd /etc/nginx/
vim sites-available/discourse
Теперь вставьте следующую конфигурацию виртуального хоста Discourse nginx.
server {
listen 80; listen [::]:80;
server_name discourse.hakase-labs.me;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name discourse.hakase-labs.me;
ssl_certificate /etc/letsencrypt/live/discourse.hakase-labs.me/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/discourse.hakase-labs.me/privkey.pem;
include /etc/nginx/snippets/ssl.conf;
location / {
proxy_pass http://discourse.hakase-labs.me:2045/;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect http://discourse.hakase-labs.me:2045/ https://discourse.hakase-labs.me;
}
}
Сохранить и выйти.
Примечание.
- Все HTTP-запросы будут автоматически перенаправлены на HTTPS-соединение.
- Измените конфигурацию SSL, указав собственный путь к каталогу.
- Есть дополнительная конфигурация SSL.
Теперь создайте новый дополнительный файл конфигурации ssl ssl.conf.
vim snippets/ssl.conf
Вставьте следующую конфигурацию в файл.
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.2;
ssl_ciphers EECDH+AESGCM:EECDH+AES;
ssl_ecdh_curve secp384r1;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
Сохранить и выйти.
А теперь активируйте виртуальный хост discourse с помощью команды ln -s, как показано ниже.
ln -s /etc/nginx/sites-available/discourse /etc/nginx/sites-enabled/
Проверяет конфигурацию и убеждается в отсутствии ошибок, затем перезапускает службу.
nginx -t
systemctl restart nginx
Установка и настройка Nginx в качестве обратного прокси для контейнера Discourse завершена.
Шаг 5. Веб-установщик Discourse
Откройте веб-браузер и перейдите по URL-адресу дискурса.
http://discourse.hakase-labs.me
И вы будете перенаправлены на защищенное HTTP-соединение. Нажмите кнопку «Регистрация», чтобы создать нового пользователя-администратора.
Теперь введите имя пользователя и пароль администратора, а затем нажмите «Регистрация».
И вы получите новое подтверждение по электронной почте об активации пользователя с правами администратора.
Ниже приведен образец сообщения электронной почты для подтверждения учетной записи Discourse. Нажмите на ссылку, чтобы подтвердить и активировать учетную запись администратора.
И вы должны получить страницу дискурса, как показано ниже. Нажмите кнопку Нажмите здесь, чтобы активировать свою учетную запись.
Теперь вы можете настроить свой собственный форум Discourse. Нажмите кнопку «Далее», и вам нужно настроить Discourse Forum с шагом 13. Или вы можете настроить его позже, нажав «Возможно позже».
Ниже показан Discourse Forum, установленный на веб-сервере Nginx и HTTPS в Ubuntu 16.04.
Ниже приведена панель администратора Discourse.
Discourse Forum был установлен с Nginx в качестве обратного прокси-сервера на сервере Ubuntu 16.04.
Шаг 6 - Дополнительная настройка Discourse
При установке Discourse вы можете столкнуться с проблемой, когда вы не получаете подтверждение по электронной почте для активации пользователя с правами администратора.
Чтобы решить проблему, убедитесь, что у вас есть правильная учетная запись SMTP в конфигурации app.yml. Или вы можете активировать учетную запись администратора вручную с вашего сервера.
Чтобы активировать учетную запись администратора вручную, перейдите в каталог /var/discourse.
cd /var/discourse
Теперь получите доступ к контейнеру дискурса с помощью приведенной ниже команды.
./launcher enter app
И активируйте первого пользователя-администратора с помощью команды rails, как показано ниже.
rails c
u=User.last
u.admin=true
u.activate
u.save
И теперь вы можете войти на форум Discourse под своим именем пользователя и паролем.
Рекомендации
- https://github.com/discourse/discourse/tree/master/docs