# 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; } } ```