Хлебер-β (хлебер-бетта) - это приложение от студентов Яндекс.Лицея, созданное помочь людям, которые в период пандемии не могут самостоятельно выбраться на улицу и купить необходимые продукты и лекарства. Для решения проблемы мы создали систему, связывающую нуждающихся людей с людьми, желающими им помочь.
Хлебер-β состоит из двух частей:
- Веб-сайт, на котором пользователь может зарегестрироваться как "клиент", чтобы оставить заказ, или как "волонтёр", чтобы получить удобные инструменты для исполнения этих закозов, например карта ближайших к дому клиента магазинов.
- Бот ВКонтакте, оповещающий клиентов и волонтёров об изменениях, связанных с их заказами.
-
Сохраните копию ветки master на компьютер.
-
Создайте виртуальное окружение Python и установите зависимости из
requirements.txt
. -
Задайте параметры приложения через переменные среды:
DATABASE_URL=<ссылка на БД (по-умолчанию: db.sqlite3)>
GEOCODER_KEY=<API-ключ Геокодера>
GEOSEARCH_KEY=<API-ключ Поиска по организациям>
SECRET_KEY=<секретный ключ Flask-приложения (по-умолчанию: test-secret-key)>
VK_TOKEN=<токен группы-представителя бота ВКонтакте>
VK_GROUP_ID=<id группы-представителя>
VK_APP_ID=<id ВК-приложения сайта>
VK_SECRET_KEY=<секретный ключ ВК-приложения сайта>
-
Вы можете сделать это созданием в корневой директории файла конфигурации
.env
. -
Запустите создание таблиц в БД:
$ flask db upgrade
- Запустите Flask-приложение.
- Вы можете просто запустить
wsgi.py
как Python-скрипт (рекомендовано для быстрой отладки); - Либо запустить его с помощью
gunicorn
или любого другого WSGI-сервера (рекомендовано для стабильной работы):
- Вы можете просто запустить
$ gunicorn -b 0.0.0.0:8000 wsgi:app
-
Параллельно запустите бота ВКонтакте запуском
bot.py
в качестве Python-скрипта. -
(не обязательно) Настройте доступ к Flask-приложению через какой-нибудь proxy-сервер (например nginx). Это сильно улучшит производительность за счёт улучшенной параллелизации и отдельного обслуживания proxy-сервером статичных файлов.
-
Загрузите на компьютер обновлённую ветку master.
-
Обновите структуру таблиц в БД:
$ flask db upgrade
/app/
- модуль веб-сайта./app/static/
- директория для статичных файлов./app/templates/
- шаблоны веб-страниц (Jinja2).
/migrations/
- служебные файлы alembic./.env
- файл конфигурации, параметры из которого загружаются в переменные среды./.travis.yml
- файл конфигурации для Travis CI/Procfile
- файл, задающий процессы для запуска на сервере Heroku./requirements.txt
- файл с зависимостями проекта.
Описание ко всем неупомянутым файлам находится в их собственной документации.
- Heroku - хостинг всего веб-приложения, включая БД.
- Flask - микро-фреймворк, используемый для создания веб-сайта.
- SQLAlchemy* - библиотека ORM для доступа к БД.
- Alembic* - библиотека, позволяющая вносить правки в БД без потери данных.
- WTForms* - библиотека для задания HTML-форм с помощью ООП.
- Flask-Login - дополнение к Flask для удобной авторизации пользователей.
- API Яндекс.Карт (в частности Static API, Geocoder и Поиск по организациям) - API рендера карт на странице и поиска объектов по адресу.
- Bootstrap - CSS-фреймворк, отвечающий за всю красоту на нашем веб-сайте.
- vk-api (python273) - библиотека для создания приложений на основе VK API.
- pytest и Travis CI - инструменты для автоматического тестирования приложения перед его загрузкой на сервер.
- Moment.JS* - библиотека для удобных операций со временем на сайте.
* - Модули, помеченые звёздочкой, подключены к Flask с помощью специальных дополнений.
- Улучшение безопасности. Проект отпалирован не до конца, и всё ещё существуют некоторые проблемы с проверкой прав пользователей на посещение страниц.
- JavaScript API карт. Статические карты, используемые в проекте, не являются лучшем решением для помощи волонтёрам. Куда удобнее было бы использовать для этой цели отдельные виджеты с картами, однако на данный момент такой возможности нет.
- Тестирование. Сейчас единственная функция, выполняемая CI, это проверка сборки проекта и его запуска. Нам бы хотелось уметь в автоматическом режиме проверять работоспособность веб-страниц и БД.
- Инструкция. Единственным способом разобраться с управлением на сайте является "метод тыка". И пускай веб-сайт не обладает какой-то особо запутанной структурой, некоторым пользователям может быть сложно разобраться с ним самостоятельно.