1、nodejs基础安装包安装

在安装nodeJS之前需要安装一些基础软件包,通过XShell登录到阿里云之后,输入命令:

apt-get install python-software-properties python g++ make

系统开始安装。这时有很大的概率出现下面的错误:

Get:1 //mirrors.aliyun.com/ubuntu/ trusty/main python-pycurl amd64 7.19.3-0ubuntu3 [47.9 kB]
Err //mirrors.aliyun.com/ubuntu/ trusty-updates/main unattended-upgrades all 0.82.1ubuntu2.2
  404  Not Found [IP: 115.28.122.210 80]
Err http://mirrors.aliyun.com/ubuntu/ trusty-updates/universe python-software-properties all 0.92.37.3
  404  Not Found [IP: 115.28.122.210 80]
Fetched 47.9 kB in 0s (300 kB/s)
E: Failed to fetch http://mirrors.aliyun.com/ubuntu/pool/main/u/unattended-upgrades/unattended-upgrades_0.82.1ubuntu2.2_all.deb  404  Not Found [IP: 115.28.122.210 80]

E: Failed to fetch http://mirrors.aliyun.com/ubuntu/pool/universe/s/software-properties/python-software-properties_0.92.37.3_all.deb  404  Not Found [IP: 115.28.122.210 80]

E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

报告的错误大致就是提示说找不到已经安装包,原因是因为ECS初始化给的系统自带的软件库里面的软件比较陈旧,所以需要更新一下软件库:

apt-get update

之后执行之前的安装命令就可以了!

2、使用apt-get安装nodejs

接着我们查看系统是否已经安装nodejs:

root@iZ23o7w91k2Z:~# node -v
The program 'node' can be found in the following packages:
 * node
 * nodejs-legacy
Try: apt-get install <selected package>
root@iZ23o7w91k2Z:~# 
root@iZ23o7w91k2Z:~# 
root@iZ23o7w91k2Z:~# nodejs -v
The program 'nodejs' is currently not installed. You can install it by typing:
apt-get install nodejs

可见目前系统没有安装。在这里需要注意一点:在Ubuntu中apt-get install nodeapt-get install nodejs是两条完全不同的命令,根据官网说明(https://nodejs.org/en/download/package-manager/),在Ubuntu官方库中Node.js的包名是叫做"nodejs",而包名为“node”的安装包是指的是软件“Amateur Packet Radio "Node" Program”,所以一开始如果你的node命令存在的话,说明你的系统已经安装了Amateur Packet。==而可选的“nodejs-legacy”包也是当时为了防止与“Amateur Packet Radio "Node" Program”冲突而命名的==,不过现在一般都统一为nodejs的包名,apt-get只是安装一个nodejs二进制,所以你可能需要去使用下面的命令来对node命令做个软链接ln -s /usr/bin/nodejs /usr/bin/node

那么我们开始安装nodejs。

2.1、添加nodejs的PPA到Ubuntu下

如果直接使用的是apt-get来安装会导致Nodejs的版本过低,所以我们需要添加Nodejs的PPA库到Ubuntu下:

    apt-get install software-properties-common
    apt-add-repository ppa:chris-lea/node.js
    apt-get update

如果提示apt-add-repository没有的话需要安装: software-properties-common 之后再开始安装。

2.2、安装Nodejs

apt-get install nodejs
apt-get install npm

如果你在安装npm的时候报错:

The following packages have unmet dependencies:
 npm : Depends: nodejs but it is not going to be installed

那么表明你目前安装的node版本>0.10.0,此时的nodejs安装都是已经包含了npm的,所以无需再单独安装npm了。 此时的版本是:

nodejs版本查看.png

2.3、升级Nodejs到最新稳定版本

因为我们现在代码中需要使用ES6特性,所以需要将Nodejs升级到版本6以上,使用升级工具n来升级:

npm install -g n
n stable

如果此时有报错:

 install : node-v6.2.2
 Error: invalid version 6.2.2

只需要安装一下curl即可:

  apt-get install curl

之后nodejs升级到版本便是v6.2.2

2.4、替换npm源为淘宝源

国内获取npm的软件包速度超慢,所以我们一般会切换到淘宝的NPM镜像:

   npm install -g cnpm --registry=https://registry.npm.taobao.org

更方便的话可以使用nrm软件包来管理你的npm安装源。

3、关于Ubuntu的apt-get命令常识

有时候我们会看到使用命令apt-get dist-upgrade,这个命令的行为是如果这个包没有发布更新,就不管它;如果发布了更新,就把包下载到电脑上,并安装。

那么apt-get dist-upgrade和apt-get update有何区别呢?

apt-get update 指令会同步使用者端和APT 伺服器的RPM 索引清单(package list),APT 伺服器的RPM 索引清单置于base 资料夹内,使用者端电脑取得base 资料夹内的bz2 RPM 索引清单压缩档后,会将其解压置放于/var/state/apt/lists/,而使用者使用apt-get install 或apt-get dist-upgrade 指令的时候,就会将这个资料夹内的资料和使用者端电脑内的RPM 资料库比对,如此一来就可以知道那些RPM 已安装、未安装、或是可以升级的。

由于包与包之间存在各种依赖关系。upgrade只是简单的更新包,不管这些依赖,它不和添加包,或是删除包。而dist-upgrade可以根据依赖关系的变化,添加包,删除包。

一般在运行upgrade或dist-upgrade之间,要运行update.

3.1、Ubuntu下载软件包的配置文件

文件/etc/apt/sources.list指示下载软件包源址

sudo vi /etc/apt/sources.list可以查看该文件

文件中的定义的格式如下:(ref: https://wiki.debian.org/SourcesList)

deb http://site.example.com/debian distribution component1 component2 component3
deb-src http://site.example.com/debian distribution component1 component2 component3

开头deb代表编译好的包,des-src代表源代码,distribution代表发行版本,比如12.07是precise。其中component可以配置如下:

  • Main - Officially supported software.
  • Restricted - Supported software that is not available under a completely free license.
  • Universe - Community maintained software, i.e. not officially supported software.
  • Multiverse - Software that is not free.

比如:deb //cn.archive.ubuntu.com/ubuntu/ precise-backports main restricted universe multiverse详细请参考: https://help.ubuntu.com/community/Repositories/Ubuntu

更改了/etc/apt/sources.list,要用apt-get update更新index文件,更新的 index 文件在 /var/lib/apt/lists/

3.2、个人软件包集

在刚才解决的问题中我们发现如下这条命令:apt-add-repository ppa:chris-lea/node.js,这个就涉及到我们要提及的个人软件包集。

PPA,表示 Personal Package Archives,也就是个人软件包集。 有很多软件因为种种原因,不能进入官方的 Ubuntu 软件仓库。 为了方便 Ubuntu 用户使用,launchpad.net 提供了 ppa,允许用户建立自己的软件仓库, 自由的上传软件。PPA 也被用来对一些打算进入 Ubuntu 官方仓库的软件,或者某些软件的新版本进行测试。

PPA 上的软件极其丰富,如果 Ubuntu 官方仓库中缺少您需要的某款软件,可以去 PPA 上找找看。

sudo add-apt-repository ppa:user/ppa-name

比如jdk1.6不在index中

sudo apt-get install python-software-properties  < for installing add-apt-repository >
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update

用命令 “sudo apt-cache search jdk“(这条命令可以用来查询你可能忘记的软件包全名),会发现结果中多了下列内容

1.    oracle-jdk7-installer - Oracle JDK7 Installer meta package  
2.    oracle-java7-installer - Oracle Java(TM) Development Kit (JDK) 7  
3.    oracle-java6-installer - Oracle Java(TM) Development Kit (JDK) 6  
4.    oracle-java8-installer - Oracle Java(TM) Development Kit (JDK) 8  
5.    oracle-java7-set-default - Set Oracle JDK 7 as default Java  
6.    oracle-java6-set-default - Set Oracle JDK 6 as default Java  
7.    oracle-java8-set-default - Set Oracle JDK 8 as default Java  

之前我不能安装gstreamer 也是通过下面命令解决的

sudo add-apt-repository ppa:gstreamer-developers/ppa

之后也发现/var/lib/apt/lists/ 多了几个index文件

ppa.launchpad.net_gstreamer-developers_ppa_ubuntu_dists_precise_main_binary-i386_Packages
ppa.launchpad.net_gstreamer-developers_ppa_ubuntu_dists_precise_main_source_Sources
ppa.launchpad.net_gstreamer-developers_ppa_ubuntu_dists_precise_Release
ppa.launchpad.net_gstreamer-developers_ppa_ubuntu_dists_precise_Release.gpg

安装完所有的包后可以通过命令dpkg -S查看已经安装的package。

4、Sails以及bower和forever的安装

4.1、Sails的介绍

Sails是一个Nodejs服务器,它是基于Express的基础上再封装一层的服务器,所以了解Express服务器应该能够很快对Sails上手的。那么什么是sails呢?引用别人的一段介绍Sails.js的话:

Sails.js让构建自定义的、企业级的Node.js应用变得简单。它被设计成模仿类似于Ruby on Rails那样的MVC框架,但支持现代app的要求:可缩放的数据驱动API,面向服务的架构。Sails尤其适合构建聊天、实时仪表盘或多玩家的游戏的应用。

换句话说:Sails.js允许你更容易地创建Node.js app通过使用MVC模式来组织你的代码,这样就更容易维护。Sails.js提供各种各样的命令自动化创建模型和控制器,节省你的时间并允许你快速创建app。(视图不得不在/views目录下手工创建)虽然你可以使用不同的模板语言,但是EJS是Sails默认的模板引擎,坚持使用EJS更加安全以及更加容易。

Sails同样有各种各样的“适配器”,允许你虚拟地使用各种你想要用的数据库。这给了你最大的灵活性,和别的MVC框架必须使用MongoDb大不一样。

所有的这些包括在部署上,都是让你不需要花太多时间来配置你的框架,因为它全部都准备好了并且很容易使用。

关于Sails的详细介绍,参考官网(www.sailsjs.org)。官方文档的中文翻译版本可以参考如下的GitHub 地址 :https://github.com/linxiaowu66/sails-docs-zh-cn

4.2、Sails的安装以及简单使用

在命令行输入:

cnpm install -g sails

成功之后我们就开始使用sails命令为我们创建出一个基本的服务器框架:

sails new myWedding 
sails generate controller wedding home newBlessing paging meet know love together
sails generate model blessing

这样一个简单的服务器框架已经出来,上面的三条命令分别实现的是:

  • 创建Sails服务器名为“myWedding”的目录,里面包含了真个服务器框架的文件;
  • 创建名为wedding的Controller,并在该Controller下面创建home、newBlessing、paging、meet、know、love、together等7个不同的controller节点。
  • 创建名为blessing的model

4.3、安装和使用bower和forever

Bower是一个客户端技术的软件包管理器,它可用于搜索、安装和卸载如JavaScript、HTML、CSS之类的网络资源。而forever或者pm2则是一个让你的服务器永远运行在后台的监控程序,这样你就不用一直打开terminal了。 安装二者都是全局安装,所以命令是:

npm install -g bower
npm install -g forever

至于bower的使用则是很简单,可以参考//segmentfault.com/a/1190000000349555。

当构建完毕整个网站之后,需要将网站永久地运行在production模式下,这时只需要利用forever或者pm2即可:

forever命令: NODE_ENV=production forever start -l forever.log -a app.js

pm2命令: NODE_ENV=production pm2 -i 1 --name wedding start app.js

5、安装MongoDb和Git

豆米的结婚纪念网站采用MongoDb作为数据库,并使用git作为代码管理工具,所以我们还需要安装这两个工具。

根据MongoDb的官方安装手册,安装命令如下:

  1. apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
  2. echo "deb //repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
  3. apt-get update
  4. apt-get install -y mongodb-org

至此安装成功,途中没有遇到什么问题,接着安装Git:

apt-get install git

这个也是很顺利就安装ok的。

6、安装Nginx

Nginx作为著名的反向代理服务器,在本ECS实例中起着非常大的作用,所以我们需要它!

安装也是很Easy:

apt-get install nginx

7、安装Compass

如果我们使用SASS来编译CSS文件的话,就需要安装Compass,这是Ruby的一个工具,安装也是很简单,如下:

# apt-add-repository -y ppa:rael-gc/rvm
#  apt-get update
#  apt-get install rvm
# rvm install ruby
# gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
# gem install sass
# gem install compass