Updated docker

This commit is contained in:
2025-11-20 23:34:49 +07:00
parent f2fca50d5a
commit 5d5b6140d4
5 changed files with 148 additions and 9 deletions

View File

@@ -17,6 +17,13 @@ services:
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 retries: 5
networks:
- call-review-network
volumes: volumes:
postgres_data: postgres_data:
networks:
call-review-network:
name: call-review-network
driver: bridge

View File

@@ -0,0 +1,40 @@
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
venv/
env/
ENV/
.venv
# IDEs
.vscode/
.idea/
*.swp
*.swo
*~
# Git
.git/
.gitignore
# Documentation
README.md
*.md
# Environment files
.env
.env.*
# Testing
.pytest_cache/
.coverage
htmlcov/
*.log
# OS
.DS_Store
Thumbs.db

View File

@@ -1,11 +1,40 @@
FROM python:3.9-slim # Multi-stage build для уменьшения размера образа
FROM python:3.9-slim as builder
WORKDIR /app WORKDIR /app
COPY requirements.txt . COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt RUN pip install --user --no-cache-dir -r requirements.txt
COPY app ./app # Финальный образ
FROM python:3.9-slim
WORKDIR /app
# Создаем непривилегированного пользователя для безопасности
RUN useradd -m -u 1000 appuser && \
chown -R appuser:appuser /app
# Копируем установленные пакеты из builder stage
COPY --from=builder --chown=appuser:appuser /root/.local /home/appuser/.local
# Копируем код приложения
COPY --chown=appuser:appuser app ./app
# Копируем файлы миграций Alembic
COPY --chown=appuser:appuser alembic ./alembic
COPY --chown=appuser:appuser alembic.ini .
# Переключаемся на непривилегированного пользователя
USER appuser
# Добавляем установленные пакеты в PATH
ENV PATH=/home/appuser/.local/bin:$PATH
# Healthcheck для проверки состояния сервиса
HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health').read()" || exit 1
# Запуск приложения
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

View File

@@ -40,14 +40,37 @@ ingest-service/
### 1. Запуск через Docker Compose (рекомендуется) ### 1. Запуск через Docker Compose (рекомендуется)
**Шаг 1: Запустить инфраструктуру (PostgreSQL)**
```bash ```bash
# Запустить все сервисы (PostgreSQL + приложение) # Из корня проекта
cd infra
docker-compose up -d
# Проверить, что PostgreSQL запущен
docker-compose ps
```
**Шаг 2: Запустить микросервис ingest-service**
```bash
# Из папки микросервиса
cd ../services/ingest-service
docker-compose up -d docker-compose up -d
# Проверить логи # Проверить логи
docker-compose logs -f app docker-compose logs -f
# Остановить сервисы # Проверить статус
docker-compose ps
```
**Остановка сервисов:**
```bash
# Остановить микросервис
cd services/ingest-service
docker-compose down
# Остановить инфраструктуру
cd ../../infra
docker-compose down docker-compose down
``` ```
@@ -58,6 +81,13 @@ Swagger документация: http://localhost:8000/docs
### 2. Локальный запуск для разработки ### 2. Локальный запуск для разработки
```bash ```bash
# Запустить только PostgreSQL через Docker
cd ../../infra
docker-compose up -d postgres
# Вернуться в папку сервиса
cd ../services/ingest-service
# Создать виртуальное окружение # Создать виртуальное окружение
python -m venv venv python -m venv venv
source venv/bin/activate # для Linux/Mac source venv/bin/activate # для Linux/Mac
@@ -67,10 +97,11 @@ venv\Scripts\activate # для Windows
# Установить зависимости # Установить зависимости
pip install -r requirements.txt pip install -r requirements.txt
# Запустить только PostgreSQL через Docker
docker-compose up -d postgres
# Убедиться, что файл .env настроен правильно # Убедиться, что файл .env настроен правильно
# DATABASE_URL=postgresql+asyncpg://postgres:postgres@localhost:5432/ingest_db
# Применить миграции
alembic upgrade head
# Запустить приложение # Запустить приложение
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

View File

@@ -0,0 +1,32 @@
version: "3.8"
services:
ingest-service:
build:
context: .
dockerfile: Dockerfile
container_name: ingest-service
environment:
# Подключение к PostgreSQL из infra/docker-compose.yaml
DATABASE_URL: postgresql+asyncpg://postgres:postgres@ingest-postgres:5432/ingest_db
APP_HOST: 0.0.0.0
APP_PORT: 8000
ports:
- "8000:8000"
networks:
- call-review-network
restart: unless-stopped
# Запускаем миграции перед стартом приложения
command: >
sh -c "alembic upgrade head && uvicorn app.main:app --host 0.0.0.0 --port 8000"
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health').read()"]
interval: 30s
timeout: 3s
start_period: 10s
retries: 3
networks:
call-review-network:
external: true
name: call-review-network