API con Node, Nest JS, base de datos Postgres y Front en Vue
- Creamos el droplet en Digital Ocean, escogemos la distribucion favorita. Escogemos credencial SSH por contraseña
- Copiamos la ip publica y luego abrimos la terminal y tipeamos el siguiente comando
ssh root@IP_PUBLICA
- Actualizamos la paqueteria de Ubuntu y luego instalamos postgre
apt update
Instalamos postgres junto con un paquete -contrib, que agrega algunas utilidades y funcionalidades adicionales
apt install postgresql postgresql-contrib
- Configuramos Postgres Entramos a postgres con el siguiente comando
-u postgres psql
Creamos el usuario y la clave, en este caso se llama 'admin', debe ser el mismo nombre que tienes configurado en la AP, en el archivo .env debe estar ese nombre.
CREATE USER admin PASSWORD 'admin123';
le damos permisos al usuario 'admin' con permisos de super usuario
ALTER ROLE admin WITH SUPERUSER;
creamos una base de datos con nombre 'name_db'
CREATE DATABASE name_db WITH OWNER admin;
GRANT ALL PRIVILEGES ON DATABASE name_db TO admin;
salimos de postgres
exit
- Instalamos Node, configurar PM2 y configurar controlador de versiones NVM
curl -sL https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.0/install.sh -o install_nvm.sh
bash install_nvm.sh
los archivos se deben recargar te puedes salir de ssh y luego vuelves a entrar, para ver si se instalo conrrectamanente.
nvm -v
Ahora se instala la version de nove que necesitamos, No instalar nodejs de la paquetria de ubuntu, porque va dar problemas con versiones.
cambia el numero 8, por la version que necesitas
nvm install 8
conocer la version de node o npm es el mismo comando, solo se cambia el nombre.
npm --version
PM2 es un manejador de procesos, utilizado para desplegar una aplicacion de Node.
npm install -g pm2
Para eliminar procesios de la interfaz de pm2, cambiar name por el nombre
pm2 delete name
Si se quieren eliminar todos
pm2 delete all
si quieres ver los logs
pm2 logs
si quieres borrar los logs
pm2 flush
Para correr el front
pm2 start npm --name "front" -- start
- Clonamos nuestro proyecto
Podemos crear una carpeta llamada 'api' o 'back' y dentro de esta es donde vamos a clonar nuestro repositorio. Lo mismo podemos hacer para el front, podemos crear una carpeta puede ser llamada 'front'. Ejmplo:
mkdir back
para entrar a la carpeta
cd back
luego vamos a la plataforma donde tenemos el proyecto buscamos la version a usar, quiza sea la rama master y copiamos la url
git clone URL_DEL_REPO
para salir de la carpeta back
cd ..
- Creamos el archivo .env Cada proyecto deberia tener un .env, para crear el archivo env
toch .env
para editar el archivo, hacemos uso del edito nano. Para asi pegar las variables de entorno y con la combinacion de teclas crtl + o procedemos a guardar.
nano .env
- Ejecutar Proyecto de Nest Js en Produccion si usamos Pm2, la cosa se pone diferente, pero dentro del archivo package.json esta el siguiente comando, pero para que s e mantenga corriendo debemos usar pm2, asi que ese comando quedaria invalido de esta forma.
"start:prod": "node dist/main"
Una vez aclarado lo anterior, procedemos a instalar Nest JS
npm i -g @nestjs/cli
nos dirijimos a nuestro poyecto e instalamos todas las dependecias. Debemos ubicarnos en el forlder donde esta el package.json
npm install
Para crear la carpeta dist, debemos ejecutar el comando.
nest build
Debemos crear el dist para cada microservicio, seguidamente de buld, pondremos el nombre del microservicio, ejemplo que el microservicio se llame users
nest build users
si tenemos varios microservicios, debemos ejecutar el siguiente comando con su respectivo nombre, tantas veces como microservicios se vayan a correr.
pm2 start dist/src/main.js --name <application_name>
Nota: si usas microservicios el comando anterior seguramente no te va funcionar, porque el archivo main no se encuentra en esa ruta, se encuentra en esta ruta dist/apps/gateway/main.js entonces el comando cambiaria por esto
pm2 start dist/apps/gateway/main.js --name <application_name>
Para que la aplicacion corra despues de Reiniciar el sistem hay que ejecutar estos comandos. Otra cosa curiosa es que en Digital Ocean tambien hay un boton para apagar y prender el Droplet
pm2 startup systemd
pm2 save
Para saber si todo esta corriendo bien podemos mirar los logs, con el siguiente comando
pm2 logs
Para listar lo que esta corriendo con pm2
pm2 list
Podemos parar y arrancar los procesos que se estan ejecutando con el id. Ejemplo: vamos a parar y volver arrarcar un proceso con id:0
pm2 stop 0
pm2 start 0
nos dirigimos a la carpeta dode tenemos clonado el repositorio del proyecto. y creamos la carpeta dist con el siguiente comando
npm run build