Skip to content

Instantly share code, notes, and snippets.

@pmNiko
Last active February 7, 2023 01:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pmNiko/c52138a22379ca68fbcf3d721f285aa9 to your computer and use it in GitHub Desktop.
Save pmNiko/c52138a22379ca68fbcf3d721f285aa9 to your computer and use it in GitHub Desktop.
Ubuntu + Nginx + Subdomain -> app
------------- Hosting compartido a través de Nginx -------------
---__________________________________________________________________---
El objetivo será enlazar las distintas aplicaciones con un nombre específico dentro del dominio del servidor
compartido. Asumiendo que el dominio es "digitalservices.com" vamos a realizar la implementación tal que
tengamos el siguiente esquema:
____Esquema de APIS con Node JS
HOST | CNAME | SUBDOMAIN | DOMAIN | PATH | TIPO | PROJECT | PORT | ENDPOINT
-------------------------------------------------------------------------------------------------------------------------
http:// | www | api.tasks | digitalservices.com | / | API-REST | api-tasks | 4000 | /api/v1
http:// | www | api.users | digitalservices.com | / | API-REST | api-users | 4001 | /api/v1
http:// | www | api.auth | digitalservices.com | / | API-REST | api-auth | 4002 | /api/v1
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
____Esquema de SPAS y páginas estáticas
HOST | CNAME | SUBDOMAIN | DOMAIN | PATH | TIPO | PROJECT |PORT | location
-------------------------------------------------------------------------------------------------------------------------
http:// | www | blog | digitalservices.com | / | SPA | blog-react| 80 | /var/www/blog
http:// | www | dash | digitalservices.com | / | SPA | dashboard | 80 | /var/www/dashboard
http:// | | | digitalservices.com | / | HTML | intranet | 80 | /var/www/intranet
http:// | | | digitalservices.com | /sign | HTML | login | 80 | /var/www/sign
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
___Preparación del entorno
- Para el ejemplo usamos un droplet de Digital Ocean con Ubuntu 22.04 y Nginx
- Actualizamos el sistema: apt update
- Instalamos apt install: snapd - tree - nano - nvm - git
- Versión de Node utilizada: nvm install Gallium
- Instalaciones de Node JS globales: nodemon - yarn - pm2
- Creamos un directorio de repositorios: mkdir repositories/
___Clonamos los tres proyectos de backend y los dos de frontend
- Realizamos la build de cada proyecto para optimizar el código.
- Ponemos a correr con PM2 las 3 API-REST -> pm2 start dist/index.js --name "<API NAME>"
- Creamos 4 directorios en /var/www/ :
1 - blog
2 - dash
3 - intranet
4 - sign
- Movemos los archivos del build de cada front a su directorio correspondiente:
blog_ mv ~/repositories/blog-react/build/* /var/www/blog/
dash_ mv ~/repositories/dashboard/build/* /var/www/dash/
- Creamos los index.html dentro de intranet/ y sign/ cada uno con su estructura.
___Enrutamiento con Nginx para los servicios REST
- Ahora que ya tenemos preparado el escenario vamos a comenzar por enrutar las APIS:
1. Nginx tiene un una configuración por defecto en la cual permite
configuiraciones adicionales, aca entran en juegos los directorios de
- sites-available: son los sitos validos con la configuración de enrutamiento.
- sites-enabled: son enlaces simbolicos a los archivos de configuración de la
carpeta sites-available.
2. El proceso de creación de los archivos de configuración:
- cp /sites-available/default /sites-available/api.tasks
- nano /sites-available/api.tasks:
server {
server_name api.tasks.digitalservices.com www.api.tasks.digitalservices.com; // CNAME : www
location /v1 {
proxy_pass http://localhost:4000/api/v1;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /v2 {
proxy_pass http://localhost:4000/api/v2;
}
......
.....
}
......
.....
3. Ahora generamos el enlace simbólico en los sitios habilitados:
- ln -s /sites-available/api.tasks /sites-enabled/api.tasks
- nginx -t -> nos retorna si la sintaxis fue aceptada
- service nginx reload o service nginx restart
- service nginx status
- En la url del navegador:
http://api.tasks.digitalservices.com/v1
http://www.api.tasks.digitalservices.com/v1
___Enrutamiento con Nginx para los sitios státicos y las SPA
1. El proceso de creación de los archivos de configuración:
- cp /sites-available/default /sites-available/blog
- nano /sites-available/blog:
server {
root /var/www/blog;
server_name blog.digitalservices.com www.blog.digitalservices.com;
index index.html;
.........
}
.....
#Configuración válida para host CON SUBDOMINIO
2. Para el caso del sitio de sign: http://digitalservices.com/sign :: login de la intranet
- cp /sites-available/default /sites-available/sign
- nano /sites-available/sign:
server {
listen 80;
server_name digitalservices.com www.digitalservices.com;
access_log logs/digitalservices.access.log main;
location ~ ^/sign/(images|javascript|js|css|flash|media|static)/{
root /var/www/sign/htdocs;
expires 30d;
}
location /sign {
root /var/www/sign;
index index.html;
}
}
3. Finalmente repetimos el punto _3_ de la sección "Enrutamiento con Nginx para los servicios REST"
para generar los enlaces simbolicos y recargar Nginx.
____Certificación SSL con Certbot
Fuente: https://certbot.eff.org/instructions?ws=apache&os=ubuntufocal
Una vez realizado el procedimiento de certbot podemos acceder a nuestras URL
anteponiento HTTPS.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment