Как развернуть приложение, состоящее из клиентской и серверной частей на React и Express, на хостинге или в облаке?

Как установить автоматический запуск клиентской и серверной частей моего приложения после деплоя на облачный сервер, чтобы не нужно было каждый раз запускать их вручную через терминал после перезапуска сервера?
  • 7 февраля 2024 г. 17:40
Ответы на вопрос 3
Развертывание приложения, состоящего из клиентской части на React и серверной на Express, предполагает несколько различных этапов. Вот шаги, которые вам необходимо предпринять для деплоя на хостинг или в облаке, и для установки автоматического запуска этих частей приложения.

1. Создайте production-версию клиентской части. С помощью команды `npm run build` или `yarn build` в папке React-приложения создайте оптимизированную версию для развертывания. Это создаст папку `build` с минифицированными JS и CSS файлами.

2. Вы можете развернуть серверную и клиентскую части как единое целое, если вы настроите Express таким образом, чтобы он также отдавал статические файлы собранного React-приложения. В вашем Express сервере добавьте следующий код (если ещё не добавлен):

```js
const express = require('express');
const app = express();
const path = require('path');

// Middleware для обслуживания статических файлов из папки build
app.use(express.static(path.join(__dirname, 'client/build')));

// Любые запросы к серверу возвращают React-приложение
app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname+'/client/build/index.html'));
});

// Здесь ваши маршруты API...

const PORT = process.env.PORT || 5000;
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});
```

`__dirname` должен быть путем к папке с серверным кодом, а `client/build` — путь к собранным файлам React-приложения.

3. Настройте облачный сервис или хостинг для развертывания. В зависимости от выбранного сервиса (например, Heroku, AWS Elastic Beanstalk, DigitalOcean, etc.) процесс развертывания будет отличаться, но ключевой идеей является передача своего кода и зависимостей на сервер, а также установка переменных среды (environment variables) в случае необходимости.

4. Чтобы обеспечить автоматический запуск приложения после деплоя или перезапуска сервера, большинство облачных платформ предлагают свои собственные механизмы. Например, на Heroku просто нужно добавить `Procfile` с командой для запуска, например:

```
web: npm start
```

`npm start` обычно запускает ваш серверный скрипт на Node.js, который также обслуживает клиентскую часть.

Для серверов или VPS, где вы полностью управляете окружением, вам понадобится настроить процесс менеджер, такой как PM2, чтобы обеспечить поддержку процесса вашего приложения. Установка PM2 и запуск приложения может выглядеть примерно так:

```bash
npm install pm2 -g # Установить PM2 глобально
pm2 start server.js --name "my-app" # Запустить сервер Express
pm2 startup # Создать скрипт для автозапуска
pm2 save # Сохранить текущее состояние процессов для автозапуска
```

PM2 автоматически перезапустит ваше приложение, если оно упадет, и может быть настроен для автоматического запуска при загрузке системы.

Не забудьте обеспечить безопасность вашего приложения
Если я правильно Вас понял, то Вам надо установить утилиту screen на сервер. Один раз запустить приложение и будет работать, пока не грохнится. Ccылка 

Или настроить deployment pipeline через Jenkins или GitLab или подобное...
Можно попробовать сделать daemon'ы. 
Похожие вопросы