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.
senzapaura_es/despliegue/instalar.sh

105 lines
3.6 KiB

#!/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/current/build/index.js" "$RUTA/current/build-panel/index.js" "$RUTA/.env" "$RUTA/.env.panel" "$RUTA/current/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/current/despliegue/senzapaura.service" /etc/systemd/system/senzapaura.service
install -m 644 "$RUTA/current/despliegue/senzapaura-panel.service" /etc/systemd/system/senzapaura-panel.service
mkdir -p "$RUTA/media/ondas" "$RUTA/media/imagenes"
chown "$USUARIO:$USUARIO" "$RUTA/media/ondas" "$RUTA/media/imagenes"
systemctl daemon-reload
systemctl enable senzapaura senzapaura-panel
echo "==> Sitio de Nginx"
install -m 644 "$RUTA/current/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 senzapaura-panel, /bin/systemctl restart senzapaura, /bin/systemctl restart senzapaura-panel
SUDO
chmod 440 /etc/sudoers.d/senzapaura
visudo -c -f /etc/sudoers.d/senzapaura
echo "==> Arrancando"
systemctl restart senzapaura senzapaura-panel
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 senzapaura-panel
Sin ese ORIGIN, todos los formularios contestan 403 y la web parece
rota aunque se vea perfectamente.
FIN

Powered by TurnKey Linux.