2.8 KiB
ENGIN — production runbook
Kontrakt wdrożenia
- Docker Engine i Docker Compose v2.
- Aplikacja działa jako UID/GID
10001:10001. - Port jest domyślnie dostępny tylko na
127.0.0.1:8501. - Root filesystem kontenera jest tylko do odczytu; zapisywalny jest wyłącznie
tymczasowy
/tmpo rozmiarze 64 MiB. - Kontener nie ma Linux capabilities i nie może uzyskać nowych uprawnień.
- Limity: 2 CPU, 1 GiB RAM i 256 procesów.
- Przesłane CSV nie są zapisywane na dysku ani w wolumenie.
Pierwszy start
Wykonuj polecenia z katalogu repozytorium na czystym, zatwierdzonym commicie:
export ENGIN_IMAGE_TAG="$(git rev-parse --short HEAD)"
docker compose -f compose.prod.yaml config --quiet
docker compose -f compose.prod.yaml build
docker compose -f compose.prod.yaml up -d --no-build
docker compose -f compose.prod.yaml ps
curl --fail http://127.0.0.1:8501/_stcore/health
Oczekiwana odpowiedź healthchecku: ok.
Kontrola ograniczeń
CONTAINER_ID="$(docker compose -f compose.prod.yaml ps -q engin)"
docker inspect --format \
'user={{.Config.User}} readonly={{.HostConfig.ReadonlyRootfs}} pids={{.HostConfig.PidsLimit}} memory={{.HostConfig.Memory}} nanocpus={{.HostConfig.NanoCpus}}' \
"$CONTAINER_ID"
Oczekiwane wartości:
user=10001:10001 readonly=true pids=256 memory=1073741824 nanocpus=2000000000
Logi i diagnostyka
docker compose -f compose.prod.yaml logs --tail 200 engin
docker compose -f compose.prod.yaml ps
Logi są rotowane przez sterownik local: maksymalnie trzy pliki po 10 MiB.
Aktualizacja
Najpierw zachowaj SHA aktualnie działającego obrazu, następnie zbuduj nową, jednoznacznie otagowaną wersję:
docker compose -f compose.prod.yaml ps
git pull --ff-only
export ENGIN_IMAGE_TAG="$(git rev-parse --short HEAD)"
docker compose -f compose.prod.yaml build
docker compose -f compose.prod.yaml up -d --no-build
curl --fail http://127.0.0.1:8501/_stcore/health
Nie usuwaj poprzedniego obrazu przed zakończeniem smoke testu.
Rollback
Jeżeli smoke test nowej wersji nie przejdzie, uruchom poprzedni lokalny tag bez ponownego budowania:
ENGIN_IMAGE_TAG=<poprzedni_git_sha> \
docker compose -f compose.prod.yaml up -d --no-build
curl --fail http://127.0.0.1:8501/_stcore/health
Jeżeli obrazu o wskazanym tagu już nie ma, przełącz repo na zatwierdzony commit, odbuduj obraz i ponownie wykonaj smoke test. Nie używaj niezaufanego artefaktu modelu jako skrótu do rollbacku.
Udostępnienie poza hostem
Domyślne wiązanie 127.0.0.1 jest celowe. Dostęp sieciowy włączaj dopiero za
reverse proxy z TLS i regułami firewalla. W takim środowisku można ustawić:
ENGIN_BIND_ADDRESS=0.0.0.0 \
docker compose -f compose.prod.yaml up -d --no-build
Zatrzymanie
docker compose -f compose.prod.yaml down