Updated docker
This commit is contained in:
@@ -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
|
||||||
|
|||||||
40
services/ingest-service/.dockerignore
Normal file
40
services/ingest-service/.dockerignore
Normal 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
|
||||||
|
|
||||||
@@ -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"]
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
32
services/ingest-service/docker-compose.yaml
Normal file
32
services/ingest-service/docker-compose.yaml
Normal 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
|
||||||
Reference in New Issue
Block a user