Перейти к содержанию

Docker-профили

flowchart LR
    DOCX["docx<br/>DOCX -> PDF"] --> LATEX["latex<br/>сборка диплома"]
    MERMAID["mermaid<br/>.mmd -> figures/*.pdf"] --> LATEX
    PYTHON["python<br/>python_diagrams -> figures/"] --> LATEX
    LATEX --> PDF["Куприянов_И221_диплом.pdf"]
    DOCS["docs<br/>Zensical build + static serve"] --> SITE["http://localhost:8000"]

Переменные окружения

Создайте в корне проекта файл .env:

VAULT_PATH="путь монтирования"
VAULT_OS_PATH="фактический путь до кода на устройстве"
TARGET="файл латеха"

Пример:

VAULT_PATH="/vault_code"
VAULT_OS_PATH="../vault_diploma"
TARGET="Куприянов_И221_диплом.tex"

Пояснение:

Переменная Назначение
VAULT_PATH Любой абсолютный Unix-путь внутри контейнера
VAULT_OS_PATH Где относительно текущей папки лежит код
TARGET Основной .tex файл
HOST_UID, HOST_GID Необязательные UID/GID пользователя для Linux CI, чтобы контейнеры писали в bind mount без проблем с правами

LaTeX

Соберите LaTeX-образ:

task build:image -- latex
docker compose --profile latex build

Запустите компиляцию:

task latex:docker
docker compose --profile latex run --build --rm latex

Профиль latex запускает scripts/build_latex_docker.py. Скрипт читает TARGET из переменных окружения и собирает документ через latexmk. Вспомогательные файлы складываются в .aux_files_docker, а готовый PDF остается в корне проекта. Вариант run --build перед запуском проверяет актуальность образа, чтобы Docker не использовал старую версию после изменения Dockerfile.

Сборка образов

Собрать все Docker-образы проекта:

task build:images
docker compose --profile docx --profile mermaid --profile python --profile latex --profile crop build

Собрать образ отдельного профиля:

task build:image -- latex
task build:image -- mermaid
task build:image -- python
task build:image -- docx
task build:image -- crop
docker compose --profile latex build
docker compose --profile mermaid build
docker compose --profile python build
docker compose --profile docx build
docker compose --profile crop build

Команды профилей используют docker compose run --build, поэтому Docker проверяет актуальность образов перед запуском. Первый запуск все равно будет долгим: Docker скачает базовые образы и соберет окружение.

Доступные профили

В проекте используются отдельные Docker Compose профили:

Профиль Назначение
docx Конвертирует DOCX-файлы из docx/ в PDF
mermaid Генерирует Mermaid-диаграммы в figures/
python Генерирует диаграммы Python-скриптами
latex Собирает итоговый PDF диплома
crop Обрезает поля произвольного PDF через pdfcrop
stirling Поднимает Stirling PDF для ручной проверки PDF в браузере
docs Собирает и поднимает локальную двуязычную документацию

Запуск отдельных профилей:

task latex:docker
task mermaid:docker
task diagrams:docker
task docx
task crop:docker -- path/to/file.pdf
task stirling
docker compose --profile latex run --build --rm latex
docker compose --profile mermaid run --build --rm mermaid_diagrams
docker compose --profile python run --build --rm python_diagrams
docker compose --profile docx run --build --rm docx_pdf
docker compose --profile crop run --build --rm crop_pdf python3 scripts/crop_pdf.py path/to/file.pdf
docker compose --profile stirling up -d stirling_pdf

Для Stirling PDF доступны дополнительные команды:

task stirling:logs
task stirling:down

Подробности по запуску, переменным окружения и стартовому паролю администратора вынесены в отдельную страницу: Stirling PDF.

Запуск всех профилей одной командой:

task compose:up
docker compose --profile docx --profile mermaid --profile python --profile latex up

При запуске всех профилей Docker Compose стартует сервисы вместе. Если нужно гарантированно собрать документ уже со свежими PDF из DOCX и диаграммами, сначала запустите профили docx, mermaid и python, затем профиль latex.

Последовательный запуск всех профилей вынесен в скрипт:

flowchart LR
    START["task build"] --> DOCX["docx"]
    DOCX --> MERMAID["mermaid"]
    MERMAID --> PYTHON["python"]
    PYTHON --> LATEX["latex"]
    LATEX --> PDF["готовый PDF"]
task build
uv run python scripts/build_all.py

scripts/build_all.py запускает профили по порядку docxmermaidpythonlatex и останавливается на первой ошибке.

Права на файлы в Linux CI

В GitHub Actions workflow записывает в .env HOST_UID и HOST_GID. Docker Compose использует эти значения в user: "${HOST_UID:-0}:${HOST_GID:-0}", чтобы контейнеры создавали PDF и диаграммы от имени пользователя runner. Локально без этих переменных используется fallback 0:0.