#!/usr/bin/env bash # # Deja el servidor sirviendo la web. Se ejecuta UNA vez, como root: # # sudo bash /var/www/senzapaura/despliegue/instalar.sh # # Hace lo que el despliegue normal no puede hacer por sí solo, porque necesita # root: poner el servicio de systemd, poner el sitio de Nginx y quitar el que # viene de fábrica. # # Es idempotente: se puede volver a lanzar sin romper nada. set -euo pipefail RUTA=/var/www/senzapaura USUARIO=senzapaura if [[ $EUID -ne 0 ]]; then echo "Esto necesita root: sudo bash $0" >&2 exit 1 fi echo "==> Comprobando lo que tiene que estar ya" for archivo in "$RUTA/build/index.js" "$RUTA/.env" "$RUTA/node_modules"; do if [[ ! -e "$archivo" ]]; then echo "falta $archivo — lanza antes ./despliegue/desplegar.sh desde la máquina de desarrollo" >&2 exit 1 fi done echo "==> Servicio de systemd" install -m 644 "$RUTA/despliegue/senzapaura.service" /etc/systemd/system/senzapaura.service systemctl daemon-reload systemctl enable senzapaura echo "==> Sitio de Nginx" install -m 644 "$RUTA/despliegue/senzapaura.nginx.conf" /etc/nginx/sites-available/senzapaura ln -sf /etc/nginx/sites-available/senzapaura /etc/nginx/sites-enabled/senzapaura # El sitio de fábrica es `default_server` y contesta a todo lo que no case con # otro nombre. Mientras esté, quien entre por la IP ve la bienvenida de Nginx # en vez de la web, aunque nuestro sitio esté perfectamente configurado. if [[ -e /etc/nginx/sites-enabled/default ]]; then echo " quitando el sitio por defecto, que es quien contesta ahora" rm -f /etc/nginx/sites-enabled/default fi nginx -t echo "==> Permitir que el usuario reinicie su servicio sin contraseña" # Lo necesita `desplegar.sh` al final de cada despliegue. cat > /etc/sudoers.d/senzapaura < Arrancando" systemctl restart senzapaura systemctl reload nginx sleep 3 echo "==> Comprobando" if ! systemctl is-active --quiet senzapaura; then echo "el servicio no ha arrancado. Lo que dice:" >&2 journalctl -u senzapaura -n 30 --no-pager >&2 exit 1 fi codigo=$(curl -sf -o /dev/null -w '%{http_code}' http://127.0.0.1:3000/ || echo 000) echo " node responde -> $codigo" codigo=$(curl -sf -o /dev/null -w '%{http_code}' -H 'Host: senzapaura.es' http://127.0.0.1/ || echo 000) echo " nginx responde -> $codigo" cat <<'FIN' Listo por esta parte. Lo que queda está fuera de este servidor: 1. DNS. Ahora mismo senzapaura.es apunta al aparcamiento del registrador. Hay que poner dos registros A a la IP pública, 89.46.247.16: senzapaura.es. A 89.46.247.16 www.senzapaura.es. A 89.46.247.16 2. Router. Redirigir los puertos 80 y 443 a 192.168.18.171. 3. Certificado, cuando lo anterior responda desde fuera: sudo apt install -y certbot python3-certbot-nginx sudo certbot --nginx -d senzapaura.es -d www.senzapaura.es Y después, en /var/www/senzapaura/.env: ORIGIN=https://senzapaura.es seguido de: sudo systemctl restart senzapaura Sin ese ORIGIN, todos los formularios contestan 403 y la web parece rota aunque se vea perfectamente. FIN