Многопользовательское файловое облако. Пользователи сервиса могут использовать его для загрузки, хранения файлов и работы с ними.
Проект создан в рамках Python Roadmap Сергея Жукова -> ссылка
- Выполните клонирование проекта
git clone https://github.com/Wh4tisl0ve/Cloud_file_storage.git
- Выполните установку Docker
- Создайте .env файл в директории
cloud_storage
и заполните переменные окружения
Для dev-версии проекта:
- Выполните команду
docker-compose up -d --build
- Выполните команду
poetry run python manage.py runserver
из директорииcloud_storage
- Приложение доступно по адресу localhost:8000
Для prod-версии проекта:
- Выполните команду
docker-compose up -f docker-compose.prod.yaml -d --build
- Приложение доступно по адресу ${your_ip}:8000
#### Django-App
DEBUG=Режим отладки(False - выключен, True - включен)
SECRET_KEY=Cекретный ключ для Django
ALLOWED_HOSTS=Список доменов, которые может обслуживать приложение
#### DB-config
POSTGRES_DB=cloud_storage
POSTGRES_USER=Имя пользователя от БД
POSTGRES_PASSWORD=Пароль от БД
POSTGRES_HOST=Хост, используемый для подключения к PostgreSQL
POSTGRES_PORT=Порт, используемый для подключения к PostgreSQL(по умолчанию 5432)
#### Redis-config
REDIS_PASSWORD=Пароль от Redis
REDIS_HOST=Хост, используемый для подключения к Redis
REDIS_PORT=Порт, используемый для подключения к Redis (по умолчанию 6379)
#### Minio config
MINIO_HOST=Хост, используемый для подключения к Minio
MINIO_PORT=Порт, используемый для подключения к Minio (по умолчанию 9000)
MINIO_BUCKET_NAME=user-files
MINIO_ACCESS_KEY=Логин для доступа к пользовательскому интерфейсу MinIO
MINIO_SECRET_KEY=Пароль для доступа к пользовательскому интерфейсу MinIO
- cloud_storage/config - Приложение, содержащее настройки Django
- cloud_storage/users - Приложение, отвечающее за работу с пользователями
- cloud_storage/cloud - Приложение, отвечающее за работу с основной логикой облачного хранилища
Проект состоит из 5 сервисов:
- nginx - служит для обработки статических файлов и проксирования запросов
- Django + gunicorn - служит для реализации основной логики проекта и корректной обработки запросов
- Redis - используется для хранения пользовательских сессий
- Minio - используется для хранения файловых объектов
- PostgreSQL - содержит в себе служебные таблицы Django и хранит информацию о пользователях приложения
Для хранения файлов всех пользователей в проекте существует бакет user-files. В корне бакета для каждого пользователя создана папка с именем в формате user-${id}-files, где id является идентификатором пользователя.
Каждая из таких папок является корнем для хранения папок данного пользователя.
- Создание файлов/папок
- Переименовывание файлов/папок
- Загрузка файлов/папок
- Скачивание файлов/папок(в виде .zip архива)
- Удаление файлов/папок
Адрес - /accounts/login
.
Представляет собой форму для авторизации пользователей.
Адрес - /accounts/register
.
Представляет собой форму для регистрации пользователей.
Адрес - /?path=$path_to_subdirectory
.
Представляет собой главную страницу приложения. Параметр $path задаёт путь просматриваемой папки. Если параметр отсутствует, подразумевается корневая папка.
Адрес - /search/?query=$search_query
.
Параметр $query представляет собой текстовый запрос пользователя для поиска по имени.
Представляет собой страницу результата поиска файлов.
В качестве фреймворка для тестирования был использован unittest. Юнит тестами был покрыт основной функционал приложения. Основные тест-кейсы:
- Проверка корректности создания файла/папки
- Если файл/папка уже существует, то этот объек не будет перезаписан и пользователь получит понятное описание ошибки
- Удаление файла/папки
- Переименование файла/папки
- Поиск файла/папки
- Проверка доступа только к разрешенным объекта хранилища
- Python 3.12
- Poetry
- Django 5.1.2
- PostgreSQL
- Minio
- Redis
- Docker
- unittest
- HTML/CSS(Bootstrap5)/JS