OrfeoNG RC2 desde fuentes

Descripción

Cómo paso de descargar los fuentes del aplicativo a tener una copia funcional.

Prerrequisitos

Arrancamos con un Kuine-LAMP v5 actualizado

Versión de  php 7.3 +

Habilitar el módulo de escritura de apache y reiniciar el servicio

$> sudo a2enmod rewrite
$> sudo service apache2 restart

Para algunas versiones de Kuine, apache no tiene permisos de editar su archivo de configuración mediante el comando anterior, por lo que se debe agregar un archivo personalizado /etc/apache2/confenable/orfeong.conf que se debe copiar de ng_backend/api/documentacion/ofeong.apache

Instalación de Backend Se necesita montar git, composer

$> apt-get install git composer curl

Composer recomienda no hacer nada como root, entonces lo que vamos a hacer, es cambiar los permisos a /var/www/html al usuario admin:nogroup para trabajar de ahora en adelante como admin

$> chown -R admin:nogroup /var/www/html

Descargue los fuentes

git config –global http.sslVerify false

git clone https://aruba.skinatech.com/Orfeo-NG/ng_backend

ng_frontend
ng_sockets

git checkout jmgamez

Prepare los soportes del programa

1. Crear la base de datos y usuario

* MySQL – MariaDB

mysql -u root

MariaDB [(none)]> create database orfeong_db;
Query OK, 1 row affected (0.031 sec)

MariaDB [(none)]> grant all on orfeong_db.* to orfeong_usr@localhost identified by ‘aeCh7zu1Oova0oe2esio’;
Query OK, 0 rows affected (0.125 sec)

En caso que no lo deje hacer lo anterior, primero cree el usuario y luego asigne los permisos

MariaDB [(none)]> create user orfeong_usr@localhost identified by ‘new_password’;
Query OK, 1 row affected (0.031 sec)

Hay un script en ng_backend/api/documentacion/base_mariadb.sql

$> mysql -p -u orfeong_usr orfeong_db < ./api/documentacion/mariadb/estructura.sql

Y agregue los datos

$> mysql -p -u orfeong_usr orfeong_db < ./api/documentacion/mariadb/datos_minimos.sql     y puede agregar los otros datos_adicionales_para_pruebas.sql

$** Aqui para MySQL – MariaDB .. aplique la BD adecuada

* PGSQL


* ORACLE DB

No olvide montar la extensión para Oracle OCI8 (php-oci8 y php-dbo).. Ver el wiki de Oracle DB

También revise las pruebas de diferentes bases de datos AQUI


*** recordar que antes conectarse ejecute export NLS_LANG=.AL32UTF8


* SQL SERVER


2. Escogencia de su servidor de correo

AQUI DEBE SABER QUE MTA va a usar para sacar alertas


Instalación del Backend

1. Descargue el backend del repositorio

$> git clone https://aruba.skinatech.com/Orfeo-NG/ng_backend.git

Ingrese su usuario y contraseña para descargar

2 Instalar los paquetes de terceros mediante composer

Cámbiese a la carpeta ng_backend e instale los plugins necesarios para Yii2

Puede revisar la guía en https://www.yiiframework.com/doc/guide/2.0/es/start-installation

$> composer --version

$> composer global require "fxp/composer-asset-plugin:^1.4.1"    (no funciona con => 7.4 )

** todas las restricciones de kuine joden  (/etc/php/7.4/cli/php.ini)
open_basedir
allow_url_open
disable_functions *exec* curl* proc_open

habilite extension curl

Cámbiese al directorio y ejecute

$> composer install

Aquí tenemos varias alertas de paquetes abandonados .. resolver

Package codeception/base is abandoned, you should avoid using it. No replacement was suggested.
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.

Ignore estas alertas

3 Inicie el backend de YII

En ese mismo directorio, ejecute el inicio de Yii con

$> php init

Seleccionar 0 ó 1 de acuerdo al entorno que se desee utilizar:

$> Yii Application Initialization Tool v1.0
Which environment do you want the application to be initialized in?

[0] Development
[1] Production

Your choice [0-1, or "q" to quit]

Escribir yes y pulsar la tecla Enter para confirmar el paso:

Initialize the application under ‘Development’ environment? [yes|no] yes

Y listo ..

OJO con los directorios en que debe escribir .. OJO ** Protejalos

chmod 0777 api/runtime
chmod 0777 api/web/assets
chmod 0777 backend/runtime
chmod 0777 backend/web/assets
chmod 0777 console/runtime
chmod 0777 frontend/runtime
chmod 0777 frontend/web/assets
chmod 0755 yii

Hemos tenido problemas con el api/runtime

chown -R www-data:www-data cache debug logs mpdf

4. Afinar los archivos del backend

Yii necesita de archivos de configuración y parámetros para poder conectarse con bases de datos, correos, entre otros los cuales no se encuentran agregados en el repositorio por temas de seguridad de contraseñas.

Hay archivos con la extensión .dist de los cuales se debe crear una copia con el mismo nombre exceptuando la extensión .dist y configurar las contraseñas de acceso según el ambiente con el que se desea trabajar

api/web/index.php

Sobrescriba a partir del archivo de ejemplo: /api/web/index.php.dist en la ruta /api/web/

$> cp index.php.dist index.php

Confirmar que las variables de entorno se encuentren correctamente configuradas de acuerdo al entorno con el se esté trabajando [desarrollo | producción]

defined('YII_DEBUG') or define('YII_DEBUG', true); // [true | false] ** Debe ser false en produccion
defined('YII_ENV') or define('YII_ENV', 'dev'); // [dev | prod]

$** OJO que Yii no hace esto bien. Si lo deja en produccion no hay ningun mensaje de debug

common/config/main-local.php

Sobreescriba a partir del archivo de ejemplo: /common/config/main-local.php.dist en la ruta /common/config/

$> cp main-local.php.dist main-local.php

Nota: En este se deben configurar las credenciales de la conexión a base de datos y el enví­o de correos que se configuró anteriormente

EJM:

‘db’ => [
‘class’ => ‘yii\db\Connection’,
‘dsn’ => ‘MySQL – MariaDB:host=127.0.0.1;dbname=orfeong_db’,
‘username’ => ‘orfeong_usr’,
‘password’ => ‘aeCh7zu1Oova0oe2esio’,
‘charset’ => ‘utf8’,
],

common/config/params-local.php

$> cp params-local.php.dist params-local.php

Si no se puede cambiar su configuración .. para que lo tengo aquí .. !!  ??

api/config/params.php

En las implementaciones comerciales, es decir proyectos implementados por nosotros se debe poner orfeoNgExpress en false

orfeoNgExpress => false,

api/config/params-local.php

 

$> cp params-local.php.dist params-local.php

Asegure que los valores son los correctos

llaveAES: cambien la llave de AES por un larga .. EJM: pwgen -y 30 (ésta tiene que estar en el front también)
debugAES : // [TRUE,FALSE]
ipServer: Es la dirección publica del aplicativo. (Esto es usado para las notificaciones con Link .. para que pueda entrar)

ejm: ‘http://demong1.skinatech.com/orfeo-ng/#/’,              ********* OJO .. termina en /

— puede ser https pero si escoge ir por SSL .. entonces todo debe ser https hasta los sockets

urlBaseApiPublic: La ruta de la pagina publica de PQRs
ejm: ‘http://demong1.skinatech.com/ng_backend/frontend/web/’, //Ruta de página pública

debugEmail: Es para etapa de desarrollo .. donde recibe todas las notificaciones.

Conexión a la autenticación externa con protocolo LDAP (LDAP o AD) los parámetros son estándares y reconocidos (ojo con el SSL del AD)

– ‘ldapServer‘ => ‘192.168.69.217’,
– ‘cadenaBusqLDAP‘ => ‘ou=People,o=skinatech,dc=com’,
– ‘campoBusqLDAP‘ => ‘uid’,
– ‘adminLDAP‘ => ‘cn=Manager,dc=skinatech,dc=com’,
– ‘paswLDAP‘ => ‘agh0la$p8U’,

Usuario y clave de la página pública (Usuario Anónimo, utilizado para login automático)

– ‘userPublicPage => ‘anonimo’,

– ‘passwordPublicPage => ‘4n0N1m0$’,

Por último el tipo de BD

motorDB: Motor utilizado para la basede datos principal: [‘MySQL – MariaDB’, ‘POSTGRESQL’, ‘MSSQL’, ‘ORACLE’]

– Comente lo que no necesita

NOTA: Lo que está common son parámetros de toda la aplicación mientras que los del api solo sirven para el backend.

5. Crear directorios para almacenamiento de archivos de la aplicación

En el mismo directorio de backend, se deben crear las siguientes carpetas donde se almacenarán los archivos generados por la aplicación.

mkdir api/web/trd_formats  api/web/tmp_mail  api/web/bodega

y asignarle permisos 775 con permisos de apache

$> cd api/web/
$> chown www-data:www-data ----->
$> chmod 755 actas/ cuadro_documental/ documentos/ plantillas/ tmp_docs/ tmp_masiva/ user_formats/ usuarios/ trd_formats/ tmp_mail/ bodega/ gestion_archivo/

** Esto toca corregirlo eventualmente porque por ahora lo parchamos con Apache, pero no es presentable y es una vulnerabilidad de seguridad

Instalación de Sockets Server

La documentación para instalar nodejs

https://github.com/nodesource/distributions/blob/master/README.md

Por ejemplo para instalar la versión 12 en Debian 10

$> sudo su - 
$> curl -fsSL https://deb.nodesource.com/setup_12.x | bash -

$> sudo apt-get install -y nodejs

https://github.com/nodesource/distributions/blob/master/README.md

Y monte el angular cli (en donde o como que usuario)

$> sudo npm install -g @angular/cli@8 (para version angular 8 .. poner @8)

$> sudo ng version

     _                      _                 ____ _     ___
    / \   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
   / △ \ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
  / ___ \| | | | (_| | |_| | | (_| | |      | |___| |___ | |
 /_/   \_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
                |___/
    

Angular CLI: 8.3.29
Node: 12.22.1
OS: linux x64
Angular: 
... 

Package                      Version
------------------------------------------------------
@angular-devkit/architect    0.803.29
@angular-devkit/core         8.3.29
@angular-devkit/schematics   8.3.29
@schematics/angular          8.3.29
@schematics/update           0.803.29
rxjs                         6.4.0



1. Descargue el sockets del repositorio

$> git clone https://aruba.skinatech.com/Orfeo-NG/ng_sockets.git

y en el directorio creado corra

$> npm install

para instalar todas las dependencias

2. Active el Servicio

2.1 Instalación

Pruebe el servicio de angular para que todo este bien

$> npm run dev
y ahora mándelo a background y para producción

$> npm start &> /dev/null &

Pruebe que el puerto esta abierto

$> telnet localhost 3005

Es importante verificar que este puerto también está disponible desde los clientes (o sea, desde afuera)

firewall-cmd  –zone=external –permanent –add-port=3005/tcp
firewall-cmd  –reload

3. Agregue un servicio al arranque

Los pasos a seguir del proceso anterior:

$> sudo su
$> vim /etc/systemd/system/ng_sockets.service

Agregue el siguiente script

[Unit]
Description=OrfeoNG Sockets
Documentation=http://www.orfeolibre.org
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
User=admin
Group=nogroup
WorkingDirectory=/var/www/html/ng_sockets
ExecStart=/usr/bin/npm start
Restart=on-abort
StartLimitInterval=60
StartLimitBurst=10

[Install]
WantedBy=multi-user.target

Incluirlo en la secuencia de arranque

$> sudo systemctl daemon-reload
$> sudo systemctl enable ng_sockets.service
$> sudo systemctl start ng_sockets.service

Verifique que esta corriendo con

$> sudo systemctl status ng_sockets.service

2.1. Provea el tunel de SSL

Siga este howto Stunnel –>
2.2 Evite que se caiga con Monit

En /etc/mont/conf-available/ng_sockets

set daemon 60

check host ng_sockets with address 127.0.0.1
start program = «/usr/bin/systemctl start ng_sockets.service»
stop program = «/usr/bin/systemctl stop ng_sockets.service»
if failed port 3005 then restart
if 5 restarts within 5 cycles then timeout

Instalación de FrontEnd

1. Descargue el frontend del repositorio

$> git clone https://aruba.skinatech.com/Orfeo-NG/ng_frontend.git

y en el directorio creado ng_frontend corra

$> npm install

para instalara todos las dependencias

OJO: Esto no debe existir … found 982 vulnerabilities (938 low, 9 moderate, 35 high)

Verifique como quedo

$> ng version

_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
/ â–³ \ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
/ ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | |
/_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
|___/


Angular CLI: 8.0.1
Node: 12.20.2
OS: linux x64
Angular: 8.0.0
... animations, cdk, common, compiler, compiler-cli, core, forms
... material, platform-browser, platform-browser-dynamic
... platform-server, router

Package Version
------------------------------------------------------------
@angular-devkit/architect 0.803.17
@angular-devkit/build-angular 0.803.9
@angular-devkit/build-optimizer 0.803.9
@angular-devkit/build-webpack 0.803.9
@angular-devkit/core 8.3.17
@angular-devkit/schematics 8.3.17
@angular/cli 8.0.1
@angular/http 7.2.15
@angular/material-moment-adapter 8.2.3
@ngtools/webpack 8.3.9
@schematics/angular 8.3.17
@schematics/update 0.803.17
rxjs 6.5.2
typescript 3.4.5
webpack 4.39.2

 

2. Edite los archivos de configuración

En ng_frontend/src/environments toca editar environment.prod.ts y el environment.ts

$> cp environment.ts.dist environment.ts   (para devel )

$> cp environment.prod.ts.dist environment.prod.ts (para produccion)
$> ln -s environment.prod.ts environment.ts  (necesita ambos iguales)  **

Cambie los servidores

apiUrl: ‘http://demong1.skinatech.com/ng_backend/api/web/’,
frontUrl: ‘http://demong1.skinatech.com/orfeo-ng/’,
SOCKET_ENDPOINT: ‘http://demong1.skinatech.com:3005’,

En las implementaciones comerciales, es decir proyectos implementados por nosotros se debe poner orfeoNgExpress en false

orfeoNgExpress: false

llaveAES: ‘aegoh3quai3Aijum7cae0theifo}uv’, (esta es la misma que coloco en ng_backend/api/config/params-local.php)

captchaSiteKey: ‘6Lc8_d4UAAAAANK-6A3w_lP6Crr6BJzT9ldbK_iO’, (para el uso de recaptcha de google .. obligatorio)

Los hash no deberian cambiar  ??

3. Pruebe que funciona local

$> ng serve –host 0.0.0.0

Debe mostrar compiling … !!! y no ningún error

4. Construya el distribuible para producción

$> ng build –prod

Esto se demora arto y toca ponerle memoria (4G min) para que lo complete además .. es bueno

export NODE_OPTIONS=»–max-old-space-size=3072″

5. Ubicar carpeta generada de la aplicación

Luego de ejecutar el comando anterior, se debe ubicar la carpeta «orfeo-ng» generada en la ruta «ng_frontend/dist/orfeo-ng» y moverla a la ruta base del servidor «/var/www/html» para que pueda ser accedida desde el navegador

https://192.168.8.27/orfeo-ng

6. Verifique que el firewall local le permite

firewall-cmd –zone=external –list-all

Deben aparecer los puertos, si no .. toca agregarlos

firewall-cmd –zone=external –permanent –add-service=http
firewall-cmd –zone=external –permanent –add-port=3005/tcp
firewall-cmd –reload

Trucos

 

Problemas

1. En directorios no estándar (userdir) se necesita PUT

Hay que poner en también la opción de PUT

Require method GET POST PUT OPTIONS

 

2. Al hacer npm install hay muchas vulnerabildades reportadas

found 962 vulnerabilities (938 low, 7 moderate, 17 high)
run `npm audit fix` to fix them, or `npm audit` for details

Esto usualmente es causado por paquetes obsoletos. Puede arreglarlo a las manos con

$> npm audit fix
o
$> npm audit fix –force

Puede revisar la info extendida con

$> npm audit

Al final pueden quedar problemas con paquetes obsoletos que toca remover .. y parcharlo con codigo filtrando las entradas o algo asi

** OJO esto pude upgradear la version de angular cli y ser incompatible

3. Hay problemas con la version de Angular – CLI

Option «extractCss» is deprecated: Deprecated since version 11.0. No longer required to disable CSS extraction for HMR.
This version of CLI is only compatible with Angular versions ^11.0.0-next || >=11.0.0 <12.0.0,
but Angular version 8.0.0 was found instead.

Please visit the link below to find instructions on how to update Angular.
https://update.angular.io/

4. FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed – JavaScript heap out of memory

Tene problemas con la configuracion de NODE

export NODE_OPTIONS=»–max-old-space-size=3072″

5. No muestra los fonts

Esto suele ser un URL malo. Una forma de averigurlo es abrir el debugger del navegador y en la pestaña de navegacion ver los URL perdidos

Nos ocurrio con el environment.prod.ts que decia

frontUrl: ‘http://demong1.skinatech.com/ng_frontend/’,

y debia decir

frontUrl: ‘http://demong1.skinatech.com/orfeo-ng/’,

6. «Call to a member function validateCsrfToken() on string»

En algunos servidores dependiendo de la versión de php instalada, la librería descargada por composer yiisoft/yii2 genera este error, «Call to a member function validateCsrfToken() on string»
Para esto, se colocó un archivo comprimido en la base del repositorio de backend llamado «yii2.tar.gz» el cual se debe descomprimir y mover la carpeta a la ruta «vendor/yiisoft/»

Usuario vencido

[5:07 p. m., 21/9/2021] Jenny Maritza Gamez: auth_key = lbFLavEgSFKrr57N5sBgMh2J-8Ecwc32
[5:07 p. m., 21/9/2021] Jenny Maritza Gamez: password_hash = $2y$13$0WsazEUxjZ2ldzqZuI/FDegLw2DfJIR8ng8Zagz.rNsMgk0f4UmIq
[5:07 p. m., 21/9/2021] Jenny Maritza Gamez: status = 10
[5:07 p. m., 21/9/2021] Jenny Maritza Gamez: created_at = 1620256240
[5:07 p. m., 21/9/2021] Jenny Maritza Gamez: update_at = 1631822016
[5:07 p. m., 21/9/2021] Jenny Maritza Gamez: ahora en la tabla de userhistorypassword
[5:07 p. m., 21/9/2021] Jenny Maritza Gamez: esto:
[5:07 p. m., 21/9/2021] Jenny Maritza Gamez: en ti userid agrega este hash
[5:07 p. m., 21/9/2021] Jenny Maritza Gamez: $2y$13$AyFpy6MidDvfYnpmWoNpCeuW/EC8Gwu4km59Sdm4O5M2mmYgJRY9.
[5:07 p. m., 21/9/2021] Jenny Maritza Gamez: y en creación user history….
[5:07 p. m., 21/9/2021] Jenny Maritza Gamez: 2026-07-31 19:44:21
[5:07 p. m., 21/9/2021] Jenny Maritza Gamez: Hacer los pasos que acabo de enviar
[5:08 p. m., 21/9/2021] Jenny Maritza Gamez: Esto en la tabla usuarios, el usuario de soporte

7. Sale mal la interfaz …  (FINGERPRINT Login)

En ambientes super restringidos, los clientes no tiene acceso a google y ciertos dominios necesarios. Entonces toca abrirles a los usuarios acceso a

fonts.googleapis.com
fonts.gstatic.com
maxcdn.bootstrapcdn.com
www.google.com
www.gstatic.com
content-autofill.googleapis.com
update.googleapis.com

8. Error de permisos con APPARMOR

ln -s /etc/apparmor.d/usr.lib.libreoffice.program.soffice.bin /etc/apparmor.d/disable/
ln -s /etc/apparmor.d/usr.lib.libreoffice.program.xpdfimport /etc/apparmor.d/disable/
ln -s /etc/apparmor.d/usr.lib.libreoffice.program.senddoc /etc/apparmor.d/disable/
apparmor_status
cat /sys/kernel/security/apparmor/profiles | grep libreoff
apparmor_parser -R /etc/apparmor.d/usr.lib.libreoffice.program.soffice.bin
apparmor_parser -R /etc/apparmor.d/usr.lib.libreoffice.program.xpdfimport
apparmor_parser -R /etc/apparmor.d/usr.lib.libreoffice.program.senddoc

9. Error de conexión

El error de conexión lo pueden generar varias cosas. En esencia es comunicación con el Bakend entonces revise

  • Que el ng_sockets este arriba y que el puerto esta abierto y que corresponda con la dirección que está en el front
  • La configuración de la Base de datos. revise los parámetros de la BD y si tiene conexión
  • Verifique que la configuración en ng_backend/api/config/params-local tiene las direcciones correctas de acceso al API
  • Las llaves AES de ciframiento entre el front y el back deben ser iguales

 

10. Activar el debug para entender errores de backend

Cuando el servidor genera un error de conexión, se debe revisar la consola del navegador, para evidenciar el error que se presenta, en caso de que indique «Error interno del servidor», se debe activar el debug

  • En el archivo ng_backend/api/web/index.php
  • La configuración de la Base de datos. revise los parámetros de la BD y si tiene conexión
  • Verfique que la configuración en ng_backend/api/config/params-local tiene las direcciones correctas de acceso al API
  • Las llaves AES de ciframiento entre el front y el back deben ser iguales

 

Referencias

– NuevaG21%

FIN


Advertencia

Este documento es privado y es de u so exclusivo de sus autores y de SKINA TECH. Cualquier uso sin una autorización escrita es contra la ley de derechos de autor y de propiedad intelectual, y será motivo de una acción legal.


 

==============================================================
25-Septiembre-2020 Elvis Valera V1.1