Установка Askbot на CentOS 7 с uWSGI и Nginx
Askbot — открытое ПО для создания площадок типа Q&A (вопрос‑ответ) на основе фреймворка Python Django. Это функционально похожая на StackOverflow и Yahoo Answers система. Askbot легко развернуть на Linux-дистрибутивах; много крупных проектов используют похожие системы. В этой инструкции показана настройка Askbot на CentOS 7 с PostgreSQL, uWSGI и Nginx.
Что мы сделаем
- Установим зависимости
- Установим и настроим PostgreSQL
- Установим Askbot в виртуальном окружении Python
- Настроим uWSGI как systemd‑сервис
- Настроим Nginx как обратный прокси для uWSGI
- Протестируем систему
Требования
- Сервер с CentOS 7
- Привилегии root (или sudo)
Шаг 1 — Установка зависимостей
Установим набор инструментов для сборки, репозиторий EPEL и пакеты Python, нужные для установки Askbot.
Сначала установим “Development Tools”:
yum group install 'Development Tools'Установим репозиторий EPEL:
yum -y install epel-releaseУстановим pip и заголовки для сборки Python‑модулей:
yum -y install python-pip python-devel python-six
Важно: при необходимости используйте Python 2/3 согласно совместимости версии Askbot, которую вы планируете установить. В этой инструкции используются системные пакеты CentOS 7 (Python 2.7 по умолчанию). Если вы предпочитаете Python 3, выполняйте те же шаги в окружении с pyenv/или Python 3.
Шаг 2 — Установка и настройка PostgreSQL
Установим PostgreSQL из репозитория CentOS и подготовим базу и пользователя для Askbot.
yum -y install postgresql-server postgresql-devel postgresql-contribИнициализируем кластер данных Postgres:
postgresql-setup initdbЗапустим и добавим в автозагрузку:
systemctl start postgresql
systemctl enable postgresqlПереключимся на пользователя postgres и откроем psql:
su - postgres
psqlСменим пароль для пользователя postgres (в psql используйте команду):
\password postgresСоздадим базу данных и пользователя для Askbot. В примере имя пользователя — hakaselabs, пароль — hakase123, база — askbotdb:
create database askbotdb;
create user hakaselabs with password 'hakase123';
grant all privileges on database askbotdb to hakaselabs;
Отредактируйте файл pg_hba.conf, чтобы использовать md5‑аутентификацию для локальных подключений (путь по умолчанию на CentOS 7 — /var/lib/pgsql/data/pg_hba.conf):
cd /var/lib/pgsql/data/
vim pg_hba.confНужно заменить соответствующие строки на:
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
Перезапустите сервис PostgreSQL, чтобы изменения вступили в силу:
systemctl restart postgresqlПримечание: если вы планируете подключаться к БД с других хостов — дополнительно настройте listen_addresses в postgresql.conf и, при необходимости, firewall/SELinux (см. раздел «Безопасность и SELinux»).
Шаг 3 — Установка и настройка Askbot
Мы установим Askbot под отдельным системным пользователем askbot и в виртуальном окружении Python.
Создаём пользователя askbot и даём ему домашний каталог:
useradd -m -s /bin/bash askbot
passwd askbotДобавьте пользователя в группу wheel, если нужны права sudo:
usermod -a -G wheel askbot
Обновим pip и установим virtualenv:
pip install --upgrade pip
pip install virtualenv six
Переключаемся на пользователя askbot и создаём виртуальное окружение:
su - askbot
virtualenv hakase-labs/Активируем окружение и устанавливаем пакеты Askbot и адаптер PostgreSQL:
cd hakase-labs/
source bin/activate
pip install six
pip install askbot psycopg2
Создаём каталог приложения (не называйте директорию “askbot”, чтобы не путать с именем пользователя):
mkdir myapp/
cd myapp/
askbot-setupВ интерактивном мастере укажите:
- директорию для деплоя: “.” (точка)
- движок БД: введите 1 для postgresql
- database name: askbotdb
- database user: hakaselabs
- database password: hakase123

После создания проекта соберём статические файлы Django:
python manage.py collectstaticПодтвердите вводом yes.
Затем синхронизируем базу данных и создадим администратора:
python manage.py syncdbВ процессе укажите имя администратора, email и пароль.

Для быстрой проверки можно запустить встроенный сервер Django (только для тестов):
python manage.py runserver 0.0.0.0:8080Откройте в браузере http://

Шаг 4 — Установка и настройка uWSGI
uWSGI будет запускать Django‑приложение и передавать запросы Nginx через UNIX‑сокет.
Устанавливаем uWSGI глобально с помощью pip (или в системном окружении, если нужно):
sudo pip install uwsgiСоздаём каталог для конфигураций uWSGI:
mkdir -p /etc/uwsgi/sites
cd /etc/uwsgi/sites
vim askbot.iniВставьте конфигурацию (адаптируйте пути под вашу структуру):
[uwsgi]
# Project directory, Python directory
chdir = /home/askbot/hakase-labs/myapp
home = /home/askbot/hakase-labs/
static-map = /m=/home/askbot/hakase-labs/myapp/static
wsgi-file = /home/askbot/hakase-labs/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
logto = /var/log/uwsgi.logСохраните файл.
Добавим systemd‑юнит для запуска uWSGI Emperor, который читает сайты в /etc/uwsgi/sites:
cd /etc/systemd/system/
vim uwsgi.serviceВставьте содержимое:
[Unit]
Description=uWSGI Emperor 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 enable uwsgi
Запустите uWSGI (или перезапустите):
systemctl start uwsgiПроверьте, что сокет /run/uwsgi/askbot.sock создан и доступен.
Советы по tuning uWSGI:
- processes — количество рабочих процессов (зависит от CPU и нагрузки)
- threads — при необходимости добавьте threads = N
- harakiri — можно задать тайм‑ауты на обработку запроса
- logto — логирование ошибок важно для диагностики
Шаг 5 — Установка и настройка Nginx
Nginx будет выступать фронтендом и проксировать запросы в uWSGI через unix‑сокет.
yum -y install nginxСоздайте файл виртуального хоста:
cd /etc/nginx/conf.d/
vim askbot.confПример конфигурации Nginx (адаптируйте server_name):
server {
listen 80;
server_name askbot.me www.askbot.me;
location / {
include uwsgi_params;
uwsgi_pass unix:/run/uwsgi/askbot.sock;
}
}Сохраните и проверьте конфигурацию:
nginx -tЗапустите и включите сервисы:
systemctl start nginx
systemctl start uwsgi
systemctl enable nginx
systemctl enable uwsgiПроверьте, что при обращении к домену (или IP) вы видите Askbot.

Совет: для обслуживания статических файлов можно добавить location /static/ с root/alias, чтобы отдавать статический контент напрямую через Nginx, а не через uWSGI.
Шаг 6 — Тестирование установки
Откройте в браузере http://askbot.me (или IP сервера). Вы должны увидеть главную страницу Askbot и иметь возможность зайти в админку Django.






Система Askbot установлена и работает под CentOS 7 с uWSGI и Nginx.
Рекомендации по безопасности и SELinux
Important: на CentOS 7 часто включён SELinux и firewall (firewalld). Если у вас возникают ошибки доступа к сокету или проблем с nginx/uWSGI, проверьте политики SELinux и права файлов.
- Для разрешения nginx обращаться к uWSGI сокету можно установить группу сокета в nginx (в том числе chown) и выставить контексты SELinux или временно поставить SELinux в permissive для отладки.
- Откройте порт 80/443 в firewall:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload- SELinux: проверить логи (audit.log) и, при необходимости, разрешить нужные действия. Простой тест: временно перевести в permissive и посмотреть, исчезнет ли проблема:
setenforce 0
# после отладки вернуть setenforce 1Долгосрочное решение — создать и применить правильные правила SELinux.
HTTPS: быстрый совет
Для публичного сервера настоятельно рекомендуется настроить HTTPS (Let’s Encrypt). Используйте certbot или acme.sh и настройте server блок для 443 с ssl_certificate и ssl_certificate_key. После получения сертификатов проверьте renew и automatic renew.
Тесты и критерии приёмки
Критерии приёмки:
- При обращении на порт 80/443 появляется главная страница Askbot.
- Форма входа и регистрация работают.
- Админ‑панель /admin доступна для созданного администратора.
- Статические файлы корректно отдаются (css/js/картинки).
- uWSGI работает как systemd‑сервис и автоматом стартует после перезагрузки.
Мини‑тесты/приёмочные сценарии:
- Залогиниться как администратор, создать тестовый вопрос/ответ.
- Проверить запись в базе askbotdb таблицами Django.
- Имитировать медленный запрос и убедиться, что uWSGI не падает.
Резервное копирование и откат
Резервная копия базы:
pg_dump -U hakaselabs -h localhost askbotdb > askbotdb-$(date +%F).sqlОткат: восстановление дампа в новую БД и быстрый переключатель в конфиге Django (settings.py) или в конфигурации uWSGI, если нужно.
Отказоустойчивость и производительность
- Горизонтальное масштабирование: запуск нескольких uWSGI‑инстансов и балансировка (NGINX upstream) или использование внешнего балансировщика.
- Кэширование: подключите Redis/Memcached для кеша Django и задач фоновой обработки.
- Очереди: для фоновых задач используйте Celery.
Частые ошибки и их решения
- 502 Bad Gateway от Nginx: проверьте, запущен ли uWSGI и доступен ли сокет /run/uwsgi/askbot.sock; проверьте права доступа сокета.
- Ошибки миграций: проверьте соединение с БД, учетные данные в settings, и примените python manage.py migrate.
- Ошибки сборки psycopg2: установите пакеты postgresql-devel и gcc (Development Tools).
Альтернативные подходы
- Gunicorn + systemd вместо uWSGI — проще в настройке, широко используем для Django.
- Docker‑контейнеры: упакуйте Askbot в контейнеры и используйте docker‑compose/kubernetes.
Пример команды для запуска через gunicorn (вместо uWSGI):
gunicorn myapp.wsgi:application --bind unix:/run/gunicorn/askbot.sock --workers 3Роль‑ориентированные контрольные списки
Администратор:
- Создать системного пользователя askbot
- Настроить бэкапы БД
- Настроить HTTPS
Разработчик:
- Развернуть виртуальное окружение
- Выполнить collectstatic и migrate
- Тестировать на staging
Операции (DevOps):
- Настроить systemd‑юнит для uWSGI
- Настроить мониторинг процессов (systemd, supervisor, Prometheus)
- Настроить ротацию логов
Краткие рекомендации по безопасности
- Не храните пароли базы в репозитории
- Используйте ограниченные привилегии для БД
- Закрывайте доступ к административным интерфейсам по IP или через VPN
Небольшая методология деплоя (минимум шагов)
- Развернуть staging с теми же версиями ПО
- Проверить миграции и collectstatic в staging
- Сделать резервную копию production БД
- Обновить код/зависимости и выполнить миграции
- Мониторить логи после релиза
Мини‑факто‑бокс
- ОС: CentOS 7
- Веб‑сервер: Nginx
- WSGI: uWSGI (Emperor) или Gunicorn (альтернатива)
- БД: PostgreSQL
- Виртуальное окружение: virtualenv
Короткий глоссарий (1‑строчные определения)
- Askbot: веб‑приложение вопросов и ответов на Django.
- uWSGI: сервер приложений, запускающий WSGI‑приложения Python.
- Nginx: высокопроизводительный веб‑сервер и обратный прокси.
- PostgreSQL: реляционная СУБД.
Критерии приёмки
- Сайт доступен по HTTP/HTTPS.
- Авторизация и админка функционируют.
- Бэкап базы успешно создаётся и восстанавливается.
- Система проходит базовые функциональные тесты (создать/отредактировать/удалить вопрос).
Сценарий отката (Runbook)
- Остановить сервисы (nginx, uwsgi).
- Восстановить дамп БД в отдельную базу.
- Тестировать работоспособность на восстановленной базе.
- При успехе заменить settings и перезапустить сервисы.
Заключение
В этой инструкции вы получили пошаговое руководство по установке Askbot на CentOS 7 с PostgreSQL, uWSGI и Nginx. Документ включает примерные конфигурации, рекомендации по безопасности, тесты приёмки и варианты отката. После развёртывания рекомендуется автоматизировать бэкапы, настроить HTTPS и мониторинг для стабильной работы сервиса.
Важно: адаптируйте пути, имена пользователей и настройки безопасности под ваши требования и корпоративную политику.
Ссылки
- Официальный сайт Askbot: https://askbot.org/en/
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента