From adb2b4dfe448a56fb521748a3e7aac1bf7711174 Mon Sep 17 00:00:00 2001 From: Edgar Friendly Date: Fri, 24 Jul 2026 09:56:13 +0200 Subject: [PATCH] ci: layout unificado /opt/localesp/; migrados entornos legacy --- docs/07-cicd.md | 39 ++++++++++++++++++++++----------------- scripts/deploy.sh | 2 +- scripts/teardown.sh | 2 +- 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/docs/07-cicd.md b/docs/07-cicd.md index d627f74..3228108 100644 --- a/docs/07-cicd.md +++ b/docs/07-cicd.md @@ -11,20 +11,20 @@ push a rama X runner self-hosted (host executor, en el propio VPS) │ npm ci → vite build → scripts/deploy.sh ▼ -/opt/localesp-/ código + dist/ + node_modules (prod) +/opt/localesp// código + dist/ + node_modules (prod) systemd localesp-.service node server/index.js (PORT=80xx) nginx .localesp.es proxy_pass → localhost:80xx certbot *.localesp.es Let's Encrypt (si el DNS ya apunta) ``` El **slug** se deriva del nombre de rama (`Feature/Foo` → `feature-foo`), -válido como hostname DNS. Un entorno = un directorio, un servicio, un vhost y -un puerto. La base de datos `localesp.db` de cada entorno **se conserva** entre -despliegues (no se sobreescribe). +válido como hostname DNS. Un entorno = un subdirectorio bajo `/opt/localesp/`, +un servicio, un vhost y un puerto. La base de datos `localesp.db` de cada +entorno **se conserva** entre despliegues (no se sobreescribe). -Puertos: `8080`/`8081` son entornos legacy (`localesp.service`, `localesp-master.service`); -los nuevos empiezan en `8082`. Si la rama ya tiene su `localesp-.service`, se -reutiliza su puerto (adopta el entorno existente). +Puertos: los históricos son `8080` (prototipo-yb01) y `8081` (master); los +nuevos se asignan desde `8082` hacia arriba. Si la rama ya tiene su +`localesp-.service`, se reutiliza su puerto (adopta el entorno existente). ## Precondición manual: el registro DNS @@ -60,18 +60,19 @@ vhost, cert y `/opt/localesp-`). También manual: ssh localesp.jumpingcrab.com 'bash /opt/localesp-master/scripts/teardown.sh mi-feature' ``` -## Notas sobre los entornos existentes (migración) +## Entornos existentes (ya migrados al layout unificado) -Al primer despliegue vía CI de cada rama legacy: +Los entornos legacy ya están reubicados bajo `/opt/localesp/` con sus +systemd units renombradas al esquema `localesp-.service`, de modo que el +CI los **adopta** sin cambios (reutiliza puerto y vhost): -- **`master`** → `/opt/localesp-master`, reutiliza el puerto **8081** y el vhost - existente (`master.localesp.es` y el apex `localesp.es`, que proxyan a 8081). - Transparente, no hay corte. -- **`prototipo-yb01`** → pasa a un entorno dedicado `/opt/localesp-prototipo-yb01` - en un puerto nuevo (8082) y el vhost `prototipo.conf` se repunta a ese puerto. - El antiguo `/opt/localesp` + `localesp.service` (8080) queda huérfano; puedes - retirarlo con `systemctl disable --now localesp.service` cuando confirmes que - el nuevo funciona. +| Rama | Dir | Unit | Puerto | Hosts | +|---|---|---|---|---| +| `master` | `/opt/localesp/master` | `localesp-master.service` | 8081 | `localesp.es`, `master.localesp.es` | +| `prototipo-yb01` | `/opt/localesp/prototipo-yb01` | `localesp-prototipo-yb01.service` | 8080 | `prototipo-yb01.localesp.es` | + +El antiguo `localesp.service` (sin slug) se retiró; ahora todas las units +siguen el patrón `localesp-.service`. La db de cada entorno se preservó. ## Seguridad @@ -100,6 +101,10 @@ Nada de lo hecho aquí se pierde. Instalado en el VPS (`localesp.jumpingcrab.com`): - Binario: `/usr/local/bin/gitea-runner` (v2.2.0), host executor. + **Cadena de suministro verificada**: el binario coincide (sha256 `d6b3f5bb…`) + con el descomprimido del release oficial `gitea-runner-2.2.0-linux-amd64.xz`, cuya suma + `13357e0d…` está publicada en el release. Gitea no publica firma GPG del runner; la suma + es la garantía máxima disponible. No hay paquete `dnf` oficial (solo binario o Docker image). - Config: `/etc/gitea-runner/config.yaml` — etiquetas `self-hosted:host`, `linux:host`. - Registro: `/var/lib/gitea-runner/.runner` (instance-level, `https://git.localesp.es`). - Servicio: `gitea-runner.service` (systemd, `User=root`, `WorkingDirectory=/var/lib/gitea-runner`). diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 8d2cfbe..179f470 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -28,7 +28,7 @@ slugify() { SLUG="$(slugify "$BRANCH")" [ -n "$SLUG" ] || { err "slug vacío para la rama '$BRANCH'"; exit 2; } -DEST="/opt/localesp-$SLUG" +DEST="/opt/localesp/$SLUG" UNIT="localesp-$SLUG" HOST="$SLUG.$DOMAIN" diff --git a/scripts/teardown.sh b/scripts/teardown.sh index 8fe37ef..345102a 100755 --- a/scripts/teardown.sh +++ b/scripts/teardown.sh @@ -12,7 +12,7 @@ slugify() { printf '%s' "$1" | tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9]+ SLUG="$(slugify "$BRANCH")" UNIT="localesp-$SLUG" HOST="$SLUG.$DOMAIN" -DEST="/opt/localesp-$SLUG" +DEST="/opt/localesp/$SLUG" log "$HOST ($DEST, $UNIT)"