Coolify routes to port 3000 when 'Ports exposes' is left blank, but nginx only listened on 80 - so Traefik found nothing and returned 502 while the container itself was healthy and passing its healthcheck. nginx now listens on both 80 and 3000, so the game is served whichever port the proxy routes to. README documents setting Ports exposes = 80. |
||
|---|---|---|
| .dockerignore | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| index.html | ||
| nginx.conf | ||
| README.md | ||
Mineflappy
Minecraft Flappy Bird — a single-file HTML5 canvas game. No build step, no dependencies, no assets. Everything (sprites, font, music, sound) is generated in code.
open index.html # that's it - it runs straight from the filesystem
Deploy to Coolify
Option A - Dockerfile (recommended)
The repo ships a Dockerfile that serves the game with nginx.
- In Coolify: New Resource → Application → Public/Private Repository
- Repository URL:
http://forgejo-b82b4lpyyzyg40thdsjdd38i.163.245.214.68.sslip.io/David/MINEFLAPPY-GAME.git- Branch:
main - Build Pack: Dockerfile
- Branch:
- Dockerfile Location:
/Dockerfile(default is fine) - Port:
80— set this under Networking → Ports exposes - Health Check Path:
/healthz - Hit Deploy.
- Add a domain: Settings → Domains → Add Domain - e.g.
game.yourdomain.com- Tick Force HTTPS and let Coolify/Traefik issue the Let's Encrypt cert.
- Coolify routes the domain to the container's port 80 automatically.
Push a new commit and Coolify rebuilds and redeploys it.
If you get "502 Bad Gateway": the container is healthy, but the proxy can't reach it. The usual cause is an empty Ports exposes field — when it's blank Coolify routes to port 3000 instead of 80. Put
80in that field and redeploy. The bundlednginx.conflistens on both 80 and 3000, so the game is served either way, but setting the port correctly is still the right fix.
Option B - Static Site (no Dockerfile)
If you'd rather not run a container:
- New Resource → Static Site with the same repo
- Build Command:
echo "static"(there is nothing to build) - Root Directory:
/ - Deploy, then attach a domain as above.
Option C - docker compose
A docker-compose.yml is included if you deploy by compose instead:
docker compose up -d --build
# game is on http://localhost:8080
Run it locally with Docker
docker build -t mineflappy .
docker run --rm -p 8080:80 mineflappy
# open http://localhost:8080
Layout
| File | What it is |
|---|---|
index.html |
The entire game - markup, CSS and JS in one file |
Dockerfile |
nginx:alpine image that serves index.html |
nginx.conf |
Server config: no-cache on the game, gzip, /healthz |
docker-compose.yml |
Optional compose deployment |
The game
Six birds, each with one ability:
| Bird | Ability | Effect |
|---|---|---|
| Chicken | Double Flap | Every 4th flap is 34% stronger |
| Enderman | Teleport | Blink 70px forward (refused if a pipe is in the way) |
| Allay | Allay Magnet | Nearby gems fly to you |
| Blaze | Melt | Burns away the next pipe, widening its gap |
| Phantom | Phase | Fly through anything for 1.2s |
| Wolf | Howl | Slows the whole game to 55% for 2s |
Also in: five biomes that change with your score (Plains → Desert → Mineshaft → Nether → Ice Peaks), a day/night cycle, weather, gold/bubble/wings/lucky-cube pickups, difficulty settings, bird unlocks, per-bird best scores, a daily challenge with a shareable code, a ghost of your best run, and 2-player on one screen.
Controls - Space / W / ↑ / tap to flap, F to use your ability,
P to pause, C on the game-over screen to change bird. In 2-player mode
Space is player 1 and ↑ is player 2.
Progress is stored in localStorage under mineflappy_v2.