Микросервис помогает работе основного сайта, сделанного на CMS и обслуживает запросы на скачивание архивов с файлами. Микросервис не умеет ничего, кроме упаковки файлов в архив. Закачиваются файлы на сервер через FTP или админку CMS.
Создание архива происходит на лету по запросу от пользователя. Архив не сохраняется на диске, вместо этого по мере упаковки он сразу отправляется пользователю на скачивание.
От неавторизованного доступа архив защищен хешом в адресе ссылки на скачивание, например: http://host.ru/archive/3bea29ccabbbf64bdebcc055319c5745/
. Хеш задается названием каталога с файлами, выглядит структура каталога так:
- photos
- 3bea29ccabbbf64bdebcc055319c5745
- 1.jpg
- 2.jpg
- 3.jpg
- af1ad8c76fda2e48ea9aed2937e972ea
- 1.jpg
- 2.jpg
Для работы микросервиса нужен Python версии не ниже 3.7+.
Также в программе используются следующие сторонние библиотеки:
- aiohttp https://aiohttp.readthedocs.io/en/stable/;
- aiofiles https://github.com/Tinche/aiofiles;
Рекомендуется устанавливать зависимости в виртуальном окружении, используя virtualenv, virtualenvwrapper или venv.
- Скопируйте репозиторий в текущий каталог. Воспользуйтесь командой:
$ git clone https://github.com/igorzakhar/async-download-service.git async_download_service
После этого программа будет скопирована в каталог async_download_service
- Создайте и активируйте виртуальное окружение:
$ cd async_download_service # Переходим в каталог с программой
$ python3 -m venv my_virtual_environment # Создаем виртуальное окружение
$ source my_virtual_environment/bin/activate # Активируем виртуальное окружение
- Установите сторонние библиотеки из файла зависимостей:
$ pip install -r requirements.txt # В качестве альтернативы используйте pip3
Для просмотра справочной информации по использованию программы используйте ключ -h
или --help
:
$ python3 server.py -h
Аргументы командной строки:
server.py [-h] [-H HOST] [-P PORT] [-D DIR] [-d DELAY] [-v]
-h, --help
- Вызов справки.-H HOST, --host HOST
- IP адрес хоста, на котором работает HTTP сервер (значение по умолчанию0.0.0.0
)-P PORT, --port PORT
- TCP порт, на котором сервис будет ожидать входящие запросы (значение по умолчанию8080
).-D DIR, --dir DIR
- Директория файлового хранилища (значение по умолчаниюtest_photos
).-d DELAY, --delay DELAY
- Задержка между отправкой фрагментов архивного файла в секундах (значение по умолчанию0
).-v, --verbose
- Устанавливает уровень логгированияDEBUG
(по умолчанию установлен уровеньINFO
). Также выводится информация об отправке файла.
Пример запуска в Linux(Debian 9.0), Python 3.7.3:
$ python server.py
======== Running on http://0.0.0.0:8080 ========
(Press CTRL+C to quit)
Сервер запустится на порту 8080, чтобы проверить его работу перейдите в браузере на страницу http://127.0.0.1:8080/.
python server.py
После этого перенаправить на микросервис запросы, начинающиеся с /arhive/
. Например:
GET http://host.ru/archive/3bea29ccabbbf64bdebcc055319c5745/
GET http://host.ru/archive/af1ad8c76fda2e48ea9aed2937e972ea/