231 lines
7.5 KiB
Markdown
231 lines
7.5 KiB
Markdown
# 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. Клонируйте репозиторий:
|
||
```bash
|
||
git clone <repository-url>
|
||
cd itcloud
|
||
```
|
||
|
||
2. Запустите все сервисы:
|
||
```bash
|
||
docker-compose up
|
||
```
|
||
|
||
Это запустит:
|
||
- Backend API на http://localhost:8000
|
||
- Frontend на http://localhost:5173
|
||
- MinIO (S3) на http://localhost:9000 (консоль: http://localhost:9001)
|
||
- Redis на localhost:6379
|
||
|
||
3. Откройте браузер и перейдите на http://localhost:5173
|
||
|
||
### Разработка без Docker
|
||
|
||
#### Backend
|
||
|
||
1. Установите зависимости:
|
||
```bash
|
||
cd backend
|
||
pip install poetry
|
||
poetry install
|
||
```
|
||
|
||
2. Создайте файл `.env`:
|
||
```bash
|
||
cp .env.example .env
|
||
# Отредактируйте .env с вашими настройками
|
||
```
|
||
|
||
3. Примените миграции:
|
||
```bash
|
||
poetry run alembic upgrade head
|
||
```
|
||
|
||
4. Запустите сервер:
|
||
```bash
|
||
poetry run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
|
||
```
|
||
|
||
#### Frontend
|
||
|
||
1. Установите зависимости:
|
||
```bash
|
||
cd frontend
|
||
npm install
|
||
```
|
||
|
||
2. Создайте файл `.env`:
|
||
```bash
|
||
echo "VITE_API_URL=http://localhost:8000" > .env.local
|
||
```
|
||
|
||
3. Запустите dev сервер:
|
||
```bash
|
||
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, документация доступна по адресу:
|
||
- Swagger UI: http://localhost:8000/docs
|
||
- ReDoc: http://localhost:8000/redoc
|
||
|
||
## Основные эндпоинты
|
||
|
||
### Аутентификация
|
||
- `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
|
||
```env
|
||
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
|
||
```env
|
||
VITE_API_URL=http://localhost:8000
|
||
```
|
||
|
||
## Миграция на PostgreSQL
|
||
|
||
1. Обновите `DATABASE_URL` в `.env`:
|
||
```env
|
||
DATABASE_URL=postgresql+asyncpg://user:password@localhost:5432/itcloud
|
||
```
|
||
|
||
2. Примените миграции:
|
||
```bash
|
||
poetry run alembic upgrade head
|
||
```
|
||
|
||
## Деплой
|
||
|
||
### Production Build Frontend
|
||
```bash
|
||
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 в репозитории.
|