6b8bcd0939
rsync_deploy sincroniza directorio local a remoto via SSH con exclusiones estándar (.git, node_modules, *.db, etc.). gitea_create_webhook crea webhook de push en un repo Gitea para auto-deploy en cada commit.
53 lines
2.0 KiB
Markdown
53 lines
2.0 KiB
Markdown
---
|
|
name: rsync_deploy
|
|
kind: function
|
|
lang: bash
|
|
domain: infra
|
|
version: "1.0.0"
|
|
purity: impure
|
|
signature: "rsync_deploy(local_dir: string, ssh_alias: string, remote_dir: string) -> json"
|
|
description: "Sincroniza un directorio local a un host remoto via rsync+SSH. Excluye archivos de desarrollo y bases de datos locales. Crea el directorio remoto si no existe."
|
|
tags: [rsync, deploy, sync, ssh, remote, infra]
|
|
uses_functions: []
|
|
uses_types: []
|
|
returns: []
|
|
returns_optional: false
|
|
error_type: "error_go_core"
|
|
imports: []
|
|
params:
|
|
- name: local_dir
|
|
desc: "ruta al directorio local a sincronizar (ej: apps/dag_engine/)"
|
|
- name: ssh_alias
|
|
desc: "alias SSH del host destino definido en ~/.ssh/config (ej: myserver)"
|
|
- name: remote_dir
|
|
desc: "ruta absoluta del directorio destino en el host remoto (ej: /opt/apps/dag_engine)"
|
|
output: "JSON con files_transferred (int), total_size (string), ssh_alias (string), remote_dir (string)"
|
|
tested: false
|
|
tests: []
|
|
test_file_path: ""
|
|
file_path: "bash/functions/infra/rsync_deploy.sh"
|
|
---
|
|
|
|
## Ejemplo
|
|
|
|
```bash
|
|
source bash/functions/infra/rsync_deploy.sh
|
|
|
|
# Deploy de una app al servidor de producción
|
|
result=$(rsync_deploy "apps/dag_engine/" "prod-server" "/opt/apps/dag_engine")
|
|
echo "$result"
|
|
# {"files_transferred": 12, "total_size": "1.23 MB", "ssh_alias": "prod-server", "remote_dir": "/opt/apps/dag_engine"}
|
|
|
|
# Deploy con ruta absoluta local
|
|
rsync_deploy "/home/lucas/fn_registry/apps/myapp/" "myserver" "/opt/myapp"
|
|
```
|
|
|
|
## Notas
|
|
|
|
- Usa `rsync -avz --delete`: archivos borrados localmente se borran también en el remoto.
|
|
- Antes del rsync crea el directorio remoto con `ssh mkdir -p` para evitar errores si no existe.
|
|
- Archivos excluidos: `.git`, `operations.db*`, `*.exe`, `node_modules`, `.venv`, `__pycache__`, `build/`, `*.db-shm`, `*.db-wal`.
|
|
- El JSON de salida va a stdout; los mensajes de progreso y errores van a stderr.
|
|
- Exit code 1 si rsync falla o si el directorio local no existe.
|
|
- El `ssh_alias` se resuelve con la configuración de `~/.ssh/config`, incluyendo host, user, identityfile y puerto.
|