写好代码,花钱买了VPS,看着Charges一直上涨却无从下手?记一位新手司机从购买VPS到成功访问的过程

0.购买VPS

首先,选择VPS提供商,部署一个新的服务器(Deploy New Server),我使用的是Vultr提供的VPS

操作系统可以自由选择,我这边使用的是CentOS 7,选择其他操作系统的胖友可以搜一下相应操作系统的部署教程

1.使用PuTTY连接远程VPS

安装PuTTY

打开PuTTY,在 Host Name(or IP address) 那一栏填上VPS提供商给你的IP地址,然后点Open开启一个新会话(也可以点底下的Save保存一下,下次直接双击Saved Sessions中保存的的会话打开就行,无须输入IP)

打开后会出现一个Terminal,显示login as: ,这边输入VPS提供商给你的Username,默认应该是root

然后出现root@your ip address ‘s password: ,输入VPS提供商提供的Password(可以在本机上复制,然后在窗口中点击鼠标右键,复制的内容就被粘贴了),然后回车

注意:输入密码的时候不会显示你输入的东西

成功登录

2.准备工作

用yum安装gcc

yum -y install gcc make gcc-c++ openssl-devel wget

3.安装Node.js

这边以v4.5.0版本、使用源码安装为例,也可以使用EPEL

先用cd命令进入到你要安装Node.js的目录

到Node.js官网上复制源码的地址,然后执行:

wget https://nodejs.org/dist/v4.5.0/node-v4.5.0.tar.gz

然后解压提取文件

tar zxvf node-v4.5.0.tar.gz

执行后会生成node-v4.5.0文件夹,cd进入,里面有个configure文件

配置并编译#这步执行得比较久,可以先去喝杯咖啡

./configure
make

然后安装

make install

使用node -v检查是否安装成功

4.安装MongoDB

这边以v3.2.9、使用yum安装为例

MongoDB官网上提供了用yum安装的教程

我写了一篇翻译别人教程的Blog,跟官网上的类似

步骤是类似的,但是我们用官网上的命令进行安装,比较稳妥,那篇翻译的教程仅供理解用

5.给MongoDB添加用户认证

mongo
use db
db.createUser({user:'',pwd:'',roles:[{role:'readWrite',db:'db'}]}); #添加db数据库下的用户,拥有读写权限
db.system.users.find().pretty() #查看该数据库下所有的用户

记得在admin数据库下添加一个root用户用于以后关闭服务器

即 use admin,role: ‘root’

有关新建用户的更多信息请见这里

添加了用户后,在启动MongoDB时加上–auth参数即可开启用户认证

附上一条mongoose通过用户认证连接db的代码

mongoose.connect('mongodb://username:password@host:port/database?options...');

6.复制你的应用到VPS服务器

如果你的代码还没复制到VPS服务器上,你可以使用git,svn,ftp等方式放上去

我用的是git

安装git,使用yum安装

yum -y install git

然后就可以愉快地使用git clone了

7.开启端口

CentOS 7采用了firewalld防火墙,如果没有开启端口,则外网无法通过ip来访问服务器上的Node应用。

比如Node.js默认用了3000端口,所以我们需要开启相应的端口

查询端口是否开启:

firewall-cmd --query-port=3000/tcp

如果显示no,则没有开启端口

开启端口:

firewall-cmd --add-port=3000/tcp

也可以修改Node监听的端口,比如修改为80端口,然后再开启80端口

8.后台运行

后台运行MongoDB

在启动MongoDB时,加上–fork参数,即可生成一个子进程,当子进程成功运行,则父进程就会被停止,这时候便实现了后台运行MongoDB,可以关闭当前的终端

mongod --dbpath /usr/local/mongodb/data --logpath /usr/local/mongodb/logs/log.log --logappend --auth --fork

如果要关闭后台MongoDB,则需要通过刚才添加的root用户调用shutdownServer()方法关闭

顺带一提,MongoDB没有正常关闭的话会很麻烦的,有时候还会造成一些严重后果

mongo
use admin
db.auth('usr', 'pwd') #用root用户登录,usr、pwd为root用户的用户名和密码
db.shutdownServer()

后台运行Node.js

这边后台启动Node.js使用一个Node.js的模块forever,可以输出错误和日志

当然还有其他的方法,比如nohup啥的

全局安装forever

npm install -g forever

cd进入应用程序的目录

如果是普通的Node应用

forever start app.js

如果用的Express

forever start -c 'npm start' ./

有关如何停止forever以及其他操作请参考forever官网及Google

我之前是看CNode社区里的方法直接杀掉Node的进程 pkill node ,可以,很暴力

9.Hello world

至此,你应该可以从外网通过ip+端口访问到你的Node应用了,你也可以绑定个域名之类的

10.附加

开机启动

可以将MongoDB和Node通过编辑/etc/rc.local加入到开机启动中

这里我没有试验过,先挂上一篇教程

Vim

使用Linux免不了的一个问题就是 如何编辑文件

久闻Vim之大名,今日有幸相会

yum -y install vim

其实刚入门的小白用Vim,只要掌握一些基础的操作,用起来也是很爽的

附一个Vim简明教程

参考

CentOS 7部署Node.js+MongoDB:在VPS上从安装到Hello world的更多相关文章

  1. 部署Node.js项目(CentOS)

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又 ...

  2. 阿里云部署Node.js项目(CentOS)

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又 ...

  3. 【转载】在Centos系统上采用二进制文件部署Node.js环境

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又 ...

  4. 【从零开始学习Node.js】一.在CentOS 7中部署Node.js环境

    一.背景信息 Node.js是一个基于Chrome V8引擎的JavaScript运行环境,用来方便快速地搭建易于扩展的网络应用.Node.js使用了一个事件驱动.非阻塞式I/O的模型,使其轻量又高效 ...

  5. 如何线上部署node.js项目

    来源:http://blog.csdn.net/chenlinIT/article/details/73343793 前言 最近工作不是很忙,在空闲时间学习用node+express搭建自己的个人博客 ...

  6. AngularJS + Node.js + MongoDB开发

    AngularJS + Node.js + MongoDB开发的基于位置的通讯录(by vczero) 一.闲扯 有一天班长说了,同学们希望我开发一个可以共享位置的通讯录,于是自己简单设计了下功能.包 ...

  7. Linux环境部署Node.js

    介绍 先前在阿里云ECS上部署Node.js,碰到不少坑,都是自己不仔细造成的,所以准备再部署一遍,并记录下来.我将我的服务器重置了,这次选择的是CentOS 7.4 64位,上次的是7.2的. 使用 ...

  8. CentOS 7 部署 node 项目

    CentOS 7 部署 node 项目 安装 node 环境 方法一:使用 wget 的方式下载压缩包进行解压 淘宝node镜像地址,进入地址选择自己想要安装的版本 wget https://npm. ...

  9. 8 步搭建 Node.js + MongoDB 项目的自动化持续集成

    任何事情超过 90 秒就应该自动化,这是程序员的终极打开方式.Automating shapes smarter future. 这篇文章中,我们通过创建一个 Node.js + MongoDB 项目 ...

随机推荐

  1. 7、I/O流

    一.流的概念:流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作.I/O就 ...

  2. eclipse android工程没有错却出现红叉

    [转]eclipse android工程没有错却出现红叉 问题描述: 这是一个很变态的问题,花了我N多时间才解决掉,而且弄得心情非常郁闷,这明显是ADT的bug嘛,为什么最新的版本还没有解决? 将Li ...

  3. silverlight_容器

    Canvas絕對佈局 定位Canvas.Top.Canvas.Left ZIndex屬性 若制定2個控制項重疊,那麼後聲明控制項會覆蓋先聲明的控制項.此時可以使用Canvas.ZIndex屬性來改變它 ...

  4. I() 方法

    I()方法的介绍及使用: http://www.jb51.net/article/51213.htm

  5. Java 内部类

    1.成员内部类 成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的.同时外部类要访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取. 2.局部内部类 ...

  6. js 时间构造函数

    js 时间构造函数,js中没有类似ToString("yyyy-mm-dd HH:mm:ss") 的方法,但是可以用下面的方式来初始化 var cdate = new Date(& ...

  7. C#静态常量和动态常量的区别

    C#拥有两种不同的常量:静态常量(compile-time constants)和动态常量(runtime  constants).它们有不同的特性,错误的使用不仅会损失效率,还可能造成错误.相比之下 ...

  8. 第一天:安装nodejs

    1.首先,下载NodeJs程序.地址 http://www.nodejs.org/download/,选择Windows Installer 64bit 2.下载下来后,狂点下一步,安装在本地硬盘上. ...

  9. Error:identifer “blockIdx” and __syncthreads() undefined

    #include "device_launch_parameters.h" for blockIdx #include "device_functions.h" ...

  10. struts2+jsp+hiberbate 双重遍历

    今天弄了个双重遍历,由于自己水平有限,做了好久才搞定. 例子如下:也不算是例子,简要代码吧 action中有属性: private List<Contents> content; 其中co ...