Sign inSign up

modem7/docker-starwars

By modem7

•Updated 8 days ago

BlinkenLights ASCII Star Wars Clone

Image
2

50K+

modem7/docker-starwars repository overview

⁠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

TagDescription
latestLatest 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⁠.

Tag summary

Content type

Image

Digest

sha256:d9487e07d…

Size

24.7 MB

Last updated

8 days ago

docker pull modem7/docker-starwars