Установка Askbot на Ubuntu 16.04 с uWSGI и Nginx
Важно: команда и пути в примерах соответствуют окружению из руководства — при развёртывании замените пароли, имена пользователей и домены на свои.
Что будет сделано
- Установка зависимостей и инструментов сборки.
- Установка PostgreSQL и создание базы/пользователя.
- Установка Askbot в виртуальном окружении Python.
- Настройка uWSGI как systemd-сервиса.
- Настройка Nginx как обратного прокси к uWSGI.
- Тестирование, устранение неполадок и рекомендации по безопасности.
Кому это руководство полезно
Кратко: системным администраторам и девопсам, которые хотят запустить Askbot на Ubuntu 16.04 вручную. Терминология: virtualenv — изолированное окружение Python; uWSGI — WSGI-приложение/процесс-менеджер; Nginx — веб-сервер/обратный прокси.
Требования
- Ubuntu 16.04 Xenial Xerus (64‑bit).
- Права root или эквивалент через sudo.
- Доступ по SSH к серверу.
Шаг 1 — Установка зависимостей
Подключитесь к серверу по SSH и установите пакеты для сборки и Python:
ssh root@AskbotServerIPУстановите необходимые пакеты:
apt install -y build-essential python-pip python-dev python-flup libpng12-dev zlib1g-dev libpng-dev libjpeg-dev python-setuptoolsВажно: если вы используете более новую версию Ubuntu (18.04/20.04), пакеты и имена библиотек могут отличаться. На современных релизах libpng12 может отсутствовать — используйте актуальные пакеты для вашей версии.
Шаг 2 — Установка и настройка PostgreSQL
Askbot поддерживает MySQL, SQLite и PostgreSQL. В этом руководстве — PostgreSQL.
Установите СУБД:
apt install -y postgresql postgresql-contribОтредактируйте файл аутентификации pg_hba.conf, чтобы локальные подключения использовали md5 (шифрованный пароль):
vim /etc/postgresql/9.5/main/pg_hba.confЗамените строку локальной аутентификации на:
local all all md5
Перезапустите и включите службу PostgreSQL:
systemctl restart postgresql
systemctl enable postgresqlСоздайте базу и пользователя (в примере — askbotdb / hakaselabs / hakase123). Замените пароли на безопасные:
su - postgres
psql
\password postgres
create database askbotdb;
create user hakaselabs with password 'hakase123';
grant all privileges on database askbotdb to hakaselabs;
\q
Совет: создавайте отдельного пользователя БД под приложение; не используйте superuser для веб‑приложений.
Шаг 3 — Установка и настройка Askbot в virtualenv
Создайте системного пользователя для Askbot и добавьте его в sudo:
useradd -m -s /bin/bash askbot
passwd askbot
usermod -a -G sudo askbot
Обновите pip и установите virtualenv:
pip install --upgrade pip
pip install virtualenv
Переключитесь на пользователя askbot, создайте виртуальное окружение и активируйте его:
su - askbot
virtualenv hakase-labs
cd hakase-labs/
source bin/activate
Установите Askbot и драйвер PostgreSQL:
pip install askbot psycopg2
Создайте каталог приложения и запустите askbot-setup:
mkdir myapp/
cd myapp
askbot-setupПри запросе пути установки укажите “.” (текущую папку). Для конфигурации БД выберите PostgreSQL (номер 1) и введите созданные ранее askbotdb / hakaselabs и пароль.

Соберите статические файлы:
python manage.py collectstaticПодтвердите ‘yes’ при появлении запроса.

Инициализируйте базу данных и создайте административного пользователя:
python manage.py syncdbПодтвердите создание admin-пользователя и задайте email/пароль.

Тестовый запуск локального сервера:
python manage.py runserver 0.0.0.0:8080Откройте http://SERVER_IP:8080 — вы увидите страницу Askbot.

Примечание: runserver подходит только для тестирования. Для продакшена используйте uWSGI + Nginx.
Шаг 4 — Установка и настройка uWSGI
Установите uWSGI в систему (под root):
sudo pip install uwsgiСоздайте каталог конфигураций uWSGI и файл для сайта:
mkdir -p /etc/uwsgi/sites
cd /etc/uwsgi/sites
vim askbot.iniДобавьте конфигурацию uWSGI (отредактируйте пути под вашу установку):
[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 = /home/askbot/hakase-labs/myapp/askbot.sock
chmod-socket = 664
uid = askbot
gid = www-data
vacuum = true
# uWSGI Log file
logto = /var/log/uwsgi.log
Создайте systemd‑сервис для uWSGI: /etc/systemd/system/uwsgi.service
cd /etc/systemd/system/
vim uwsgi.serviceВставьте:
[Unit]
Description=uWSGI Emperor service
[Service]
ExecStartPre=/bin/bash -c 'mkdir -p /run/uwsgi; chown askbot:www-data /run/uwsgi'
ExecStart=/usr/local/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
Проверьте лог /var/log/uwsgi.log при ошибках.
Шаг 5 — Установка и настройка Nginx
Установите Nginx:
apt install nginxСоздайте виртуальный хост в /etc/nginx/sites-available/askbot и затем включите его:
cd /etc/nginx
vim sites-available/askbotПример конфигурации:
server {
listen 80;
server_name askbot.me www.askbot.me;
location / {
include uwsgi_params;
uwsgi_pass unix:/home/askbot/hakase-labs/myapp/askbot.sock;
}
}Сохраните, создайте символьную ссылку и проверьте конфигурацию:
ln -s /etc/nginx/sites-available/askbot /etc/nginx/sites-enabled/
nginx -t
Перезапустите и включите nginx:
systemctl restart nginx
systemctl enable nginxПроверьте, что nginx слушает порт 80 и что сокет uWSGI создан:
netstat -plntu
netstat -pl | grep askbot
Шаг 6 — Тестирование
Откройте в браузере домен или IP сервера (в примере askbot.me). Проверьте:
- Главную страницу приложения.
- Вход/регистрацию пользователя.
- Доступ к административной панели Django (/admin).
Примеры экранов:






Поздравляем — Askbot развернут на Ubuntu 16.04 с uWSGI и Nginx.
Резервные и проверочные действия
- Резервируйте папку проекта и файл базы данных (или создавайте дампы pg_dump).
- Добавьте мониторинг процессов uWSGI и nginx (например, systemd + Prometheus Exporter).
- Автоматизируйте развертывание через Ansible/Playbook.
Поведение в нестандартных ситуациях
Когда это может не сработать
- Неподдерживаемая версия Python или Ubuntu.
- Отсутствие необходимых libjpeg/libpng в репозитории.
- Ошибка в путях wsgi-file или права на сокет.
Что попробовать
- Проверить логи: /var/log/uwsgi.log, /var/log/nginx/error.log, systemctl status uwsgi.
- Убедиться, что виртуальное окружение содержит все зависимости.
- Проверить права на UNIX-сокет и владельца папок.
Альтернативные подходы
- Gunicorn вместо uWSGI: проще в конфигурации, хорошо работает с systemd и Nginx.
- Использовать Docker-контейнеры: упрощает переносимость и обновление.
- Использовать managed PostgreSQL (RDS/GCP Cloud SQL) для отказоустойчивости.
Рекомендации по безопасности
- Замените все пароли в примерах на надёжные.
- Настройте HTTPS (Let’s Encrypt + Certbot) и перенаправление HTTP→HTTPS.
- Ограничьте доступ к сокету uWSGI через права пользователей и группу www-data.
- Запретите прямой доступ к /static/ и обслуживайте статику через Nginx.
Пример перенаправления HTTPS (кратко):
- Установите certbot и получите сертификат: certbot –nginx -d example.com.
- Обновите конфигурацию nginx для ssl_certificate и ssl_certificate_key.
Роль‑ориентированные контрольные списки
Для системного администратора
- Создать системного пользователя askbot.
- Настроить PostgreSQL и права доступа.
- Настроить uWSGI systemd-сервис и права на сокет.
- Настроить Nginx и получить SSL.
Для разработчика
- Проверить миграции Django.
- Убедиться, что collectstatic собирает все ресурсы.
- Тестировать приложение локально через runserver и через uWSGI.
План восстановления и откат
- Остановить uWSGI и nginx: systemctl stop uwsgi nginx.
- Вернуть бэкап базы из pg_dump: psql askbotdb < backup.sql или pg_restore.
- Вернуть файлы проекта из архива и проверить виртуenv.
- Запустить сервисы и проверить логи.
Миграция на более новые версии Ubuntu
- На Ubuntu 18.04/20.04 пакеты и версии Python будут отличаться.
- Обновите psycopg2 до совместимой с вашей версией libpq.
- Проверьте systemd unit‑файлы и пути к uwsgi (может быть /usr/bin/uwsgi).
Критерии приёмки
- Askbot доступен по HTTP(S) и отвечает 200 на главной странице.
- Админ-панель доступна и работает.
- uWSGI запущен как systemd-сервис и демонстрирует процессы.
- Nginx корректно проксирует запросы в uWSGI через unix-сокет.
Быстрая проверка и тесты приёмки
- curl -I http://localhost/ должно вернуть 200.
- systemctl status uwsgi nginx — оба должны быть active (running).
- ls -l /home/askbot/hakase-labs/myapp/askbot.sock — сокет должен существовать.
Короткая методология развёртывания
- Подготовка сервера и зависимостей.
- Установка БД и создание учетных записей.
- Установка приложения в virtualenv.
- Сервисный запуск через uWSGI + systemd.
- Реверс-прокси через Nginx и SSL.
- Тестирование и мониторинг.
Мини‑справочник команд (cheat sheet)
- Запуск uWSGI: systemctl start uwsgi
- Логи uWSGI: journalctl -u uwsgi или tail -f /var/log/uwsgi.log
- Проверка nginx: nginx -t
- Перезагрузка nginx: systemctl restart nginx
Ключевые числа и факты
- Применяемая ОС: Ubuntu 16.04.
- Рекомендуемое количество процессов uWSGI: 2–5 для небольшого сайта.
- UNIX-сокет для связи Nginx↔uWSGI вместо TCP уменьшает накладные расходы.
Справочная ссылка
https://askbot.org/en/question/
Итог: описанная последовательность — рабочий ручной способ развернуть Askbot на Ubuntu 16.04 с PostgreSQL, uWSGI и Nginx. Для продакшена добавьте HTTPS, автоматические бэкапы и мониторинг.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента