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
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)
– ‘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
$> 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
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
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