feat: сборка в контейнеры
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
APP__URL=https://app.example.com
|
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__APP_NAME="tgex-backend"
|
||||||
LOGGER__PRETTY_CONSOLE=true
|
LOGGER__PRETTY_CONSOLE=true
|
||||||
TELEGRAM__TOKEN=your_bot_token_here
|
TELEGRAM__TOKEN=your_bot_token_here
|
||||||
|
|||||||
@@ -12,7 +12,9 @@ COPY alembic.ini ./
|
|||||||
COPY migration ./migration
|
COPY migration ./migration
|
||||||
|
|
||||||
ENV PYTHONPATH=/shared:/src
|
ENV PYTHONPATH=/shared:/src
|
||||||
|
ARG GIT_COMMIT=unknown
|
||||||
|
ENV GIT_COMMIT=${GIT_COMMIT}
|
||||||
|
|
||||||
EXPOSE 8000
|
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
26
Makefile
Normal 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}"
|
||||||
|
|
||||||
|
|
||||||
21
README.md
21
README.md
@@ -1 +1,22 @@
|
|||||||
# tgex-backend
|
# tgex-backend
|
||||||
|
|
||||||
|
## Быстрый старт
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Запустить
|
||||||
|
make up
|
||||||
|
|
||||||
|
# Применить миграции
|
||||||
|
make migrate
|
||||||
|
```
|
||||||
|
|
||||||
|
Открыть:
|
||||||
|
- API: http://localhost:8000
|
||||||
|
- Docs: http://localhost:8000/docs
|
||||||
|
|
||||||
|
## Команды
|
||||||
|
|
||||||
|
- `make test` - запустить тесты
|
||||||
|
- `make up` - поднять приложение
|
||||||
|
- `make migrate` - применить миграции БД
|
||||||
|
- `make down` - остановить контейнеры
|
||||||
|
|||||||
@@ -1,4 +1,16 @@
|
|||||||
services:
|
services:
|
||||||
|
backend:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
args:
|
||||||
|
GIT_COMMIT: ${GIT_COMMIT:-unknown}
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
ports:
|
||||||
|
- "8000:8000"
|
||||||
|
depends_on:
|
||||||
|
- postgres
|
||||||
|
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres
|
image: postgres
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
@@ -10,6 +11,8 @@ from .json_formatter import JSONFormatter
|
|||||||
|
|
||||||
|
|
||||||
def get_git_commit() -> str:
|
def get_git_commit() -> str:
|
||||||
|
if commit := os.getenv('GIT_COMMIT'):
|
||||||
|
return commit
|
||||||
try:
|
try:
|
||||||
return subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD'], text=True).strip()
|
return subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD'], text=True).strip()
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|||||||
Reference in New Issue
Block a user