pm2-如丝般的部署Web应用

简介: 现在DevOps如此的火,我们是不是也应该要达到生产部署一条龙服务呢?今天我就用pm2实现一个koa后台远程部署到阿里云ECS上。

现在DevOps如此的火,我们是不是也应该要达到生产部署一条龙服务呢?今天我就用pm2实现一个koa后台远程部署到阿里云ECS上。

全局安装pm2

npm install -g pm2  # yarn global add pm2

生成pm2配置文件

  • 在项目根目录生成pm2执行如下代码,生成pm2配置文件ecosystem.config.js
pm2 ecosystem

image

  • 对ecosystem.config.js进行修改,修改部分在depoly部分,有注释
module.exports = {
  /**
   * Application configuration section
   * http://pm2.keymetrics.io/docs/usage/application-declaration/
   */
  apps : [

    // First application
    {
      name      : 'koatest',
      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 : 'c4',                                                             //也可以useradd另建用户
      host : '47.95.247.139',                                                  // 服务器地址
      ref  : 'origin/master',
      repo : 'git@github.com:guzhongren/backend-based-on-Koa2.git',            // github上的项目地址
      path : '/home/c4/depoly',                                                //  服务器上放项目的目录
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
    },
    dev : {
      user : 'c4',
      host : '47.95.247.139',
      ref  : 'origin/master',
      repo : 'git@github.com:guzhongren/backend-based-on-Koa2.git',
      path : '/home/c4/depoly',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env dev',
      env  : {
        NODE_ENV: 'dev'
      }
    }
  }
};
  • 如果有ssh或者github权限问题,还请自行解决。

部署

  • 使用git将新的更改和文件提交到github上。
git add .
git commit -m 'something'
git pull
git push
  • 本地执行以下命令,用于部署设置,需要注意的是,对应的ssh端口是默认的22。
pm2 deploy ecosystem.config.js production setup

成功后显示如下

D:\04.Study\01.Web\backend-based-on-Koa2>pm2 deploy ecosystem.config.js production setup
--> Deploying to production environment
--> on host 47.95.247.139
  ○ hook pre-setup
c4@47.95.247.139's password:
  ○ running setup
  ○ cloning git@github.com:guzhongren/backend-based-on-Koa2.git
  ○ full fetch
c4@47.95.247.139's password:
Cloning into '/home/c4/depoly/source'...
Warning: Permanently added 'github.com,192.30.255.112' (RSA) to the list of known hosts.
c4@47.95.247.139's password:
  ○ hook post-setup
  ○ setup complete
--> Success
  • 部署设置完毕后,执行以下命令进行部署。
pm2 deploy ecosystem.config.js production

成功后如下:

D:\04.Study\01.Web\backend-based-on-Koa2>pm2 deploy ecosystem.config.js production
--> Deploying to production environment
--> on host 47.95.247.139
  ○ deploying origin/master
  ○ executing pre-deploy-local
  ○ hook pre-deploy
  ○ fetching updates
  ○ full fetch
c4@47.95.247.139's password:
Fetching origin
Warning: Permanently added 'github.com,192.30.255.112' (RSA) to the list of known hosts.
From github.com:guzhongren/backend-based-on-Koa2
   bd63b11..d6214e4  master     -> origin/master
  ○ resetting HEAD to origin/master
c4@47.95.247.139's password:
Permission denied, please try again.
c4@47.95.247.139's password:
HEAD is now at d6214e4 update
c4@47.95.247.139's password:
c4@47.95.247.139's password:
  ○ executing post-deploy `export && npm install && pm2 reload ecosystem.config.js --env production`
c4@47.95.247.139's password:
HOME=/home/c4
LANG=en_US.UTF-8
LOGNAME=c4
MAIL=/var/mail/c4
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
SHELL=/usr/bin/zsh
SSH_CLIENT='202.100.35.103 19581 22'
SSH_CONNECTION='202.100.35.103 19581 172.17.193.126 22'
USER=c4
XDG_RUNTIME_DIR=/run/user/1000
XDG_SESSION_ID=24
npm WARN optional Skipping failed optional dependency /chokidar/fsevents:
npm WARN zsh:1: command not found: pm2
notsup Not compatible with your operating system or architecture: fsevents@1.1.3
  ○ hook test
  ○ successfully deployed origin/master
--> Success

错误处理

  • 权限问题
D:\04.Study\01.Web\backend-based-on-Koa2>pm2 deploy ecosystem.config.js production setup
--> Deploying to production environment
--> on host 47.95.247.139
  ○ hook pre-setup
mkdir: cannot create directory ‘/home/c4/depoly/shared’: Permission denied
mkdir: cannot create directory ‘/home/c4/depoly/shared’: Permission denied
mkdir: cannot create directory ‘/home/c4/depoly/source’: Permission denied

  setup paths failed

Deploy failed

此问题为部署所在文件夹的权限,用chown脚本即可,如下实例

sudo chown -hR c4:c4 ./depoly
  • github ssh问题
D:\04.Study\01.Web\backend-based-on-Koa2>pm2 deploy ecosystem.config.js production setup
--> Deploying to production environment
--> on host 47.95.247.139
  ○ hook pre-setup
c4@47.95.247.139's password:
Permission denied, please try again.
c4@47.95.247.139's password:
  ○ running setup
  ○ cloning git@github.com:guzhongren/backend-based-on-Koa2.git
  ○ full fetch
c4@47.95.247.139's password:
Cloning into '/home/c4/depoly/source'...
Warning: Permanently added 'github.com,192.30.255.112' (RSA) to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

  failed to clone

Deploy failed

解决办法
在部署机器上用ssh-keygen生成密钥。

  • 执行如下命令
ssh-keygen -t rsa -C 'guzhongren@live.cn'
cat ~/.ssh/id_rsa.pub
  • 将cat输出的文字拷贝到github->setting->SSH and GPG keys中。

image

pm2其他命令说明

命令 说明
pm2 start app.js 启动应用
pm2 list 列出所有应用
pm2 monit 查看资源消耗
pm2 describe [app/id] 查看某一个应用的状态
pm2 logs 查看所有日志
pm2 restart [app/id] 重启应用
pm2 stop [app/id/all] 停止应用
pm2 web 访问 url:9615

总结

pm2使用hai还是非常简单的,有很多如Monitor之类的功能很实用,还需深度探索。

目录
相关文章
|
1月前
|
存储 监控 安全
如何在Python Web开发中确保应用的安全性?
如何在Python Web开发中确保应用的安全性?
|
5天前
|
弹性计算 Java 关系型数据库
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
|
13天前
|
Kubernetes 安全 Devops
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
38 10
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
|
5天前
|
弹性计算 Java 数据库
Web应用上云经典架构实战
本课程详细介绍了Web应用上云的经典架构实战,涵盖前期准备、配置ALB、创建服务器组和监听、验证ECS公网能力、环境配置(JDK、Maven、Node、Git)、下载并运行若依框架、操作第二台ECS以及验证高可用性。通过具体步骤和命令,帮助学员快速掌握云上部署的全流程。
|
26天前
|
前端开发 JavaScript UED
在数字化时代,Web 应用性能优化尤为重要。本文探讨了CSS与HTML在提升Web性能中的关键作用及未来趋势
在数字化时代,Web 应用性能优化尤为重要。本文探讨了CSS与HTML在提升Web性能中的关键作用及未来趋势,包括样式表优化、DOM操作减少、图像优化等技术,并分析了电商网站的具体案例,强调了技术演进对Web性能的深远影响。
29 5
|
29天前
|
机器学习/深度学习 人工智能 JavaScript
JavaScript和TypeScript的未来发展趋势及其在Web开发中的应用前景
本文探讨了JavaScript和TypeScript的未来发展趋势及其在Web开发中的应用前景。JavaScript将注重性能优化、跨平台开发、AI融合及WebAssembly整合;TypeScript则强调与框架整合、强类型检查、前端工程化及WebAssembly的深度结合。两者结合发展,特别是在Vue 3.0中完全采用TypeScript编写,预示着未来的Web开发将更加高效、可靠。
42 4
|
5天前
|
弹性计算 负载均衡 安全
云端问道-Web应用上云经典架构方案教学
本文介绍了企业业务上云的经典架构设计,涵盖用户业务现状及挑战、阿里云业务托管架构设计、方案选型配置及业务初期低门槛使用等内容。通过详细分析现有架构的问题,提出了高可用、安全、可扩展的解决方案,并提供了按量付费的低成本选项,帮助企业在业务初期顺利上云。
|
1月前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
29 4
|
1月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用