# Proceso de instalación de Sherpa Orchestrator (versión local)

### Preparación del servidor

#### Agregar usuario al grupo sudo

```bash
# Inicie sesión como usuario root
su

# Agregue el usuario al grupo sudo
/sbin/usermod -aG sudo <userName>

# Reinicie el sistema para aplicar los cambios
exit
```

<details>

<summary>💡 Comentarios sobre la adición de usuario a sudo</summary>

**/sbin/usermod -aG sudo** - agrega al usuario al grupo sudo

* `-a` - append (agrega a los grupos existentes)
* `-G sudo` - agrega al grupo sudo
* `<userName>` - reemplace con el nombre de su usuario

**Importante:** Después de ejecutar el comando, es necesario reiniciar el sistema para aplicar los cambios.

</details>

#### Configuración de la zona horaria

```bash
# Establezca la zona horaria UTC
sudo timedatectl set-timezone UTC

# Verifique la configuración
timedatectl
```

<details>

<summary>💡 Comentarios sobre la configuración de la zona horaria</summary>

**sudo timedatectl set-timezone UTC** - establece la zona horaria UTC **timedatectl** - muestra la configuración actual de fecha y hora

Se recomienda utilizar UTC para aplicaciones de servidor.

</details>

#### Actualización del sistema

```bash
# Actualice la lista de paquetes
sudo apt -y update

# Instale herramientas para trabajar con repositorios
sudo apt -y install software-properties-common gnupg2

# Actualice el sistema
sudo apt -y upgrade
```

<details>

<summary>💡 Comentarios sobre la actualización del sistema</summary>

**sudo apt -y update** - actualiza la lista de paquetes disponibles desde los repositorios **sudo apt -y install software-properties-common gnupg2** - instala herramientas para trabajar con repositorios

* `software-properties-common` - utilidades para gestionar repositorios
* `gnupg2` - herramienta para trabajar con claves GPG

**sudo apt -y upgrade** - actualiza todos los paquetes instalados a las últimas versiones

* `-y` - confirmación automática de la instalación

</details>

### Descompresión del archivo de actualización

En esta etapa, descomprimirá el archivo con los archivos de Sherpa Orchestrator y preparará el sistema para la instalación.

```bash
# Vaya al directorio con los archivos
cd /opt

# Encuentre y descomprima el archivo de actualización (se selecciona automáticamente la versión más reciente)
tar -xvzf "$(ls orchestrator_local_update_*.tgz | sort -V | tail -n 1)"

# Vaya al directorio con los archivos descomprimidos
cd SherpaOrchestrator
```

<details>

<summary>💡 Comentarios sobre la descompresión del archivo</summary>

**cd /opt** - cambia al directorio con los archivos de instalación **tar -xvzf "$(ls orchestrator\_local\_update\_\*.tgz | sort -V | tail -n 1)"** - descomprime el archivo de actualización

* `tar -xvzf` - descomprime el archivo con salida detallada
* `ls orchestrator_local_update_*.tgz` - encuentra todos los archivos de archivos de actualización
* `sort -V` - ordena las versiones de manera natural (1.0 < 1.1 < 1.10)
* `tail -n 1` - selecciona el archivo más reciente

**cd SherpaOrchestrator** - cambia al directorio con los archivos descomprimidos

**Resultado esperado:** Se descomprimirán los archivos y directorios necesarios para la instalación de Sherpa Orchestrator.

</details>

#### Preparación de los scripts para su ejecución

```bash
# Vaya al directorio sh_scripts
cd sh_scripts/

# Haga que todos los scripts sean ejecutables
chmod +x *.sh

# Regrese al directorio raíz del proyecto
cd ..
```

<details>

<summary>💡 Comentarios sobre la preparación de los scripts</summary>

**cd sh\_scripts/** - cambia al directorio con los scripts de instalación

\**chmod +x .sh* - establece permisos de ejecución para todos los scripts shell

* `chmod +x` - agrega el derecho de ejecución
* `*.sh` - todos los archivos con la extensión .sh

**cd ..** - regresa al directorio raíz del proyecto

</details>

#### Inicialización de la configuración

```bash
# Ejecute la inicialización de la configuración
sudo ./sh_scripts/create_config.sh
```

<details>

<summary>💡 Comentarios sobre la inicialización de la configuración</summary>

**sudo ./sh\_scripts/create\_config.sh** - ejecuta el script de inicialización de la configuración básica

* Crea los directorios necesarios
* Configura los parámetros básicos del sistema
* Prepara la estructura para la configuración posterior

</details>

### Instalación de la base de datos MariaDB

```bash
# Agregue el repositorio de MariaDB
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
sudo add-apt-repository "deb [arch=amd64] http://mariadb.mirror.liquidtelecom.com/repo/10.5/debian $(lsb_release -cs) main"

# Actualice la lista de paquetes
sudo apt update

# Instale MariaDB
sudo apt install mariadb-server mariadb-client
```

<details>

<summary>💡 Comentarios sobre la instalación de MariaDB</summary>

**Adición del repositorio:**

* `sudo apt-key adv --recv-keys` - agrega la clave GPG del repositorio
* `sudo add-apt-repository` - agrega el repositorio de MariaDB
* `$(lsb_release -cs)` - determina automáticamente el nombre en clave de la distribución

**Instalación de paquetes:**

* `mariadb-server` - servidor de base de datos
* `mariadb-client` - cliente para conectarse a la base de datos

</details>

### Configuración básica de seguridad de MySQL/MariaDB

```bash
# Ejecute el script de configuración de seguridad
sudo mysql_secure_installation
```

**Preguntas y opciones de respuesta para la configuración de seguridad:**

```
Switch to unix_socket authentication [Y/n] y
Change the root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] n
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
```

<details>

<summary>💡 Comentarios sobre la configuración de seguridad</summary>

**mysql\_secure\_installation** - script interactivo para la configuración básica de seguridad de MySQL/MariaDB

**Respuestas recomendadas:**

* **Switch to unix\_socket authentication** - sí (y) - usar autenticación a través de unix socket
* **Change the root password** - sí (y) - establecer una contraseña para el usuario root
* **Remove anonymous users** - sí (y) - eliminar usuarios anónimos
* **Disallow root login remotely** - no (n) - permitir que root se conecte de forma remota
* **Remove test database** - sí (y) - eliminar la base de datos de prueba
* **Reload privilege tables** - sí (y) - recargar las tablas de privilegios

</details>

### Configuración de la base de datos y el usuario

```bash
# Conéctese a MySQL como root
mysql -u root -p

# Ejecute los siguientes comandos en el shell de MySQL:
```

```sql
-- Adición de usuario de la base de datos (reemplace la contraseña por una segura)
GRANT ALL ON orchestrator.* TO 'orchestrator'@'localhost' IDENTIFIED BY 'mD2vjt(HqZKW' WITH GRANT OPTION;

-- Recarga de privilegios
FLUSH PRIVILEGES;

-- Selección de la base de datos
USE orchestrator;

-- Actualización del registro de la cuenta
UPDATE `accounts` SET `parent_account_id` = '1' WHERE `accounts`.`id` = 1;

-- Salida de MySQL
exit;
```

<details>

<summary>💡 Comentarios sobre la configuración de la base de datos</summary>

*GRANT ALL ON orchestrator. TO 'orchestrator'@'localhost'...*\* - crea el usuario orchestrator con todos los derechos sobre la base orchestrator

* `'orchestrator'@'localhost'` - el usuario puede conectarse solo desde localhost
* `WITH GRANT OPTION` - el usuario puede otorgar derechos a otros usuarios

**FLUSH PRIVILEGES** - recarga las tablas de privilegios

**UPDATE accounts...** - establece parent\_account\_id para la cuenta del sistema

**Importante:** ¡Reemplace la contraseña `'mD2vjt(HqZKW'` por una contraseña única y segura!

</details>

### Instalación del servidor web y PHP

```bash
# Instale los paquetes necesarios
sudo apt -y install lsb-release apt-transport-https ca-certificates curl

# Agregue el repositorio de PHP
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list

# Actualice la lista de paquetes
sudo apt-get update

# Instale Nginx y PHP 8.5
sudo apt-get install -y nginx php8.5 php8.5-cli php8.5-fpm php8.5-opcache php8.5-curl php8.5-mbstring php8.5-zip php8.5-xml php8.5-mysql php8.5-pdo-mysql php8.5-pgsql
```

<details>

<summary>💡 Comentarios sobre la instalación del servidor web</summary>

**Adición del repositorio de PHP:**

* Se agrega la clave GPG del repositorio PHP de sury.org
* Se agrega el repositorio para PHP 8.5

**Instalación de paquetes:**

* `nginx` - servidor web
* `php8.5` - intérprete de PHP
* `php8.5-fpm` - FastCGI Process Manager para PHP
* `php8.5-*` - extensiones de PHP para diversas funciones

</details>

### Configuración de PHP

```bash
# Abra el archivo de configuración de PHP-FPM
sudo nano /etc/php/8.5/fpm/php.ini

# Busque y cambie los siguientes parámetros:
upload_max_filesize = 100M
post_max_size = 100M

# Guarde el archivo y reinicie PHP-FPM
sudo service php8.5-fpm restart
```

<details>

<summary>💡 Comentarios sobre la configuración de PHP</summary>

**upload\_max\_filesize = 100M** - tamaño máximo del archivo a cargar **post\_max\_size = 100M** - tamaño máximo de los datos POST

**sudo service php8.5-fpm restart** - reinicia PHP-FPM para aplicar los cambios

</details>

### Configuración de Nginx

```bash
# Abra el archivo de configuración de Nginx
sudo nano /etc/nginx/nginx.conf

# Busque la sección http y agregue:
client_max_body_size 100m;

# Guarde el archivo
```

<details>

<summary>💡 Comentarios sobre la configuración de Nginx</summary>

**client\_max\_body\_size 100m** - establece el tamaño máximo del cuerpo de la solicitud del cliente

* Debe estar en la sección `http { ... }`
* El valor corresponde a la configuración de PHP

</details>

### Configuración de dominio y configuración de Sherpa

```bash
# Abra el archivo de configuración del dominio
sudo nano /opt/SherpaOrchestrator/backend/config/domain.conf

# Reemplace "orchestrator.sherparpa.ru" por su dominio o dirección IP (un total de 4 reemplazos)

# Defina la ruta al socket de PHP-FPM según el SO:
# Para Ubuntu 18.04:
# fastcgi_pass unix:/var/run/php/php8.5-fpm.sock;

# Para Debian:
fastcgi_pass unix:/run/php/php8.5-fpm.sock;

# Para CentOS 8:
# fastcgi_pass unix:/run/php-fpm/www.sock;

# Para CentOS 7:
# fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
```

<details>

<summary>💡 Comentarios sobre la configuración del dominio</summary>

**Reemplazo de dominio:** Es necesario reemplazar todas las ocurrencias de "orchestrator.sherparpa.ru" por su dominio real o dirección IP

**Configuración del socket de PHP-FPM:** La ruta depende de la distribución de Linux:

* Debian/Ubuntu generalmente: `/run/php/php8.5-fpm.sock`
* CentOS: `/run/php-fpm/www.sock`

**Importante:** Si la ruta es incorrecta, revise los registros de Nginx: `/var/log/nginx/error.log`

</details>

### Configuración de certificados SSL

```bash
# Copie los certificados SSL en el directorio de configuración
# Reemplace las rutas por las rutas reales a sus certificados
sudo cp /path/to/your/certificate.crt /opt/SherpaOrchestrator/backend/config/certs/orchestrator.crt
sudo cp /path/to/your/private.key /opt/SherpaOrchestrator/backend/config/certs/orchestrator.key
```

<details>

<summary>💡 Comentarios sobre los certificados SSL</summary>

**Requisitos para los certificados:**

* El certificado debe ser renombrado a `orchestrator.crt`
* La clave privada debe ser renombrada a `orchestrator.key`
* Formatos: .crt/.pem para el certificado, .key para la clave

**Obtención de certificados:**

* Consulte al administrador del sistema para obtener certificados corporativos
* Use Let's Encrypt para certificados gratuitos
* Para pruebas, se pueden crear certificados autofirmados

</details>

### Configuración de la configuración de la aplicación

```bash
# Abra el archivo de configuración de la aplicación
sudo nano /opt/SherpaOrchestrator/backend/config/config.ini

# Configure los parámetros de conexión a la base de datos:
database_host=127.0.0.1
database_port=3306
database_user=orchestrator
database_password="mD2vjt(HqZKW"
database_dbname=orchestrator
```

<details>

<summary>💡 Comentarios sobre la configuración de la aplicación</summary>

**Parámetros de la base de datos:**

* `database_host` - dirección del servidor de la base de datos (generalmente 127.0.0.1 para instalación local)
* `database_port` - puerto MySQL/MariaDB (por defecto 3306)
* `database_user` - usuario de la base de datos (orchestrator)
* `database_password` - contraseña del usuario (debe coincidir con la creada anteriormente)
* `database_dbname` - nombre de la base de datos (orchestrator)

**Importante:** La contraseña debe coincidir exactamente con la contraseña establecida al crear el usuario de la base de datos

</details>

#### Configuración de phinx.php (migraciones de BD)

El archivo `backend/config/phinx.php` es utilizado por Phinx para ejecutar migraciones. La contraseña en él debe coincidir con la contraseña de la base de datos del config.ini:

```bash
sudo nano /opt/SherpaOrchestrator/backend/config/phinx.php
```

En la sección `environments` en el bloque de la base de datos utilizada (por ejemplo, `orchestrator` o `mysql`), el parámetro `'pass'` debe coincidir con `database_password` del config.ini. De lo contrario, las migraciones durante la instalación o actualización fallarán.

### Activación de la configuración de Nginx

```bash
# Copie la configuración en sites-available
sudo cp /opt/SherpaOrchestrator/backend/config/domain.conf /etc/nginx/sites-available/default

# Reinicie Nginx
sudo systemctl restart nginx
```

<details>

<summary>💡 Comentarios sobre la activación de Nginx</summary>

**sudo cp ... /etc/nginx/sites-available/default** - copia la configuración del sitio a las configuraciones activas de Nginx

**sudo systemctl restart nginx** - reinicia Nginx para aplicar la nueva configuración

</details>

### Establecimiento de permisos

```bash
# Establezca los permisos y propietario correctos
sudo chown -R www-data:www-data /opt/SherpaOrchestrator
sudo chmod -R 775 /opt/SherpaOrchestrator
```

<details>

<summary>💡 Comentarios sobre el establecimiento de permisos</summary>

**sudo chown -R www-data:www-data /opt/SherpaOrchestrator** - establece www-data como propietario de los archivos

* `www-data` - usuario del servidor web Nginx/PHP-FPM
* `-R` - recursivamente para todos los archivos y directorios

**sudo chmod -R 775 /opt/SherpaOrchestrator** - establece permisos en los archivos

* `775` - el propietario y el grupo pueden leer/escribir/ejecutar, los demás solo pueden leer/ejecutar

</details>

### Creación de una base de datos de archivo

```sql
-- Conéctese a MySQL
mysql -u root -p

-- Cree la base de datos de archivo
CREATE DATABASE IF NOT EXISTS orchestrator_archive CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Salir
exit;
```

<details>

<summary>💡 Comentarios sobre la base de datos de archivo</summary>

**CREATE DATABASE IF NOT EXISTS orchestrator\_archive** - crea la base de datos de archivo

* `IF NOT EXISTS` - crea solo si no existe
* `CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci` - establece la codificación UTF-8 con soporte para Unicode

</details>

### Actualización de la estructura de la base de datos

```bash
# Vaya al directorio de la aplicación
cd /opt/SherpaOrchestrator

# Verifique la configuración de conexión a la base de datos en el archivo phinx.php
sudo nano backend/config/phinx.php

# Ejecute la actualización de la base de datos
sudo ./sh_scripts/migrate.sh
```

**Resultado esperado después de una actualización exitosa:**

```
Phinx by CakePHP - https://phinx.org.

using config file ./backend/config/phinx.php
using config parser php
using migration paths
using seed paths
warning no environment specified, defaulting to: orchestrator
using adapter mysql
using database orchestrator

== 20241201120000 CreateInitialSchema: migrated 0.0123s ==
== 20241201120000 CreateInitialSchema: migrated 0.0123s ==

All Done. Took 0.0345s
```

<details>

<summary>💡 Comentarios sobre la actualización de la base de datos</summary>

**Verificación de phinx.php:**

```php
'environments' => [
    'orchestrator' => [
        'adapter' => 'mysql',
        'host' => 'localhost',
        'name' => 'orchestrator',
        'user' => 'orchestrator',
        'pass' => 'mD2vjt(HqZKW',
        // ...
    ],
],
```

**sudo ./migrate.sh** - ejecuta las migraciones de la base de datos a través de Phinx

* Actualiza la estructura de las tablas
* Agrega los índices necesarios
* Crea disparadores y procedimientos

</details>

### Configuración de tareas CRON

```bash
# Abra el editor CRON
sudo crontab -e

# Agregue la línea para ejecutar el programador de tareas:
* * * * * php /opt/SherpaOrchestrator/backend/app/scheduleCronRunner.php

# Guarde y salga del editor
```

<details>

<summary>💡 Comentarios sobre la configuración de CRON</summary>

**sudo crontab -e** - abre el editor CRON para el usuario root

* `* * * * *` - se ejecuta cada minuto
* `php /opt/SherpaOrchestrator/backend/app/scheduleCronRunner.php` - ejecuta el programador de tareas de Sherpa

**Programador de tareas:**

* Gestiona el horario de ejecución de tareas
* Procesa trabajos pendientes
* Realiza limpieza automática

</details>

### Instalación de Node.js y PM2

```bash
# Instale Node.js 22.x
sudo curl -sL https://deb.nodesource.com/setup_22.x | bash -
sudo apt-get install -y nodejs

# Actualice npm
sudo npm install -g npm@latest

# Instale PM2
sudo npm install -g pm2
```

<details>

<summary>💡 Comentarios sobre la instalación de Node.js y PM2</summary>

**curl -sL <https://deb.nodesource.com/setup\\_22.x> | bash -** - agrega el repositorio de Node.js

* `-sL` - silencioso y seguir redirecciones
* `setup_22.x` - script para la versión 22.x de Node.js

**sudo apt-get install -y nodejs** - instala Node.js

**sudo npm install -g pm2** - instala PM2 globalmente

* PM2 - gestor de procesos para aplicaciones de Node.js
* Reinicio automático de aplicaciones
* Gestión de logs y monitoreo

</details>

### Configuración del servicio WebSocket

```bash
# Vaya al directorio del servicio websocket
cd /opt/SherpaOrchestrator/backend/app/websocket/

# Instale las dependencias
sudo npm install

# Inicie el servicio a través de PM2
sudo pm2 start index.js --watch --ignore-watch="node_modules" --name "Websockets"

# Configure el inicio automático de PM2
sudo pm2 startup

# Guarde la configuración de PM2
sudo pm2 save
```

<details>

<summary>💡 Comentarios sobre la configuración de WebSocket</summary>

**sudo npm install** - instala las dependencias de Node.js desde package.json

**sudo pm2 start index.js --watch --ignore-watch="node\_modules" --name "Websockets"**

* `--watch` - reinicio al cambiar archivos
* `--ignore-watch="node_modules"` - ignorar cambios en node\_modules
* `--name "Websockets"` - nombre del proceso en PM2

**sudo pm2 startup** - configura el inicio automático de PM2 al arrancar el sistema **sudo pm2 save** - guarda la configuración actual de los procesos

</details>

### Configuración del nombre de dominio (opcional)

Si le basta con acceder a la interfaz del Orquestador a través de la IP del servidor, omita este punto.

```bash
# Abra el archivo hosts
sudo nano /etc/hosts

# Agregue una entrada (reemplace con su IP y dominio):
192.168.1.100    orchestrator.mycompany.com
```

### Inicialización del Orquestador

1. Acceda a la URL: `https://<su_dominio_o_IP>/setup.php`
2. Si la dirección IP se muestra correctamente, haga clic en el botón "Enviar"
3. En la respuesta del script se indicará el GUID del orquestador - anótelo junto con los datos de registro

**¡Con esto la instalación está completa!**

El sistema Sherpa Orchestrator está disponible en el navegador a través del nombre de dominio o la dirección IP.

A continuación, es necesario agregar y activar la licencia para el orquestador y la licencia para los robots en la interfaz web del orquestador.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.sherparpa.ru/es/sherpa-rpa/sherpa-orchestrator/ustanovka-sherpa-orchestrator/bez-ispolzvaniya-docker/process-ustanovki-sherpa-orchestrator-lokalnaya-versiya.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
