Master #2
+22
-17
@@ -11,20 +11,20 @@ push a rama X
|
|||||||
runner self-hosted (host executor, en el propio VPS)
|
runner self-hosted (host executor, en el propio VPS)
|
||||||
│ npm ci → vite build → scripts/deploy.sh <rama>
|
│ npm ci → vite build → scripts/deploy.sh <rama>
|
||||||
▼
|
▼
|
||||||
/opt/localesp-<slug>/ código + dist/ + node_modules (prod)
|
/opt/localesp/<slug>/ código + dist/ + node_modules (prod)
|
||||||
systemd localesp-<slug>.service node server/index.js (PORT=80xx)
|
systemd localesp-<slug>.service node server/index.js (PORT=80xx)
|
||||||
nginx <slug>.localesp.es proxy_pass → localhost:80xx
|
nginx <slug>.localesp.es proxy_pass → localhost:80xx
|
||||||
certbot *.localesp.es Let's Encrypt (si el DNS ya apunta)
|
certbot *.localesp.es Let's Encrypt (si el DNS ya apunta)
|
||||||
```
|
```
|
||||||
|
|
||||||
El **slug** se deriva del nombre de rama (`Feature/Foo` → `feature-foo`),
|
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
|
válido como hostname DNS. Un entorno = un subdirectorio bajo `/opt/localesp/`,
|
||||||
un puerto. La base de datos `localesp.db` de cada entorno **se conserva** entre
|
un servicio, un vhost y un puerto. La base de datos `localesp.db` de cada
|
||||||
despliegues (no se sobreescribe).
|
entorno **se conserva** entre despliegues (no se sobreescribe).
|
||||||
|
|
||||||
Puertos: `8080`/`8081` son entornos legacy (`localesp.service`, `localesp-master.service`);
|
Puertos: los históricos son `8080` (prototipo-yb01) y `8081` (master); los
|
||||||
los nuevos empiezan en `8082`. Si la rama ya tiene su `localesp-<slug>.service`, se
|
nuevos se asignan desde `8082` hacia arriba. Si la rama ya tiene su
|
||||||
reutiliza su puerto (adopta el entorno existente).
|
`localesp-<slug>.service`, se reutiliza su puerto (adopta el entorno existente).
|
||||||
|
|
||||||
## Precondición manual: el registro DNS
|
## Precondición manual: el registro DNS
|
||||||
|
|
||||||
@@ -60,18 +60,19 @@ vhost, cert y `/opt/localesp-<slug>`). También manual:
|
|||||||
ssh localesp.jumpingcrab.com 'bash /opt/localesp-master/scripts/teardown.sh mi-feature'
|
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/<rama>` con sus
|
||||||
|
systemd units renombradas al esquema `localesp-<slug>.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
|
| Rama | Dir | Unit | Puerto | Hosts |
|
||||||
existente (`master.localesp.es` y el apex `localesp.es`, que proxyan a 8081).
|
|---|---|---|---|---|
|
||||||
Transparente, no hay corte.
|
| `master` | `/opt/localesp/master` | `localesp-master.service` | 8081 | `localesp.es`, `master.localesp.es` |
|
||||||
- **`prototipo-yb01`** → pasa a un entorno dedicado `/opt/localesp-prototipo-yb01`
|
| `prototipo-yb01` | `/opt/localesp/prototipo-yb01` | `localesp-prototipo-yb01.service` | 8080 | `prototipo-yb01.localesp.es` |
|
||||||
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
|
El antiguo `localesp.service` (sin slug) se retiró; ahora todas las units
|
||||||
retirarlo con `systemctl disable --now localesp.service` cuando confirmes que
|
siguen el patrón `localesp-<slug>.service`. La db de cada entorno se preservó.
|
||||||
el nuevo funciona.
|
|
||||||
|
|
||||||
## Seguridad
|
## Seguridad
|
||||||
|
|
||||||
@@ -100,6 +101,10 @@ Nada de lo hecho aquí se pierde.
|
|||||||
Instalado en el VPS (`localesp.jumpingcrab.com`):
|
Instalado en el VPS (`localesp.jumpingcrab.com`):
|
||||||
|
|
||||||
- Binario: `/usr/local/bin/gitea-runner` (v2.2.0), host executor.
|
- 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`.
|
- Config: `/etc/gitea-runner/config.yaml` — etiquetas `self-hosted:host`, `linux:host`.
|
||||||
- Registro: `/var/lib/gitea-runner/.runner` (instance-level, `https://git.localesp.es`).
|
- Registro: `/var/lib/gitea-runner/.runner` (instance-level, `https://git.localesp.es`).
|
||||||
- Servicio: `gitea-runner.service` (systemd, `User=root`, `WorkingDirectory=/var/lib/gitea-runner`).
|
- Servicio: `gitea-runner.service` (systemd, `User=root`, `WorkingDirectory=/var/lib/gitea-runner`).
|
||||||
|
|||||||
+1
-1
@@ -28,7 +28,7 @@ slugify() {
|
|||||||
SLUG="$(slugify "$BRANCH")"
|
SLUG="$(slugify "$BRANCH")"
|
||||||
[ -n "$SLUG" ] || { err "slug vacío para la rama '$BRANCH'"; exit 2; }
|
[ -n "$SLUG" ] || { err "slug vacío para la rama '$BRANCH'"; exit 2; }
|
||||||
|
|
||||||
DEST="/opt/localesp-$SLUG"
|
DEST="/opt/localesp/$SLUG"
|
||||||
UNIT="localesp-$SLUG"
|
UNIT="localesp-$SLUG"
|
||||||
HOST="$SLUG.$DOMAIN"
|
HOST="$SLUG.$DOMAIN"
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@ slugify() { printf '%s' "$1" | tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9]+
|
|||||||
SLUG="$(slugify "$BRANCH")"
|
SLUG="$(slugify "$BRANCH")"
|
||||||
UNIT="localesp-$SLUG"
|
UNIT="localesp-$SLUG"
|
||||||
HOST="$SLUG.$DOMAIN"
|
HOST="$SLUG.$DOMAIN"
|
||||||
DEST="/opt/localesp-$SLUG"
|
DEST="/opt/localesp/$SLUG"
|
||||||
|
|
||||||
log "$HOST ($DEST, $UNIT)"
|
log "$HOST ($DEST, $UNIT)"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user