Skip to content

Latest commit

 

History

History
99 lines (74 loc) · 4.08 KB

File metadata and controls

99 lines (74 loc) · 4.08 KB

docker-starwars

Self hosted, self contained Docker image of the classic www.asciimation.co.nz/Blinkenlights ASCII Star Wars animation. Same clone as the original site — everything runs client-side in the browser — just with no ads and no analytics, and completely self hosted.

status-badge Test Docker Pulls Docker Image Size (tag) GitHub last commit License: MIT

"Buy Me A Coffee"

Screenshot

image

Quick start

docker run -d --name starwars -p 8080:8080 modem7/docker-starwars

Or Compose, if that's more your thing:

services:
  starwars:
    image: modem7/docker-starwars
    container_name: starwars
    ports:
      - 8080:8080

Open http://localhost:8080 and enjoy.

What's actually in the image

  • Content is entirely local — nothing gets fetched from asciimation.co.nz or anywhere else once it's running
  • Built on nginxinc/nginx-unprivileged, runs as uid 101. No root, anywhere
  • gzip on, plus the usual security headers (X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Content-Security-Policy) — see conf/nginx-site.conf if you want the specifics
  • /healthz backs the built-in HEALTHCHECK, so it actually means something
  • Multi-arch: amd64, arm/v6, arm/v7, arm64/v8

Keeping the animation content up to date

Upstream adds new scenes every so often, and I'm not going to remember to go re-mirror the site by hand every time. So:

  • Manually: python3 scripts/update_film_data.py — pulls whatever's current upstream and splices it in. Leaves the player code alone, and deliberately doesn't pull in upstream's ads/analytics or links to pages this image doesn't mirror.
  • On demand, from GitHub: same thing, run as the Update film data workflow from the Actions tab. Opens a PR instead of pushing straight to master, so I get a chance to actually look at it first.
  • On a schedule: Check content freshness runs weekly and opens a content-freshness issue the moment it's out of sync, so I don't have to remember to check either.

Testing / CI

I don't trust "the image built" as proof that anything actually works, so every push/PR touching the image builds it, boots a real container, and pokes at it: page structure, gzip, the security headers, static assets, non-root/no-sudo/no-world-writable-files, and a Playwright script that checks the animation actually advances frames and that Stop()/Play() etc. do what they say. See .github/workflows/test.yml if you want the gory details.

.woodpecker.yml does the actual multi-arch build and Docker Hub push once something's merged to master.

Tags

Tag Description
latest Latest version

Credits

Not my work, I just packaged it up:

  • Simon Jansen made the original asciimation.
  • Notes from Mike Edwards, who wrote the player script this is based on:

    Replacement telnet at asciimation.mirkwood.net:23/24. Port 23 is the last released Star Wars asciimation by Simon Jansen, and port 24 is Jansen's other goofy asciimation, The death of Jar Jar Binks.

License

MIT, see LICENCE.txt.