Cambiando configuración a archivos .env

parent 71ea3abd
# GENERAL
# Puerto que usará la aplicación
PORT=3000
# DATABASE
DB_NAME=postgres
DB_USER=postgres
DB_PASS=postgres
DB_HOST=localhost
DB_DIALECT=postgres
DB_TIMEZONE=America/La_Paz
# MAIL SMTP (Opcional)
MAIL_SENDER=info@midominio.gob.bo
MAIL_HOST=smtp.midominio.gob.bo
MAIL_PORT=587
MAIL_SECURE=false
MAIL_IGNORE_TLS=false
MAIL_TLS_REJECT_UNAUTHORIZED=false
# Solo si el servidor SMTP lo requiere
MAIL_AUTH_USER=unusuario@midominio.gob.bo 
MAIL_AUTH_PASS=password 
# LOGS
# ¿Dónde guardar los logs?
# - database: Guardar en la base de datos (se usa db.js para acceder)
# - filesystem: Guardar en sistema de archivos
LOG_STORAGE=database
# Las siguientes opciones solo se toman en cuenta si LOG_STORAGE=filesystem
# directorio con los logs
LOG_OUTPUT_DIRECTORY=./logs
# nombre de archivo de logs
LOG_OUTPUT_FILENAME=logs.log
# formato de logs
LOG_FORMAT=combined
# nivel de verbosidad, posibles: error, info, warning, debug
LOG_LEVEL=info
......@@ -4,10 +4,7 @@ yarn-error.log
npm-debug.log
package-lock.json
alias.sh
src/common/config/db.js
src/common/config/mail.js
src/common/config/openid.js
src/common/config/logs.js
src/common/lib/event-bus
logs/
......@@ -19,3 +16,8 @@ deploy/roles/frontend/files/base-backend
*~
\#*\#
.\#*
.env
.env.local
.env.development
.env.production
\ No newline at end of file
......@@ -9,34 +9,16 @@ Ver [SERVER.md](SERVER.md)
1. Clonar el código fuente desde el repositorio.
```sh
$ git clone https://gitlab.agetic.gob.bo/agetic/base-backend.git
$ git clone https://gitlab.softwarelibre.gob.bo/agetic/agetic-aplicacion-base/base-backend.git
```
> Es posible que al descargar el proyecto con HTTPs, muestre siguiente error:
> ```sh
> Cloning into 'nombre-del-proyecto'...
> fatal: unable to access 'https://url-del-proyecto.git/': server certificate verification >failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
> ```
> Configurar lo siguiente e intentar nuevamente la clonación:
> ```sh
> git config --global http.sslverify false
> ```
2. Ingresar a la carpeta.
```sh
$ cd base-backend
```
3. Verificar que se encuentra en la rama master o develop.
```sh
$ git branch
```
4. Instalar las dependencias de paquetes npm
3. Instalar las dependencias de paquetes npm
```sh
$ npm install
......@@ -47,13 +29,48 @@ $ npm install
1. Copiar archivos de configuración y modificarlos según necesidad.
```sh
$ cp src/common/config/db.js.sample src/common/config/db.js
$ cp src/common/config/mail.js.sample src/common/config/mail.js
$ cp .env.sample .env
$ cp src/common/config/openid.js.sample src/common/config/openid.js
$ cp src/common/config/logs.js.sample src/common/config/logs.js
```
2. Si se usa ciudadanía digital, configurar URL, client, client_params `nano src/common/config/openid.js`
2. Configurar el acceso a la base de datos en el archivo `.env`
```sh
# DATABASE
DB_NAME=postgres
DB_USER=postgres
DB_PASS=postgres
DB_HOST=localhost
DB_DIALECT=postgres
DB_TIMEZONE=America/La_Paz
```
3. Configurar el envío de correo electrónico en el archivo `.env` si usará un servidor SMTP *(Opcional)*
```sh
# MAIL SMTP
MAIL_SENDER=info@midominio.gob.bo
MAIL_HOST=smtp.midominio.gob.bo
MAIL_PORT=587
MAIL_SECURE=false
MAIL_IGNORE_TLS=false
MAIL_AUTH_USER=unusuario@midominio.gob.bo
MAIL_AUTH_PASS=password
MAIL_TLS_REJECT_UNAUTHORIZED=false
```
4. Configurar los logs del sistema en el archivo `.env`
```sh
# LOGS
LOG_STORAGE=database # database o filesystem
LOG_OUTPUT_DIRECTORY=./logs
LOG_OUTPUT_FILENAME=logs.log
LOG_FORMAT=combined
LOG_LEVEL=info
```
5. Si se usa ciudadanía digital, configurar URL, client, client_params `nano src/common/config/openid.js` *(Opcional)*
```js
const openid = {
......@@ -70,66 +87,9 @@ const openid = {
};
```
3. Configurar correo electrónico `nano src/common/config/mail.js` (opcional)
```js
const correoConfig = {
origen: process.env.EMAIL_SENDER || 'info@dominio.gob.bo',
host: process.env.EMAIL_HOST || 'smtp.dominio.gob.bo',
port: process.env.EMAIL_PORT || 587,
secure: false,
ignoreTLS: false,
auth: {
user: '<unusuario@dominio.gob.bo>',
pass: '<password>'
},
tls: {
rejectUnauthorized: false
},
logging: s => debug(s)
};
```
4. Configurar correo electrónico `nano src/common/config/db.js`
```js
const db = {
database: process.env.DB_NAME || 'proyecto',
username: process.env.DB_USER || 'usuario',
password: process.env.DB_PASS || 'usuario',
host: process.env.DB_HOST || 'localhost',
dialect: 'postgres',
timezone: 'America/La_Paz',
logging: s => debug(s)
};
```
5. Para configurar los logs del sistema `nano src/common/config/logs.js`
```js
const logsConfig = {
// Donde guardar los logs?
// - 'database': Guardar en la base de datos (se usa db.js para acceder)
// - 'filesystem': Guardar en sistema de archivos
storage: 'filesystem',
// Las siguientes opciones solo se toman en cuenta si storage = 'filesystem'
// para mostrar los logs tambien en la consola
console: process.env.NODE_ENV === 'production' ? false : true,
// directorio con los logs
outputDirectory: './logs',
// nombre de archivo de logs
outputFilename: 'logs.log',
// formato de logs
format: 'combined',
// nivel de verbosidad, posibles: error, info, warning, debug
level: 'info'
};
```
## Inicializar la base de datos
1. Crear una base de datos vacía con el nombre que definió en su conexión a la base de datos
1. Crear una base de datos vacía en su gestor de base de datos con la información que configuró en el archivo `.env`
2. Ejecutar lo siguiente para crear las tablas, esto eliminará las tablas y los datos de estas para reescribirlos.
......@@ -139,25 +99,25 @@ $ npm run setup
3. Ejecutar lo siguiente para poblar las tablas con datos iniciales.
### Para desarrollo
#### Para desarrollo
```sh
$ npm run seeders
```
### Para producción
#### Para producción
```sh
$ env NODE_ENV=production npm run seeders
```
> Los seeders ponen 123456 como contraseña de los usuarios.
> Los seeders ponen `123456` como contraseña de los usuarios.
## Iniciar el proyecto
### Para desarrollo
#### Para desarrollo
```sh
$ npm run dev
```
### Para producción con PM2
#### Para producción con PM2
Ejecutar esto dentro el directorio del proyecto:
```sh
$ pm2 start npm -- start --name "proyecto-api"
......
'use strict';
const debug = require('debug')('app:app');
require('dotenv').config();
const express = require('express');
const fileUpload = require('express-fileupload');
const bodyParser = require('body-parser');
......@@ -15,7 +16,7 @@ const ip = require('./lib/ip');
const { errors } = require('../common');
const api = require('./api');
const graphql = require('./graphql/server');
const port = process.env.PORT || 3000;
const port = process.env.PORT;
const app = express();
process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0;
......
......@@ -2,6 +2,4 @@ node_modules/
.vscode/
yarn-error.log
npm-debug.log
alias.sh
src/config/db.js
src/config/mail.js
\ No newline at end of file
alias.sh
\ No newline at end of file
'use strict';
const debug = require('debug')('app:db');
require('dotenv').config();
const db = {
database: process.env.DB_NAME || 'postgres',
username: process.env.DB_USER || 'postgres',
password: process.env.DB_PASS || 'postgres',
host: process.env.DB_HOST || 'localhost',
dialect: 'postgres',
timezone: 'America/La_Paz',
database: process.env.DB_NAME,
username: process.env.DB_USER,
password: process.env.DB_PASS,
host: process.env.DB_HOST,
dialect: process.env.DB_DIALECT,
timezone: process.env.DB_TIMEZONE,
logging: s => debug(s)
};
......
'use strict';
const debug = require('debug')('base-backend:logs');
require('dotenv').config();
const logsConfig = {
// Donde guardar los logs?
// - 'database': Guardar en la base de datos (se usa db.js para acceder)
// - 'filesystem': Guardar en sistema de archivos
storage: 'database',
storage: process.env.LOG_STORAGE,
// Las siguientes opciones solo se toman en cuenta si storage = 'filesystem'
// para mostrar los logs tambien en la consola
console: process.env.NODE_ENV === 'production' ? false : true,
console: process.env.NODE_ENV !== 'production',
// directorio con los logs
outputDirectory: './logs',
outputDirectory: process.env.LOG_OUTPUT_DIRECTORY,
// nombre de archivo de logs
outputFilename: 'logs.log',
outputFilename: process.env.LOG_OUTPUT_FILENAME,
// formato de logs
format: 'combined',
format: process.env.LOG_FORMAT,
// nivel de verbosidad, posibles: error, info, warning, debug
level: 'info'
level: process.env.LOG_LEVEL
};
module.exports = logsConfig;
\ No newline at end of file
module.exports = logsConfig;
......@@ -3,17 +3,17 @@
const debug = require('debug')('base-backend:correo');
const correoConfig = {
origen: process.env.EMAIL_SENDER || 'info@midominio.gob.bo',
host: process.env.EMAIL_HOST || 'smtp.midominio.gob.bo',
port: process.env.EMAIL_PORT || 587,
secure: false,
ignoreTLS: false,
origen: process.env.MAIL_SENDER,
host: process.env.MAIL_HOST,
port: process.env.MAIL_PORT,
secure: process.env.MAIL_SECURE,
ignoreTLS: process.env.MAIL_IGNORE_TLS,
auth: {
user: '<unusuario@midominio.gob.bo>', // Obligatorio para desarrollo
pass: '<password>' // Obligatorio para desarrollo
user: process.env.MAIL_AUTH_USER,
pass: process.env.MAIL_AUTH_PASS
},
tls: {
rejectUnauthorized: false
rejectUnauthorized: process.env.MAIL_TLS_REJECT_UNAUTHORIZED
},
logging: s => debug(s)
};
......
......@@ -26,7 +26,7 @@ module.exports = async function initDomain (settings = { iop: true }) {
let logs;
if (config.logs.storage === 'database') {
logs = await Logs(config.db).catch(errors.handleFatalError);
} else if(config.logs.storage === 'filesystem') {
} else if (config.logs.storage === 'filesystem') {
logs = await Logs({ logsConfig: config.logs }).catch(errors.handleFatalError);
}
......@@ -34,25 +34,25 @@ module.exports = async function initDomain (settings = { iop: true }) {
// Cargando Value Objects que se encuentran en la carpeta value-object
let valueObjects = util.loadClasses(path.join(__dirname, 'value-objects'),
{
exclude: ['index.js', 'ValueObject.js'],
// para excluir archivos por expresión regular
excludeRegex: [/[~|#]$/, /^(.#)/]
});
{
exclude: ['index.js', 'ValueObject.js'],
// para excluir archivos por expresión regular
excludeRegex: [/[~|#]$/, /^(.#)/]
});
// Cargando Validaciones en base a los ValueObjects
let validations = util.loadValidations(path.join(__dirname, 'value-objects'),
{
exclude: ['index.js', 'ValueObject.js'],
excludeRegex: [/[~|#]$/, /^(.#)/]
});
{
exclude: ['index.js', 'ValueObject.js'],
excludeRegex: [/[~|#]$/, /^(.#)/]
});
// Cargando todos los servicios que se encuentran en la carpeta services y en sus subcarpetas, adjuntando logs
let services = util.loadServices(path.join(__dirname, 'services'), repositories, valueObjects,
{
exclude: ['index.js', 'Service.js'],
excludeRegex: [/[~|#]$/, /^(.#)/]
}, logs);
{
exclude: ['index.js', 'Service.js'],
excludeRegex: [/[~|#]$/, /^(.#)/]
}, logs);
debug('Capa del dominio - Servicios cargados');
// Asignando value objects a los servicios
......
......@@ -21,15 +21,15 @@ module.exports = async function (config) {
timezone: 'America/La_Paz'
});
let sequelize = new Sequelize(config);
let sequelize = new Sequelize(config.database, config.username, config.password, config);
// Cargando todos los modelos que se encuentran en la carpeta models y en sus subcarpetas
let _models = util.loadModels(path.join(__dirname, 'models'), sequelize,
{
exclude: ['index.js'],
// para excluir archivos por expresión regular
excludeRegex: [/[~|#]$/, /^(.#)/]
});
{
exclude: ['index.js'],
// para excluir archivos por expresión regular
excludeRegex: [/[~|#]$/, /^(.#)/]
});
_models = util.convertLinealObject(_models);
// Cargando asociaciones entre las tablas
......
......@@ -10,12 +10,9 @@ let configSeeder = {
'host': config.db.host,
'seederStorage': 'sequelize',
'seederStorageTableName': 'sequelize_seeders',
'dialect': 'postgres',
'pool': {
'max': 15,
'min': 0,
'idle': 10000
}
'dialect': config.db.dialect,
'pool': config.db.pool,
'dialectOptions': config.db.dialectOptions
},
'production': {
'username': config.db.username,
......@@ -24,12 +21,9 @@ let configSeeder = {
'host': config.db.host,
'seederStorage': 'sequelize',
'seederStorageTableName': 'sequelize_seeders',
'dialect': 'postgres',
'pool': {
'max': 15,
'min': 0,
'idle': 10000
}
'dialect': config.db.dialect,
'pool': config.db.pool,
'dialectOptions': config.db.dialectOptions
}
};
......
......@@ -2,7 +2,6 @@
module.exports = `
<!doctype html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
......@@ -11,7 +10,7 @@ module.exports = `
<body style="font: 16px normal Arial, Helvetica, sans-serif; margin: 0; padding: 20px; background-color: #FAF7F9; color: #7e4e6e;">
<div class="container" style="margin: 0 auto; width: 100%; max-width: 640px; box-shadow: 0 0 20px 0 rgba(62, 28, 131, 0.1); background-color: #ffffff; border-radius: 3px;">
<div class="header" style="padding: 15px 20px; border-bottom: 1px solid #f5f5f5; text-align: center; color: #7e4e6e; border-top: 2px solid #7e4e6e;">
<h1 style="font-size: 20px; margin: 0;">Agetic</h1>
<h1 style="font-size: 20px; margin: 0;">App</h1>
</div>
<div class="main" style="padding: 15px 20px;">
<div>
......@@ -20,7 +19,7 @@ module.exports = `
<p style="margin: 50px 0 0; font-size: 12px; color: #999999; letter-spacing: 1px;">No responda a este correo electrónico</p>
</div>
<div class="footer" style="background-color: #7e4e6e; color: white; text-align: center; padding: 8px 10px;">
<small style="letter-spacing: 2px; font-size: 10px;">Agetic {year}</small>
<small style="letter-spacing: 2px; font-size: 10px;">App {year}</small>
</div>
</div>
</body>
......
......@@ -13,7 +13,7 @@ let items = [
{ nombre: 'URL_PORTAL', valor: `http://localhost:8080/#/`, label: 'URL del portal', descripcion: 'URL para acceder al portal' },
{ nombre: 'TIEMPO_BLOQUEO', valor: 10, label: 'Tiempo de bloqueo', descripcion: 'Tiempo cuando un usuario sea bloqueado en minutos' },
{ nombre: 'NRO_MAX_INTENTOS', valor: 3, label: 'Número máximo de intentos', descripcion: 'Número máximo de intentos que un usuario puede realizar el login' },
{ nombre: 'VALIDAR_SEGIP', valor: `SI`, label: 'Validar con el SEGIP', descripcion: 'Validar con el SEGIP en la importación de csv y el servicio web de pasajeros' }
{ nombre: 'VALIDAR_SEGIP', valor: `SI`, label: 'Validar con el SEGIP', descripcion: 'Validar con el SEGIP' }
];
// Asignando datos de log y timestamps a los datos
......
......@@ -41,10 +41,8 @@ async function setup () {
let sequelize = new Sequelize(configDB);
// Verificando conexión con la BD
await sequelize.authenticate();
// let res = await sequelize.query('TRUNCATE TABLE sequelize_seeders;')
let res = '';
try {
res = await sequelize.query('DELETE FROM sequelize_seeders;')
let res = await sequelize.query('DELETE FROM sequelize_seeders;');
console.info('Eliminando sequelize_seeders', res[1].rowCount);
} catch (error) {
console.error(error.message);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment