/ docs / Manual Instalacion.md
Manual Instalacion.md
  1  - [[#Introducción|Introducción]]
  2  - [[#Requisitos|Requisitos]]
  3  - [[#Configuración de la Base de Datos MySQL|Configuración de la Base de Datos MySQL]]
  4  	- [[#Configuración de la Base de Datos MySQL#Opción 1. Configuración con Docker Compose|Opción 1. Configuración con Docker Compose]]
  5  	- [[#Configuración de la Base de Datos MySQL#Opción 2. Configuración de MySQL local|Opción 2. Configuración de MySQL local]]
  6  - [[#Configuración de SGOC-INBOX|Configuración de SGOC-INBOX]]
  7  - [[#Configuración de SGOC-NG|Configuración de SGOC-NG]]
  8  	- [[#Configuración de SGOC-NG#Creación de un usuario responsable técnico|Creación de un usuario responsable técnico]]
  9  	- [[#Configuración de SGOC-NG#Generación de claves GPG|Generación de claves GPG]]
 10  	- [[#Configuración de SGOC-NG#Migración de documentos desde Legacy SGOC a MySQL SGOC-NG|Migración de documentos desde Legacy SGOC a MySQL SGOC-NG]]
 11  	- [[#Configuración de SGOC-NG#Migración de datos desde ORACLE Legacy SGOC a MySQL SGOC-NG|Migración de datos desde ORACLE Legacy SGOC a MySQL SGOC-NG]]
 12  - [[#Procedimientos adicionales|Procedimientos adicionales]]
 13  	- [[#Procedimientos adicionales#Cambio de IP para máquinas virtuales|Cambio de IP para máquinas virtuales]]
 14  	- [[#Procedimientos adicionales#Procedimiento para editar el montaje de la carpeta compartida mediante SAMBA para uso en SGOC-NG|Procedimiento para editar el montaje de la carpeta compartida mediante SAMBA para uso en SGOC-NG]]
 15  	- [[#Procedimientos adicionales#Procedimiento para utilizar una ubicación local para los documentos en lugar del NAS|Procedimiento para utilizar una ubicación local para los documentos en lugar del NAS]]
 16  	- [[#Procedimientos adicionales#Apagado y encendido seguro de la aplicación usando ESXI|Apagado y encendido seguro de la aplicación usando ESXI]]
 17  		- [[#Apagado y encendido seguro de la aplicación usando ESXI#Proceso de apagado|Proceso de apagado]]
 18  		- [[#Apagado y encendido seguro de la aplicación usando ESXI#Proceso de encendido|Proceso de encendido]]
 19  		- [[#Apagado y encendido seguro de la aplicación usando ESXI#Docker|Docker]]
 20  	- [[#Procedimientos adicionales#Modificación del texto y traducciones|Modificación del texto y traducciones]]
 21  	- [[#Procedimientos adicionales#Creación de endpoint para uso interno|Creación de endpoint para uso interno]]
 22  	- [[#Procedimientos adicionales#Envío de traza de errores|Envío de traza de errores]]
 23  	- [[#Procedimientos adicionales#Despliegue de parches de código|Despliegue de parches de código]]
 24  	- [[#Procedimientos adicionales#Despliegue de certificados SSL|Despliegue de certificados SSL]]
 25  	- [[#Procedimientos adicionales#Recargar configuración|Recargar configuración]]
 26  - [[#Nota: Contraseñas configuradas|Nota: Contraseñas configuradas]]
 27  
 28  
 29  ## Introducción
 30  
 31  En esta guía se explica cómo desplegar una instancia funcional del software **SGOC-NG** desde cero. Además, se cubre la instalación y configuración del servicio **SGOC-INBOX** y de la base de datos **MySQL** necesaria para ambos. Al finalizar, se habrán configurado correctamente todos los componentes para que el sistema funcione sin problemas.
 32  
 33  Se recomienda realizar una lectura completa de la guía antes de comenzar la instalación para entender de manera general los pasos a seguir para configurar y lanzar la aplicación.
 34  
 35  No dude en hacernos saber cualquier duda que pueda tener.
 36  
 37  ## Requisitos
 38  
 39  Una máquina virtual con:
 40  - Ubuntu 24:04
 41  - Recomendados 40-50 Gigabytes de espacio.
 42  - Recomendados al menos 4 GB de RAM.
 43  
 44  Partimos desde una carpeta con todos los ficheros .tar.gz y .image entregados.
 45  
 46  ## Configuración de la Base de Datos MySQL
 47  
 48  Para el posterior funcionamiento de **SGOC-NG** y **SGOC-INBOX**, se necesita una instancia de **MySQL** con acceso a dos bases de datos. Aunque estos nombres son modificables, en esta guía se utilizará el siguiente esquema de referencia:
 49  
 50  - **Usuario:** `sgoc`
 51  - **Bases de datos:** `sgoc` e `inbox`
 52  
 53  Estos valores se especificarán posteriormente en los archivos de configuración `.env` de **SGOC** y **SGOC-INBOX**, lo que permitirá el acceso de ambas aplicaciones a la base de datos.
 54  
 55  A continuación mostramos las dos opciones que consideramos para instalar MySQL, directamente sobre el OS, o de manera más sencilla utilizando docker.
 56  
 57  ### Opción 1. Configuración con Docker Compose
 58  
 59  1. Descomprima con `tar xvf mysql.tar.gz` 
 60  2. Situese sobre el nuevo directorio `cd sgoc_mysql`
 61  3. Modifique el fichero .env si fuese necesario, en él se definen las credenciales de acceso que las aplicaciones utilizarán para conectarse a la base de datos **MySQL**. Estos valores deberan ser utilizados durante la configuracion de las aplicaciones.
 62  
 63  ```.env
 64  MYSQL_ROOT_PASSWORD=rootpassword
 65  MYSQL_USER=sgoc
 66  MYSQL_PASSWORD=sgocpassword
 67  MYSQL_DATABASE=sgoc # Base de datos que se creará automáticamente
 68  ```
 69  
 70  3.  Creamos la red, cargamos la imagen y lanzamos el contenedor con:
 71  
 72  ```bash
 73  docker network create sgoc
 74  docker load -i mysql.image
 75  docker compose up -d
 76  ```
 77  
 78  Podremos volver a la capeta anterior con `cd ..`
 79  
 80  ### Opción 2. Configuración de MySQL local
 81  
 82  1. Prepare una instalación de MySQL 8 en una máquina virtual de Ubuntu 24.04
 83  
 84  ```bash
 85  sudo apt update
 86  sudo apt install mysql-server -y
 87  sudo systemctl enable mysql
 88  sudo systemctl start mysql
 89  ```
 90  2. Lanzamos el script de configuración. Siga las instrucciones del script para:
 91  	1. Establecer una contraseña para **root**,
 92  	2. Deshabilitar el acceso remoto con **root** y
 93  	3. Borrar las bases de datos de prueba
 94  
 95  ```bash
 96  sudo mysql_secure_installation
 97  sudo systemctl restart mysql
 98  ```
 99  3. Accedemos con `sudo mysql -u root -p` y ejecutamos los siguientes instrucciones para crear las bases de datos **sgoc** e **inbox** y el usuario de aplicación **sgoc** con acceso a ambas. ****
100  
101  ```sql
102  mysql> CREATE DATABASE sgoc;
103  mysql> CREATE DATABASE inbox;
104  mysql> CREATE USER 'sgoc'@'%' IDENTIFIED BY 'sgocpassword';
105  mysql> GRANT ALL PRIVILEGES ON sgoc.* TO 'sgoc'@'%';
106  mysql> GRANT ALL PRIVILEGES ON inbox.* TO 'sgoc'@'%';
107  mysql> FLUSH PRIVILEGES;
108  ```
109  
110  4. Hacemos MySQL accesible modificando la configuración.
111  ```txt
112  # /etc/mysql/mysql.conf.d/mysqld.cnf
113  bind-address = 0.0.0.0
114  ```
115  5. Reiniciamos MySQL para que tenga efecto:
116  ```bash
117  sudo systemctl restart mysql
118  ```
119  
120  ## Configuración de SGOC-INBOX
121  
122  Una vez conectada la máquina que contiene la base de datos de **mysql**, pasaremos a preparar el **Inbox**.
123  1. Cargue la imagen de docker correspondiente con `docker load -i sgoc-inbox.image` 
124  2. Descomprima con `tar xvf sgoc-inbox.tar.gz`
125  3. Sitúese sobre el nuevo directorio `cd sgoc_inbox`
126  4. Prepare el fichero .env con `cp .env.example .env`
127  5. Modifique el fichero .env según necesite:
128  
129  En caso de haber preparado la instalación de MySQL con docker, podremos hacer referencia a ella en el *.env* usando **sgoc_mysql** en DB_HOST, si se instaló de manera local, DB_HOST tendrá que ser asignado con la dirección IP que le permita el acceso.
130  
131  ``` env
132  APP_URL=http://localhost
133  
134  ...
135  
136  DB_HOST=sgoc_mysql
137  DB_PASSWORD=sgocpassword
138  
139  ...
140  
141  SGOC_API_KEY="ABSCDVTOIUNBYTUN"
142  SGOC_HOST="https://sgoc_app"
143  
144  SFTP_HOST="sgoc_sftp"
145  SFTP_USER=foo
146  SFTP_PWD=pass
147  ```
148  
149  5. Arranque la imagen con `docker compose -f docker-compose-prod.yml up` 
150  6. Usando `docker ps` para comprobarlo deberíamos algo así
151  ``` bash
152  docker ps
153  CONTAINER ID   NAMES        IMAGE          STATUS
154  52310c333501   sgoc_inbox   sail-8.2/app   Up 2 hours
155  21d10ae347eb   sgoc_mysql   mysql:8.0      Up 2 hours
156  ```
157  
158  7. Entramos al contenedor **sgoc_inbox** con `docker exec -it sgoc_inbox bash`y ejecutamos lo siguiente:
159  
160  ``` bash
161  php artisan migrate:fresh
162  ```
163  
164  Con esto habríamos terminado de configurar y ejecutar el contenedor de **SGOC-INBOX**. 
165  
166  ## Configuración de SGOC-NG
167  
168  Una vez tenemos sgoc_mysql y sgoc_inbox lanzados podemos continuar con sgoc_app.
169  1. Cargue la imagen de docker correspondiente con `docker load -i sgoc.image`
170  2. Cargue además la imagen para sftp `docker load -i sftp.image`
171  3. Descomprime con `tar xvf sgoc.tar.gz` 
172  4. Sitúese sobre la nueva carpeta `cd sgoc`
173  5. Prepare el fichero .env con `cp .env.example .env`
174  6. Modifique el fichero .env según necesite.
175  
176  Modifique APP_URL y ASSET_URL para que contengan la IP de la máquina. En caso de haber preparado la instalación de MySQL con docker, podremos hacer referencia a ella en el *.env* usando DB_HOST=sgoc_mysql, si se instaló de manera local, DB_HOST tendrá que ser asignado con la dirección IP que permita el acceso.
177  
178  ```env
179  APP_URL=https://localhost
180  ASSET_URL=https://localhost
181  
182  ...
183  
184  DB_HOST=sgoc_mysql
185  DB_PASSWORD=sgocpassword
186  
187  ...
188  
189  INBOX_HOST="http://sgoc_inbox"
190  INBOX_API_KEY="ABSCDVTOIUNBYTUN"
191  
192  SFTP_HOST=sftp
193  SFTP_USER=foo
194  SFTP_PWD=pass
195  ```
196  5. Arranque la imagen con `docker compose -f docker-compose-prod.yml up` 
197  6. Comprobamos con `docker ps` que tenemos algo así.
198  
199  ```bash
200  docker ps
201  CONTAINER ID   NAMES        IMAGE          STATUS
202  52310c333501   sgoc_inbox   sail-8.2/app   Up 2 hours
203  0f189ca1cc99   sgoc_app     sgoc-app      Up 2 hours
204  21d10ae347eb   sgoc_mysql   mysql:8.0      Up 2 hours
205  7d25b7c61c80   sgoc_sftp    antrea/sftp    Up 2 hours
206  ```
207  
208  7. Entramos al contenedor **sgoc_app** con `docker exec -it sgoc_app bash` y ejecutamos lo siguiente:
209  
210  ```bash
211  php artisan migrate:fresh --seed
212  ```
213  
214  Tras este paso tanto SGOC-NG como SGOC-INBOX deberían de estar accesibles en el puerto 443 y en el 8080 respectivamente (Si no han sido modificados en el .env/docker-compose-prod.yml)
215  
216  Si tras seguir load pasos obtenemos en *storage/log/laravel.log* un error 500 por falta de permisos en *storage* o en *bootstrap/cache*, reiniciaremos la aplicación con:
217  
218  ```bash
219  docker compose -f docker-compose-prod.yml down
220  docker compose -f docker-compose-prod.yml up
221  ```
222  
223  Vea la sección [[#Migración de datos desde ORACLE Legacy SGOC a MySQL SGOC-NG]], si necesita traer datos desde una instalación previa del SGOC original (legacy).
224  
225  ### Creación de un usuario responsable técnico
226  
227  Para comenzar a cargar ficheros necesitamos un usuario con rol Responsable Técnico. Si no existe tal usuario, se tendrá que asignar el rol a un usuario existente o crear el usuario de forma manual desde la interfaz de **SGOC-NG**. Para crearlo tendremos que hacer login con el usuario **root** *CERT10* y de contraseña *password*.
228  
229  Una vez dentro de la aplicación, en el menú de la izquierda pulsaremos en el botón de *Usuarios* y en la cabecera de la sección *Personal* pulsaremos el icono de los tres puntos y posteriormente en el botón de *Crear usuario*. 
230  
231  ![[Pasted_image_20241111121531.png]]
232  
233  Aparecerá desde el margen derecho de la aplicación un formulario donde tendremos que poner los datos del usuario.
234  ![[Pasted_image_20241111120138.png]]
235  
236  **Nota**: es importante que el tipo del usuario sea *Interno*, que esté marcado que pueda *acceder a SGOC* y el rol asignado sea *Responsable técnico*.
237  ### Generación de claves GPG
238  Con las mismas credenciales del usuario **root** *CERT10* pulsaremos en la esquina superior derecha, en el icono del usuario, y posteriormente en el botón de ajustes.
239  ![[Pasted_image_20241111134634.png]]
240  
241  Esto nos llevará a la pantalla de ajustes de **SGOC-NG** donde, entre otras cosas, podremos generar las claves *GPG* que se usarán para desencriptar todos los documentos que lleguen a **SGOC-NG**. En la sección de *claves GPG* pulsaremos en los 3 puntos que aparecen en el margen superior derecho y luego en el botón que aparece en el desplegable.
242  
243  ![[Pasted_image_20241111134326.png]]
244  
245  Desde el margen derecho de la aplicación aparecerá un panel donde pegar la clave *GPG* que se quiera importar ó se podrá pulsar en el botón de *Generar* para crear una nueva.
246  
247  ![[Pasted_image_20241111134410.png]]
248  
249  **Nota**: Las base de datos *GPG* está dentro de la máquina **SGOC-NG** en la ruta `/home/sgoc/sgoc/.gnupg`. Si tuviéramos que mover las *GPG* de sitio, habría que copiar todo el contenido de esta carpeta y establecer la ruta de la nueva carpeta en el archivo de parámetros de configuración de la aplicación (`.env`). Abriremos el directorio donde se encuentra **SGOC-NG** y con el editor que queramos, cambiaremos la siguiente línea con la nueva ruta donde estarán las *GPGs*
250  
251  ```env
252  GPG_HOMEDIR='/home/sgoc/sgoc/.gnupg'
253  ```
254  
255  Una vez establecido deberemos limpiar la caché de la configuración con el siguiente comando:
256  
257  ```bash
258  php artisan o:c
259  ```
260  
261  Para que la nueva ruta surta efecto también deberemos reiniciar la instancia de docker que se está ejecutando como hemos explicado anteriormente. Desde el directorio de **SGOC-NG** ejecutamos los comandos
262  ```bash
263  docker compose down
264  docker compose -f docker-compose-prod-yml up -d
265  ```
266  
267  Una vez lanzado, ya estaría operativa la nueva ruta de las *GPG*.
268  		
269  
270  ### Migración de documentos desde Legacy SGOC a MySQL SGOC-NG
271  
272  ^7dfe8f
273  
274  En esta sección se explica como migrar los documentos y los datos de la base de datos Oracle al nuevo sistema. Para ello se tomará en cuenta la distribución actual en el que SGOC Legacy está instalado y los servicios disponibles del la oficina del OC.  ^8dc0e4
275  
276  **Nota**: las siguientes anotaciones fueron tomadas desde el entorno de producción en la red interna durante la segunda visita a las oficinas donde se desplegaría SGOC. 
277  
278  Para copiar los archivos del servidor antiguo al nuevo, se utilizará un directorio temporal en el NAS. Mediante **rsync**, se sincronizarán todos los archivos desde el servidor antiguo. Este proceso consta de dos pasos:
279  
280  1. **Sincronización inicial con rsync**
281      
282      Primero, se ejecutará un comando `rsync` desde el servidor antiguo **SGOC** (dirección IP `192.168.3.80`) que copiará únicamente los archivos que no existan en el destino o que hayan sido modificados desde la última sincronización. Esto se realizará desde la máquina **SGOC** antigua ejecutando el siguiente comando:
283      
284      ```bash
285      rsync -azP --delete --perms --chmod=ugo=rwx /var/www/docs/ admin@192.168.3.50:/volume1/oc/docs-sgoc-rsync/
286  	```
287  
288  	Este comando sincronizará los archivos en la carpeta temporal del NAS (`/volume1/oc/docs-sgoc-rsync/`), manteniendo los permisos de los archivos y asignando permisos completos de lectura, escritura y ejecución para todos los usuarios.
289      
290  2. **Organización de los documentos con un script de Python**
291      
292      Una vez sincronizados los documentos, se utilizará un script de Python (`ejecutaCopy.py`) para organizar y copiar los documentos de forma ordenada (por expediente, año, etc.) en el NAS. Los documentos quedarán organizados de manera que SGOC-NG pueda hacer uso de ellos y asignarlos a su expediente correspondiente. Para ejecutar este script, será necesario ubicarse en el directorio donde se encuentra (`C:` en este caso) y ejecutarlo con **Python 2.7** especificando los parámetros deseados. Algunos ejemplos de uso del script son los siguientes:
293      
294  	```bash
295      python .\ejecutaCopy.py ">2018"  # copiar documentos desde el año 2018 en adelante (incluido)
296      python .\ejecutaCopy.py 2018  # copier unicamente los documentos del año 2018
297      python .\ejecutaCopy.py 2018-1  # copiar únicamente los documentos del expediente 2018-01 
298      ```
299  
300      Este script se encargará de copiar los archivos antiguos del servidor **SGOC Legacy** al NAS de manera ordenada, facilitando la organización y posterior consulta de los documentos en función de los criterios indicados.
301  
302  	Dentro del script `ejecutaCopy.py` se pueden configurar los parámetros de origen y destino de los datos mediante las variables `original` y `destination`. Es importante recordar que tanto `original` como `destination` deben ser rutas **locales** en el equipo donde se ejecuta el script. Para ello, se montarán como unidades locales las rutas de los servidores remotos.
303  	
304  	- La ruta de **origen** ya se encuentra montada en `S:\sgoc-rsync`.
305  	- Para la ruta de **destino**, será necesario montarla como una unidad local de Windows con el usuario `SGOC-NG-2\sgoc`, especificando como host remoto `192.168.3.50` y utilizando la contraseña `Abcdef12345!`.
306  	
307  	Para montar una ruta remota de Linux en un equipo con Windows, se requiere instalar **WinFSP** y **SSHFS-Win**. Estos componentes se pueden descargar desde [https://winfsp.dev](https://winfsp.dev).
308  
309  	Una vez copiados los archivos, se debe ejecutar otro script para procesar los documentos que no sean del tipo `EXT` y cuya extensión sea `DOC`, `doc`, `DOCX`, o `docx`. Este proceso evitará el parseo de otros formatos y se centrará en actualizar los campos automáticos de estos documentos específicos desde SGOC Legacy.
310  
311  3. **Ejecutar el script de parseo de documentos**
312      
313      Al igual que el script anterior, `ejecutaParser.py` permite procesar todos los expedientes de un año en adelante (incluido), los documentos de un año específico, o bien, los de un expediente en particular. A continuación se muestran algunos ejemplos de ejecución del script:
314  	```bash
315  	python .\ejecutaParser.py ">2018"
316  	python .\ejecutaParser.py 2018
317  	python .\ejecutaParser.py 2018-01
318  	```
319  ---
320  
321  Finalmente, recuerde leer la sección de [[#Inicialización de la base de datos de SGOC-NG]] para continuar con los pasos de migración de la base de datos y asegurar que todos los datos se encuentren correctamente transferidos.
322  
323  ### Migración de datos desde ORACLE Legacy SGOC a MySQL SGOC-NG
324  
325  Para realizar la migración de datos desde la base de datos ORACLE Legacy de **SGOC** a la nueva base de datos **MySQL** en **SGOC-NG**, se seguirán los siguientes pasos:
326  
327  1. Preparación de la base de datos de SGOC-NG, se habrán seguido los pasos definidos en [[#Configuración de la Base de Datos]]
328  2. **Exportación de la variable de entorno de ORACLE**
329      
330      A continuación, se debe exportar la variable de entorno necesaria para **ORACLE** con el siguiente comando:
331      ```bash
332      export TNS_ADMIN=/home/sgoc/sgoc/oracle/tnsnames
333  	```
334      
335  5. **Ejecución del comando de migración de datos**
336      
337      Para iniciar la migración de datos, asegúrese de estar en el directorio `/home/sgoc/sgoc` dentro del contenedor de Docker y ejecute el siguiente comando. Este proceso puede tardar entre 15 y 20 minutos en completarse:
338  
339  	```
340      php artisan oracle:migrate
341      ```
342      
343  6. **Migración de documentos desde el servidor antiguo**
344      
345      Antes de continuar con los pasos siguientes, es necesario copiar los archivos (evidencias de expedientes, ETR, etc.) desde el servidor antiguo al nuevo. Consulte el apartado [[#Migración de documentos desde Legacy SGOC a MySQL SGOC-NG]] para seguir las instrucciones correspondientes.    
346      
347  7. **Enlace de documentos Legacy con la nueva aplicación**
348      
349      Una vez finalizada la migración de la base de datos y la copia de archivos, se procederá a enlazar los documentos legacy con la nueva aplicación ejecutando el siguiente comando:
350  	```bash
351  	php artisan documents:dossier [AÑO] [NUMERO EXPEDIENTE]
352  	php artisan documents:dossier [AÑO]  # enlaza todos los componentes de ese año
353  	```
354  
355  8. **Limpieza de la caché** con `php artisan o:c`
356  
357  Con estos pasos, se completará la migración de datos y documentos desde ORACLE Legacy a MySQL SGOC-NG, enlazando correctamente la información y asegurando su integración con la nueva aplicación.
358  
359  
360  
361  
362  ## Procedimientos adicionales
363  
364  ### Cambio de IP para máquinas virtuales
365  
366  En caso de instalar directamente sobre máquinas virtuales en lugar de utilizar un unico sistema para todo el despliegue, es posible que sea necesario modificar las IP a las que haremos referencia a SGOC, INBOX o MySQL.
367  
368  Para una máquina con Ubuntu 24.04 LTS:
369  
370  1. Accede con a la máquina objetivo con SSH.
371  2. Edita el fichero /etc/netplan/01-netcfg.yaml
372  
373  Este archivo está en formato **YAML**, por lo que es necesario ser cuidadoso con la indentación.
374  
375  - Cambie la IP bajo la clave `addresses`, ubicada después del identificador del adaptador de red.
376  - Si cambia la puerta de enlace, también debe modificar la clave `via` bajo `routes`, especificando la nueva dirección de la puerta de enlace.
377  
378  Para aplicar los cambios de red, ejecute el siguiente comando:
379  
380  ```bash
381  netplan apply
382  ```
383  
384  3. A continuación será necesario visitar los ficheros `.env` que hagan referencia a la máquina cuya IP fue modificada con el objetivo de editar las entradas de `SGOC_HOST`, `INBOX_HOST`, `DB_HOST`, `SFTP_HOST`. De manera que las aplicaciones puedan seguir comunicándose con la máquina actualizada.
385  4. Recuerda recargar el `.env`en el software utilizando `php artisan o:c`
386  
387  Con estos pasos, la nueva IP quedará configurada tanto en las máquinas como en los parámetros de la aplicación, asegurando que **SGOC-NG** y **SGOC-INBOX** se comuniquen correctamente en la red actualizada.
388  
389  ### Procedimiento para editar el montaje de la carpeta compartida mediante SAMBA para uso en SGOC-NG
390  
391  Para habilitar el montaje de la carpeta compartida mediante **SAMBA** en la aplicación **SGOC**, es necesario realizar modificaciones en dos archivos: `fstab` y `docker-compose-prod.yml` desde la máquina que ejecuta SGOC-NG.
392  
393  1.  Modificación del archivo `fstab`
394  ```txt
395  //192.168.3.50/sgoc-docs /mnt/samba cifs username=sgoc,password=Abcdef12345!,uid=1001,gid=1001 0 0`
396  ```
397  
398  Este cambio hace que se monte automáticamente el directorio `/mnt/samba` cada vez que se reinicie el sistema. Configurar según su IP, usuario y contraseña del NAS.
399      
400  2. Para aplicar los cambios, es posible que necesite ejecutar el siguiente comando:
401  ```bash    
402  sudo umount -a && sudo mount -a
403  ```
404      
405      **Nota:** La aplicación **SGOC** usa `/mnt/samba` como punto de montaje. Si se cambia este punto de montaje, también debe modificarse en el archivo `docker-compose-prod.yml` ubicado en la máquina **SGOC** (fuera del contenedor Docker), en la línea 9.
406      
407  3. Actualizar el `docker-compose-prod.yml` de SGOC-NG. En él sera necesario modificar o añadir la linea que monte el volumen sobre `/home/sgoc/sgoc-docs`
408  
409  ```
410  volumes:
411  - "./:/home/sgoc/sgoc"
412  - "gpg:${GPG_HOMEDIR}"
413  - "/mnt/samba/:/home/sgoc/sgoc-docs"
414  ```
415      
416      
417  4. Para que el nuevo punto de montaje surta efecto, es necesario reiniciar el contenedor.
418  
419  ```bash
420  cd /home/sgoc/sgoc/ && docker compose down && docker compose up -d
421  ```
422  
423  
424  ### Procedimiento para utilizar una ubicación local para los documentos en lugar del NAS
425  
426  Para usar una ubicación local para almacenar los documentos en lugar del NAS, siga estos pasos:
427  
428  1. Copie el contenido de la carpeta montada en `/mnt/samba`.
429  2. Pegue el contenido en una carpeta local de la nueva máquina.
430  3. Modifique la configuración de **Laravel** en `config/filesystems.php`, cambiando el valor de la clave `disks.local.root` (línea 35) para especificar la ruta completa donde se encuentran los documentos. Se recomienda hacer copia de seguridad del fichero o de la linea modificada.
431  4. Finalmente, recargue la configuración para aplicar los cambios con `php artisan o:c` desde dentro del contenedor.
432  
433  ### Apagado y encendido seguro de la aplicación usando ESXI
434  
435  #### Proceso de apagado
436  
437  1. Pausaremos las maquinas desde el ESXi y procederemos al apagador de éstas.
438  2. Apagaremos el NAS de forma segura.
439      
440  
441  #### Proceso de encendido
442  
443  1. Encenderemos primero el NAS y esperaremos a que esté totalmente operativo
444  2. Volvemos a encender las maquinas desde el ESXi quitando el estado de PAUSA.
445  #### Docker
446  
447  En caso de querer pausar las máquinas desde docker directamente podremos hacer uso de los siguientes comandos para SGOC-NG, INBOX y MySQL :
448  
449  ```bash
450  docker compose stop
451  docker compose start
452  ```
453  
454  **Nota**: es posible configurar docker para que lance **ciertos** contenedores tras reiniciar la máquina de manera completa (En tal caso tener cuidado con el orden de reinicio, puede ser necesario comprobar si se inicia antes o después del mount de fstab)
455  
456  
457  ### Modificación del texto y traducciones
458  
459  Es posible editar el texto que se muestra en la interfaz de la aplicación accediendo a los ficheros de traducción situados en el directorio `lang` de SGOC-NG o INBOX.
460  
461  Todos los ficheros siguen el siguiente formato:
462  
463  ```php
464  <?php
465  return [
466  'referencia1' => [
467  		'referencia2' => 'texto modificable'
468  	] 
469  ];
470  ```
471  
472  ### Creación de endpoint para uso interno
473  
474  Véase https://laravel.com/docs/9.x/routing para entender como funciona Laravel y la creación de Controladores y Endpoints.
475  
476  **Importante.** Se recomienda que cualquier modificación al código se realice en un entorno de pruebas apartado del entorno de producción. 
477  
478  ### Envío de traza de errores
479  
480  Tanto SGOC-NG como SGOC-INBOX mantienen un fichero de log para errores en `storage/logs/laravel.log`, dentro de sus respectivos directorios de aplicación.
481  
482  Adjunte un fragmento de la traza, reduciendo por hora, o adjunte el fichero completo en un correo o bajo un nuevo Issue en [Linear](https://linear.app/jtsec/team/CAB/active). Es importante que junto a la traza se describa los pasos realizados para que el equipo de desarrollo trate de producir el problema.
483  
484  ### Despliegue de parches de código
485  
486  En ocasiones para evitar re-desplegar todo el sistema, el equipo de desarrollo enviará solo el código actualizado.
487  
488  Utilizando WinSCP en la carpeta destino, podremos copiar solo los ficheros modificados.
489  
490  Es importante al hacerlo evitar modificar o borrar los siguientes ficheros, a menos que sea de manera consciente e intencionada:
491  - El certificado de firma del OC (.p12)
492  - .env
493  - deploy/certs/
494  - node_modules/
495  
496  ### Despliegue de certificados SSL
497  
498  Sustituir los 2 archivos en la ruta `deploy/certs/` en la máquina de SGOC-NG.
499  
500  - fullchain.pem
501  - privkey.pem
502      
503  Una vez copiados, hay que reiniciar docker para que se copien los nuevos certificados y se apliquen. Reinicie desde la carpeta con el código de SGOC.
504  
505  ```bash
506  docker compose down && docker compose up -d
507  ```
508  
509  Una vez hecho esto se podrá acceder a SGOC-NG utilizando HTTPS con los nuevos SSL.
510  
511  ### Recargar configuración
512  
513  ```bash
514  php artisan o:c
515  ```
516  
517  ## Nota: Contraseñas configuradas
518  
519  - /etc/fstab, En este fichero se encuentra el usuario y la clave del NAS o del dispositivo montado
520      
521  - En el .env de las aplicaciones (SGOC y SGOC-INBOX) están parametrizados todas las claves tales como: MySQL, SFTP, P12, INBOX API KEY, SGOC API KEY
522      
523  - MYSQL: Se debe cambiar la contraseña del usuario en instancia donde se esté ejecutando la base de datos. Una vez cambiada la clave, ésta deberá ser actualizada en el .env bajo la key DB_PASSWORD
524      
525  - SFTP: Esta clave debe cambiarse dentro del .env bajo la key SFTP_PASS. Una vez modificada la clave hay que reiniciar la instancia de docker para que surta efecto.
526      
527  - P12: Aqui solo hay que modificar la clave en el .env bajo la key P12_PASSWORD, si se modifica el fichero .p12 será necesario actualizar la configuración, su ruta y su contraseña.
528      
529  - INBOX & SGOC API KEY: Estas claves son las que usamos en la aplicación para el intercambio de datos mediante API (ojo, no confundir con documentos, esto es mediante SFTP). Para cambiar estas claves se realizará directamente en el .env y luego se lanzará el comando `php artisan o:c`