You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
3.3 KiB
102 lines
3.3 KiB
|
4 weeks ago
|
#!/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 <<SUDO
|
||
|
|
$USUARIO ALL=(root) NOPASSWD: /bin/systemctl restart senzapaura, /bin/systemctl status senzapaura, /bin/systemctl stop senzapaura, /bin/systemctl start senzapaura
|
||
|
|
SUDO
|
||
|
|
chmod 440 /etc/sudoers.d/senzapaura
|
||
|
|
visudo -c -f /etc/sudoers.d/senzapaura
|
||
|
|
|
||
|
|
echo "==> 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
|