Театральная студия "Антракт" - Админ-панель
Проект админ-панели для театральной студии "Антракт" с автоматической загрузкой изображений в MinIO.
Архитектура
- Backend: Django REST Framework
- База данных: PostgreSQL
- Хранилище файлов: MinIO (S3-совместимое)
- Frontend: React (в разработке)
Быстрый запуск
Вариант 1: Windows (рекомендуется)
Предварительные требования
- Windows 10/11
- Docker Desktop для Windows
- Python 3.8+
- Git
Запуск
- Клонируйте репозиторий:
git clone <repository-url>
cd antrakt-admin
- Запустите проект одним из способов:
Способ A: PowerShell (рекомендуется)
.\start_windows.ps1
Способ B: Batch файл
start_windows.bat
Способ C: Ручной запуск
# 1. Запуск PostgreSQL и MinIO
docker-compose up -d postgres minio
# 2. Настройка Python окружения
cd backend
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
# 3. Применение миграций
python app\manage.py migrate
# 4. Инициализация MinIO
python init_minio.py
# 5. Запуск Django
python app\manage.py runserver
Вариант 2: Docker (для Linux/macOS)
Предварительные требования
- Docker
- Docker Compose
Запуск
- Клонируйте репозиторий:
git clone <repository-url>
cd antrakt-admin
- Запустите все сервисы:
docker-compose up -d
- Проверьте статус сервисов:
docker-compose ps
Доступ к сервисам
- Django API: http://localhost:8000
-
MinIO Console: http://localhost:9001
- Логин:
minioadmin
- Пароль:
minioadmin123
- Логин:
- Swagger API Docs: http://localhost:8000/swagger/
API для работы с изображениями
Загрузка изображения
POST /upload-image/
Content-Type: multipart/form-data
# Параметры:
# - image: файл изображения (обязательно)
# - folder: папка для сохранения (опционально, по умолчанию "images")
Пример ответа:
{
"success": true,
"image_url": "http://localhost:9000/antrakt-images/images/2024/01/15/uuid.jpg",
"message": "Изображение успешно загружено"
}
Удаление изображения
DELETE /delete-image/?image_url=http://localhost:9000/antrakt-images/images/2024/01/15/uuid.jpg
Пример ответа:
{
"success": true,
"message": "Изображение успешно удалено"
}
Модели с поддержкой изображений
Все модели с полем image_url
автоматически поддерживают загрузку изображений:
- Perfomances (Спектакли)
- Actors (Актеры)
- DirectorsTheatre (Режиссеры)
- News (Новости)
- Archive (Архив)
- Achievements (Достижения)
Использование в коде
Загрузка изображения при создании объекта
from my_app1.models import Perfomances
from django.core.files.uploadedfile import UploadedFile
# Создание объекта
perfomance = Perfomances(
title="Название спектакля",
author="Автор",
genre="Драма",
age_limit="12+",
description="Описание спектакля"
)
# Установка изображения
perfomance.set_image(image_file) # image_file - Django UploadedFile
# Сохранение (изображение автоматически загрузится в MinIO)
perfomance.save()
Обновление изображения
# Получение объекта
perfomance = Perfomances.objects.get(id=1)
# Установка нового изображения
perfomance.set_image(new_image_file)
# Сохранение (старое изображение автоматически удалится, новое загрузится)
perfomance.save()
Структура хранения в MinIO
antrakt-images/
├── perfomances/
│ └── 2024/
│ └── 01/
│ └── 15/
│ └── uuid.jpg
├── actors/
│ └── 2024/
│ └── 01/
│ └── 15/
│ └── uuid.png
├── directors/
├── news/
├── archive/
└── achievements/
Настройки окружения
Создайте файл .env
в папке backend/
:
# Database settings
DATABASE_NAME=antrakt
DATABASE_USER=postgres
DATABASE_PASSWORD=123
DATABASE_HOST=localhost
DATABASE_PORT=5432
# MinIO settings
MINIO_ENDPOINT=localhost:9000
MINIO_ACCESS_KEY=minioadmin
MINIO_SECRET_KEY=minioadmin123
MINIO_BUCKET_NAME=antrakt-images
# Django settings
SECRET_KEY=your-secret-key
DEBUG=True
Разработка
Локальная разработка без Docker
- Установите зависимости:
cd backend
pip install -r requirements.txt
- Запустите PostgreSQL и MinIO через Docker:
docker-compose up postgres minio -d
- Примените миграции:
python app/manage.py migrate
- Запустите сервер разработки:
python app/manage.py runserver
Создание миграций
python app/manage.py makemigrations
python app/manage.py migrate
Создание суперпользователя
python app/manage.py createsuperuser
Безопасность
- Все API endpoints для загрузки изображений требуют аутентификации
- Поддерживаются только изображения (JPEG, PNG, GIF, WebP)
- Максимальный размер файла: 10MB
- Автоматическое удаление старых изображений при обновлении
Мониторинг
Логи MinIO
docker-compose logs minio
Логи Django
docker-compose logs backend
Проверка здоровья сервисов
# MinIO
curl http://localhost:9000/minio/health/live
# Django
curl http://localhost:8000/admin/
Troubleshooting
MinIO не запускается
- Проверьте, что порты 9000 и 9001 свободны
- Удалите volume и пересоздайте:
docker-compose down -v
docker-compose up -d
Проблемы с загрузкой изображений
- Проверьте подключение к MinIO:
curl http://localhost:9000/minio/health/live
-
Проверьте bucket в MinIO Console: http://localhost:9001
-
Проверьте логи Django:
docker-compose logs backend
Проблемы с базой данных
- Проверьте подключение к PostgreSQL:
docker-compose exec postgres psql -U postgres -d antrakt
- Примените миграции:
docker-compose exec backend python app/manage.py migrate