部署项目

1、git仓库配置(本地到第三方仓库)

上传项目或者修改项目代码的话每次都从代码这边一个字节字节的上传显然是低效的这个时候我们就会用到git仓库

1、git init 
1、git add . 添加所有文件
3、git commit -m 'first commit' 添加到本地
4、git remote add origin xxx(git地址可选的,如果我们是直接从仓库下载就不用这一步了
5、git push -u origin master 添加到远程
6、修改后 git status -s 查看修改了那些s
7、git fetch 如果仓库有东西
8、git merge origin/master (合并再提交)

2、本地到第三方仓库到服务器

1、yg@iZ2zec61wsgbo9t9i346jbZ 进入到我们的服务器
2、mkdir temp 在服务器上新建个目录
3、cd temp
4、git clone xxx(把仓库代码下载到服务器上,这里我用的是https,如果你用的是ssh那么就需要在服务器上生成id_rsa 和id_rsa.puh也就是key,然后存到github上这样才能建立服务器于github的连接)

3、pm2把项目部署到服务器上pm2 ecosystem

1、我们配置的方式是配置文件的方式
2、在项目里边新建一个ecosystem.json文件(配置如下)
{
  "app":[
    {
      "name": "test-server", // 应用的名字,
      "script": "app.js", // 启动的脚本文件
      "env": {
        "COMMON_VARIABLE": "true" // 启动的时候需要传进去的变量
      },
      "env_production": { // 生产环境的变量
        "NODE_ENV": "production"
      }
    }
  ],
  // 配置部署任务
  "deploy":{
    // 任务的名字
    "production": {
      "user": "yg",// 服务器上发布应用的user
      "host": ["39.96.4.34"], // 有多台服务器的话就传多个
       "port": "20",// 这个端口需要在安全组里边开启而且需要时用户登录时默认的端口,为了安全应该修改,但是我们没有修改
      "ref": "origin/master", //指定为主分支
      // 指定仓库地址,这里也可以是ssh,但是要确保服务器上的id_rsa 和id_rsa.puh,key要添加到代码仓库上
      "repo": "https://github.com/sunnyMyBaby/test-server.git",
      "path": "/www/web/production", // 把这个项目保部署到服务器的那个目录下 我用的是用户目录(服务器上输入pwd可查看) "path": "/home/yg/www/web/production",
      "ssh_options": "StricHostKeyChecking=no", // 取消key的校验,这一句可以不写但是之后回车会提示输入密码
      "post-deploy": "npm install && npm run build && pm2 startOrRestart ecosystem.json --env production",(可选)
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}

3、进入到服务器更目录 新建/www/web/目录

4、yangguang-01:test-server yangguang02$  进入本地我们的项目中

5、切换到本地项目中pm2 deploy ecosystem.json production setup这句命令让pm2连接上我们的服务器,

   从服务器里边创建我们发布项目所需要的文件夹,production是任务的名字可以修改setup是参数

6、到这里有可能就会出现Deploy failed,为啥呢,权限问题我们用的是yg这个用户,这个用户在根路径的

   www下面是没有新建文件的权限的,所以我们需要在web这个文件夹下修改权限(刻读可写可改)
   
   sudo chmod 777 web(www创建在绝对根目录下)  或者 sudo chmod 777 /www(ww创建在用户目录下,/home/yg/www/web/用户目录)

7、原理总结:通过本地pm2的这个工具在本地的命令上登录服务器,然后通知服务器从我们的git这个私有仓

   库里边把代码clone到我们的服务器里边,然后部署到相应的文件夹中,然后等待进一步的操作,这时候就可以进行第一次发布了

8、pm2 deploy ecosystem.json production  切换到本地项目代码 如果本地修改没有上传到github就会报错 

   commit or stash your changes before deploying,这时候需要现提交到远程仓库

9、然后再输入pm2 deploy ecosystem.json production 有可能会报错

   bash: pm2: command not found

   post-deploy hook failed
   
   这是因为我们在在服务器上使用的是ssh连接方式,所以切换到服务器终端里边用户yg的根目录下
  
  vi .bashrc 把下面的代码注释掉(避免提前返回)
  case $- in
    *i*) ;;
      *) return;;
  esac
  然后重新加载
  source .bashrc
  最后在本地项目终端执行第8步的代码
10、pm2 list 查看服务器中正在跑的服务(到这里发布成功,不带表我们可以访问,要修改域名指向,修改nginx,让nginx识别域名之后呢,把请求都转发到服务器上的3000端口)
11、yg@iZ2zec61wsgbo9t9i346jbZ:/etc/nginx/conf.d$修改nginx配置文件(sudo mv www-wwygcode-3000.conf www-server-test-3000.conf)把前面地址修改为后面的可以不用
upstream wwygcode {
  server 127.0.0.1:8081;
}

server {
 listen 80;
 server_name 39.96.4.34;

 location / {
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;

   proxy_set_header Host $http_host;
   proxy_set_header X-Nginx-Proxy true;

   proxy_pass http://wwygcode;
   proxy_redirect off;
 }
}
改为如下
upstream serverTest {
  server 127.0.0.1:3000;
}

server {
 listen 80;
 server_name www.wwygcode.com;

 location / {
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;

   proxy_set_header Host $http_host;
   proxy_set_header X-Nginx-Proxy true;

   proxy_pass http://serverTest;
   proxy_redirect off;
 }
}
sudo nginx -s reload 重启nginx
12、重启之后我们的访问http://www.wwygcode.com/报错502 Bad Gateway
    原因:除了服务器的的端口映射还有node本身,还有什么可能导致服务器出错?防火墙
    我们现在是nginx来把来自于www.wwygcode.com域名下的请求转发到了服务器上的他本地的3000端口
    所以防火墙需要允许3000口的访问
   sudo vi /etc/iptables.up.rules
   # mongodb connect   允许请求的进入和返回
   -A INPUT -s 127.0.0.1 -p tcp --destination-port 19999 -m state --state NEW,ESTABLISHED -j ACCEPT
   -A OUTPUT -d 127.0.0.1 -p tcp --source-port 19999 -m state --state ESTABLISHED -j ACCEPT 
   -A INPUT -s 127.0.0.1 -p tcp --destination-port 3000 -m state --state NEW,ESTABLISHED -j ACCEPT
   -A OUTPUT -d 127.0.0.1 -p tcp --source-port 3000  -m state --state ESTABLISHED -j ACCEPT

    sudo iptables-restore /etc/iptables.up.rules 载入防火墙文件
    到这里就可以访问了,如果打开还是502,那么可以看一下pm2 list 看看有没有启动,如果没有启动
    yg@iZ2zec61wsgbo9t9i346jbZ:~/www/web/production/source$ pm2 start app.js 这样手动去启动就可以了

4、部署成功之后本地修改代码如何同步线上版本

1、修改之后
   git add .
   git commit -m "change app.js"
   git push origin master
   pm2 deploy ecosystem.json production
sudo  cp www-server-test-3000.conf vue-server-test-3001.conf
upstream vuetest {
  server 127.0.0.1:3001;
}

server {
 listen 80;
 server_name vuetest.wwygcode.com;

 location / {
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;

   proxy_set_header Host $http_host;
   proxy_set_header X-Nginx-Proxy true;

   proxy_pass http://vuetest;
   proxy_redirect off;
 }
 // 静态资源访问
 locations ~* ^.+\.(jpg|jpeg|gif|png|ico|css|js|pdf|txt){
   root /home/yg/www/production/current/public
 }
}

你可能感兴趣的:(部署项目)