Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dr1dex/test-memes
Сервис со смешнявками
https://github.com/dr1dex/test-memes
Last synced: 6 days ago
JSON representation
Сервис со смешнявками
- Host: GitHub
- URL: https://github.com/dr1dex/test-memes
- Owner: Dr1DeX
- License: mit
- Created: 2024-07-19T14:49:07.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2024-07-27T11:26:52.000Z (4 months ago)
- Last Synced: 2024-07-27T13:49:00.645Z (4 months ago)
- Language: Python
- Size: 2.02 MB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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 и рендерит страничку, возвращает ответ клиенту## Стек приложения:
____
## Руководство по разворачиванию приложения
### 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