Skip to content

Instantly share code, notes, and snippets.

@pmNiko
Last active September 16, 2024 11:04
Show Gist options
  • 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 ENDPOINT
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