Ir al contenido principal

Deploy de una app con Moleculer y React desde Docker



Buenos días blogueros, hoy vamos a ver como subir una aplicación con Moleculer como backend y React como frontend  desde Docker.

Lo primero que tendremos que hacer es instalar docker en nuestro servidor para ello tan solo tenemos que ejecutar los siguientes comandos:

En mi caso vamos a usar los de debian, pero en la documentación hay para otras distribuciones.

Docker

Primero actualizaremos el sistema:

$ sudo apt-get update

Luego instalaremos las dependencias necesarias para docker:

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg2 \
    software-properties-common

Añadimos una clave oficial de Docker:

$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

Comprobamos si se ha creado correctamente:

$ sudo apt-key fingerprint 0EBFCD88

Y añadimos a nuestro sources.list el repositorio de docker:

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"

Ahora tan solo instalamos los paquetes:

$ sudo apt-get install docker-ce docker-ce-cli containerd.io

Una vez instalado todo si hacemos un docker hello world podremos comprobar si se ha instalado correctamente:

$ sudo docker run hello-world

Ahora vamos a necesitar instalar una herramienta necesaria para ejecutar una imágen docker:

sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Ahora le damos permisos:

sudo chmod +x /usr/local/bin/docker-compose

Por último necesitaremos correr una imágen de nats ya en nuestro docker recien instalado.

docker run -p 4444:4444 nats -p 4444
Bien llegados a este paso ya tenemos todo lo necesario para correr nuestro docker con una imágen de nuestra aplicación.

En mi caso voy a descargarme un proyecto que tengo en Git.

Una vez en nuestro servidor vamos a crear tres archivos en la carpeta donde esté nuestro frontend y backend.

Uno de ellos será Dockerfile el cual tendrá el script para ejecutar todos los comandos necesarios para instalar y correr la aplicación, en mi caso sería algo tal que así:

FROM node:8

#ENV NODE_ENV=production

RUN mkdir /app
WORKDIR /app

COPY . .

RUN cd frontend && npm install && npm run build 

RUN cp -r frontend/build backend/build  

RUN npm config set unsafe-perm true

RUN cd backend/resources && npm install -g prisma && prisma generate

RUN cd backend && npm install

WORKDIR /app/backend

CMD ["npm", "start"]
Son simplemente comandos de bash, nada más, primero creamos la carpeta /app donde compiamos el frontend e instalamos npm y lo ejecutamos, luego copiamos la carpeta que crea con run build en el backend, instalamos prisma y generamos los esquemas, accedemos al backend, instalamos y hacemos un npm start.

El siguiente archivo que vamos a necesitar es docker-compose.env el cual tiene:


SERVICEDIR=services

PORT=4101

TRANSPORTER=nats://nats:4222

El único comando que nos interesa es PORT donde pondremos el puerto donde vayamos a ejecutar la aplicación y el de TRANSPORTER en el cual pondremos donde apunta nuestro servidor nats.
Y por último el archivo docker-compose.yml:

version: "3.0"

services:

  api:
    build:
      context: .
    image: conduit
    env_file: docker-compose.env
    environment:
      SERVICES: api
      PORT: 4101
    links:
      - nats
    depends_on:
      - nats
    labels:
      - "traefik.enable=true"   
      - "traefik.backend=api"
      - "traefik.port=4101"
      - "traefik.frontend.entryPoints=http"
      - "traefik.frontend.rule=PathPrefix:/"

  users:
    build:
      context: .
    image: conduit
    env_file: docker-compose.env
    environment:
      SERVICES: users
    links:
      - nats
    depends_on:
      - nats

  contact:
    build:
      context: .
    image: conduit
    env_file: docker-compose.env
    environment:
      SERVICES: contact
    links:
      - nats
    depends_on:
      - nats

  nats:
    image: nats
    ports:
      - "4222:4222"

  traefik:
    image: traefik
    command: --web --docker --docker.domain=docker.localhost --logLevel=INFO --docker.exposedbydefault=false
    ports:
      - "4101:80"
      - "3001:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /dev/null:/traefik.toml

Donde pondremos el puerto al que apuntaremos (el mismo que en el archivo docker-compose.env), los servicios que tengamos declarados en nuestra aplicación de Moleculer, el puerto donde tengamos el nats correindo y el Traefik el cual es una aplicación que distribuye las distintas peticiones de la aplicación.

Una vez tengamos todo configurado tan solo tendremos que ejecutar docker-compose up --build -d
dentro de la carpeta donde estén nuestros archivos de configuración de docker. Esperamos a que se monte la imágen i si accedemos a nuestra NUESTRA_IP:EL_PUERTO_SELECCIONADO, podremos ver nuestra aplicación corriendo ya en producción.


Comentarios

Entradas populares de este blog

Habilitando automáticamente HTTPS con Certbot con certificados de Let's Encrypt

En la entrada de hoy vamos a ver como hacer que nuestra página tenga un certificado Let's Encrypt, con tan solo cuatro comandos y así hacer que los usuarios de nuestra web pueden enviar sus datos  de forma segura con el protocolo https. Pero que es Let's Encrypt?? Simplemente es una iniciativa de software libre que ha creado una entidad de certificación gratuita, en pocas palabras, guarda nuestros datos identificativos autentificados por un organismo en un documento oficial de forma gratuita. Antes que nada necesitaremos, tener un VPS, que si no sabes como conseguirlo, aquí te dejo un post anterior donde lo explico. · Que VPS elegir? · Preparar nuestro VPS Una vez tengamos uno deberemos tener un host virtual donde se encuentre nuestra web, si no sabes como no te preocupes os lo dejo por aquí junto al post de como conseguir un nombre de dominio. · Configurar Virtual Host · Conseguir un nombre de dominio Ahora que ya tenemos todo lo necesario vamos a hacer más s...

VPS, que ofrecen y cual elegir

VPS , es un servidor físico, que se encuentra dividido en diferentes servidores virtuales. Esta partición permite a cada VPS trabajar para un cliente como si de una sola máquina se tratase, con su propio disco duro, memoria RAM y velocidad de transmisión, entre otros aspectos. Sin embargo, el servidor real es compartido con otros clientes del resto de VPS alojados en él. Precio RAM Espacio CPU Cores SO HOSTWINDS 8,99$ 1GB 30GB 1CPU Windows/Linux INMOTION HOSTING 27,00$ 4GB 75GB 2CPU Windows/Linux 000 WEBHOST Free -1GB 1GB No Linux OVH 2,99€ 2GB 20GB 1CPU Linux LIQUIDWEB 29,50$ 2GB 40GB 2CPU Linux 1.-HOSTWINDS: · URL: https://www.hostwinds.com/vps/ · CARACTERÍSTICAS : VPS el cual el más barato ofrece por 8,99 dolares al mes 30GB de espacio, 1GB de RAM y 1 CPU C ORE . El más caro asciende a 30, 59 dolares al m...

Presentación a mí blog Alejandro Pla

Un alumno de DAW Hola a todos y bienvenidos a este rincón, donde podréis encontrar respuesta a muchas de las preguntas que tienen que ver con estudiar y mejorar todos aquellos aspectos que tienen que ver con el desarrollo web. Este es el primero de una serie de posts, que hoy empiezo a escribir para este blog y que tienen la intención de hablar sobre los temas y puntos más importantes que me vayan surgiendo como alumno de segundo de DAW. En el Bolg trataré temas tan diversos como puedan ser, la solución de problemas técnicos de nivel básico, medio y avanzado, desde instalar un servidor VPS, hasta saber como nacieron las primeras Bases de datos. Si tenéis cualquier tipo de dudas o preguntas sobre alguno de los temas que van a ir surgiendo en estos posts,  podéis escribirme con toda confianza a mi correo. Trataré de ayudaros en  todo lo que pueda, con la intención inicial de responder a vuestros correos en el menor tiempo posible. Espero que nos sea ...