реагировать экспресс PM2 развертывания - PullRequest
6 голосов
/ 09 июня 2019

Сценарий

Я создал приложение реагирования, а также экспресс-сервер для API, и оба они разделены. Я не включил папку реакции в экспресс-приложении. Я с нетерпением жду возможности развернуть его, используя сценарии pre / post с использованием PM2, но мне трудно достичь именно того, что у меня на уме.

Цель

  1. Я хочу запустить npm install как для клиента, так и для сервера, поскольку я могу удалить / добавить пакет, если потребуется позже.
  2. Я думаю, что после установки npm я хочу создать приложение реагирования, а затем переместить эту папку для обслуживания в экспресс (не знаю, возможно ли указать путь к каталогу, который находится вне родительского для статического содержимого экспресс).
  3. Затем я хочу запустить экспресс-сервер, который в конечном итоге будет обслуживать реагирующие файлы сборки.

На данный момент моя структура каталогов

.
├── client
├── ecosystem.config.js
└── server

Я в основном растерялся, так как не нашел ни одного ресурса, где это достигается. Кроме того, я не уверен, возможно ли это даже с помощью сценариев развертывания pm2, или мне нужно написать собственный сценарий bash, который будет выполнять некоторые действия, тогда pm2 только запустит сервер.

Это только то, что я сделал, что кажется совершенно неправильным

ecosystem.config.js

module.exports = {
  apps : [{
    name: 'API',
    cwd: 'server',
    script: 'server.js',
    args: 'one two',
    instances: 1,
    autorestart: true,
    watch: false,
    max_memory_restart: '1G',
    env_production: {
      NODE_ENV: 'production'
    }
  }],

  deploy : {
    production : {
      user : 'node',
//      host : '212.83.163.1',
//      ref  : 'origin/master',
//      repo : 'git@github.com:repo.git',
//      path : '/var/www/production',
      'post-deploy' : 'cd client && npm run build'
    }
  }
};

Ответы [ 2 ]

2 голосов
/ 12 июня 2019

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

Для этих целей я бы предложил использовать рабочие области пряжи какудовлетворяет первое требование самостоятельно (установка npm для клиента и сервера).

Чтобы включить рабочие пространства в версиях пряжи до 1.0, выполните его, чтобы включить.

yarn config set workspaces-experimental true

Затем добавьтеpackage.json в папке (корневой каталог рабочей области) вне папок сервера и клиента вместе с любыми другими ключами package.json, которые вам требуются.Также установите общие зависимости прямо здесь, вместо того, чтобы устанавливать их отдельно в обоих файлах package.json внутри сервера и клиента.(Не забудьте удалить папку node_modules внутри них, так как в корне рабочей области будет создана новая папка со всеми зависимостями, установленными вместе во время установки пряжи).

{
  "private": true,
  "workspaces": ["server", "client"]
}

Добавьте следующее в индекс сервера.js файл.

app.use(express.static(path.join(__dirname, 'public')));
app.get('*', (req,res) =>{
    res.sendFile(path.join(__dirname+'/public/index.html'));
});

И добавьте скрипт npm в package.json в корне рабочего пространства.

{
 ...
 "scripts": {
       "start": "yarn --cwd client react-scripts build && mv ./client/build ./server/public && node ./server/index.js"
  }
 ...
} 
0 голосов
/ 12 июня 2019

Моя идея для вашей проблемы:

  1. Вы можете объединить package.json как клиента, так и сервера.

  2. У меня есть некоторые путаницы сВаш вопрос.

  3. Вы можете настроить как:
module.exports = {
  apps : [{
    name: 'API',
    cwd: 'server',
    script: 'npm run react && npm run express', //you must config npm run react && npm run express before use them  
    args: 'one two',
    instances: 1,
    autorestart: true,
    watch: false,
    max_memory_restart: '1G',
    env_production: {
      NODE_ENV: 'production'
    }
  }],

  deploy : {
    production : {
      user : 'node',
//      host : '212.83.163.1',
//      ref  : 'origin/master',
//      repo : 'git@github.com:repo.git',
//      path : '/var/www/production',
      'post-deploy' : 'cd client && npm run build'
    }
  }
}

Скажите, если это не решит вашу проблему.

...