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/082848bf713bf332cec1219a89c46785 to your computer and use it in GitHub Desktop.
Save pmNiko/082848bf713bf332cec1219a89c46785 to your computer and use it in GitHub Desktop.
Centos 7 + Apache httpd
-------- Hosting compartido a través de Apache Httpd -----------
---__________________________________________________________________---
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 Centos 7 y Apache httpd
- Actualizamos el sistema: yum 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/
*Enlace:
https://gist.github.com/pmNiko/c23a71bc7824e0313806269593ef49e0#file-preparacion-del-server-txt
___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.
- Si el usuario no es root debe asignar los permisos:
$ sudo chown -R $USER:$USER /var/www/example.com/html
$ sudo chmod -R 755 /var/www
___Enrutamiento con Apache httpd para los servicios REST
- Ahora que ya tenemos preparado el escenario vamos a comenzar por enrutar las APIS:
1. Apache httpd tiene un directorio por defecto para ser servido, nosotros vamos
a crear dos directorios en /etc/httpd/ :
- 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.
- Una vez creados vamos a agregar al final del archivo /etc/httpd/conf/httpd.conf
---- ------------- --------
IncludeOptional sites-enabled/*.conf
......... .......................
2. Antes de redireccionar las rutas vamos a abrir temporalmente el puerto 4000 para poder probar
el funcionamiento de la api
$ firewall-cmd --zone=public --add-port=4000/tcp --permanent
$ firewall-cmd --reload
Accedamos a url: http://www.digitalservices.com:4000/api/v1/docs/
Ahhora creamos los archivos de configuración para Apache:
- cp /sites-available/default /sites-available/api.tasks
- nano /sites-available/api.tasks:
<VirtualHost *:80>
ServerName apitasks.deployapp.shop
ServerAlias www.apitasks.deployapp.shop
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://159.223.185.11:4000/api/v1/
ProxyPassReverse / http://159.223.185.11:4000/api/v1/
</VirtualHost>
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
- systemctl restart httpd o systemctl reload httpd
- systemctl status httpd
- En la url del navegador:
http://api.tasks.digitalservices.com/v1
http://www.api.tasks.digitalservices.com/v1
___Enrutamiento con Apache httpd 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:
<VirtualHost *:80>
ServerName blog.deployapp.shop
ServerAlias www.blog.deployapp.shop
DocumentRoot /var/www/deployapp.shop/blog
ErrorLog /var/www/deployapp.shop/log/error.log
CustomLog /var/www/deployapp.shop/log/requests.log combined
</VirtualHost>
2. Para el caso del sitio de sign: http://digitalservices.com /sign :: intranet - login
- cp /sites-available/default /sites-available/home
- nano /sites-available/home.conf:
<VirtualHost *:80>
ServerName digitalservices
ServerAlias www.digitalservices
Alias "/sign" "/var/www/digitalservices/sign"
DocumentRoot /var/www/digitalservices/intranet
ErrorLog /var/www/digitalservices/log/error.log
CustomLog /var/www/digitalservices/log/requests.log combined
</VirtualHost>
3. Finalmente repetimos el punto _3_ de la sección "Enrutamiento con Nginx para los servicios REST"
para generar los enlaces simbolicos y recargar Apache httpd.
____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.
*Nota en Centos 7 se debe instalar mod_ssl para que certbot pueda certificar los sitios
___Conclusión
De esta manera pudemos ver las distintas estrategias que se pueden utilizar para redireccionar
nuestros servicios a través del puerto 80 con el servidor web de Apache httpd.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment