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

Установка Askbot на CentOS 7 с uWSGI и Nginx

7 min read DevOps Обновлено 26 Nov 2025
Установка Askbot на CentOS 7 с uWSGI и Nginx
Установка 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 и инструментов сборки

Важно: при необходимости используйте 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;

Установка PostgreSQL и создание базы

Отредактируйте файл 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

Перезапустите сервис 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

Создание пользователя askbot

Обновим pip и установим virtualenv:

pip install --upgrade pip
pip install virtualenv six

Обновление pip и установка virtualenv

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

su - askbot
virtualenv hakase-labs/

Активируем окружение и устанавливаем пакеты Askbot и адаптер PostgreSQL:

cd hakase-labs/
source bin/activate

pip install six
pip install askbot psycopg2

Установка Askbot и зависимостей в виртуальном окружении

Создаём каталог приложения (не называйте директорию “askbot”, чтобы не путать с именем пользователя):

mkdir myapp/
cd myapp/
askbot-setup

В интерактивном мастере укажите:

  • директорию для деплоя: “.” (точка)
  • движок БД: введите 1 для postgresql
  • database name: askbotdb
  • database user: hakaselabs
  • database password: hakase123

Настройка проекта Askbot askbot-setup

После создания проекта соберём статические файлы Django:

python manage.py collectstatic

Подтвердите вводом yes.

Затем синхронизируем базу данных и создадим администратора:

python manage.py syncdb

В процессе укажите имя администратора, email и пароль.

Создание администратора в Askbot

Для быстрой проверки можно запустить встроенный сервер Django (только для тестов):

python manage.py runserver 0.0.0.0:8080

Откройте в браузере http://:8080 и убедитесь, что сайт работает.

Результат в браузере после runserver

Шаг 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

Перезагрузка systemd и включение 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.

Установка Nginx и конфигурация виртуального хоста

Совет: для обслуживания статических файлов можно добавить location /static/ с root/alias, чтобы отдавать статический контент напрямую через Nginx, а не через uWSGI.

Шаг 6 — Тестирование установки

Откройте в браузере http://askbot.me (или IP сервера). Вы должны увидеть главную страницу Askbot и иметь возможность зайти в админку Django.

Домашняя страница Askbot

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

Панель пользователя Askbot

Настройки администратора Askbot

Вход в Django admin

Панель Django admin

Система 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

Небольшая методология деплоя (минимум шагов)

  1. Развернуть staging с теми же версиями ПО
  2. Проверить миграции и collectstatic в staging
  3. Сделать резервную копию production БД
  4. Обновить код/зависимости и выполнить миграции
  5. Мониторить логи после релиза

Мини‑факто‑бокс

  • ОС: CentOS 7
  • Веб‑сервер: Nginx
  • WSGI: uWSGI (Emperor) или Gunicorn (альтернатива)
  • БД: PostgreSQL
  • Виртуальное окружение: virtualenv

Короткий глоссарий (1‑строчные определения)

  • Askbot: веб‑приложение вопросов и ответов на Django.
  • uWSGI: сервер приложений, запускающий WSGI‑приложения Python.
  • Nginx: высокопроизводительный веб‑сервер и обратный прокси.
  • PostgreSQL: реляционная СУБД.

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

  1. Сайт доступен по HTTP/HTTPS.
  2. Авторизация и админка функционируют.
  3. Бэкап базы успешно создаётся и восстанавливается.
  4. Система проходит базовые функциональные тесты (создать/отредактировать/удалить вопрос).

Сценарий отката (Runbook)

  1. Остановить сервисы (nginx, uwsgi).
  2. Восстановить дамп БД в отдельную базу.
  3. Тестировать работоспособность на восстановленной базе.
  4. При успехе заменить settings и перезапустить сервисы.

Заключение

В этой инструкции вы получили пошаговое руководство по установке Askbot на CentOS 7 с PostgreSQL, uWSGI и Nginx. Документ включает примерные конфигурации, рекомендации по безопасности, тесты приёмки и варианты отката. После развёртывания рекомендуется автоматизировать бэкапы, настроить HTTPS и мониторинг для стабильной работы сервиса.

Важно: адаптируйте пути, имена пользователей и настройки безопасности под ваши требования и корпоративную политику.

Ссылки

Поделиться: 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 быстро