chore: Dockerfile (python:3.11-slim), api/.env.example и api/.env.test

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Andrey Epifancev 2026-10-04 02:35:48 +04:00
parent 8e15696913
commit ebf87f39da
5 changed files with 84 additions and 2 deletions

19
Dockerfile Normal file
View File

@ -0,0 +1,19 @@
# Образ для dev и `make check-full`. Контекст сборки — корень репозитория tabular-parser.
# Платформенные пакеты raisa_* (Nexus) в образ не ставятся — та же логика, что в `make venv`.
FROM python:3.11-slim
ENV PYTHONUNBUFFERED=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1
WORKDIR /app/api
COPY api/requirements.txt ./requirements.txt
RUN grep -v '^raisa_' requirements.txt > /tmp/req.txt \
&& pip install --no-cache-dir -r /tmp/req.txt \
&& rm /tmp/req.txt
COPY api/ ./
EXPOSE 8000
CMD ["python", "run_server.py"]

37
api/.env.example Normal file
View File

@ -0,0 +1,37 @@
# Пример локального окружения. Скопируйте в api/.env: cp .env.example .env
# Порты и учётные данные — стандартные для docs/dev/docker-compose.yml (`make up`: NATS 4222, MinIO 9000).
# Сервис без БД: видит только NATS и S3.
DEBUG=true
# Dev-запуск слушает только loopback. По умолчанию приложения (без этих строк) — 0.0.0.0:8000, как в контейнере платформы.
SERVER__HOST=127.0.0.1
SERVER__PORT=8000
# MinIO (адрес без схемы — так ждёт miniopy-async). Один бакет для входных файлов и результатов.
OPENBAO__MINIO__MINIO_URL=localhost:9000
OPENBAO__MINIO__MINIO_ADMIN_LOGIN=minioadmin
OPENBAO__MINIO__MINIO_ADMIN_PASSWORD=minioadmin
OPENBAO__MINIO__MINIO_BUCKET=arm-ka
# false — MinIO по http (docker compose); по умолчанию true (https, как на платформе)
OPENBAO__MINIO__MINIO_SECURE=false
# NATS без JetStream; пустые NATS_SEED/NATS_JWT — подключение без nkeys
OPENBAO__NATS__NATS_URL=nats://localhost:4222
OPENBAO__NATS__NATS_SEED=
OPENBAO__NATS__NATS_JWT=
# Необязательные настройки (значения ниже — значения по умолчанию из src/core/config.py)
# Префикс путей приложения за прокси и версия в OpenAPI
ROOT_PATH=/
VERSION=1.0.0
# `service.name` конвертов контракта и имя queue group NATS; менять не нужно, пока контракт v1.x
SERVICE_NAME=tabular-parser
# false — не подключаться к NATS (воркер не стартует; /healthcheck отдаёт nats = down)
NATS_ENABLED=true
# Число заданий, обрабатываемых одновременно
WORKER_CONCURRENCY=1
# Попытки публикации ack и результата в NATS
PUBLISH_RETRIES=3
# Размер process-local LRU обработанных job_id (защита от дублей доставки)
DONE_CACHE_SIZE=1000

26
api/.env.test Normal file
View File

@ -0,0 +1,26 @@
# Окружение тестов (pytest.ini: ENV_FILE=.env.test). Только тестовые значения, секретов здесь нет.
# Порты и учётные данные — стандартные для docs/dev/docker-compose.yml (NATS 4222, MinIO 9000):
# после `make up` интеграционные тесты работают без правок.
DEBUG=true
# Как в .env.example (тесты сервер не запускают)
SERVER__HOST=127.0.0.1
SERVER__PORT=8000
OPENBAO__MINIO__MINIO_URL=localhost:9000
OPENBAO__MINIO__MINIO_ADMIN_LOGIN=minioadmin
OPENBAO__MINIO__MINIO_ADMIN_PASSWORD=minioadmin
OPENBAO__MINIO__MINIO_BUCKET=arm-ka
# false — MinIO по http (docker compose); по умолчанию true (https, как на платформе)
OPENBAO__MINIO__MINIO_SECURE=false
OPENBAO__NATS__NATS_URL=nats://localhost:4222
OPENBAO__NATS__NATS_SEED=
OPENBAO__NATS__NATS_JWT=
# Unit-тесты поднимают приложение без NATS; интеграционные включают его сами (см. design D-6)
NATS_ENABLED=false
WORKER_CONCURRENCY=1
PUBLISH_RETRIES=3
DONE_CACHE_SIZE=1000

View File

@ -35,7 +35,7 @@
### Task 5: [2.2] `Dockerfile` (`python ### Task 5: [2.2] `Dockerfile` (`python
- [ ] `Dockerfile` (`python:3.11-slim`), `.env.example`, `.env.test`; проверка: `docker build -t tabular-parser .` успешен - [x] `Dockerfile` (`python:3.11-slim`), `.env.example`, `.env.test`; проверка: `docker build -t tabular-parser .` успешен
### Task 6: [3.1] `api/contracts/` — копии трёх схем + `examples/` из `../docs/contracts` ### Task 6: [3.1] `api/contracts/` — копии трёх схем + `examples/` из `../docs/contracts`

View File

@ -21,7 +21,7 @@
- [x] 2.1 `api/pyproject.toml` (ruff: line-length 120, E,F,I,UP,B,PL; mypy с плагином pydantic), `requirements-dev.txt` - [x] 2.1 `api/pyproject.toml` (ruff: line-length 120, E,F,I,UP,B,PL; mypy с плагином pydantic), `requirements-dev.txt`
= `-r requirements.txt` + ruff, mypy, pytest, pytest-asyncio, pytest-env, httpx, jsonschema; `Makefile`: `venv` = `-r requirements.txt` + ruff, mypy, pytest, pytest-asyncio, pytest-env, httpx, jsonschema; `Makefile`: `venv`
(python3.11), `lint`, `test`, `test-integration`, `check`, `check-full`, `up`; проверка: `make venv && make lint` зелёные (python3.11), `lint`, `test`, `test-integration`, `check`, `check-full`, `up`; проверка: `make venv && make lint` зелёные
- [ ] 2.2 `Dockerfile` (`python:3.11-slim`), `.env.example`, `.env.test`; проверка: `docker build -t tabular-parser .` успешен - [x] 2.2 `Dockerfile` (`python:3.11-slim`), `.env.example`, `.env.test`; проверка: `docker build -t tabular-parser .` успешен
## 3. Контракт ## 3. Контракт