Add a static /register page (en/es/eu) that calls the Drasl REST API v2 directly from the browser: register -> login -> optional skin upload, all in the pixel design. Guests never touch Drasl's own web UI. Drasl config gains the pieces this needs: - CORSAllowOrigins scoped to the apex (the API has no CORS until set; never "*"). - [RateLimit] for the now public-facing anonymous POST /users. - [RegistrationNewPlayer] with RequireInvite driven by a new REGISTRATION_MODE (invite|open) .env flag. REGISTRATION_MODE has two consumers from one key: render-config.sh derives the TOML boolean for Drasl (drasl is TOML-only, no env), and the landing build reads it to show/hide the invite-code field. render-config.sh halts on any value other than invite/open. Security verified against drasl source: anonymous POST /users cannot set privileged fields (isAdmin/isLocked/chosenUuid/maxPlayerCount are gated on callerIsAdmin in CreateUser), so browser-direct registration is safe. Docs: plan/16-landing-registration.md captures the design + the B1 vs fork decision; build-order, deploy, and the deploy skill wire REGISTRATION_MODE and the landing-rebuild requirement (www/ is gitignored, not updated by a git pull). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.7 KiB
name, description
| name | description |
|---|---|
| deploy | Redeploy the Ulicraft Minecraft stack to the production host `cochi` — git pull on main then a hard restart (compose down + up). Use when the user says "deploy", "redeploy", "deploy to cochi", "push to prod", "ship it", or "restart the server" for this project. Causes brief Minecraft downtime. |
Deploy Ulicraft to cochi
Redeploy the running stack on the production host. Full reference:
plan/14-deploy.md.
Fixed parameters
- Host:
cochi(SSH alias) - Path:
/home/ubuntu/mc/ulicraft-server-v1 - Branch:
main - Stack: single unified
docker-compose.yml(drasl, minecraft, mc-backup, caddy, nmsr, uptime-kuma) - Auth: Drasl
- Restart: hard (down → up) — players are disconnected for a few minutes
Procedure
This is an outward-facing, downtime-causing action on production. The user invoking this skill is the authorization to proceed, but:
-
Pre-check (read-only). See what would change before tearing anything down:
ssh cochi 'cd /home/ubuntu/mc/ulicraft-server-v1 && git fetch && git log --oneline HEAD..@{u}'Report the incoming commits. If the list is empty, tell the user the host is already up to date and ask whether to restart anyway (they may want a plain restart). If
git fetchfails (host unreachable, auth), STOP and report. -
Pull + hard restart (single SSH session, halts on any error):
ssh cochi 'set -e cd /home/ubuntu/mc/ulicraft-server-v1 git pull --ff-only tooling/render-config.sh tooling/fetch-authlib.sh docker compose down --remove-orphans docker compose up -d --build'--ff-onlyrefuses to merge — if the pull is not a fast-forward, STOP and report (local changes on the host need manual resolution).render-config.shre-renders drasl/nmsr/packwiz configs from.env(needs.envcomplete:BASE_DOMAIN,RCON_PASSWORD,DISTRIBUTION_WEB_ROOT,CADDY_HTTP_*,REGISTRATION_MODE). It halts on an invalidREGISTRATION_MODE(must beinviteoropen).fetch-authlib.shensuresruntime/authlib-injector.jarexists (gitignored; skips if already valid). Missing jar = minecraft crashloops with "Error opening zip file or JAR manifest missing".
2b. Landing rebuild (only if needed). The static site www/ is gitignored —
git pull does NOT update it. If the pulled commits (from the step-1
pre-check) touch landing/, or REGISTRATION_MODE changed, rebuild it;
otherwise skip:
ssh cochi 'set -e
cd /home/ubuntu/mc/ulicraft-server-v1
cd landing && set -a && . ../.env && set +a && pnpm run build'
Sourcing .env bakes BASE_DOMAIN + REGISTRATION_MODE (invite-field on/off)
into the output. A flag-only change just needs this rebuild + a drasl
restart (already covered by step 2's up), not the world downtime.
- Verify.
Confirm
ssh cochi 'cd /home/ubuntu/mc/ulicraft-server-v1 && docker compose ps'caddy,drasl,minecraft,mc-backup,nmsr,uptime-kumaare Up. Tail the minecraft log briefly and confirm it reachesDone(server ready):ssh cochi 'cd /home/ubuntu/mc/ulicraft-server-v1 && timeout 120 docker compose logs -f minecraft' 2>/dev/null | grep -m1 "Done"
Guardrails
- Never
git reset --hardor discard changes oncochiwithout telling the user first — there may be host-local edits. - Volumes (
mc_data,drasl_state,kuma_data) persist acrossdown; the world and monitors are safe. Do NOT pass-v/--volumestodown. - If a step fails, STOP and surface the exact error + the failing command. Do not improvise recovery on production.