Некоторое время назад при развертывании проекта в компании одноклассник по эксплуатации и обслуживанию много чего говорил о сервере и вдруг почувствовал себя растерянным и туманным. . .
Просто возьмите этот проект на практику и вкратце поймите, как обрабатывается процесс развертывания проекта на сервере.
Предварительные знания
pm2
pm2 — запустить инструмент управления процессами узла.
Общие команды
···
pm2 start app.js : запустить службу, файл входа — app.js
список pm2, чтобы увидеть, какие процессы запущены
pm2 show xxx Просмотр сведений об услуге
npm restart [имя или идентификатор]: перезапустить службу
pm2 monit : мониторинг служб
···
Файл package.json проекта
Чтобы запустить службу, мы можем использовать node run app.js
Если вы используете pm2 для запуска службы, вы можете ввести pm2 start app.js
Введите список pm2 в командной строке, чтобы просмотреть запущенные проекты.
pm2 поддерживает запуск файла конфигурации
- путь к сценарию запуска сценария
- exec_mode режим запуска приложения, поддерживает режим форка и кластера
- instances Количество запускаемых экземпляров приложения, допустимо только в кластерном режиме, по умолчанию — fork
форк и кластерный режим
fork — это кластер одного процесса, который может запускать несколько процессов
Добавьте в проект файл конфигурации pm2 pm2.config.json.
{
"name": "mxx-project",
"script": "./index.js",
"error_file": "./logs/err.log",
"out_file": "./logs/out.log",
"log_date_format": "YYYY-MM-DD HH:mm Z",
"instances": 3,
"merge_logs": true,
"exec_mode": "cluster",
"node_args": "",
"ignore_watch": ["node_modules"],
"env": {
"NODE_ENV": "development"
}
}
Введите в командной строке
pm2 start pm2.config.json
будут созданы три процесса
Примечание. Если ваш сервер многоядерный, весьма вероятно, что несколько процессов будут созданы в режиме кластера.
Вы можете проверить, сколько ядер у вашего сервера
shipit
shipit — инструмент для автоматизированного развертывания серверов.
Простой файл конфигурации shipit
module.exports = shipit => {
require('shipit-deploy')(shipit)
shipit.initConfig({
default: {
workspace: '/tmp/myapp',
deployTo: '/var/myapp',
repositoryUrl: '你的GitHub地址',
ignores: ['.git', 'node_modules'],
keepReleases: 2,
deleteOnRollback: false,
key: '/path/to/key',
shallowClone: true,
},
staging: {
servers: '你的服务器地址',
},
})
}
подключиться к серверу
После покупки сервера вы можете получить IP адрес и попробовать зайти на сервер
Как правило, ваш собственный сервер может войти в систему как root для работы.
ssh root@ipipip
Поскольку более поздний проект будет развернут на сервере, рекомендуется сначала выполнить ssh-copy-id, чтобы установить доверие, чтобы вам не приходилось повторно вводить пароль.
Настроить среду на сервере
Вообще говоря, вам нужно установить npm cnpm node pm2 git nginx
- установить нпм
yum install npm
- установить cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
- установить pm2
npm i pm2
- установить узел
npm i n
- установить git
yum install git
- Установите NVM.
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
Нужно настроить Vim ~ / .bashrc
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
Укажите версию узла по умолчанию
nvm alias defalut 8
Запустить простую услугу
Напишем простой скрипт, на сервере создал новый app.js в каталоге /home/work (выполнять по порядку)
cd home
mkdir work
touch app.js
Напишите простейший сервис в app.js
const http = require('http')
const port = 3389
http.createServer((req, res) => {
res.end('Hello word!')
}).listen(port, () => {
console.log(port, 'port')
})
запустить app.js
node app.js
Затем откройте браузер, введите IP + номер порта, и вы увидите приветственное слово на странице.
--Пополнить--
1 Используемый здесь номер порта — 3389, поскольку номер порта 3389 был настроен в группе безопасности моего сервера.
Если вы используете другие порты, обратите внимание, настроена ли группа безопасности
2 О запуске сервиса
Если вы используете узел, то после выхода с сервера вы больше не сможете получить доступ к этой службе.
Его можно заменить на pm2 для запуска, поэтому после запуска, если не будет сообщено об ошибке, этот процесс всегда будет существовать.
готов к развертыванию
- Подготовить проект
В проекте используется koa1 + React
адрес проекта реакцииНажмите на меня, чтобы просмотреть адрес GitHub
Номер порта запуска изменен на 3389.
- Подготовьте файл запуска pm2
pm2 создать папку, в которой начать писать production.json pm2
- Создать Shipit.js в проектной базовой конфигурации выглядит следующим образом
module.exports = function (shipit) {
require('shipit-deploy')(shipit)
require('shipit-cnpm')(shipit)
require('shipit-pm')(shipit)
shipit.initConfig({
default: {
workspace: '/tmp/deploy/your-project',
deployTo: '/home/work/your-project',
repositoryUrl: 'https://github.com/youproject.git',
ignores: ['.git', 'node_modules'],
keepReleases: 2,
deleteOnRollback: false,
key: '/path/to/key',
shallowClone: true,
cnpm: {
flags: '--production',
local: false,
npm: 'cnpm',
remote: true
},
pm: {
production: {
path: '/home/work/your-project/current/pm2/production.json'
}
}
},
production: {
servers: ['root@你的IP地址']
}
})
}
Здесь pm2 использует файл конфигурации для запуска, поэтому, если параметр pm настроен, pm2 будет запущен в соответствии с этим путем к файлу.
- Добавьте два поля в package.json вашего проекта.
"deploy": "shipit production deploy",
"rollback": "shipit production rollback",
- Отправьте проект на GitHub
- Выполнить развертывание запуска npm
После развертывания проекта перейдите на сервер, чтобы просмотреть процесс проекта.
pm2 list
Откройте страницу, чтобы увидеть эффект
На данный момент развертывание завершено
Проблемы с процессом развертывания
- Ошибка 1
Решение: забыли установить git на сервер
- Ошибка 2
Это очевидно, cnpm не установлен
- После успешного развертывания зайдите на сервер, чтобы проверить, что проект не запущен
Исходное развертывание
Потом я спросил у великого бога и обнаружил, что в конфигурационном файле шипита этого не написано
require('shipit-pm')(shipit)
[Бросьте стол! ]
Вернитесь в онлайн после настройки файла
запустит три процесса
Настройте Alibaba Cloud в соответствии с номером порта проекта
Если номер порта не настроен в группе безопасности при запуске вашего проекта, вам необходимо добавить группу безопасности в фоновом режиме.
При заходе на страницу также необходимо ввести номер порта 3389. Очень ленив и не хочет вводить номер порта
Добавьте порт 80 по умолчанию в группу безопасности и настройте порт в файле запуска app.js на 80. Таким образом, вам не нужно вводить номер порта
Так что, если вы не хотите изменять файл app.js, используйте NGINX
Настроить NGINX
- установить нгинкс
yum install nginx
Просмотр файлов конфигурации NGINX
cat /etc/nginx/nginx.conf
Очень простая конфигурация
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
Номер порта файла записи проекта app.js изменен на 9999.
Обработать Nginx.conf.js
Наконец-то скорректировано (более важно то, что сервер показывает здесь только серверную часть)
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:9999/;
}
}
Запустить Nginx
nginx -s reload
Проблемы с настройкой Nginx
- Перезапустите Nginx
Я продолжаю получать сообщение об ошибке при перезапуске Nginx
После просмотра статьи
nginx -c /etc/nginx/nginx.conf
nginx -s reload
получить это ~
Добро пожаловать в гостиНажмите, чтобы посмотреть проект
Справочная статья
- pm2
- Советы по использованию PM2
- Краткий обзор использования инструментов управления процессами pm2
- Автоматическое многосерверное развертывание с помощью shipit-deploy
- Используйте Shipit для автоматизации развертывания приложений Node.
- Знакомство с Nginx
- Пропал nginx.pid после перезапуска nginx, как перезапустить nginx