Server: Ubuntu 14.04
Client: Windows 10
nodejs: v8.1.0
mongodb: v3.4.4
一、使用SSH连接服务器
- 找到您所下载的私钥文件目录,如:/root/xxx.pem。xxx.pem 即为您的私钥文件,下同。
- 使用以下命令修改私钥文件的属性:
chmod 400 xxx.pem
。 - 使用 SSH 命令连接至实例(假设实例的公网 IP 地址为 10.10.10.100):
ssh root@10.10.10.100 –i /root/xxx.pem
。 - 设置命令别名,查找并打开bash.bashrc,添加
alias ssh_root="ssh root@10.10.10.100 –i /root/xxx.pem"
PS:
二、安装Nodejs环境
- 安装工具:
sudo apt-get install vim openssl build-essential libssl-dev wget curl git
- 安装npm版本管理工具nvm:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh| bash
- 安装指定版本的npm:
nvm install v版本号, nvm use v版本号(指定版本),nvm alias default v版本号(指定default为指定版本)
- 设置npm为淘宝npm镜像:
npm install -g cnpm --registry=https://registry.npm.taobao.org
- 安装npm全局工具:
cnpm i pm2 webpack gulp grunt-cli nodemon http-server -g
三、安装mongodb数据库
- Import the public key used by the package management system.
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
- Create a list file for MongoDB(Ubuntu 14.04)
echo "deb [ arch=amd64 ] [http://repo.mongodb.org/apt/ubuntu](http://repo.mongodb.org/apt/ubuntu) trusty/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
- Reload local package database
sudo apt-get update
- Install the MongoDB packages.
sudo apt-get install -y mongodb-org
- 设置mongodb配置:
使用vi /etc/mongod.conf
打开mongodb配置文件,修改接口设置port的值,需要使用远程连接访问,设置bind_ip为0.0.0.0 - 设置防火墙
ufw enable
ufw allow 22
开放需要使用的端口(ssh连接的22,远程访问数据库的端口、将要使用的项目端口),ufw命令列表:
ufw enable/disable:打开/关闭ufw
ufw status:查看已经定义的ufw规则
ufw default allow/deny:外来访问默认允许/拒绝
ufw allow/deny 20:允许/拒绝 访问20端口,20后可跟/tcp或/udp,表示tcp或udp封包。
ufw allow/deny servicename:ufw从/etc/services中找到对应service的端口,进行过滤。
ufw allow proto tcp from 10.0.1.0/10 to 本机ip port 25:允许自10.0.1.0/10的tcp封包访问本机的25端口。
ufw delete allow/deny 20:删除以前定义的"允许/拒绝访问20端口"的规则
- mongodb服务
service mongod stop // 停止服务
service mongod start // 启动服务
service mongod restart // 重启服务
- 设置mongodb自动备份
新建目录tasks保存任务,backup保存备份数据
编写sh命令:
\#!/bin/sh
backUpFolder=/root/backup/educ
date_now=\`date +%Y_%m_%d_%H%M\`
backFileName=educ_$date_now
cd $backUpFolder
mkdir -p $backFileName
mongodump -h 127.0.0.1:27017 -d educ -u educ_backup -p educ*wheel -o $backFileName
tar zcvf $backFileName.tar.gz $backFileName
rm -rf $backFileName
定时执行命令:
crontab -e
第一次进入选择2
00 00 * * * sh /root/tasks/db_backup.sh
设置0点执行命令,ctrl+x,shfit+Y,回车退出
- mongodb备份下载及恢复数据
使用scp -i D:/key/Ubuntu.pem root@116.62.27.227:/root/backup/educ/educ_2017_06_21_0000.tar.gz ./
命令,将备份数据拉取到本地
使用mongorestore -h [服务器地址] -d [数据库实例] --dir [备份目录] --drop
命令,恢复数据,--drop
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用!
PS:
- Install MongoDB Community Edition on Ubuntu
- Ubuntu 防火墙与端口控制
- Ubuntu默认防火墙安装、启用、配置、端口、查看状态相关信息
- MongoDB导入导出以及数据库备份
四、使用pm2部署项目
- 将项目上传至git
- 添加公钥公钥
在服务器中使用ssh-keygen -t rsa -b 4096 -C "10261"
命令,生成密钥,并将公钥加入git项目中(不要使用密码)。 - 在项目中添加ecosystem.json文件
{
// Applications part
"apps" : [{
"name" : "educ-admin", // apps名称
"script" : "server.sh", // 项目入口文件
"env": {
"COMMON_VARIABLE": "true"
},
// Environment variables injected when starting with --env production
// http://pm2.keymetrics.io/docs/usage/application-declaration/#switching-to-different-environments
"env_production" : {
"NODE_ENV": "production"
}
}],
// Deployment part
// Here you describe each environment
"deploy" : {
"production" : {
"user" : "root", // 连接服务器的用户
"key" : "D:/key/Ubuntu.pem", // 连接服务器的私钥位置
// Multi host is possible, just by passing IPs/hostname as an array
"host" : ["116.62.27.227"], // 服务器地址
// Branch
"ref" : "origin/master", // 使用的项目分支
// Git repository to clone
"repo" : "git@git.oschina.net:chenzhangxiang/educ-admin.git", // 项目的git地址(SSH)
// Path of the application on target servers
"path" : "/www/educ-admin", // 服务器上项目所在文件夹
// Can be used to give options in the format used in the configura-
// tion file. This is useful for specifying options for which there
// is no separate command-line flag, see 'man ssh'
// can be either a single string or an array of strings
"ssh_options": "StrictHostKeyChecking=no",
// "post-deploy" : "cnpm install && pm2 startOrRestart ecosystem.json --env production",
"post-deploy" : "cnpm install && npm run build && pm2 startOrRestart ecosystem.json --env production", // 执行命令
// Environment variables that must be injected in all applications on this env
"env" : {
"NODE_ENV": "production"
}
}
}
}
第一次运行pm2 deploy ecosystem.json production setup
,拷贝项目成功后再运行pm2 deploy ecosystem.json production
。
如果出现pm2: command not found错误,则将.bashrc文件下的If not running interactively, don't do anything
注释下的语句注释掉。
如果需要修改项目入口文件,则需要在服务器上先删除该进程,使用pm2 delete [name]
。
如果是node项目,那可以直接将node项目的入口文件设置为入口文件。我的项目中有一个是vue项目生产的静态文件,部署这个项目我使用http-server,将命令写在.sh文件中,然后将.sh作为入口文件。
#!/bin/sh
# server.sh
# ./dist是静态文件所在目录,8000是指定的端口
http-server -p 8000 ./dist
PS: