Развёртывание сайта на хостинге в один клик
6 июля 2024 г.
Такие хостинговые площадки, как Vercel, Netlify и т.п., предлагают готовые CLI-решения для Node.js, позволяющие автоматизировать развёртывание сайта из командной строки. Но что делать, если сайт размещён на виртуальном хостинге или на VPS/VDS сервере? Ведь не очень удобно для каждой новой сборки сайта открывать FTP-клиент и загружать сайт на хостинг практически вручную.
Хорошая новость в том, что для такого сценария у меня тоже есть готовое решение для Node.js. Решение основано на подключении к хостингу по защищённому протоколу SFTP, который можно включить на любом хостинге.
Решение
- Добавляем к проекту библиотеку
ssh2-sftp-client
:
npm i -D ssh2-sftp-client
- Создаем в корне проекта файл
deploy.js
со скриптом для развёртывания:
import Client from "ssh2-sftp-client";
const sftp = new Client();
const local = "build";
const remote = "/var/www/user/data/www/example.ru/";
sftp.on("upload", (info) => {
console.log(`upload: ${info.source}`);
});
sftp
.connect({
host: "example.ru",
port: "22",
username: "user",
password: "******",
})
.then(() => {
console.log("delete old...");
return sftp.rmdir(remote, true);
})
.then(() => {
console.log("...done");
console.log("upload new...");
return sftp.uploadDir(local, remote);
})
.then(() => {
console.log("...done");
return sftp.end();
})
.catch((error) => {
console.log(error);
return sftp.end();
});
Пояснения:
- Порт для подключения по SFTP нужно выяснить в настройках хостинга, он может отличаться от стандартного
22
. - В примере выше локальная папка с готовой сборкой сайта называется
build
, но у различных генераторов она может называться по другому, напримерdist
. - Абсолютный путь к папке сайта на хостинге
/var/.../example.ru/
тоже может различаться на разных хостинговых площадках.
- После правильной настройки порта и папок, сайт можно загрузить на хостинг одной командой:
node deploy
Полная документация по API библиотеки ssh2-sftp-client
по ссылке.