Как установить Discourse Forum с Nginx и Free Lets Encrypt SSL на Debian 11
На этой странице
- Предпосылки
- Шаг 1. Настройка брандмауэра
- Шаг 2. Установите Git
- Шаг 3. Установите Docker
- Шаг 4. Загрузите Discourse
- Шаг 5. Настройка Discourse
- Установить домен
- Настройка открытых портов
- Настройка параметров SMTP
- Настройки памяти (необязательно)
- Настройки GeoLite2 (необязательно)
- Активируйте администратора Discourse из командной строки.
- Обсуждение обновлений
- Остановить обсуждение
- Просмотр журналов обсуждений
Discourse — это дискуссионная платформа сообщества с открытым исходным кодом, созданная с использованием языка Ruby. Он предназначен для работы в качестве форума, чата или списка рассылки. Он легко интегрируется с другими платформами, а его функциональность можно расширить с помощью плагинов.
В этом руководстве вы узнаете, как установить Discourse Forum с сервером Nginx на сервере под управлением Debian 11.
Предпосылки
-
A server running Debian 11 with a minimum of 1GB RAM and 1 Core CPU. Discourse setup will automatically create a swap partition on systems with 1GB or less RAM. Therefore, it is recommended to install it on a system with at least 2GB RAM.
-
A non-root user with sudo privileges.
-
A Domain name (
discourse.example.com
) pointing to the server. -
Everything is updated.
$ sudo apt update && sudo apt upgrade
-
Few packages that your system needs.
$ sudo apt install nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring -y
Some of these packages may already be installed on your system.
Шаг 1. Настройте брандмауэр
Первым шагом является настройка брандмауэра. Debian поставляется с ufw (простой брандмауэр).
Проверьте, работает ли брандмауэр.
$ sudo ufw status
Вы должны получить следующий вывод.
Status: inactive
Разрешить порт SSH, чтобы брандмауэр не прерывал текущее соединение при его включении.
$ sudo ufw allow OpenSSH
Разрешить также порты HTTP и HTTPS.
$ sudo ufw allow 80/tcp $ sudo ufw allow 443/tcp
Включить брандмауэр
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
Еще раз проверьте состояние брандмауэра.
$ sudo ufw status
Вы должны увидеть аналогичный вывод.
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443/tcp ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443/tcp (v6) ALLOW Anywhere (v6)
Шаг 2 — Установите Git
Установите Git, используя поток приложений по умолчанию.
$ sudo dnf install git
Подтвердите установку.
$ git --version git version 2.30.2
Выполните следующие команды, чтобы настроить установку Git.
$ git config --global user.name "Your Name" $ git config --global user.email ""
Шаг 3 — Установите Докер
Чтобы установить последнюю версию Docker, добавьте официальный GPG-ключ Dockers.
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Установите официальный репозиторий Docker.
$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Обновите системные репозитории Debian.
$ sudo apt update
Установите последнюю версию Docker.
$ sudo apt install docker-ce docker-ce-cli containerd.io
Убедитесь, что Docker запущен.
$ sudo systemctl status docker ? docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2022-02-05 13:32:54 UTC; 1h ago TriggeredBy: ? docker.socket Docs: https://docs.docker.com Main PID: 5818 (dockerd) Tasks: 26 Memory: 1.4G CPU: 5min 34.561s CGroup: /system.slice/docker.service ?? 5818 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock ??12162 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8080 -container-ip 172.17.0.2 -contai> ??12169 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 8080 -container-ip 172.17.0.2 -container-p>
По умолчанию Docker требует привилегий root. Если вы хотите избежать использования
sudo
при каждом запуске командыdocker
, добавьте свое имя пользователя вdocker
группа.$ sudo usermod -aG docker $(whoami)
Чтобы включить это изменение, вам нужно будет выйти из сервера и снова войти в него как тот же пользователь.
Шаг 4 - Загрузите дискурс
Создайте корневой каталог для Discourse.
$ sudo mkdir /var/discourse
Клонируйте официальный репозиторий Discourse Docker на Github.
$ sudo git clone https://github.com/discourse/discourse_docker.git /var/discourse
Шаг 5. Настройте дискурс
Создайте файл конфигурации
app.yml
, скопировав образец файлаstandalone.yml
.$ sudo cp samples/standalone.yml containers/app.yml
Откройте
app.yml
для редактирования.$ sudo nano containers/app.yml
Установить домен
Задайте для переменной
DISCOURSE_HOSTNAME
доменное имя, которое вы выбрали для своего форума. Если у вас нет доменного имени, вы можете использовать здесь IP-адрес.DISCOURSE_HOSTNAME: 'discourse.example.com'
Настройка открытых портов
Измените строку
\80:80
на\8080:80\
. Это изменит внешний HTTP-порт для Discourse на 8080, поскольку мы будет использовать Nginx на порту 80. Закомментируйте строку\443:443\
, так как мы будем устанавливать SSL извне.expose: - "8080:80" # http #- "443:443" # https
Настройка параметров SMTP
Заполните следующие переменные в зависимости от используемой службы транзакционной электронной почты. Установите адрес электронной почты для своей учетной записи администратора, используя переменную
DISCOURSE_DEVELOPER_EMAILS
. Этот шаг является обязательным, иначе ваш форум не загрузится... DISCOURSE_DEVELOPER_EMAILS: '' .. DISCOURSE_SMTP_ADDRESS: smtp.example.com DISCOURSE_SMTP_PORT: 587 DISCOURSE_SMTP_USER_NAME: DISCOURSE_SMTP_PASSWORD: your_smtp_password #DISCOURSE_SMTP_ENABLE_START_TLS: true # (optional, default true) #DISCOURSE_SMTP_DOMAIN: discourse.example.com # (required by some providers) DISCOURSE_NOTIFICATION_EMAIL: # (address to send notifications from)
Настройки памяти (необязательно)
Если на вашем сервере недостаточно оперативной памяти, вы можете соответствующим образом настроить следующие переменные, чтобы уменьшить объем памяти, занимаемой Discourses.
db_shared_buffers: '128MB' UNICORN_WORKERS: 2
Переменная
db_shared_buffers
обычно устанавливается равной 25% доступной памяти.Настройки GeoLite2 (необязательно)
Если вам нужна функция поиска IP-адресов в Discourse, зарегистрируйте бесплатную учетную запись Maxmind Geolite2 и получите лицензионный ключ. Вставьте этот лицензионный ключ в качестве значения следующей переменной.
DISCOURSE_MAXMIND_LICENSE_KEY: your_maxmind_license_key
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Шаг 6 — Установите дискурс
Выполните следующую команду, чтобы загрузить контейнер Discourse.
$ sudo ./launcher bootstrap app
Запустите приложение Discourse.
$ sudo ./launcher start app
Вы можете получить доступ к форуму, посетив URL-адреса
http://yourserver_IP:8080
илиhttp://discourse.example.com:8080
в вашем браузер. Вы получите следующий экран.Нажмите кнопку Регистрация, чтобы продолжить. Идентификатор электронной почты, указанный в файле
app.yml
, будет предварительно заполнен для вас.Нажмите кнопку «Регистрация», чтобы зарегистрировать учетную запись администратора. Вы перейдете к экрану подтверждения электронной почты.
Если ваши настройки SMTP верны, вы получите письмо для активации учетной записи. Нажмите на ссылку в письме, чтобы завершить настройку учетной записи.
Нажмите кнопку Активировать, чтобы завершить установку.
Вы попадете на экран мастера настройки Discourses. Вы можете либо пропустить его, чтобы перейти непосредственно к форуму, либо пройти весь мастер.
Ваш дискуссионный форум готов. Следующим шагом будет установка SSL и размещение форума за сервером Nginx.
Шаг 7 — Установите SSL
Чтобы установить SSL-сертификат с помощью Lets Encrypt, нам нужно установить инструмент Certbot.
Для этого мы будем использовать установщик пакета Snapd. Поскольку большинство серверов Debian не поставляются с ним, установите установщик Snapd.
$ sudo apt install snapd
Убедитесь, что ваша версия Snapd обновлена.
$ sudo snap install core && sudo snap refresh core
Установите Сертбот.
$ sudo snap install --classic certbot
Используйте следующую команду, чтобы убедиться, что команду Certbot можно запустить, создав символическую ссылку на каталог
/usr/bin
.$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Проверьте установку.
$ certbot --version certbot 1.22.0
Создайте SSL-сертификат.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m -d discourse.example.com
Приведенная выше команда загрузит сертификат в каталог
/etc/letsencrypt/live/discourse.example.com
на вашем сервере.Создайте групповой сертификат Диффи-Хеллмана.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Создайте корневой каталог вызова для автоматического обновления Lets Encrypt.
$ sudo mkdir -p /var/lib/letsencrypt
Создайте задание Cron для обновления SSL. Он будет запускаться каждый день для проверки сертификата и его обновления при необходимости. Для этого сначала создайте файл
/etc/cron.daily/certbot-renew
и откройте его для редактирования.$ sudo nano /etc/cron.daily/certbot-renew
Вставьте следующий код.
#!/bin/sh certbot renew --cert-name discourse.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Измените права доступа к файлу задачи, чтобы сделать его исполняемым.
$ sudo chmod +x /etc/cron.daily/certbot-renew
Шаг 8 — Установите и настройте Nginx
Debian поставляется с более старой версией Nginx. Вам необходимо скачать официальный репозиторий Nginx, чтобы установить последнюю версию.
Импортируйте официальный ключ подписи Nginx.
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Добавьте репозиторий для стабильной версии Nginx.
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \ http://nginx.org/packages/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
Обновите репозитории Debian.
$ sudo apt update
Установите Нгинкс.
$ sudo apt install nginx
Проверьте установку. Убедитесь, что вы используете
sudo
каждый раз, когда запускаете команду Nginx в Debian. В противном случае это не сработает.$ sudo nginx -v nginx version: nginx/1.20.2
Создайте и откройте файл
/etc/nginx/conf.d/discourse.conf
для редактирования.$ sudo nano /etc/nginx/conf.d/discourse.conf
Вставьте в него следующий код.
# enforce HTTPS server { listen 80; listen [::]:80; server_name discourse.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name discourse.example.com; access_log /var/log/nginx/discourse.access.log; error_log /var/log/nginx/discourse.error.log; # SSL ssl_certificate /etc/letsencrypt/live/discourse.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/discourse.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/discourse.example.com/chain.pem; ssl_session_timeout 5m; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; resolver 8.8.8.8; client_max_body_size 100m; location / { proxy_pass http://discourse.example.com:8080/; 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_set_header X-Real-IP $remote_addr; } }
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса после завершения.
Откройте файл
/etc/nginx/nginx.conf
для редактирования.$ sudo nano /etc/nginx/nginx.conf
Добавьте следующую строку перед строкой
include /etc/nginx/conf.d/*.conf;
.server_names_hash_bucket_size 64;
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Проверьте синтаксис файла конфигурации Nginx.
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Запустите службу Nginx, чтобы включить новую конфигурацию.
$ sudo systemctl start nginx
Шаг 9 - Дискурсивные команды
Активируйте администратора Discourse из командной строки.
Если вы не получили электронное письмо с активацией, вы можете активировать учетную запись администратора из командной строки.
Перейдите в каталог Discourse.
$ cd /var/discourse
Войдите в оболочку контейнера Discourse.
$ sudo ./launcher enter app
Введите команду
rails c
, чтобы получить доступ к командной строке Rails.:/var/www/discourse# rails c
Вы увидите следующую подсказку.
[1] pry(main)>
Введите команду, чтобы найти учетную запись администратора.
[1] pry(main)> User.find_by_email("") => #<User:0x00005564492032a0 id: 1, username: "username", created_at: Sun, 06 Feb 2022 14:46:58.451302000 UTC +00:00, updated_at: Sun, 06 Feb 2022 14:54:17.079564000 UTC +00:00, name: nil, seen_notification_id: 4, last_posted_at: nil, password_hash: "[FILTERED]", salt: "20d6012d3c98da70896dcfc27bc9d264", active: true, username_lower: "username", last_seen_at: Mon, 07 Feb 2022 08:34:12.435844000 UTC +00:00, admin: true, last_emailed_at: Sun, 06 Feb 2022 14:47:00.694121000 UTC +00:00, trust_level: 1, approved: false, approved_by_id: nil, approved_at: nil, previous_visit_at: Sun, 06 Feb 2022 15:40:35.804941000 UTC +00:00, suspended_at: nil, suspended_till: nil, date_of_birth: nil, views: 0, flag_level: 0, ip_address: #<IPAddr: IPv4:69.28.90.35/255.255.255.255>, moderator: false, title: nil, uploaded_avatar_id: 3, :
Введите
q
, чтобы вернуться к подсказке, и последовательно введите следующие команды.[2] pry(main)> user.approved = true [3] pry(main)> user.save [4] pry(main)> EmailToken.confirm(user.email_tokens.first.token)
Дважды введите
exit
, чтобы вернуться в оболочку. Ваша учетная запись администратора активирована и готова к использованию.Обновление дискурса
Для обновления форума вы можете воспользоваться одним из двух способов. Первый способ — обновить его через панель администратора. Второй способ заключается в использовании командной строки.
Перейдите в каталог Discourse.
$ cd /var/discourse
Обновите установку Discourse, скачав последние файлы с Github.
$ git pull
Восстановить дискурс.
$ sudo ./launcher rebuild app
Вам необходимо перестраивать Discourse каждый раз, когда вы вносите какие-либо изменения в файл
app.yml
. После внесения изменений запустите команду выше. Он уничтожает старый контейнер, загружает новый и запускает его.Остановить дискурс
$ sudo ./launcher stop
Просмотр журналов обсуждений
$ sudo ./launcher logs
Заключение
На этом учебник заканчивается. Вы установили форум Discourse с помощью Docker за веб-сервером Nginx на сервере Debian 11. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.