Cuando tuve que desplegar un proyecto en una máquina virtual (VM) de Azure, terminé armando los pasos a partir de diferentes tutoriales y documentación. Dejo mis notas aquí por si le sirven a alguien más y le ahorran un buen rato. No es una guía perfecta, pero debería llevarte de cero a tener tu backend y frontend funcionando.
Configuración de la VM en Azure
- Crear la VM.
 - Asegurarse de abrir los puertos HTTP (80), HTTPS (443) y SSH (22).
 - Guardar el archivo 
.pem(lo vas a necesitar para conectarte). 
Instalar Nginx
sudo apt install -y nginx
Instalar Node.js (con nvm)
Seguí este tutorial de DigitalOcean.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
source ~/.bashrc
nvm list-remote
nvm install v14.10.0
Instalar Docker
Seguir la documentación oficial.
Configurar Git + SSH
ssh-keygen
cat ~/.ssh/id_rsa.pub   # agregar esta clave a GitHub
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa
Clonar proyectos:
git clone <tu-repo>
cd project
npm install
Configurar tu .env.
Desplegar el frontend (React sin framework adicional)
cnpm i
npm run build
Mover el build al directorio de Nginx:
cd /var/www/html/
sudo su
rm index.nginx-debian.html
cp -rv /home/radar/projects/frontend_aci/dist/* .
Probar en el navegador con la IP pública del servidor:
http://<ip-del-servidor>
Configurar Nginx
Referencia: este artículo.
Ejemplo para el frontend:
server {
   server_name aci.

intern.org www.aci.awaqintern.org;
   listen 80;
   root /var/www/html/frontend_aci;
   index index.html;
   location / {
      try_files $uri $uri/ /index.html;
   }
}
Ejemplo para el backend:
server {
  server_name api.awaqintern.org;
  location / {
    proxy_pass http://localhost:8080; 
    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;
  }
}
Activar las configuraciones y reiniciar:
sudo ln -s /etc/nginx/sites-available/api.domain.com.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/domain.com.conf /etc/nginx/sites-enabled/
sudo systemctl restart nginx
Revisar logs en caso de error:
tail -f /var/log/nginx/
Dockerizar el backend
Referencia: guía de BetterStack.
Compilar la imagen:
docker build . -t api-aci:1
Ejecutar el contenedor:
docker run -d -p 8080:8080 --name api_aci api-aci:1
docker logs -f <id-del-contenedor>
Configurar dominios y DNS
En /etc/hosts, probar mapeando tu IP con el dominio:
4.236.183.100   aci.somosawaq.com
4.236.183.100   api.aci.somosawaq.com
Después configurar el dominio real en Cloudflare (o tu proveedor DNS) apuntando a la IP pública de la VM.
Certificados SSL
Al final, habilitar el firewall y configurar HTTPS con Certbot (no lo detallo aquí, pero es altamente recomendable):
sudo ufw enable
Este fue el camino que seguí para poner en línea una API en Node.js y un frontend en React en una VM de Azure usando Nginx y Docker. Existen formas más elegantes de hacerlo (CI/CD, Kubernetes, etc.), pero si lo que necesitas es tener algo funcionando rápido, esta configuración cumple.
              

    
Top comments (0)