Ubuntu搭建nodejs+mongodb服务器

Server: Ubuntu 14.04
Client: Windows 10
nodejs: v8.1.0
mongodb: v3.4.4

一、使用SSH连接服务器

  1. 找到您所下载的私钥文件目录,如:/root/xxx.pem。xxx.pem 即为您的私钥文件,下同。
  2. 使用以下命令修改私钥文件的属性:chmod 400 xxx.pem
  3. 使用 SSH 命令连接至实例(假设实例的公网 IP 地址为 10.10.10.100):ssh root@10.10.10.100 –i /root/xxx.pem
  4. 设置命令别名,查找并打开bash.bashrc,添加alias ssh_root="ssh root@10.10.10.100 –i /root/xxx.pem"

PS:

二、安装Nodejs环境

  1. 安装工具:
    sudo apt-get install vim openssl build-essential libssl-dev wget curl git
  2. 安装npm版本管理工具nvm:
    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh| bash
  3. 安装指定版本的npm:
    nvm install v版本号, nvm use v版本号(指定版本),nvm alias default v版本号(指定default为指定版本)
  4. 设置npm为淘宝npm镜像:
    npm install -g cnpm --registry=https://registry.npm.taobao.org
  5. 安装npm全局工具:
    cnpm i pm2 webpack gulp grunt-cli nodemon http-server -g

三、安装mongodb数据库

  1. Import the public key used by the package management system.
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
  2. 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
  3. Reload local package database
    sudo apt-get update
  4. Install the MongoDB packages.
    sudo apt-get install -y mongodb-org
  5. 设置mongodb配置:
    使用vi /etc/mongod.conf打开mongodb配置文件,修改接口设置port的值,需要使用远程连接访问,设置bind_ip为0.0.0.0
  6. 设置防火墙
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端口"的规则
  1. mongodb服务
service mongod stop // 停止服务
service mongod start // 启动服务
service mongod restart // 重启服务
  1. 设置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,回车退出

  1. 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:

四、使用pm2部署项目

  1. 将项目上传至git
  2. 添加公钥公钥
    在服务器中使用ssh-keygen -t rsa -b 4096 -C "10261"命令,生成密钥,并将公钥加入git项目中(不要使用密码)。
  3. 在项目中添加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:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容