binárka / linux (pull_request) Successful in 10s
testy / pytest (3.11) (pull_request) Successful in 1s
testy / pytest (3.12) (pull_request) Successful in 1s
testy / pytest (3.13) (pull_request) Successful in 1s
testy / pytest (3.14) (pull_request) Successful in 0s
Aby se to dalo nechat běžet pořád, ne jen spouštět večer na notebooku. pve-kostky.sh se pouští na uzlu Proxmoxu, založí kontejner a předá řízení lxc-install.sh, který uvnitř stáhne vydanou binárku, ověří kontrolní součet a zapíše službu. Ty dva jsou oddělené schválně: instalátor o Proxmoxu nic neví, takže se dá pustit i v kontejneru, který sis založil sám. Podoba je odkoukaná od community-scripts.org, ale nic z jejich frameworku se nestahuje — jejich build.func si instalační skript hledá natvrdo ve vlastním repozitáři, takže mimo něj nefunguje. Docker se staví ze zdrojáků, ne z binárky: image pak jde sestavit pro obě architektury a nezávisí na tom, jestli release proběhl. Zamčené závislosti z minula dělají sestavení opakovatelné. Compose používá síť hostitele, a to je podstatné. V bridge režimu vidí kontejner uvnitř adresu 172.17.0.2, tabule ji poctivě nabídne a udělá na ni QR kód — jenže z telefonu je nedosažitelná. Ověřeno, ne odhadnuto; kdo bridge potřebuje, musí nastavit DICE_HOST. Aplikace sama nepotřebovala změnit nic. DICE_DB, DICE_PORT a DICE_HOST pokrývají obojí a v LXC má kontejner vlastní adresu v LAN, takže hledání adres i QR kód fungují beze změny.
48 lines
1.6 KiB
Docker
48 lines
1.6 KiB
Docker
# Počitadlo kostek jako kontejner.
|
|
#
|
|
# Staví se ze zdrojáků, ne z vydané binárky: image jde pak sestavit pro
|
|
# amd64 i arm64 a nezávisí na tom, jestli pro danou architekturu release
|
|
# proběhl. Závislosti jsou zamčené v requirements.txt, takže je sestavení
|
|
# opakovatelné.
|
|
#
|
|
# docker build -f deploy/Dockerfile -t kostky .
|
|
#
|
|
# Sestavuje se z kořene repozitáře, ne z deploy/.
|
|
FROM python:3.11-slim
|
|
|
|
# Verze se jinak nemá kde vzít — v image není git ani zabalená binárka.
|
|
ARG VERSION=neznámá
|
|
|
|
RUN useradd --system --uid 1000 --home-dir /app --shell /usr/sbin/nologin kostky
|
|
|
|
WORKDIR /app
|
|
|
|
# Závislosti zvlášť a dřív než kód, ať se vrstva s pipem přestavuje jen tehdy,
|
|
# když se opravdu změnily.
|
|
COPY requirements.txt ./
|
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
COPY console.py core.py net.py stats.py storage.py version.py web.py ./
|
|
COPY templates/ templates/
|
|
COPY static/ static/
|
|
RUN echo "$VERSION" > verze.txt
|
|
|
|
# Adresář pro databázi musí vzniknout už tady a patřit správnému uživateli —
|
|
# svazek, který Docker založí sám, by jinak patřil rootovi a appka běžící pod
|
|
# kostky by do něj nezapsala.
|
|
RUN install -d -o kostky -g kostky /data
|
|
VOLUME ["/data"]
|
|
|
|
ENV DICE_DB=/data/dice.db \
|
|
DICE_PORT=8000
|
|
|
|
EXPOSE 8000
|
|
USER kostky
|
|
|
|
# Bez curlu, ten ve slim image není. Stačí, že stránka odpoví — sahá i do
|
|
# databáze, takže se tím kontroluje i ta.
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
|
|
CMD python -c "import os,urllib.request; urllib.request.urlopen('http://127.0.0.1:' + os.environ.get('DICE_PORT','8000') + '/')"
|
|
|
|
CMD ["python", "web.py"]
|