Ubuntu搭建nodejs+mongodb服务器

作者: markdown | 来源:发表于2017-06-16 10:43 被阅读203次

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:

相关文章

网友评论

    本文标题:Ubuntu搭建nodejs+mongodb服务器

    本文链接:https://www.haomeiwen.com/subject/edjrqxtx.html