/async-download-service

Реализация микросервиса для загрузки файлов единым архивом.

Primary LanguagePython

Микросервис для скачивания файлов

Микросервис помогает работе основного сайта, сделанного на CMS и обслуживает запросы на скачивание архивов с файлами. Микросервис не умеет ничего, кроме упаковки файлов в архив. Закачиваются файлы на сервер через FTP или админку CMS.

Создание архива происходит на лету по запросу от пользователя. Архив не сохраняется на диске, вместо этого по мере упаковки он сразу отправляется пользователю на скачивание.

От неавторизованного доступа архив защищен хешом в адресе ссылки на скачивание, например: http://host.ru/archive/3bea29ccabbbf64bdebcc055319c5745/. Хеш задается названием каталога с файлами, выглядит структура каталога так:

- photos
    - 3bea29ccabbbf64bdebcc055319c5745
      - 1.jpg
      - 2.jpg
      - 3.jpg
    - af1ad8c76fda2e48ea9aed2937e972ea
      - 1.jpg
      - 2.jpg

Как установить

Для работы микросервиса нужен Python версии не ниже 3.7+.
Также в программе используются следующие сторонние библиотеки:

Рекомендуется устанавливать зависимости в виртуальном окружении, используя virtualenv, virtualenvwrapper или venv.

  1. Скопируйте репозиторий в текущий каталог. Воспользуйтесь командой:
$ git clone https://github.com/igorzakhar/async-download-service.git async_download_service

После этого программа будет скопирована в каталог async_download_service

  1. Создайте и активируйте виртуальное окружение:
$ cd async_download_service # Переходим в каталог с программой
$ python3 -m venv my_virtual_environment # Создаем виртуальное окружение
$ source my_virtual_environment/bin/activate # Активируем виртуальное окружение
  1. Установите сторонние библиотеки из файла зависимостей:
$ 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/