当前位置: 首页 > 后端技术 > Node.js

使用pm2快速部署项目到远程服务器

时间:2023-04-03 12:23:40 Node.js

使用后台当我们需要将项目部署到远程在线服务器时;传统的方法可能是:通过ssh、ftp等方式将本地代码上传到服务器;然后通过ssh登录到服务器,配置环境;手动启动应用程序。太手动,麻烦,操作起来麻烦。现代自动化部署环境:本地(Mac);远程服务器(CentOS)工具:Git、pm2、node;需要了解的概念:ssh密钥登录;Github增加DeployKeys1,服务器环境部署基础工具安装:git、pm2、node2、sshserver免密码登录服务器生成密钥对ssh-keygen-trsa-C'1285227393@qq.com'-t指定密钥type,默认为rsa,可以省略-C设置评论文字,比如email,可以省略由于使用的是百度云服务器,直接在界面生成密钥对,然后下载到本地就是一个xxx.txt文件。这时候可以使用ssh-ixxx.txt[下载的公钥路径]name@domain登录错误:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@警告:未受保护的私钥文件!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'server-key.txt'的权限0644太开放了。要求你的私钥文件不能被其他人访问。这个私钥将被忽略。加载密钥“server-key.txt":badpermissions可能意味着私钥文件不能被其他人访问。可能考虑到如果被别人获取,可能会影响服务器的安全,所以需要重新设置秘钥文件的权限,重新设置秘钥文件的权限:chmod600server-key。txt,取消其他用户的读权限。但是,使用sshname@domain的形式还是不能直接登录;追查原因,发现密钥对不是直接在本地生成的;所以你需要使用ssh-add-K~/.ssh/xxx.txt[下载公钥文件](-K表示永久存储,如果不需要每次开机都重新ssh-add),就像在本地生成密钥对,然后部署到服务器,需要将密钥追加到ssh认证文件中;sshname@domain可以正常免密码登录!(配置这种登录方式后需要使用pm2)配置快速登录(补充)1.进入ssh目录:cd~/.ssh2.创建config文件:touchconfig3.进入config配置文件配置:viconfigHostlwh#ShortcutAliasHostNamehost#sshserveripordomainPortport#ssh服务器端口,默认为22Userroot#ssh服务器用户名IdentityFile~/.ssh/server-key.txt#下载的私钥文件4.:wq!保存退出5.完成后可以直接使用:sshlwh登录Github上添加DeployKeys服务器生成秘钥#生成ssh密钥ssh-keygen-trsa#查看公钥内容cat~/.ssh/id_rsa.pub复制秘钥内容,在Github对应项目仓库Settings下的Deploykeys中添加ConfigureDeploykeys,这样服务器就可以通过ssh拉取项目仓库;配置pm2配置ecosystem.config.js;具体的pm2配置和基本使用介绍戳~使用pm2配置生产环境module.exports={apps:[{name:'back-Api',//应用名称script:'./server/start.js',//应用文件位置env:{//PM2_SERVE_PATH:"./apidoc",//静态服务路径PM2_SERVE_PORT:8080,//静态服务器访问端口NODE_ENV:'development'//启动默认模式},env_production:{PM2_SERVE_PORT:8080,NODE_ENV:'production'//使用生产模式pm2startecosystem.config.js--envproduction},instances:"max",//将应用分布在所有CPU核上,可以是整数或负数instance_var:"INSTANCE_ID",exec_mode:"cluster",min_uptime:"30s",max_restarts:10,//cron_restart:"40",watch:["server",],//监控模式不能简单设置为true,这样容易导致无限重启,因为日志文件是变化的,需要排除在监控之外merge_logs:true,//在集群情况下,可以合并log}],deploy:{production:{//配置不能提供密码,需要配置ssh免密码登录服务器user:'root',//ssh登录服务器usernamehost:'100.12.102.198',//ssh地址服务器域/IPref:'origin/master',//Gitremote/branchrepo:'git@github.com',//git地址使用ssh地址path:'/liwenhui/www',//项目存放服务器文件路径"post-deploy":'npminstall&&pm2reloadecosystem.config.js--envproduction'//部署后的动作}}};开始部署开始部署pm2deployecosystem.config.jsproductionerrorappledeMBP:back-server-apiapple$pm2deployecosystem.config.jsproduction-->Deployingtoproductionenvironment-->onhost106.12.132.188○deployingorigin/master○执行pre-deploy-local○挂钩pre-deploybash:第0行:cd:/lwh/www/source:没有这样的文件或目录○获取更新○fullfetchbash:第0行:cd:/lwh/www/source:否suchfileordirectoryfetchfailedDeployfailed1需要先初始化服务端应用:pm2deployecosystem.config.jsproductionsetup,然后:pm2deployecosystem.config.jsproduction其他pm2日志配置使用详情使用pm2配置生产环境本地连接到远程mongodb配置服务器(CentOS)安装配置mongodb《步步积淀,行万里路》——持续更新中~,喜欢就点赞关注吧!往期经典好文:团队协作必备的Git操作浅谈Js前端模块化规范Koa日志中间件包开发(log4js)