本地和我们的远程服务器,必须都安装有git,pm2,以及nodejs环境。实际上配置自动化发布本地代码就到远程服务器。省去了远程服务器的登录过程,如果项目小还不要紧,但是项目过大,不可能每个人都去登录服务器主机,而且中途发布的过程经过jit远程仓库以后,可以增加代码的安全性和规范性,这样是谁在何时何地修改的代码都有记录,也增加了项目的稳定性。所以这也是为什么推荐使用自动发布的原因。而我们之所以使用PM2软件,是因为他相对于forever有着更强大之处,见下图:
下面再简述一下本地,git,服务器在发布时候的流程图,见下图:
(三)开始发布
1、配置本地和服务器git。这里我们使用的代码仓库为码云,因为码云服务器在国内,响应速度更快一些,关键是私人仓免费的多。gitub是要收钱滴。划重点,我找了很久她两的区别,就是收费问题。下面来看配置步骤:
ssh-keygen -t rsa -b 4096 -C 'g376482a@163.com'
1 git config --global user.name"gede"
2 git config --global user.email"g376482a@163.com"
eval "$(ssh-agent -s)"
git clone git@gitee.com:qjnugede/ice.git
2、配置好git就可以开始我们的自动部署了,在部署之前,我们先进行一步添加本地ssh到服务器的操作,这样就省区了每次发布部署代码都要频繁输入服务器密码的麻烦,步骤如下:
ssh-copy-id -i .ssh/id_rsa.pub root@101.132.109.40
3、自动化部署代码
1 {
2 "apps": [{
3 "name": "ice", //对应Nginx上的配置
4 "script": "server.js", //入口文件
5 "env": {
6 "COMON_VARIABLE": "true"
7 },
8 "env_production": {
9 "NODE_ENV": "production"
10 }
11 }],
12 "deploy": {
13 "production": {
14 "user": "root",
15 "host": ["101.132.109.40"], //服务器ip地址
16 "port": "22", //登录端口
17 "ref": "origin/master", //git仓库对应的项目目录
18 "repo": "git@gitee.com:qjnugede/ice.git",
19 "path": "/www/ice/production", //要部署到服务器哪个位置,如果没有会自动创建
20 "ssh_options": "StrictHostKeyChecking=no",
21 //构建在发布
22 // "post-deploy": "npm install --registry=https://registry.npm.taobao.org && grunt build && pm2 startOrRestart ecosystem.json --env production",
23 "pre-deploy-local":"echo 'Deploy Done!'", //提示发布进程
24 "env": {
25 "NODE_ENV": "production"
26 }
27 }}
28 }
1 const http = require('http');
2
3 const hostname = '127.0.0.1';
4 const port = 3000;
5
6 const server = http.createServer((req, res) => {
7 res.statusCode = 200;
8 res.setHeader('Content-Type', 'text/plain');
9 res.end('Hello finaish\n');
10 });
11
12 server.listen(port, hostname, () => {
13 console.log(`Server running at http://${hostname}:${port}/`);
14 });
1 pm2 deploy ecosystem.json production setup
如果报错继续往下看跳过此步骤,报错请看错误类型这里提供了 bash: pm2: command not found 的解决方法,报错图如下:
pm2 deploy ecosystem.json production
1 export NVM_DIR="$HOME/.nvm"
2 [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
3 [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nv
pm2 delete server
到这里我们的自动化部署教程就结束了,谢谢观看。