Сервис для асинхронной обработки изображений с FastAPI, RabbitMQ, PostgreSQL и S3.
⚠️ Это MVP. Основная цель — демонстрация функционала загрузки, асинхронной обработки и хранения результатов.
- FastAPI — основной API сервис
- RabbitMQ — очередь задач
- PostgreSQL — база данных
- Docker + Docker Compose — контейнеризация
- Alembic — миграции базы данных
- S3 - хранение файлов
- Клонируйте репозиторий:
git clone https://github.com/sibeardev/astrid.git
cd astrid
- Создайте файл окружения
.env
:
# Database
DB__USER=user
DB__PASSWORD=yourpassword
DB__DB=images_db
# RabbitMQ
RABBIT__URL=amqp://guest:guest@rabbit:5672/
# S3
S3__BUCKET=images
S3__REGION=us-east-1
S3__ACCESS_KEY=minioadmin
S3__SECRET_KEY=minioadmin
S3__ENDPOINT=http://minio:9000
Собрать образы и запустить сервисы
docker compose up --build
После запуска сервисы доступны по следующим адресам:
- Swagger UI: http://localhost:8000/docs
- Redoc: http://localhost:8000/redoc
- Хранилище изображений S3: http://localhost:9001/
Остановить
docker compose down
В alembic.ini
найдите sqlalchemy.url
и установите:
sqlalchemy.url = postgresql+asyncpg://user:yourpassword@db:5432/images_db
user, yourpassword и db должны совпадать с настройками Database из .env
Создание миграции:
docker compose run --rm api alembic revision --autogenerate -m "описание миграции"
Применение миграций:
docker compose run --rm api alembic upgrade head
Откат миграции:
docker compose run --rm api alembic downgrade -1
docker compose run --rm api pytest -v src/tests
Загрузка изображения:
curl -X POST "http://localhost:8000/images" \
-F "file=@/path/to/image.jpg"
Возвращает данные по изображению:
curl "http://localhost:8000/images/<image_id>"