diff --git a/.env.example b/.env.example index cd69276..c6a790d 100644 --- a/.env.example +++ b/.env.example @@ -1,5 +1,5 @@ APP__URL=https://app.example.com -DB__URL=postgresql+asyncpg://user:password@localhost:5432/tgex +DB__URL=postgresql+asyncpg://user:password@postgres:5432/tgex LOGGER__APP_NAME="tgex-backend" LOGGER__PRETTY_CONSOLE=true TELEGRAM__TOKEN=your_bot_token_here diff --git a/Dockerfile b/Dockerfile index b0aff56..436c191 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,9 @@ COPY alembic.ini ./ COPY migration ./migration ENV PYTHONPATH=/shared:/src +ARG GIT_COMMIT=unknown +ENV GIT_COMMIT=${GIT_COMMIT} EXPOSE 8000 -CMD ["uvicorn src.main:app --host 0.0.0.0 --port 8000"] +CMD [".venv/bin/uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5dfe2ca --- /dev/null +++ b/Makefile @@ -0,0 +1,26 @@ +test: + pytest --no-header + +env: + cp .env.example .env + +up: + GIT_COMMIT=$$(git rev-parse --short HEAD) docker compose up --build -d --force-recreate + docker compose logs -f + +migrate: + docker exec -it tgex-backend-backend-1 .venv/bin/alembic upgrade head + +down: + docker compose down + +clean: + @docker rm -f $$(docker ps -aq) 2>/dev/null || true + @docker rmi -f $$(docker images --filter "dangling=true" -q) 2>/dev/null || true + @docker images --format "{{.Repository}}:{{.Tag}}" | grep -E "^(crm|local)" | xargs -r docker rmi -f 2>/dev/null || true + @docker volume rm $$(docker volume ls -q) 2>/dev/null || true + @docker network rm $$(docker network ls -q | grep -vE 'bridge|host|none') 2>/dev/null || true + @docker system prune --volumes -f + @echo "${GREEN}Docker очистка завершена. Базовые образы из registry сохранены.${NC}" + + diff --git a/README.md b/README.md index c4d14e8..0e017e0 100644 --- a/README.md +++ b/README.md @@ -1 +1,22 @@ # tgex-backend + +## Быстрый старт + +```bash +# Запустить +make up + +# Применить миграции +make migrate +``` + +Открыть: +- API: http://localhost:8000 +- Docs: http://localhost:8000/docs + +## Команды + +- `make test` - запустить тесты +- `make up` - поднять приложение +- `make migrate` - применить миграции БД +- `make down` - остановить контейнеры diff --git a/docker-compose.yml b/docker-compose.yml index 9954f9a..ed1acbc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,16 @@ services: + backend: + build: + context: . + args: + GIT_COMMIT: ${GIT_COMMIT:-unknown} + env_file: + - .env + ports: + - "8000:8000" + depends_on: + - postgres + postgres: image: postgres environment: diff --git a/shared/logger/logger.py b/shared/logger/logger.py index cac6ea2..2523a22 100644 --- a/shared/logger/logger.py +++ b/shared/logger/logger.py @@ -1,4 +1,5 @@ import logging +import os import subprocess import sys @@ -10,6 +11,8 @@ from .json_formatter import JSONFormatter def get_git_commit() -> str: + if commit := os.getenv('GIT_COMMIT'): + return commit try: return subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD'], text=True).strip() except Exception: