Документация / Администрирование
Веб-приложение Flask + nginx
Обновлено 12.10.2026
Пример веб-приложения с интерфейсом задач, JSON API и SQLite. Цепочка запросов: nginx → Waitress → Flask → SQLite. Проверено на публичном образе Extended 0.1.604 x86_64, 12 октября 2026 года.
Подготовка
Скачайте исходники примера и распакуйте архив на хосте. Перенесите каталог webdemo в /root/webdemo гостевой ОС. Если SSH уже настроен, на хосте можно использовать SFTP:
sftp -i ~/.ssh/synapse_demo -o IdentitiesOnly=yes -P 2226 root@127.0.0.1
В приглашении SFTP, из каталога распакованного архива:
put -r webdemo /root/
bye
Настройка доступа описана в инструкции по SSH. В госте нужны /bin/python3, /bin/nginx и доступ к сети. Пример рассчитан на Extended; наличие этих программ в других редакциях здесь не проверялось.
Установка зависимостей
В консоли гостевой ОС:
cd /root/webdemo
python3 -m pip install --target vendor -r requirements.txt
В примере закреплены Flask 3.1.3 и Waitress 3.0.2 с зависимостями. Пакеты устанавливаются в каталог приложения; встроенные библиотеки Python не заменяются.
Проверка приложения
python3 /root/webdemo/flask_app.py
Waitress слушает 127.0.0.1:8081. Из второй консоли проверьте:
curl -i http://127.0.0.1:8081/healthz
Ожидается HTTP 200 и {"database":"ok","status":"ok"}. Для перехода к запуску как службы остановите ручной процесс Ctrl+C.
Настройка nginx
Если nginx уже используется, сначала сохраните его текущую конфигурацию. Для отдельной демонстрационной VM:
cp /etc/nginx/nginx.conf /root/nginx-before-demo.conf
cp /root/webdemo/nginx.conf /etc/nginx/nginx.conf
mkdir -p /run /var/log /var/lib/nginx
nginx -t
Поставляемая конфигурация принимает HTTP на порту 80 и передаёт запросы Waitress на 127.0.0.1:8081. Для этой сборки используются master_process off, daemon off и метод событий poll. Домен и TLS в этом примере не настраиваются.
Автозапуск
Создайте файл /etc/services/python-demo в nano:
#!/bin/sh
exec /bin/python3 /root/webdemo/flask_app.py
Сохраните прежнее описание службы nginx. Затем файл /etc/services/nginx должен содержать:
#!/bin/sh
exec /bin/nginx
Включите службы:
chmod 755 /etc/services/python-demo /etc/services/nginx
service enable python-demo
service enable nginx
service restart python-demo
service restart nginx
service list
curl -i http://127.0.0.1/healthz
curl -sS http://127.0.0.1/api/status
Службы должны показывать состояние running. Журнал приложения: /var/log/python-demo.log, журналы nginx: /var/log/nginx.log и /var/log/nginx-access.log.
Открытие на хосте
При запуске QEMU добавьте к существующему -netdev user,id=net0 перенаправление порта:
-netdev user,id=net0,hostfwd=tcp:127.0.0.1:18888-:80
Если уже есть перенаправление SSH, объедините параметры в одном -netdev:
-netdev user,id=net0,hostfwd=tcp:127.0.0.1:2226-:22,hostfwd=tcp:127.0.0.1:18888-:80
Откройте в браузере хоста http://127.0.0.1:18888/. Это локальный адрес вашего компьютера; приложение и база данных работают внутри Синапс ОС. Кадры примера доступны в галерее.
Данные и проверка
Задачи сохраняются в /root/webdemo/tasks.sqlite. Интерфейс позволяет создавать и переименовывать задачи, менять статус, фильтровать и удалять их. API: GET /api/tasks, POST /api/tasks, GET, PATCH и DELETE /api/tasks/ID.
Проверены 18 запросов API, действия в браузере и сохранение задач после sync и перезагрузки F12. Обе службы запустились автоматически. Нагрузочное тестирование не проводилось. Для копирования данных используйте резервные копии.
Особенности сборки 0.1.604
В штатном скрипте запуска nginx аргумент $@ передавался буквально. Прямой exec /bin/nginx в описании службы обходит эту ошибку.
Второй обход включён в flask_app.py: если os.set_blocking возвращает EINVAL на Синапс ОС, флаги неблокирующего канала устанавливаются через fcntl. Это необходимо для запуска Waitress в проверенном образе. Обход действует только внутри процесса приложения; ядро и библиотека Waitress не изменяются.
Пример не содержит авторизации: запускайте его с указанным локальным перенаправлением QEMU. Подключение публичного адреса требует отдельной настройки доступа.