Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/dr1dex/test-memes

Сервис со смешнявками
https://github.com/dr1dex/test-memes

Last synced: 6 days ago
JSON representation

Сервис со смешнявками

Awesome Lists containing this project

README

        

![CI status for Smeshnavka](https://github.com/Dr1DeX/test-memes/actions/workflows/main.yml/badge.svg)

# Тестовове задание. Сервис Смешнявка

## Смешнявка - это фулл-стек приложение, который позволяет коллекционировать ваши любимые мемесы, вы можете создавать, редактировать, удалять. А восхитительный web-ui позволит вам получать удовольствие от просмотров мемесов и поднимать Ваше настроение каждый день, скорее разворачивайте это приложение и коллекционируйте мемесы уже сейчас!
___

## Схема приложения.
### Приложение состоит:
### сервис backend - он содержит основную бизнес-логику приложения и предоставляет публичный API для клиентов
### сервис frontend - предоставляет пользовательский интерфейс для взаимодействия с основным бэкендом
### сервис s3-bucket(MinIO) - публичное хранилище картинок/медийки
### Load-Balancer Nginx - прячет сервисы frontend, backend за собой, рулит нагрузкой, проксирует клиентские запросы через себя и маршутизирует их в нужные сервисы и отдает ответ клиенту
![Schema](assets/service-schema.png)

## Принцип работы:
### Пользовательский запрос идет через nginx ,nginx шлет его в контейнер с фронтом, фронт шлет через nginx запрос на backend, backend возвращает ему пост и ссылку на мемес в s3, фронт это вот все получает, берет ссылку и идет в s3 и рендерит страничку, возвращает ответ клиенту

## Стек приложения:


Python 
FastAPI 
PostgreSQL 
React 
JavaScript 
Anaconda 

____
## Руководство по разворачиванию приложения
### 1) Установка зависимостей
#### Для начала создаем виртуальное окружение(я использую conda, но вы можете использовать свой любимый менеджер пакетов)
`conda create -n memes`
### Устанавливаем `poetry`
`conda install poetry`
### Подтягиваем зависимости
`poetry install`
### 2) Устанавливаем переменные окружения
#### Для удобства они уже установлены в `.env.dev`
```
DB_HOST=memes
DB_PORT=5432
DB_NAME=memes
DB_USER=postgres
DB_DRIVER=postgresql+asyncpg
MINIO_ENDPOINT=minio:9000
MINIO_ACCESS_KEY=minioadmin
MINIO_SECRET_KEY=minioadmin
MINIO_BUCKET_NAME=memes-images
S3_URL=http://s3:8002/files
```
### 3) Разворачиваем в докере
#### Можно использовать скрипт из `Makefile` или вручную прописать команду
#### Makefile:
`make build`
#### Docker-compose:
`docker-compose up -d --build`
___
### Локальный запуск
#### Если нужно развернуть приложение локально можно использовать скрипт из `Makefile` или прописать вручную
#### Makefile
`make run-post`
#### Poetry
`poetry run uvicorn app.main:app --host localhost --port 8001 --reload --env-file `
#### ENV_NAME - имя вашего файла, где храняться переменные окружения
____
### 4) Загружаем тестовые данные
`python load_data.py`
### После этого web-ui будет доступен по адресу `localhost`

![Frontend](assets/frontend.png)

___
## Тесты.
### Тесты уже включены в основную CI систему, но можно запустить их и вручную
`pytest tests`
___
## Документация.
### После разворота приложения документация будет доступна по адресу `http://localhost/api/v1/docs`
![Docs](assets/docs.png)

___

## Developer: Dr1DeX