Освободите руки, используйте PM2 для развертывания проектов Node в Centos7 одним щелчком мыши.

Node.js сервер Nginx PM2

Настройка инструментальной среды Vue-Yarn-PM2

Примечание Локальная среда — Mac, а серверная среда — Centos 7.x.

местная среда

nvm node git pm2 yarn

Первая установка

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

установить нвм

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

затем используйте

command -v nvm

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

nvm -v

Просмотр устанавливаемых версий узла

nvm ls-remote

Установите последнюю версию Node.

nvm install v10.6.0
nvm alias default v10.6.0

установить git

Зайди на этот сайт скачай, а потом без мозгов переходи к следующему шагу

https://git-scm.com/

После завершения установки сначала настраивается git

 git config --global user.name "mhkz"  
 git config --global user.email 'iquanku@163.com'

сгенерировать ssh-ключ

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

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

Затем добавьте сгенерированный открытый ключ в github, чтобы не вводить пароль каждый раз при отправке. использовать

cat ~/.ssh/id_rsa.pub

Скопируйте полученную строку целиком, затем вставьте ее в ключи SSH и GKG в Настройках, название напишите как хотите, а отличить сможете сами

Создайте новый репозиторий на github и скопируйте адрес репозитория

Создать новый репозиторий локально

git init
git add README.md
git commit -m "initial commit"
git remote add origin https://github.com/mhkz/project.git
git push -u origin master

ok Локальный проект сгенерирован и загружен на github

Установите инструмент развертывания pm2

npm install pm2 -g

Просмотр включенных служб узла

pm2 list

серверная среда

Среда сервера более сложная, нужны не только все вышеперечисленные шаги, но и обратный прокси-сервер Nginx и вход без пароля SSH, иначе нам нужно будет вводить пароль каждый раз при развертывании, это будет слишком хлопотно.

  yarn nvm node pm2 git nginx

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

Теперь сосредоточьтесь на установке Nginx и настройках прокси.

Nginx

Существует два метода установки Nginx под Centos7, первый — установка исходного кода, а второй — установка yum.Здесь мы используем первый метод, установка исходного кода.

  • скачать и разархивировать
wget http://nginx.org/download/nginx-1.10.1.tar.gz
tar -zxvf nginx-1.10.1.tar.gz
  • Перейдите в разархивированную папку для компиляции
./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre
  • компилировать
 make && make install
  • запускать
cd /usr/local/nginx/sbin

./nginx
  • закрытие
./nginx -s stop

Прокси порта nginx и указание имени домена

Войдите в каталог conf и создайте в нем включаемый файл. Войдите в каталог conf/include, создайте файл nginx.node.conf и введите в него следующий код:

upstream nodejs {
    server 127.0.0.1:3000;
    keepalive 64;
}
 
server {
    listen 80;
    server_name p.iquanku.com 47.95.7.29;
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host  $http_host;
        proxy_set_header X-Nginx-Proxy true;
        proxy_set_header Connection "";
        proxy_pass      http://nodejs;
    }
}

Введите conf, откройте nginx.conf и добавьте в http.

include ./include/*

Перезапустите nginx, введите

nginx -c conf/nginx.conf
  • Создайте новый проект с помощью Node и запустите его. Создайте файл server.js в любом месте на сервере.
vim server.js

Вставьте в него пример официального сайта Node.

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('您好, 我是 大白--------');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

Начните с pm2

pm2 server.js start

Введите p.iquanku.com или доменное имя сервера в браузере, и вы увидите возвращенное «Здравствуйте, я Дабай-------».

上面所有内容告一段落,接下来配置自动化仓库来部署项目

Сначала остановите все проекты Node на сервере.

pm2 kill
pm2 list

Настроить вход без пароля на сервер

войти в локальный терминал

ssh-copy-id -i ~/.ssh/id_rsa.pub root@47.95.7.29

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

ssh root@47.95.7.29

Создайте два файла в проекте, который изначально инициализируется локально Один из них — файл экосистемы.json, другой — файл server.js.

Содержимое экосистемы.json

{
	"apps": [{
		"name": "new-doc",
		"script": "server.js",
		//"instances": 2 服务器核心数配置
		"env": {
			"COMMON_VARIABLE": "true"
		},
		"env_production": {
			"NODE_ENV": "production"
		}
	}],
	"deploy": {
		"production": {
			"user": "root",
			"host": ["47.95.7.29"],
			"port": "22",
			"ref": "origin/master",
			"repo": "https://github.com/mhkz/project.git",
			"path": "/www/doc/production",
			"ssh_options": "StrictHostKeyChecking=no",
//			"post-deploy": "npm install"
			"pre-deploy-local": "echo 'Deploy Done'",
			"env": {
				"NODE_ENV": "production"
			}
		}
	}
}

содержимое server.js

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('您好, 我是 大白--------');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

Затем отправьте содержимое проекта на github.

git add .
git commit -m "deploy project test"
git push origin master
  • Один ключ для инициализации развертывания и выпуска проекта
pm2 deploy ecosystem.json production setup
  • Опубликовать проект
pm2 deploy ecosystem.json production

Откройте браузер, введите p.iquanku.com и посмотрите результат.

  • Изменить содержимое локального файла
const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('为什么路飞的橡胶果实不惧怕闪电');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
  • Публиковать контент изменения снова
pm2 deploy ecosystem.json production

Таким образом, после завершения каждой модификации и отправки проекта серверу не нужно выполнять какие-либо операции, код сливается с основной веткой, и после завершения теста его можно развернуть напрямую.

  • автозапуск pm2 при загрузке
pm2 startup centos

Другие команды используют свой собственный Google, поэтому я не буду повторять их здесь.

Личный публичный аккаунт