--- name: vps_setup_app kind: function lang: go domain: infra version: "1.0.0" purity: impure signature: "func VPSSetupApp(conn SSHConn, appName, remoteDir, serviceUser string) error" description: "Prepara un host remoto para recibir una app: crea directorios, usuario de servicio y asigna ownership." tags: [vps, setup, deploy, remote, infra] uses_functions: [ssh_exec_go_infra] uses_types: [ssh_conn_go_infra] returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] params: - name: conn desc: "conexión SSH al host remoto" - name: appName desc: "nombre de la app (para logging)" - name: remoteDir desc: "ruta absoluta donde vivirá la app en el remoto (ej: /opt/apps/dag_engine)" - name: serviceUser desc: "usuario del sistema para correr el servicio (vacío para omitir creación de usuario)" output: "nil si el setup fue exitoso" tested: false tests: [] test_file_path: "" file_path: "functions/infra/vps_setup_app.go" --- ## Ejemplo ```go conn := SSHConn{Host: "192.168.1.100", User: "deploy"} err := VPSSetupApp(conn, "dag_engine", "/opt/apps/dag_engine", "deploy") ``` ## Notas Idempotente: mkdir -p no falla si el directorio existe, useradd se salta si el usuario existe. Crea subdirectorios `data/` y `logs/` dentro del remoteDir. Requiere sudo.