/async-download-service

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

Primary LanguageHTML

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

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

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

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

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

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

Для работы микросервиса нужен Python версии не ниже 3.7.

pip install -r requirements.txt

Настройки

Параметр Переменная окружения Описание Значение по умолчанию
--debug ADS_DEBUG Будут выводиться отладочные сообщения.
Скрипт запустится с logging.DEBUG
False
--delay ADS_DELAY Задать задержку между
отправками порций архива в секундах.
0
--photo_path ADS_PHOTO_PATH Абсолютный путь в котором
содержатся папки с фотографиями
/app/test_photos

Параметры передаваемые в скрипт имеют приемущество перед переменными окружения

Как запустить

python server.py

или

python server.py --debug --delay 1 --photo_path /new/path/to/photos

Сервер запустится на порту 8080, чтобы проверить его работу перейдите в браузере на страницу http://127.0.0.1:8080/.

Как развернуть на сервере

python server.py

После этого перенаправить на микросервис запросы, начинающиеся с /archive/. Например:

GET http://host.ru/archive/3bea29ccabbbf64bdebcc055319c5745/
GET http://host.ru/archive/af1ad8c76fda2e48ea9aed2937e972ea/

Запустить в Docker Compose

  • Убедитесь, что у вас установлен Docker

Соберите образ

docker-compose build

И запустите сервис

 docker-compose -f docker-compose.yml -f docker-compose.dev.yml up

Если нужно изменить настройки, то самый простой/удобный способ - передать переменные окружения через файл

создадим файл с настройками в корневой папке проекта

echo -e "ADS_DEBUG=true\nADS_PHOTO_PATH=/app/test_photos" > .env_ads

добавим ссылку на файл .env_ads в docker-compose.dev.yml

version: '2'

services:
  web:
    volumes:
      - .:/app
    env_file:
      - .env_ads

Цели проекта

Код написан в учебных целях — это урок в курсе по Python и веб-разработке на сайте Devman.