diff --git a/dashboard/Dockerfile b/dashboard/Dockerfile index 482c34a..bccf4b2 100644 --- a/dashboard/Dockerfile +++ b/dashboard/Dockerfile @@ -1,4 +1,4 @@ -FROM caddy:2.6.1-alpine +FROM caddy:2.7.4-alpine LABEL org.opencontainers.image.source https://github.com/offspot/container-images RUN \ @@ -45,10 +45,11 @@ COPY gen-home.py /src/ COPY templates /src/templates COPY assets /var/www/assets COPY fallback.html /var/www/fallback.html +COPY home.yaml /src/ # store python bytecode in image RUN python3 -m compileall /src/gen-home.py && mv /src/__pycache__/*.pyc /usr/local/lib/ -ENTRYPOINT ["/usr/bin/dumb-init", "--", "/usr/bin/python3", "/usr/local/lib/gen-home.cpython-310.pyc"] +ENTRYPOINT ["/usr/bin/dumb-init", "--", "/usr/bin/python3", "/usr/local/lib/gen-home.cpython-311.pyc"] CMD ["caddy", "run", "--config", "/etc/caddy/Caddyfile"] diff --git a/dashboard/gen-home.py b/dashboard/gen-home.py index 32c6865..28a3b6b 100755 --- a/dashboard/gen-home.py +++ b/dashboard/gen-home.py @@ -107,8 +107,7 @@ def langs(self) -> List[str]: def gen_home(fpath: pathlib.Path): try: - with open(fpath, "r") as fh: - document = yaml_load(fh.read(), Loader=Loader) + document = yaml_load(fpath.read_text(), Loader=Loader) except Exception as exc: print("[CRITICAL] unable to read home YAML document, using fallback homepage") traceback.print_exception(exc) diff --git a/home.yaml b/home.yaml new file mode 100644 index 0000000..317882f --- /dev/null +++ b/home.yaml @@ -0,0 +1,30 @@ +--- +metadata: + name: My Hotspot + fqdn: renaud.Hotspot + footer_note: © 1939-1945 Bloup +packages: +- title: ArchWiki + description: | + wikiHow je wiki založená na spolupráci za účelem vytvoření největšího, nejkvalitnějšího manuálu s návody jak na to na světě. Náš vícejazyčný manuál obsahuje bezplatné postupy krok za krokem ze všech oblastí. + languages: + - eng + - fra + tags: + - archlinux + icon: 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 + url: //{kiwix-fqdn}/archlinux_en_all_maxi_2022-04 + download: + url: //{files-fqdn}/archlinux_en_all_maxi_2022-04.zim + size: 36700160 +- kind: zim + title: Surviving Disaster + languages: + - eng + tags: + - youtube + icon: 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 + url: //{kiwix-fqdn}/canadian-prepper_en_surviving-disaster_2021-12 + download: + url: //{zim-fqdn}/canadian-prepper_en_surviving-disaster_2021-12.zim + size: 2TB