{"id":24149241,"url":"https://github.com/wh4tisl0ve/cloud_file_storage","last_synced_at":"2026-06-09T12:31:21.031Z","repository":{"id":271012059,"uuid":"912131846","full_name":"Wh4tisl0ve/Cloud_file_storage","owner":"Wh4tisl0ve","description":"Многопользовательское файловое облако. Пользователи сервиса могут использовать его для загрузки и хранения файлов.","archived":false,"fork":false,"pushed_at":"2025-02-04T20:44:13.000Z","size":1007,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-01T17:28:44.312Z","etag":null,"topics":["cloud-storage","django","docker","html-css-javascript","minio","nginx","poetry","postgresql","python3","redis","s3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Wh4tisl0ve.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-04T17:33:30.000Z","updated_at":"2025-02-04T21:34:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"30b910a6-fe66-41bd-a89c-69b0c359411d","html_url":"https://github.com/Wh4tisl0ve/Cloud_file_storage","commit_stats":null,"previous_names":["wh4tisl0ve/cloud_file_storage"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Wh4tisl0ve/Cloud_file_storage","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wh4tisl0ve%2FCloud_file_storage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wh4tisl0ve%2FCloud_file_storage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wh4tisl0ve%2FCloud_file_storage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wh4tisl0ve%2FCloud_file_storage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Wh4tisl0ve","download_url":"https://codeload.github.com/Wh4tisl0ve/Cloud_file_storage/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wh4tisl0ve%2FCloud_file_storage/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34107865,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloud-storage","django","docker","html-css-javascript","minio","nginx","poetry","postgresql","python3","redis","s3"],"created_at":"2025-01-12T08:37:13.413Z","updated_at":"2026-06-09T12:31:21.003Z","avatar_url":"https://github.com/Wh4tisl0ve.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Облачное хранилище файлов\n\nМногопользовательское файловое облако. Пользователи сервиса могут использовать его для загрузки, хранения файлов и работы с ними. \n\nПроект создан в рамках **Python Roadmap Сергея Жукова** -\u003e [ссылка](https://zhukovsd.github.io/python-backend-learning-course/)\n  \n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./docs/logo.png\" width=\"250\" height=\"250\" alt=\"logo\"/\u003e\n\u003c/p\u003e\n\n## Запуск проекта\n\u003col\u003e\n  \u003cli\u003eВыполните клонирование проекта \u003ccode\u003egit clone https://github.com/Wh4tisl0ve/Cloud_file_storage.git\u003c/code\u003e\u003c/li\u003e\n  \u003cli\u003eВыполните установку Docker\u003c/li\u003e\n  \u003cli\u003eСоздайте .env файл в директории \u003ccode\u003ecloud_storage\u003c/code\u003e и заполните переменные окружения\u003c/li\u003e\n\u003c/ol\u003e\n\n**Для dev-версии проекта:**\n\u003col start=\"4\"\u003e\n  \u003cli\u003eВыполните команду \u003ccode\u003edocker-compose up -d --build\u003c/code\u003e\u003c/li\u003e\n  \u003cli\u003eВыполните команду \u003ccode\u003epoetry run python manage.py runserver\u003c/code\u003e из директории \u003ccode\u003ecloud_storage\u003c/code\u003e\u003c/li\u003e\n  \u003cli\u003eПриложение доступно по адресу localhost:8000\u003c/li\u003e\n\u003c/ol\u003e\n\n**Для prod-версии проекта:**\n\u003col start=\"4\"\u003e\n  \u003cli\u003eВыполните команду \u003ccode\u003edocker-compose up -f docker-compose.prod.yaml -d --build\u003c/code\u003e\u003c/li\u003e\n  \u003cli\u003eПриложение доступно по адресу ${your_ip}:8000\u003c/li\u003e\n\u003c/ol\u003e\n\n\n## Пример .env \n```env\n#### Django-App\nDEBUG=Режим отладки(False - выключен, True - включен)  \nSECRET_KEY=Cекретный ключ для Django  \nALLOWED_HOSTS=Список доменов, которые может обслуживать приложение  \n\n#### DB-config\nPOSTGRES_DB=cloud_storage  \nPOSTGRES_USER=Имя пользователя от БД  \nPOSTGRES_PASSWORD=Пароль от БД  \nPOSTGRES_HOST=Хост, используемый для подключения к PostgreSQL  \nPOSTGRES_PORT=Порт, используемый для подключения к PostgreSQL(по умолчанию 5432)\n\n#### Redis-config\nREDIS_PASSWORD=Пароль от Redis  \nREDIS_HOST=Хост, используемый для подключения к Redis  \nREDIS_PORT=Порт, используемый для подключения к Redis (по умолчанию 6379)\n\n#### Minio config\nMINIO_HOST=Хост, используемый для подключения к Minio  \nMINIO_PORT=Порт, используемый для подключения к Minio (по умолчанию 9000)  \nMINIO_BUCKET_NAME=user-files  \nMINIO_ACCESS_KEY=Логин для доступа к пользовательскому интерфейсу MinIO  \nMINIO_SECRET_KEY=Пароль для доступа к пользовательскому интерфейсу MinIO   \n```\n\n## Структура приложений Django\n\n* [cloud_storage/config](cloud_storage/config) - Приложение, содержащее настройки Django\n* [cloud_storage/users](cloud_storage/users) - Приложение, отвечающее за работу с пользователями\n* [cloud_storage/cloud](cloud_storage/cloud) - Приложение, отвечающее за работу с основной логикой облачного хранилища\n\n## Архитектура проекта\nПроект состоит из 5 сервисов:\n1. nginx - служит для обработки статических файлов и проксирования запросов\n2. Django + gunicorn - служит для реализации основной логики проекта и корректной обработки запросов\n3. Redis - используется для хранения пользовательских сессий\n4. Minio - используется для хранения файловых объектов\n5. PostgreSQL - содержит в себе служебные таблицы Django и хранит информацию о пользователях приложения\n\n\u003cimg src=\"./docs/architecture.jpg\" alt=\"architecture\"/\u003e\n\n## Структура S3 хранилища\n\nДля хранения файлов всех пользователей в проекте существует бакет user-files. В корне бакета для каждого пользователя создана папка с именем в формате user-${id}-files, где id является идентификатором пользователя. \n\nКаждая из таких папок является корнем для хранения папок данного пользователя.\n\n\u003cimg src=\"./docs/minio_structure.jpg\" alt=\"minio_structure\"/\u003e\n\n## Основные операции с объектами хранилища\n\n* Создание файлов/папок\n* Переименовывание файлов/папок\n* Загрузка файлов/папок\n* Скачивание файлов/папок(в виде .zip архива)\n* Удаление файлов/папок\n\n## Описание страниц проекта\n### Страница авторизации\nАдрес - `/accounts/login`.\nПредставляет собой форму для авторизации пользователей. \n\n\u003cimg src=\"./docs/auth.jpg\" alt=\"auth\"/\u003e\n\n### Страница регистрации\nАдрес - `/accounts/register`. \nПредставляет собой форму для регистрации пользователей. \n\n\u003cimg src=\"./docs/register.jpg\" alt=\"register\"/\u003e\n\n### Главная страница\nАдрес - `/?path=$path_to_subdirectory`. \nПредставляет собой главную страницу приложения. Параметр $path задаёт путь просматриваемой папки. Если параметр отсутствует, подразумевается корневая папка. \n\n\u003cimg src=\"./docs/main.jpg\" alt=\"main\"/\u003e\n\n### Страница поиска файлов\nАдрес - `/search/?query=$search_query`.\nПараметр $query представляет собой текстовый запрос пользователя для поиска по имени.\nПредставляет собой страницу результата поиска файлов. \n\n\u003cimg src=\"./docs/search.jpg\" alt=\"search\"/\u003e\n\n## Тесты\nВ качестве фреймворка для тестирования был использован unittest.\nЮнит тестами был покрыт основной функционал приложения. \nОсновные тест-кейсы:\n* Проверка корректности создания файла/папки\n* Если файл/папка уже существует, то этот объек не будет перезаписан и пользователь получит понятное описание ошибки\n* Удаление файла/папки\n* Переименование файла/папки\n* Поиск файла/папки\n* Проверка доступа только к разрешенным объекта хранилища\n\n## Стек \n\n* Python 3.12\n* Poetry\n* Django 5.1.2\n* PostgreSQL\n* Minio\n* Redis\n* Docker\n* unittest\n* HTML/CSS(Bootstrap5)/JS\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwh4tisl0ve%2Fcloud_file_storage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwh4tisl0ve%2Fcloud_file_storage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwh4tisl0ve%2Fcloud_file_storage/lists"}