A

Antrakt

Театральная студия "Антракт" - Админ-панель

Проект админ-панели для театральной студии "Антракт" с автоматической загрузкой изображений в MinIO.

Архитектура

  • Backend: Django REST Framework
  • База данных: PostgreSQL
  • Хранилище файлов: MinIO (S3-совместимое)
  • Frontend: React (в разработке)

Быстрый запуск

Вариант 1: Windows (рекомендуется)

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

  • Windows 10/11
  • Docker Desktop для Windows
  • Python 3.8+
  • Git

Запуск

  1. Клонируйте репозиторий:
git clone <repository-url>
cd antrakt-admin
  1. Запустите проект одним из способов:

Способ 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

Запуск

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

Доступ к сервисам

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

  1. Установите зависимости:
cd backend
pip install -r requirements.txt
  1. Запустите PostgreSQL и MinIO через Docker:
docker-compose up postgres minio -d
  1. Примените миграции:
python app/manage.py migrate
  1. Запустите сервер разработки:
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 не запускается

  1. Проверьте, что порты 9000 и 9001 свободны
  2. Удалите volume и пересоздайте:
docker-compose down -v
docker-compose up -d

Проблемы с загрузкой изображений

  1. Проверьте подключение к MinIO:
curl http://localhost:9000/minio/health/live
  1. Проверьте bucket в MinIO Console: http://localhost:9001

  2. Проверьте логи Django:

docker-compose logs backend

Проблемы с базой данных

  1. Проверьте подключение к PostgreSQL:
docker-compose exec postgres psql -U postgres -d antrakt
  1. Примените миграции:
docker-compose exec backend python app/manage.py migrate