使用背景
当我们需要将项目部署到远程线上服务器时;传统的方法可能就是:
将本地代码通过ssh、ftp等方式上传到服务器;
然后通过ssh登入到服务器,配置好环境;
手动启动应用。
太过手动化,麻烦,操作繁琐。
现代自动化部署
环境: 本地(Mac);远程服务器(CentOS)
使用工具: Git、pm2、node
;
需知概念: ssh秘钥登陆
;Github添加Deploy Keys
1、服务器环境部署
2、ssh服务器免密登陆
服务器生成秘钥对 ssh-keygen -t rsa -C ‘1285227393@qq.com’ -t 指定密钥类型,默认即 rsa ,可以省略 -C 设置注释文字,比如邮箱,可以省略
由于使用的是百度云服务器 ,里面可以直接界面生成秘钥对,然后下载到本地的是一个xxx.txt文件
. 此时登陆可以使用ssh -i xxx.txt[下载的公钥路径] name@domain
报错:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'server-key.txt' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "server-key.txt" : bad permissions
大概意思就是,私钥文件不能被其他人所访问。可能考虑到如果被别人获取到,就可能对服务器安全造成影响,所以需要从新设置下秘钥文件的权限
重新设置秘钥文件权限:chmod 600 server-key.txt
,取消其他用户Read权限
但是 ,使用ssh name@domain
形式还是没法直接登入;追其原因,发现因为不是本地直接生成的秘钥对;
所以需要使用ssh-add -K ~/.ssh/xxx.txt[下载公钥文件]
(-K
表示永久存储式,如果不使用者每次开机后需要重新ssh-add),就像是本地生成秘钥对然后部署到服务器需要将秘钥追加到ssh认证文件一个道理;
ssh name@domain
可以正常免密登陆啦!(配置这种形式登陆后面pm2需要使用)
配置快捷登录(附加)
1 . 进入ssh目录:cd ~ / . ssh
2 . 创建config文件: touch config
3 . 进入config配置文件配置:vi config
Host lwh #快捷别名
HostName host #ssh服务器ip或domain
Port port #ssh服务器端口,默认为22
User root #ssh服务器用户名
IdentityFile ~ / . ssh/ server- key. txt #下载的私钥文件
4 . : wq! 保存退出
5 . 完成后可以直接使用:ssh lwh 登陆
在Github上添加Deploy Keys
服务器生成秘钥
# 生成ssh key
ssh- keygen - t rsa
# 查看公钥内容
cat ~ / . ssh/ id_rsa. pub
复制秘钥内容,添加到Github上对应的项目仓库Settings下的Deploy keys
中
配置Deploy keys
,使得服务器可以通过ssh拉取项目仓库;
配置pm2
module. exports = {
apps: [
{
name: 'back-Api' ,
script: './server/start.js' ,
env: {
PM2_SERVE_PORT: 8080 ,
NODE_ENV: 'development'
} ,
env_production : {
PM2_SERVE_PORT: 8080 ,
NODE_ENV: 'production'
} ,
instances: "max" ,
instance_var: "INSTANCE_ID" ,
exec_mode: "cluster" ,
min_uptime: "30s" ,
max_restarts: 10 ,
watch: [
"server" ,
] ,
merge_logs: true ,
}
] ,
deploy: {
production : {
user: 'root' ,
host: '100.12.102.198' ,
ref: 'origin/master' ,
repo: 'git@github.com' ,
path: '/liwenhui/www' ,
"post-deploy" : 'npm install && pm2 reload ecosystem.config.js --env production'
}
}
} ;
开始部署
开始部署 pm2 deploy ecosystem.config.js production
报错 appledeMBP:back-server-api apple$ pm2 deploy ecosystem.config.js production –> Deploying to production environment –> on host 106.12.132.188 ○ deploying origin/master ○ executing pre-deploy-local ○ hook pre-deploy bash: 第 0 行:cd: /lwh/www/source: 没有那个文件或目录 ○ fetching updates ○ full fetch bash: 第 0 行:cd: /lwh/www/source: 没有那个文件或目录 fetch failed Deploy failed 1
需要先初始化服务器应用: pm2 deploy ecosystem.config.js production setup
,
然后: pm2 deploy ecosystem.config.js production
其他
pm2日志配置使用详情使用pm2配置生产环境
本地连接远程mongodb配置服务器(CentOS)安装配置mongodb