在CentOS7系统上部署nodejs
新建用户
- 登录root用户,创建新用户
ssh root@IP (输入密码完成登录)
adduser tom
password tom (设置tom用户的密码 或 passwd tom)
whereis sudoers (查找sudoers文件)
ls -l /etc/sudoers (查看sudoers文件的权限)
chmod -v u+w /etc/sudoers (赋予sudoers写的权限)
vi /etc/sudoers (在root用户下面添加tom用户)
chmod -v u-w /etc/sudoers
- 登录tom用户,创建ssh连接 (在tom文件夹下)
mkdir .ssh
chmod 700 .ssh
ssh-keygen -t rsa -b 4096 -C "email@xx.com" (一路回车,创建秘钥)
eval "$(ssh-agent -s)"
cd .ssh
ssh-add id_rsa (添加秘钥到ssh服务器中,不行的话试试 ssh -add id\_rsa)
vi authorized_keys (直接退出即可,这样相当于创建了一个有写的权限的文件)
chmod 600 authorized_keys (600只有属主有读写权限,700只有属主有读、写、执行权限,777所有用户都有读、写、执行权限)
cat id\_rsa.pub >> authorized\_keys (将id\_rsa.pub的内容添加到authorized_keys中)
ls -l 查看详情,没问题,进行下一步
- 本地电脑ssh配置秘钥
// 进入c盘的用户/administrator目录下,看是否有.ssh文件夹,若没有,创建一个:
打开git bash
cd C/Users/Administrator
mkdir .ssh
ssh-keygen -t rsa -b 4096 -C "email@xx.com"
eval "$(ssh-agent -s)"
ssh -add: id_rsa (id\_rsa文件的路径)
- 将本地公钥放到tom的公钥管理中
ssh tom@IP + 密码
vi .ssh/authorized\_keys (将本地的id\_rsa.pub复制粘贴到authorized_keys中,保存退出)
eval "$(ssh -agent -s)"
// 测试本地是否可以不需要密码登录服务器
搭建开发的测试环境
- 安装系统应用
sudo yum install vim openssl build-essential libssl-dev wget curl git g++ gcc
git --version
- 安装nvm,在github上找到安装包地址,curl或者wget的都可以,任选其一
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.3/install.sh | bash
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.3/install.sh | bash
// 测试是否安装成功:
nvm -v (报错处理: 在.bash_profile 文件中的PATH后追加 $HOME/tom/.nvm, 相邻的$HOME用半角:隔开)
- 安装node(启动新的终端)
nvm ls-remote (查看可安装的node版本)
nvm install v6.10.2 (安装某个稳定版本即可,lattest LTS: Boron)
npm -v
node -v
- 安装nodejs项目依赖包
npm install pm2 webpack glup grunt-cli express -g
pm2 -v
项目安装调试
- 在tom文件夹下创建一个文件夹nodeapps,里面创建一个测试文件
mkdir nodeapps
chmod 700 nodeapps
vi test/app.js (复制一个简易的node服务器代码)
node test/app.js (外部能正常访问服务器)
npm i express body-parser -S
pm2 start test/app.js (能正常启动,OK)
- 本地创建项目,提交到git仓库,然后在服务器上的nodeapps文件夹下:
git clone "https://git仓库地址"
npm i
pm2 start /app.js (app.js的路径)
// 测试能跑起来,则服务器环境部署完成
项目远程发布
- 配置git仓库(以coding.net(国内的,速度快,有免费的私有仓库)的免费仓库为例)
- 在coding.net创建项目,
- 在仓库设置中选择部署公钥,分别把本地和远程服务器上的公钥添加到仓库“新建部署公钥”选项中
- 测试本地上传到这个仓库是否可以通过ssh(点击仓库地址的url前面的https可弹出ssh地址路径,复制即可)的方式免密上传
- 测试远程服务器clone这个仓库是否可以通过ssh(点击仓库地址的url前面的https可弹出ssh地址路径,复制即可)的方式免密clone
- 远程部署发布项目
- pm2.json配置文件 (配置文件内容详解:http://pm2.keymetrics.io/docs/usage/deployment/)
- 该配置文件是个json数组,
- 多个服务器同时部署依次放到apps对应的数组中即可
- 采用cluster模式启动了4个服务进程;如果服务占用的内存超过300M,会自动进行重启。
- 重要: 在部署项目时,需要安装npm依赖时,需要用到:
"post-deploy": "npm install && pm2 start app.js",
,卸载deploy的production中即可,它会在项目部署到服务器上后,启动前运行npm install 命令安装项目依赖。
…
- 项目远程发布命令:
- 项目发布命令:
pm2 deploy app.json production setup
- 项目发布命令:
pm2 deploy app.json production
- 项目修改:
pm2命令
```
// 启动
pm2 start app.js // 直接启动nodejs服务器
pm2 start app.js --name my-app // --name 可以对本次启动的进行命名
pm2 start app.js -i 0 // 根据CPU核数启动进程个数
pm2 start app.js --watch // 实时监控app.js的方式启动,当app.js文件有变动时,pm2会自动reload
// 监控
pm2 monit
// 程序信息
pm2 describe id|all
// 停止
pm2 stop id|all
// 重载
pm2 reload id|all
// 重启
pm2 restart id|all
// 删除pm2进程
pm2 delete id|all
// 日志操作
pm2 logs [--raw] // 在流中显示所有进程日志
pm2 flush // 清空所有日志文件
pm2 reloadLogs // 重装所有的日志
// 升级pm2
npm install pm2@lastest -g // 安装最新版本的pm2
pm2 updatePM2 // 升级pm2
// 帮助
pm2 --help
```