Files
ulicraft-server-v1/.claude/skills/deploy/SKILL.md
Oier Bravo Urtasun 67d1f82e6a refactor!: unify into one compose, drop airgap/mirror/dnsmasq/avahi/blessingskin
Collapse the override-file matrix into a single docker-compose.yml holding the
whole stack: drasl, minecraft, mc-backup, caddy, nmsr, uptime-kuma. Bring-up is
now just `docker compose up -d --build`.

Removed features (dead-ends for this deployment):
- airgap / full asset mirror (mirror-airgap.sh, mirror-mods.sh, 20-mirror.caddy,
  caddy local-CA export, /ca.crt)
- dnsmasq + avahi/mDNS + dns-records.sh + mdns-host-setup.sh + ENABLE_MDNS;
  DNS is now handled outside this repo (HOST_LAN_IP dropped)
- Blessing Skin auth variant (compose + 00-core-blessingskin.caddy + BS_* env)
- host-nginx-static variant (docker-compose.nginx.yml, nginx/ulicraft.conf.tmpl)
- build-stack.sh and its run modes (online/airgap/core)

Production ingress is the only path now: host nginx terminates TLS (LE certs)
in front of caddy on a localhost-only port; caddy routes every vhost by Host
header. Launcher downloads move mirror/launcher -> launcher/.

Docs: README, deploy skill, and plan/ rewritten to match; obsolete plan docs
(dnsmasq, blessing-skin, assets-mirror, full-airgap-mirror, dns-and-run-modes)
deleted.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 02:14:09 +02:00

2.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:

  1. 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 fetch fails (host unreachable, auth), STOP and report.

  2. 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
      docker compose down --remove-orphans
      docker compose up -d --build'
    
    • --ff-only refuses to merge — if the pull is not a fast-forward, STOP and report (local changes on the host need manual resolution).
    • render-config.sh re-renders drasl/nmsr/packwiz configs from .env (needs .env complete: BASE_DOMAIN, RCON_PASSWORD, DISTRIBUTION_WEB_ROOT, CADDY_HTTP_*).
  3. Verify.

    ssh cochi 'cd /home/ubuntu/mc/ulicraft-server-v1 && docker compose ps'
    

    Confirm caddy, drasl, minecraft, mc-backup, nmsr, uptime-kuma are Up. Tail the minecraft log briefly and confirm it reaches Done (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 --hard or discard changes on cochi without telling the user first — there may be host-local edits.
  • Volumes (mc_data, drasl_state, kuma_data) persist across down; the world and monitors are safe. Do NOT pass -v/--volumes to down.
  • If a step fails, STOP and surface the exact error + the failing command. Do not improvise recovery on production.