pm2部署node应用
背景:
很早就知道了pm2的强大功能,部署,多进程部署,负载均衡等等,但是一直没有取尝试使用,每次写完代码就没关心部署的事了。最近有空就想着把pm2的部署流程走一遍,顺便整理出来。
环境:
1.本地:linux mint18(类ubuntu)
2.服务器:阿里云ubuntu16.04
流程:
1.购买服务器
2.登录服务器,安装node环境
3.上传代码到私有或者公共git仓库
4.pm2从本地到服务器的发布
5.服务器端设置pm2开机自启动
1.购买服务器,域名备案
我没有比较哪个厂商的云服务比较好,不过我自己用的是阿里云的。
2.登录服务器,安装node环境
1)ssh root@120.77.156.181
接着输入密码
解释:阿里云服务器的默认端口是22,所以不用特地指定服务器端口
2)添加用户
使用root用户操作服务器是一件很危险的事,因为root有超级权限,很可能一不小心删除了某个重要文件,所以这里建议新增一个用户来帮忙操作服务器,这个用户需要拥有root的所用功能,只是在执行命令的时候需要加sudo。
使用如下命令添加用户:
adduser qqqq 接着输入两次密码
给新增的用户授权:
gpasswd -a qqqq sudo //作用的让qqqq用户通过sudo来拥有root的权限,并且需要输入密码 sudo visudo 添加:qqqq ALL=(ALL:ALL) ALL
这样就可以通过ssh qqqq@120.77.156.181登录服务器
服务器端关闭root用户的登录:
sudo vi /etc/ssh/sshd_config
找到如下设置,并修改yes为no:
PermitRootLogin no
保存文件后,重启sshd:
sudo service sshd restart
3)无密码登录服务器
上面两种登录服务器的方式都需要输入密码,其实这不是必须的,只需要简单的几步就可以实现无密码登录服务器。
本地主机生成私钥和公钥:
ssh-keygen rsa -b 4096 -c “1594466572@qq.com” 然后直接回车即可
此时本机用户目录下的.ssh文件夹下会生生成两个文件(id_rsa和id_rsa.pub),前者是私钥后者是公钥,如果这两个文件之前就已经存在,那就没必要重新生成了
本地主机开启ssh代理:
eval "$(ssh-agent -s)"
将私钥加入到代理中:
ssh-add ~/.ssh/id_rsa
进入服务器:ssh qqqq@120.77.156.181
执行同样的操作:ssh-keygen rsa -b 4096 -c “1594466572@qq.com” (这一句可要可不要,但是后面操作一定会用,所以就在这里先执行了)
然后在.ssh文件下新建文件:
vi authorized_keys
将本地主机的公钥(id_rsa.pub)的内容复制到authorized_keys文件中
修改authorized_keys文件的权限:
sudo chmod 600 authorized_keys
重启ssh:
sudo service ssh restart
4)安装nodejs环境
安装必要的工具:
sudo apt-get install vim openssl build-essential libssl-dev wget curl git
安装nvm:
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
安装node,npm:
nvm install v6.11.1
选择nodejs版本:
nvm use 6.11.1
设置默认的nodejs版本:
nvm alias default v6.11.1
安装pm2:
npm install pm2 -g
3.上传代码到git仓库
在github中新建一个仓库,名为pm2deploy
接下来设置ssh,依次点击setting->SSH and GPG keys->new SSH key,其中的key就是上面步骤中通过ssh-keygen命令生成的公钥,title为自定义,可以随便填,通过:
cat ~./ssh/id_rsa.pub
即可输出id_rsa.pub的内容,复制到key中,然后点击add ssh key即可
在此添加两个公钥,一个是本地主机的,一个是远程服务器的,添加之后,本地主机和服务器都可以通过git clone ssh@.....来下载仓库的代码了
4.pm2从本地主机发布
1)pm2的ecosystem.js配置
在本地源码目录下输入:
pm2 ecosystem
生成pm2的配置文件ecosystem.config.js:
module.exports = {
/**
* Application configuration section
* http://pm2.keymetrics.io/docs/usage/application-declaration/
*/
apps : [
// First application
{
name : 'API',
script : 'app.js',
env: {
COMMON_VARIABLE: 'true'
},
env_production : {
NODE_ENV: 'production'
}
},
// Second application
{
name : 'WEB',
script : 'web.js'
}
],
/**
* Deployment section
* http://pm2.keymetrics.io/docs/usage/deployment/
*/
deploy : {
production : {
user : 'node',
host : '212.83.163.1',
ref : 'origin/master',
repo : 'git@github.com:repo.git',
path : '/var/www/production',
'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
},
dev : {
user : 'node',
host : '212.83.163.1',
ref : 'origin/master',
repo : 'git@github.com:repo.git',
path : '/var/www/development',
'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env dev',
env : {
NODE_ENV: 'dev'
}
}
}
};
新建一个文件:
vim ecosystem.json 复制ecosystem.config.js的内容到ecosystem.json中,注意js与json的区别
apps以数组的形式是为了部署多应用准备的,这里我们只部署一个应用,可以去掉第二个元素。script为程序的入口文件,这里改为你自己的入口文件即可。
apps的配置介绍玩了,生下的是部署配置(deploy),部署配置包括production(生产环境)和dev(开发环境),这里只介绍生产环境,开发环境类似(可以先去掉开发环境)。
"production":{
"user": "qqqq(登录服务器的用户名)",
"host": "120.77.156.181(服务器公网ip)",
"ref": "git@开头的仓库地址",
"repo": "/deploy/app/production",
"post-deploy": "npm install --registry=https://registry.npm.taobao.org && pm2 startOrRestart ecosystem.json --env production",
"env": {
"NODE_ENV": "production"
}
}
修改完后保存,然后执行pm2 deploy命令
pm2 deploy ecosystem.json production setup
继续执行部署命令:
pm2 deploy ecosystem.json production
如果没有问题,会有如下输出(最后两行):
[PM2][WARN] Applications Movie not running, starting...
[PM2] App [Movie] launched (1 instances)
┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ watching │
├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼──────────┤
│ Movie │ 0 │ fork │ 3722 │ online │ 0 │ 0s │ 4% │ 18.4 MB │ disabled │
└──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴──────────┘
Use `pm2 show <id|name>` to get more details about an app
○ hook test
○ successfully deployed origin/master
--> Success
至此,pm2的部署完毕,此时可以通过120.77.156.181:port来访问部署的应用了,这里如果有域名,可以通过nginx反向代理,设置域名访问。
2)pm2的一些命令:
pm2 log 查看启动日志
pm2 status 查看实例信息
pm2 stop app 关闭名为app的实例
pm2 delete app 删除名为app的实例排名
5.服务器端设置pm2开机自启动
ubuntu系统两个命令就可以搞定:
进入服务器,输入如下命令:
pm2 save
pm2 startup
以上就是pm2部署node应用的流程,正常的应用还包括数据库,以及服务器安全问题的配置,这里略去没写。
pm2部署node应用的更多相关文章
- 在阿里云创建子域名,配置nginx,使用pm2部署node项目到ubuntu服务器
配置域名 在阿里云找到主域名 进入主域名之后,右上角添加解析,添加子域名, 记录类型选择cname,主机记录填写子域名的名称,记录值为主域名,至此阿里云已经配置好了. 检查nginx安装 首先检查服务 ...
- 使用 pm2 优雅的部署 node 程序
使用 pm2 优雅的部署 node 程序 # 启动并监控名字为 XXX 的 npm run start:dev 命令 pm2 start npm --watch --name XXX -- run s ...
- 使用pm2自动化部署node项目
1.pm2简介 pm2(process manager)是一个进程管理工具,维护一个进程列表,可以用它来管理你的node进程,负责所有正在运行的进程,并查看node进程的状态,也支持性能监控,负载均衡 ...
- 最好用的koa2+mysql的RESTful API脚手架,mvc架构,支持node调试,pm2部署。
#基于webpack构建的 Koa2 restful API 服务器脚手架 这是一个基于 Koa2 的轻量级 RESTful API Server 脚手架,支持 ES6, 支持使用TypeSc ...
- 如何线上部署node.js项目
来源:http://blog.csdn.net/chenlinIT/article/details/73343793 前言 最近工作不是很忙,在空闲时间学习用node+express搭建自己的个人博客 ...
- 阿里云部署Node.js项目(CentOS)
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又 ...
- linux安装nvm node版本管理器 nvm常用命令 部署node服务器环境
1,nvm git地址点击打开链接,安装命令 curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh ...
- centos7下部署node应用程序
一.安装node 二.安装nginx 三.使用express写一个简单的demo,并且使用pm2部署 四.错误 invalid PID number "" in "/ru ...
- 一种简单的生产环境部署Node.js程序方法
最近在部署Node.js程序时,写了段简单的脚本,发觉还挺简单的,忍不住想与大家分享. 配置文件 首先,本地测试环境和生产环境的数据库连接这些配置信息是不一样的,需要将其分开为两个文件存储 到conf ...
随机推荐
- 阶段3-团队合作\项目-网络安全传输系统\sprint1-传输子系统设计\第3课-加密传输优化
对之前的传输系统进行加密,使之成为加密的网络传输系统 客户端编程模型 通过以上模型对传统的TCP传输模型进行优化 首先完成初始化工作,它是要在创建socket之前完成 主要是以上四个函数的实现,那么这 ...
- Entity Framework Code-First(14):From Existing DB
Code-First from an Existing Database: Here, you will learn how to generate code-first context and en ...
- Git merge一个branch到另一个branch
在项目开发过程中,需要merge一个branch (branch名 taskBranch) 到另一个名为develop 的branch 方法: 先保证当前停留在develop的branch上 然后执行 ...
- ubuntu-12.04.5安装cacti笔记
坑啊,磨磨蹭蹭按了一个星期.按了3个版本. 第一次:cacti-0.8.7e.tar.gz 安装完之后,Host: Localhost->Memory Usage...四张图始终出不了.点击进去 ...
- IQA(图像质量评估)
图像质量评价(Image Quality Assessment,IQA)是图像处理中的基本技术之一,主要通过对图像进行特性分析研究,然后评估出图像优劣(图像失真程度). 主要的目的是使用合适的评价指标 ...
- 使用 jquery.webcam 进行asp.net 拍照
HTML 代码 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index. ...
- HierarchyId通过父节点创建一个新的子节点
--HierarchyId通过父节点创建一个新的子节点 CREATE TABLE #temp( node HierarchyID ); insert into #temp select '/' uni ...
- 谈谈Vue/React中的虚拟DOM(vDOM)与Key值
谈谈Vue/React中的虚拟DOM(vDOM)与Key值 一.DocumentFragment 在了解虚拟DOM前,先来了解DOM的一个对象属性--DocumentFragment. 在一次操作中, ...
- Unity---DOTween插件学习(3)---获取数据、协程、路径动画
目录 10.获取数据 11.携程 12.路径动画 本文及系列参考于Andy老师的DOTween系列 欢迎大家关注Andy老师 10.获取数据 类方法 返回所有暂停的动画,没有则返回null var l ...
- Nacos深入浅出(九)
然而Nacos的发布操作并不是上面我们想的那样通过代理去实现,通过下面的代码我们分析下: public class NacosConfigurationPropertiesBindingPostPro ...