Go to file
itqop 25dcb7d17f fix tree 2026-01-05 15:26:53 +03:00
.claude fix error 2025-12-30 23:11:09 +03:00
backend fix tree 2026-01-05 15:26:53 +03:00
frontend fix tree 2026-01-05 15:26:53 +03:00
nginx off buffer 2025-12-30 19:34:40 +03:00
.env.example fixes 2025-12-30 16:51:56 +03:00
.gitignore first versuion 2025-12-30 15:35:19 +03:00
CLAUDE.md first versuion 2025-12-30 15:35:19 +03:00
DEPLOYMENT.md fixes 2025-12-30 16:51:56 +03:00
FIXES.md fixes third pass 2025-12-30 16:00:44 +03:00
IMPLEMENTATION_STATUS.md add auto migrations 2025-12-31 01:59:47 +03:00
README.md first versuion 2025-12-30 15:35:19 +03:00
docker-compose.yml fix docker 2025-12-31 00:27:46 +03:00
tech_spec_cloud_media_storage.md first versuion 2025-12-30 15:35:19 +03:00

README.md

ITCloud - Облачное хранилище фото и видео

Современное облачное хранилище для фото и видео с удобным веб-интерфейсом, построенное на React + Material UI и Python FastAPI.

Особенности

  • 📸 Загрузка фото и видео - поддержка drag & drop, пакетная загрузка
  • 🖼️ Удобная галерея - сетка с превью, быстрый просмотр
  • 🎬 Видео плеер - встроенный плеер для просмотра видео
  • 🗑️ Корзина - мягкое удаление с возможностью восстановления
  • 🔗 Шаринг - публичные ссылки с возможностью установить срок действия и пароль
  • 📱 Responsive дизайн - отлично работает на мобильных устройствах и десктопе
  • 🔐 Безопасность - JWT аутентификация, pre-signed URLs для S3

Технологии

Backend

  • FastAPI - современный асинхронный веб-фреймворк
  • SQLAlchemy 2.0 - ORM с асинхронной поддержкой
  • SQLite / PostgreSQL - база данных (легкая миграция)
  • S3 / MinIO - хранилище объектов
  • Alembic - миграции базы данных
  • JWT - аутентификация

Frontend

  • React 18 - современная библиотека для UI
  • TypeScript - типизированный JavaScript
  • Material UI (MUI) - готовые компоненты с Material Design
  • Vite - быстрая сборка
  • React Router - маршрутизация
  • Axios - HTTP клиент

Быстрый старт

Предварительные требования

  • Docker и Docker Compose
  • Node.js 20+ (для разработки фронтенда без Docker)
  • Python 3.11+ (для разработки backend без Docker)

Запуск с Docker Compose (рекомендуется)

  1. Клонируйте репозиторий:
git clone <repository-url>
cd itcloud
  1. Запустите все сервисы:
docker-compose up

Это запустит:

  1. Откройте браузер и перейдите на http://localhost:5173

Разработка без Docker

Backend

  1. Установите зависимости:
cd backend
pip install poetry
poetry install
  1. Создайте файл .env:
cp .env.example .env
# Отредактируйте .env с вашими настройками
  1. Примените миграции:
poetry run alembic upgrade head
  1. Запустите сервер:
poetry run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

Frontend

  1. Установите зависимости:
cd frontend
npm install
  1. Создайте файл .env:
echo "VITE_API_URL=http://localhost:8000" > .env.local
  1. Запустите dev сервер:
npm run dev

Структура проекта

itcloud/
├── backend/                 # Python FastAPI backend
│   ├── src/app/
│   │   ├── api/            # API routes
│   │   │   └── v1/         # API v1 endpoints
│   │   ├── services/       # Business logic
│   │   ├── repositories/   # Data access layer
│   │   ├── infra/          # Infrastructure (S3, DB, config)
│   │   └── domain/         # Domain models
│   ├── alembic/            # Database migrations
│   ├── tests/              # Tests
│   └── pyproject.toml      # Python dependencies
├── frontend/               # React frontend
│   ├── src/
│   │   ├── components/     # React components
│   │   ├── pages/          # Page components
│   │   ├── services/       # API client
│   │   ├── hooks/          # Custom hooks
│   │   ├── types/          # TypeScript types
│   │   └── theme/          # MUI theme
│   └── package.json        # Node dependencies
├── docker-compose.yml      # Docker Compose configuration
└── CLAUDE.md              # Developer documentation

API Документация

После запуска backend, документация доступна по адресу:

Основные эндпоинты

Аутентификация

  • POST /api/v1/auth/register - Регистрация
  • POST /api/v1/auth/login - Вход
  • GET /api/v1/auth/me - Получить текущего пользователя

Файлы

  • GET /api/v1/assets - Список файлов
  • GET /api/v1/assets/{id} - Информация о файле
  • DELETE /api/v1/assets/{id} - Удалить (в корзину)
  • POST /api/v1/assets/{id}/restore - Восстановить из корзины
  • DELETE /api/v1/assets/{id}/purge - Удалить навсегда

Загрузка

  • POST /api/v1/uploads/create - Создать загрузку
  • POST /api/v1/uploads/{id}/finalize - Завершить загрузку

Шаринг

  • POST /api/v1/shares - Создать публичную ссылку
  • GET /api/v1/shares/{token} - Получить информацию о ссылке
  • GET /api/v1/shares/{token}/download-url - Получить URL для скачивания

Переменные окружения

Backend

APP_ENV=dev
DATABASE_URL=sqlite+aiosqlite:///./app.db
S3_ENDPOINT_URL=http://localhost:9000
S3_ACCESS_KEY_ID=minioadmin
S3_SECRET_ACCESS_KEY=minioadmin
MEDIA_BUCKET=itcloud-media
JWT_SECRET=your-secret-key
CORS_ORIGINS=http://localhost:5173

Frontend

VITE_API_URL=http://localhost:8000

Миграция на PostgreSQL

  1. Обновите DATABASE_URL в .env:
DATABASE_URL=postgresql+asyncpg://user:password@localhost:5432/itcloud
  1. Примените миграции:
poetry run alembic upgrade head

Деплой

Production Build Frontend

cd frontend
npm run build

Файлы будут собраны в static/ и готовы для хостинга в S3 или через nginx.

Backend в Production

  1. Используйте PostgreSQL вместо SQLite
  2. Настройте CORS для вашего домена
  3. Используйте сильный JWT_SECRET
  4. Настройте SSL/TLS
  5. Используйте gunicorn/uvicorn с несколькими воркерами

Следующие шаги (TODO)

  • Redis + RQ для фоновых задач
  • Генерация превью для фото
  • Генерация постеров для видео
  • Извлечение EXIF данных
  • Альбомы
  • Теги
  • Поиск по метаданным
  • Квоты пользователей
  • Тесты

Лицензия

MIT

Поддержка

Для вопросов и предложений создавайте issue в репозитории.