Гид по технологиям

Установка Askbot на CentOS 8 с Let's Encrypt SSL

• 7 min read • Linux • Обновлено 22 Nov 2025
Установка Askbot на CentOS 8 с SSL
Установка Askbot на CentOS 8 с SSL

Введение

Построение Askbot и окружение

Askbot — это бесплатное, с открытым исходным кодом и гибко настраиваемое программное обеспечение для вопросов и ответов, написанное на Python и Django. Оно простое и лёгкое, по функционалу похоже на StackOverflow и YahooAnswers. Askbot включает теги и категории, уведомления по электронной почте, карму, систему голосований, модерацию контента и многое другое.

В этом руководстве описано, как установить Askbot на CentOS 8 и защитить домен с помощью сертификата Let’s Encrypt.

Кому это подходит

  • Системным администраторам и инженерам DevOps, которые разворачивают Django-приложения на CentOS 8.
  • Разработчикам, которым нужен быстрый Q&A-форум для сообщества или внутренней команды.

Важно: инструкции рассчитаны на CentOS 8 и Python 2 (как в оригинальном примере). Для новых установок рекомендуется рассмотреть современные дистрибутивы и версии Python; в статье также есть заметки о безопасной эксплуатации.

Основные понятия

  • Askbot — Django-приложение для вопросов и ответов.
  • uWSGI — сервер приложений для запуска Python WSGI-приложений.
  • Nginx — обратный прокси и статический сервер.
  • Certbot / Let’s Encrypt — бесплатные сертификаты TLS/SSL.

Требования

  • Сервер под управлением CentOS 8.
  • Доступ root (пароль root) или пользователь с sudo.
  • Действующее доменное имя, указывающее на сервер.

Установка необходимых зависимостей

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

Сначала установите группу Development Tools:

dnf group install 'Development Tools'

Далее включите репозиторий EPEL и установите Python 2 пакеты, используемые в этом руководстве:

dnf install epel-release -y
dnf install python2-pip python2-devel python2-six -y

После установки пакетов переходите к настройке базы данных.

Установка и настройка PostgreSQL

Askbot использует PostgreSQL для хранения данных. Установите сервер и вспомогательные пакеты:

dnf install postgresql-server postgresql-devel postgresql-contrib -y

Инициализируйте базу данных:

postgresql-setup initdb

Ожидаемый вывод:

WARNING: using obsoleted argument syntax, try --help
WARNING: arguments transformed to: postgresql-setup --initdb --unit postgresql
 * Initializing database in '/var/lib/pgsql/data'
 * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log

Запустите и включите сервис PostgreSQL:

systemctl start postgresql
systemctl enable postgresql

Переключитесь на системного пользователя postgres и запустите psql:

su - postgres
[postgres@centos8 ~]$ psql

Вывод:

psql (10.6)
Type "help" for help.
postgres=# 

Создайте базу данных и пользователя для Askbot (пример имени и пароля приведён в исходном руководстве — замените ‘password’ на надёжный пароль):

postgres=# create database askbot;
postgres=# create user askbot with password 'password';
postgres=# grant all privileges on database askbot to askbot;
postgres=# \q

Настройте локальную аутентификацию PostgreSQL. Отредактируйте файл pg_hba.conf:

nano /var/lib/pgsql/data/pg_hba.conf

Найдите строки, где используется peer, и замените на md5:

local   all             all                                    md5
host    all             all             127.0.0.1/32           md5
host    all             all             ::1/128                md5

Сохраните файл и перезапустите PostgreSQL:

systemctl restart postgresql

Важно: использование md5 хранит пароль в хеше, но для защиты соединений вне localhost рассмотрите SSL для PostgreSQL.

Установка и настройка Askbot

Создайте системного пользователя для Askbot и задайте пароль:

useradd -m -s /bin/bash askbot
passwd askbot

Добавьте пользователя в группу wheel для возможности sudo:

usermod -a -G wheel askbot

Установите виртуальное окружение и необходимые Python-пакеты (pip2):

pip2 install virtualenv six

Переключитесь на пользователя askbot и создайте виртуальное окружение:

su - askbot
virtualenv askbot

Ожидаемый вывод:

created virtual environment CPython2.7.16.final.0-64 in 663ms
  creator CPython2Posix(dest=/home/askbot/askbot, clear=False, global=False)
  seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/tmp/tmp9YFr7B/seed-app-data/v1)
  activators PythonActivator,CShellActivator,FishActivator,PowerShellActivator,BashActivator

Активируйте виртуальное окружение и перейдите в него:

cd askbot
source bin/activate

Ожидаемый prompt:

(askbot) [askbot@centos8 askbot]$

Установите зависимости Askbot и psycopg2:

pip2 install six==1.10.0
pip2 install askbot psycopg2

Создайте директорию приложения и запустите установщик askbot-setup:

mkdir myapp
cd myapp
askbot-setup

Следуйте подсказкам установщика. В примере выбрана база данных PostgreSQL (вариант 1) и введены ранее созданные данные:

Please select database engine:
1 - for postgresql, 2 - for sqlite, 3 - for mysql, 4 - oracle
type 1/2/3/4: 1

Please enter database name (required)
> askbot

Please enter database user (required)
> askbot

Please enter database password (required)
> password

После завершения установки установщик скопирует файлы и создаст структуру приложения:

Copying files: 
* __init__.py 
* manage.py 
* urls.py 
* django.wsgi 
Creating settings file
settings file created

copying directories:  * doc
* cron
* upfiles

Done. Please find further instructions at http://askbot.org/doc/

Сгенерируйте статические файлы Django и примените миграции (в старых версиях используется syncdb):

python manage.py collectstatic
python manage.py syncdb

Создайте суперпользователя при запросе установщика, укажите имя, email и пароль:

You have installed Django's auth system, and don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'askbot'): askbotadmin
Email address: [email protected]
Password: 
Password (again): 
Superuser created successfully.

Совет: используйте надёжный пароль и сохраните его в менеджере паролей.

Установка и настройка uWSGI

Установите uWSGI в виртуальном окружении:

pip2 install uwsgi

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

mkdir -p /etc/uwsgi/sites
nano /etc/uwsgi/sites/askbot.ini

Пример содержимого файла конфигурации (сохраните как /etc/uwsgi/sites/askbot.ini):

[uwsgi]

chdir = /home/askbot/askbot/myapp
home = /home/askbot/askbot
static-map = /m=/home/askbot/askbot/myapp/static
wsgi-file = /home/askbot/askbot/myapp/django.wsgi
master = true
processes = 5
# Askbot will running under the sock file
socket = /run/uwsgi/askbot.sock
chmod-socket = 664
uid = askbot
gid = nginx
vacuum = true
# uWSGI Log file
ogto = /var/log/uwsgi.log

Проверьте пути и права доступа. Пользователь askbot должен владеть каталогами приложения, а Nginx — иметь доступ к сокету (обычно gid nginx).

Создание systemd-сервиса для uWSGI

Создайте файл сервиса systemd:

nano /etc/systemd/system/uwsgi.service

Добавьте конфигурацию:

[Unit]
Description=uWSGI service

[Service]
ExecStartPre=/bin/bash -c 'mkdir -p /run/uwsgi; chown askbot:nginx /run/uwsgi'
ExecStart=/bin/uwsgi --emperor /etc/uwsgi/sites
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all

[Install]
WantedBy=multi-user.target

Перезагрузите демона systemd, затем запустите и включите сервис:

systemctl daemon-reload
systemctl start uwsgi
systemctl enable uwsgi

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

Установите Nginx:

dnf install nginx -y

Создайте файл виртуального хоста для Askbot:

nano /etc/nginx/conf.d/askbot.conf

Пример конфигурации сервера:

server {
         listen 80;
         server_name askbot.linuxbuz.com;
         location / {
         include         uwsgi_params;
         uwsgi_pass  unix:/run/uwsgi/askbot.sock;
    }
 }

Сохраните файл. Запустите и включите Nginx:

systemctl start nginx
systemctl enable nginx

Если uWSGI уже включён, проверьте связь Nginx с сокетом uWSGI и логи ошибок Nginx при проблемах.

Защита Askbot с помощью Let’s Encrypt SSL

Установите Certbot (в исходном примере используется certbot-auto):

wget https://dl.eff.org/certbot-auto
mv certbot-auto /usr/local/bin/certbot-auto
chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-auto

Получите и установите сертификат для домена (замените домен на ваш):

certbot-auto --nginx -d askbot.linuxbuz.com

Утилита предложит ввести email и принять условия. Пример вывода процесса:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for askbot.linuxbuz.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/conf.d/askbot.conf

Certbot предложит перенаправить HTTP на HTTPS. Для новых сайтов рекомендуется выбрать перенаправление (Redirect).

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.

1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Ожидаемый финальный вывод при успешной установке:

Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/askbot.conf

Congratulations! You have successfully enabled https://askbot.linuxbuz.com

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/askbot.linuxbuz.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/askbot.linuxbuz.com/privkey.pem
   Your cert will expire on 2020-06-11. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again with the "certonly" option. To non-interactively renew *all*
   of your certificates, run "certbot-auto renew"

Примечание: срок действия сертификата в примере относится к моменту исходной публикации. В реальной установке проверьте дату и настройте автоматическое продление с помощью systemd timer или cron.

Настройка брандмауэра и SELinux

Разрешите HTTP и HTTPS в firewalld:

firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

SELinux по умолчанию включён в CentOS 8. Исходное руководство советует отключить SELinux, изменив файл /etc/selinux/config. Это работает, но представляет риск безопасности. Рекомендуемые варианты:

  • Если возможна работа с SELinux, настройте контексты и boolean-значения для Nginx/uWSGI и сокетов. Это безопаснее, чем полностью отключать SELinux.
  • Если вы решаете временно отключить SELinux для тестовой среды, отредактируйте /etc/selinux/config и перезагрузите систему. Для продакшна рассмотрите настройку политик SELinux.

Пример изменения файла (для отключения):

nano /etc/selinux/config

Измените строку:

SELINUX=enforcing

На:

SELINUX=disabled

После изменения перезагрузите сервер.

ВАЖНО: Отключение SELinux упрощает конфигурацию, но снижает безопасность. При возможности настраивайте корректные контексты и правила.

Доступ к Askbot

Откройте в браузере URL https://askbot.linuxbuz.com (замените домен на свой). Вы увидите стартовую страницу Askbot.

Веб-интерфейс Askbot

Нажмите на кнопку входа (sign in) и используйте учётные данные администратора.

Страница входа Askbot

После входа вы попадёте в панель управления и сможете создать первый вопрос или категорию.

Задать вопрос в Askbot

Критерии приёмки

Перед завершением развертывания проверьте следующее:

  • Сайт доступен по HTTPS на порту 443.
  • Сертификат верный и не просрочен.
  • Nginx корректно проксирует запросы в uWSGI через unix-сокет.
  • uWSGI процесс работает под пользователем askbot и сокет доступен группе nginx.
  • Статические файлы отдаются корректно (collectstatic выполнен).
  • Вход в админ-панель Django успешен.

Контрольный список по ролям

  • Администратор системы:

    • Установил зависимости и PostgreSQL.
    • Настроил SELinux или обосновал отключение.
    • Проверил регулярное продление сертификатов.
  • DevOps / Разработчик:

    • Настроил виртуальное окружение и зависимости.
    • Протестировал миграции и сбор статических файлов.
    • Обеспечил CI/CD для будущих обновлений.
  • Модератор сообщества:

    • Создал политики модерации и первые категории.
    • Настроил уведомления по электронной почте.

Быстрое устранение проблем

  • Nginx возвращает 502 Bad Gateway:

    • Проверьте, запущен ли сервис uwsgi: systemctl status uwsgi.
    • Проверьте путь сокета /run/uwsgi/askbot.sock и права доступа.
    • Проверьте логи uWSGI и Nginx (/var/log/nginx/error.log, /var/log/uwsgi.log).
  • Ошибка подключения к базе данных:

    • Убедитесь, что pg_hba.conf настроен для md5 и служба PostgreSQL перезапущена.
    • Проверьте правильность имени базы, пользователя и пароля в settings Askbot.
  • Certbot не может подтвердить владение доменом:

    • Убедитесь, что DNS записи A/AAAA указывают на IP сервера.
    • Проверьте, что Nginx слушает порт 80 и не блокирует HTTP.

Безопасность и эксплуатация

  • Настройте автоматическое продление сертификатов: certbot-auto renew и systemd timer или cron.
  • Регулярно обновляйте систему и пакеты.
  • Убедитесь, что бэкапы базы данных выполняются регулярно. Пример простого дампа PostgreSQL:
pg_dump -U askbot -h localhost askbot > /root/askbot-backup.sql
  • Отключите ненужные сетевые сервисы.

Факт-бокс

  • Сервисы: PostgreSQL (порт 5432), Nginx (80/443), uWSGI (unix-сокет).
  • SSL: Let’s Encrypt бесплатный, сертификат действует 90 дней; настройте автоматическое продление.
  • Рекомендуется: использовать менеджер секретов для паролей и TLS между компонентами в продакшне.

Короткая методика развертывания

  1. Установите системные зависимости и EPEL.
  2. Установите и инициализируйте PostgreSQL.
  3. Создайте пользователя askbot и базу данных.
  4. Настройте виртуальное окружение и установите askbot.
  5. Настройте uWSGI и systemd-сервис.
  6. Настройте Nginx и включите HTTPS через Certbot.
  7. Проверки и настройки безопасности.

Глоссарий (1 строка)

  • WSGI — интерфейс между веб-сервером и Python-приложением.

Рекомендации по миграции и обновлению

  • Перед обновлением Askbot или зависимостей делайте полные бэкапы базы и файлов: база данных и каталог upfiles/.
  • Тестируйте обновления в стейджинг-среде.

Заключение

Поздравляем! Вы успешно установили Askbot на CentOS 8 и защитили сайт с помощью Let’s Encrypt. После развёртывания настройте мониторинг, регулярные бэкапы и автоматическое продление сертификатов. Начните создавать разделы, вопросы и настройки модерации.

Краткое напоминание: в продакшне старайтесь минимизировать отключение SELinux и используйте современные версии ОС и Python при возможности.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

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

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро