# Servicio de systemd para el servidor de la web. # # Copiar a /etc/systemd/system/senzapaura.service y luego: # # sudo systemctl daemon-reload # sudo systemctl enable --now senzapaura # sudo systemctl status senzapaura # journalctl -u senzapaura -f # para ver qué está pasando # # La web es un servidor de Node, no archivos sueltos: cada página se genera # sabiendo quién la pide —si ha entrado, qué lleva en el carrito, qué ha # comprado—, así que hay un proceso vivo permanentemente. Nginx se pone delante; # esto es lo que mantiene el proceso en pie. [Unit] Description=Senza Paura — web Documentation=file:///var/www/senzapaura/README.md # La web no arranca sin base de datos, así que espera a que Postgres esté listo. After=network-online.target postgresql.service Wants=network-online.target [Service] Type=simple User=senzapaura Group=senzapaura WorkingDirectory=/var/www/senzapaura # Las claves y la cadena de conexión viven aquí, fuera del repositorio. # Debe ser 600 y de este usuario: contiene la clave de Stripe. EnvironmentFile=/var/www/senzapaura/.env ExecStart=/usr/bin/node build/index.js Restart=always RestartSec=5 # Si se cae en bucle, que pare y se note, en vez de reiniciarse para siempre # consumiendo la máquina. StartLimitIntervalSec=60 StartLimitBurst=5 # --- Cerrojos --------------------------------------------------------------- # Un servidor web es lo que primero se intenta reventar. Estas líneas no cuestan # nada y limitan lo que un proceso comprometido podría tocar. NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ProtectHome=true ProtectKernelTunables=true ProtectKernelModules=true ProtectControlGroups=true RestrictSUIDSGID=true # Lo único que necesita escribir es la carpeta de medios si algún día se sube # audio desde el propio servidor. El resto del disco queda de solo lectura. ReadWritePaths=/var/www/senzapaura/media # Sin acceso a otras redes que no sean IP: no hace falta nada más. RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX [Install] WantedBy=multi-user.target