Bonjour à tous.
Pour tester Next.js, je suis en train de me faire un petit site web perso.
Mais je ne comprend pas comment en Node JS, on peut faire du Zero Downtime (en utilisant systemd, sur un VPS que j’ai moi-même configuré de zéro).
Pour la prod, je fais un reverse proxy avec Nginx :
server {
listen 443 ssl http2;
server_name www.mon-domaine.com;
#### SSL
ssl_certificate /etc/letsencrypt/live/mon-domaine.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mon-domaine.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/mon-domaine.com/fullchain.pem;
include includes/ssl.conf;
#### Reverse Proxy
location / {
proxy_pass http://127.0.0.1:3003/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}
}
Et j’ai créé un service :
[Unit]
Description=nom-de-mon-service-prod
[Service]
Type=simple
User=steph
Restart=on-failure
RestartSec=10s
WorkingDirectory=/home/steph/www/mon-domaine.com/prod/front-nextjs
ExecStart=npm run start_prod
[Install]
WantedBy=multi-user.target
PS : "npm run start_prod" exécute ceci : next start -p 3003
Ceci marche. Par contre, à chaque nouveau déploiment (à chaque nouveau build) de mon App Next.js, je suis obligé de restart ce service (ce qui est mauvais sur une App en prod).
Avec des projets PHP, en gros, j’avais l’habitude de faire ceci sur mon serveur pour avoir Zéro Downtime :
-
J’envois ma nouvelle verison de mon App PHP sur une nouvelle release (un dossier avec la date de jour avec secondes, par exemple).
-
Ensuite je change le symlink (fichier "current") en le faisant pointer vers le dossier de cette nouvelle release.
Car avec PHP il n’y a pas de service à redémarrer. Mais avec Node JS, si.
Avez-vous des pistes SVP ?
Merci d’avance.