Add Docker as the primary way to build and run gausse
Dockerfile (non-root user, UID 1000 to match typical host users so bind mounts don't end up root-owned) + docker-compose.yml with a ./results volume for the SQLite database and reports that Stage 5/6 will write. Verified by actually building the image and running the full test suite and CLI inside the container, not just writing the files and assuming they work. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
14
.dockerignore
Normal file
14
.dockerignore
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
.git
|
||||||
|
.venv
|
||||||
|
venv
|
||||||
|
__pycache__
|
||||||
|
*.pyc
|
||||||
|
.pytest_cache
|
||||||
|
*.egg-info
|
||||||
|
build
|
||||||
|
dist
|
||||||
|
out
|
||||||
|
.claude
|
||||||
|
*.sqlite3
|
||||||
|
*.sqlite3-wal
|
||||||
|
*.sqlite3-shm
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -10,5 +10,7 @@ dist/
|
|||||||
*.sqlite3-wal
|
*.sqlite3-wal
|
||||||
*.sqlite3-shm
|
*.sqlite3-shm
|
||||||
out/
|
out/
|
||||||
|
results/*
|
||||||
|
!results/.gitkeep
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.claude/settings.local.json
|
.claude/settings.local.json
|
||||||
|
|||||||
18
Dockerfile
Normal file
18
Dockerfile
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
FROM python:3.12-slim
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY pyproject.toml README.md ./
|
||||||
|
COPY src ./src
|
||||||
|
COPY tests ./tests
|
||||||
|
|
||||||
|
RUN pip install --no-cache-dir -e ".[dev]"
|
||||||
|
|
||||||
|
# Не root: иначе всё, что контейнер пишет в примонтированный ./results
|
||||||
|
# (SQLite-база, отчёты), становится на хосте файлами root:root.
|
||||||
|
RUN useradd --create-home --uid 1000 gausse
|
||||||
|
RUN mkdir -p /app/results && chown -R gausse:gausse /app
|
||||||
|
USER gausse
|
||||||
|
|
||||||
|
ENTRYPOINT ["gausse"]
|
||||||
|
CMD ["--help"]
|
||||||
6
PLAN.md
6
PLAN.md
@@ -34,6 +34,12 @@ L(x, I)-модель с coenergy-выводом силы — в разделе "
|
|||||||
Полный план архитектуры: см. историю обсуждения / `physics`, `sim`, `optim`,
|
Полный план архитектуры: см. историю обсуждения / `physics`, `sim`, `optim`,
|
||||||
`storage`, `report` модули ниже.
|
`storage`, `report` модули ниже.
|
||||||
|
|
||||||
|
**Docker — основной способ запуска** (по требованию пользователя): `Dockerfile`
|
||||||
|
+ `docker-compose.yml` в корне репозитория, образ собран и провалидирован —
|
||||||
|
внутри контейнера запускаются все 37 тестов и CLI (`docker compose run --rm
|
||||||
|
--entrypoint pytest gausse -q`). Результаты (SQLite и отчёты, когда появятся)
|
||||||
|
монтируются в `./results` на хосте, чтобы переживать пересборку образа.
|
||||||
|
|
||||||
## Чек-лист этапов
|
## Чек-лист этапов
|
||||||
|
|
||||||
- [x] **Этап 0 — Скелет проекта**: `pyproject.toml`, `README.md`, `.gitignore`, пакеты `src/gausse/*`, этот файл, первый коммит.
|
- [x] **Этап 0 — Скелет проекта**: `pyproject.toml`, `README.md`, `.gitignore`, пакеты `src/gausse/*`, этот файл, первый коммит.
|
||||||
|
|||||||
19
README.md
19
README.md
@@ -5,16 +5,23 @@
|
|||||||
|
|
||||||
Полный план и чек-лист этапов — в [PLAN.md](PLAN.md).
|
Полный план и чек-лист этапов — в [PLAN.md](PLAN.md).
|
||||||
|
|
||||||
## Установка
|
## Установка (Docker — основной способ)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose build
|
||||||
|
docker compose run --rm --entrypoint pytest gausse -q # тесты
|
||||||
|
docker compose run --rm gausse sweep --n 1000 # CLI (после реализации Этапа 6)
|
||||||
|
```
|
||||||
|
|
||||||
|
Результаты (SQLite, отчёты) должны сохраняться в `./results`, примонтированный
|
||||||
|
в контейнер как `/app/results` (см. `docker-compose.yml`), чтобы переживать
|
||||||
|
пересборку образа.
|
||||||
|
|
||||||
|
## Установка без Docker (локальная разработка)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 -m venv .venv
|
python3 -m venv .venv
|
||||||
source .venv/bin/activate
|
source .venv/bin/activate
|
||||||
pip install -e ".[dev]"
|
pip install -e ".[dev]"
|
||||||
```
|
|
||||||
|
|
||||||
## Тесты
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pytest
|
pytest
|
||||||
```
|
```
|
||||||
|
|||||||
7
docker-compose.yml
Normal file
7
docker-compose.yml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
services:
|
||||||
|
gausse:
|
||||||
|
build: .
|
||||||
|
volumes:
|
||||||
|
- ./results:/app/results
|
||||||
|
entrypoint: ["gausse"]
|
||||||
|
command: ["--help"]
|
||||||
0
results/.gitkeep
Normal file
0
results/.gitkeep
Normal file
Reference in New Issue
Block a user