feat: сборка в контейнеры

This commit is contained in:
Artem Tsyrulnikov
2025-11-10 17:48:34 +03:00
parent 0bed5c266d
commit 3c430885fe
6 changed files with 66 additions and 2 deletions

View File

@@ -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

View File

@@ -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"]

26
Makefile Normal file
View File

@@ -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}"

View File

@@ -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` - остановить контейнеры

View File

@@ -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:

View File

@@ -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: