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

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 --reloadSELinux по умолчанию включён в 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.

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

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

Критерии приёмки
Перед завершением развертывания проверьте следующее:
- Сайт доступен по 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 между компонентами в продакшне.
Короткая методика развертывания
- Установите системные зависимости и EPEL.
- Установите и инициализируйте PostgreSQL.
- Создайте пользователя askbot и базу данных.
- Настройте виртуальное окружение и установите askbot.
- Настройте uWSGI и systemd-сервис.
- Настройте Nginx и включите HTTPS через Certbot.
- Проверки и настройки безопасности.
Глоссарий (1 строка)
- WSGI — интерфейс между веб-сервером и Python-приложением.
Рекомендации по миграции и обновлению
- Перед обновлением Askbot или зависимостей делайте полные бэкапы базы и файлов: база данных и каталог upfiles/.
- Тестируйте обновления в стейджинг-среде.
Заключение
Поздравляем! Вы успешно установили Askbot на CentOS 8 и защитили сайт с помощью Let’s Encrypt. После развёртывания настройте мониторинг, регулярные бэкапы и автоматическое продление сертификатов. Начните создавать разделы, вопросы и настройки модерации.
Краткое напоминание: в продакшне старайтесь минимизировать отключение SELinux и используйте современные версии ОС и Python при возможности.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента