---
# System prepended metadata

title: Configuraciones para servidores Ubuntu 18

---

# Configuraciones para servidores Ubuntu 18

## MongoDB+CronTasks

```bash
# Agregamos llave de mongodb versión 4
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -

# Agregamos gestor de paquetes de mongodb versión 4
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list

# Agregamos al gestor de paquetes la versión 10 de NodeJS
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - 

# Actualizamos los paquetes de nuestro sistema operativo
sudo apt-get update -y

# Configuramos la zona horaria para México
sudo timedatectl set-timezone America/Mexico_City 

# Instalamos NodeJS
sudo apt install nodejs -y 

# Instalamos pm2
sudo npm install pm2 -g 

# Instalamos mongodb
sudo apt-get install -y mongodb-org

# Agregamos llave publica de Bitbucket  
ssh-keyscan -H bitbucket.org >> ~/.ssh/known_hosts

# Generamos una llave privada
ssh-keygen

# Obtener llave pública y registrarla en repositorio de Bitbucket.
# El registro de la llave es manual, es decir, 
# directamente en la plataforma de Bitbucket
cat ~/.ssh/id_rsa.pub
```

Una vez que tenemos lo anterior instalado, es necesario crear un usuario para la base de datos.

Para esto, ingresamos a nuestra base de datos con ayuda del comando `mongo`

Una vez adentro, agregamos un usuario nuevo escribiendo lo sigueinte. Ten en cuenta que deberás cambiar el valor de `<database>`, `<user>` y `<strongPassword>` por el que necesites.

```javascript
use admin

db.createUser(
  {
    user: "game-prod",
    pwd: "BG4Y5H$iT6",
    roles: [
       { role: "readWrite", db: "admin" }
    ]
  }
)
```

Después es necesario modificar el archivo de configuración de mongo:

```bash
sudo nano /etc/mongodb.conf 
```

```bash
...
# Modificamos el valor de bind_ip por 0.0.0.0
#bind_ip = 127.0.0.1
bind_ip = 0.0.0.0
...

...
# Descomentamos esta línea para activar la autenticación
auth = true
...
```

Por último, es necesario reiniar el servicio de mongodb

```bash
sudo service mongodb restart
```



## Api (App/Backoffice)

```bash
# Actualizamos los paquetes de nuestro sistema operativo
sudo apt-get update -y

# Configuramos la zona horaria para México
sudo timedatectl set-timezone America/Mexico_City 

# Agregamos al gestor de paquetes la versión 10 de NodeJS
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - 

# Instalamos NodeJS
sudo apt install nodejs -y 

# Instalamos pm2
sudo npm install pm2 -g 

# Agregamos llave publica de Bitbucket  
ssh-keyscan -H bitbucket.org >> ~/.ssh/known_hosts

# Generamos una llave privada
ssh-keygen

# Obtener llave pública y registrarla en repositorio de Bitbucket.
# El registro de la llave es manual, es decir, 
# directamente en la plataforma de Bitbucket
cat ~/.ssh/id_rsa.pub
```

## Backoffice

```bash
# Actualizamos los paquetes de nuestro sistema operativo
sudo apt-get update -y

# Configuramos la zona horaria para México
sudo timedatectl set-timezone America/Mexico_City 

# Agregamos al gestor de paquetes la versión 10 de NodeJS
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - 

# Instalamos NodeJS
sudo apt install nodejs -y 

# Instalamos nginx
sudo apt install -y nginx -y

# Agregamos llave publica de Bitbucket  
ssh-keyscan -H bitbucket.org >> ~/.ssh/known_hosts

# Generamos una llave privada
ssh-keygen

# Obtener llave pública y registrarla en repositorio de Bitbucket.
# El registro de la llave es manual, es decir, 
# directamente en la plataforma de Bitbucket
cat ~/.ssh/id_rsa.pub
```

Antes de realizar el despliegue de nuestro cliente, es necesario configurar nuestro servidor `nginx` 

```bash
sudo nano /etc/nginx/sites-enabled/default
```


```nginx

# Ubicamos el Nodo server y modificamos el valor
# de root por el path de nuestro build
server {
        listen 80 default_server;
        listen [::]:80 default_server;
        
        # root /var/www/html;
        root <new-path>;
        
        
        location / {
           
           # De igual form, dentro del nodo location
           # modificamos la variable try_files
           
           # try_files $uri $uri/ =404;
           try_files $uri $uri/ /index.html;
        }
```

Por último es necesario reiniciar el servicio de `nginx`

```bash
sudo service nginx restart
```


## Configurar memoria swap

Los siguientes comandos generán una partición de `1G` si deseas asignarle más espacio solo modifica el valor en el comando `sudo fallocate -l 1G /swapfile`

**Evita crear particiones que superen más del 20% de tu memoria RAM, es decir, si tu RAM es de 8GB la partición swap no debería ser mayor a 2G**

```shell
sudo fallocate -l 1G /swapfile

sudo chmod 600 /swapfile

sudo mkswap /swapfile

sudo swapon /swapfile

sudo swapon --show

sudo cp /etc/fstab /etc/fstab.bak

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

free -h
```

## Comando útiles de pm2

Listar procesos actuales
```
sudo pm2 list
```

Monitor de procesos
```
sudo pm2 monit 
```

Reiniciar un proceso a partir de un archivo de configuración
```
sudo pm2 restart <file>
```

Detener un proceso 
```
sudo pm2 stop <id|process name>
```

Iniciar un proceso a partir de un archivo de configuración
```
sudo pm2 start <file>
```

Eliminar un proceso
```
sudo pm2 delete <id|process name>
```

Ver log de proceso
```
sudo pm2 log <process name>
```


Borrar archivos de log
```
# Utilizando comandos de pm2
sudo pm2 flush <process name>

# O bien, podemos eliminarlos manualmente
sudo rm -rf ~/.pm2/logs/<process name>-*
```


```
db.getCollection('areas').drop( { writeConcern: { w: "majority" } } );
db.getCollection('campanias').drop( { writeConcern: { w: "majority" } } );
db.getCollection('categoriasConocimiento').drop( { writeConcern: { w: "majority" } } );
db.getCollection('desafiosEquipo').drop( { writeConcern: { w: "majority" } } );
db.getCollection('desafiosEquipoConcluidos').drop( { writeConcern: { w: "majority" } } );
db.getCollection('desafiosPersonales').drop( { writeConcern: { w: "majority" } } );
db.getCollection('devices').drop( { writeConcern: { w: "majority" } } );
db.getCollection('equipos').drop( { writeConcern: { w: "majority" } } );
db.getCollection('estadisticasCategoria').drop( { writeConcern: { w: "majority" } } );
db.getCollection('estadisticasDetallePregunta').drop( { writeConcern: { w: "majority" } } );
db.getCollection('estadisticasPregunta').drop( { writeConcern: { w: "majority" } } );
db.getCollection('insignaias').drop( { writeConcern: { w: "majority" } } );
db.getCollection('jugadores').drop( { writeConcern: { w: "majority" } } );
db.getCollection('preguntas').drop( { writeConcern: { w: "majority" } } );
db.getCollection('puntosCampania').drop( { writeConcern: { w: "majority" } } );
db.getCollection('retosEquipo').drop( { writeConcern: { w: "majority" } } );
db.getCollection('retosPersonales').drop( { writeConcern: { w: "majority" } } );
db.getCollection('sesionesInvalidas').drop( { writeConcern: { w: "majority" } } );




```

## Configuración de nginx

Servicios con Node
```
server {
        listen 8080 default_server;
        listen [::]:8080 default_server;

        server_name <<domain>>;

        location / {
                proxy_pass <<local address>>;
        }
}

```

Angular 

```
server {
    server_name <<domain>>;

    root <<path to site>>;

    location / {
        try_files $uri$args $uri$args/ /index.html;
    }

}
```