您的位置:首页 > 数据库 > Redis

使用git管理nodejs+socket.io+redis+juicer+waterfall+ubuntu+aws ec2开发网站

2012-09-03 16:16 1406 查看


使用git管理nodejs+socket.io+redis+juicer+waterfall+nginx+ubuntu+aws ec2开发网站

使用git管理nodejs+socket.io+redis+juicer+waterfall+ubuntu+aws ec2开发网站

服务器:aws ec2 Ubuntu 12.04 (64位)

web服务器:nginx1.3.5

缓存服务器:redis2.4.16

nodeJS: 0.8.8

框架:express 3.0.0

模板渲染:juicer

数据交互:websocket

前端展现:瀑布流

我们使用nodejs来开发一个搜索网站 示例:http://sogego.com 并使用git版本控制工具来管理位于vps上的网站,让我们抛弃ftp工具来上传文件的方式,一键commit到网站目录下。

我们在nodejs服务端render数据到前端,并用juicer来渲染,然后在瀑布流waterfall中使用socket.io来无限制加载数据,用redis做服务器。

技术交流加入QQ群:261654896

-------------------------2012-09-09----------------------------

说一下supervisor来管理 redis,当redis意外停止后,我们可以用它来自动重启

npm install supervisor

这个比较牛比

----------------------------2012-10-09-----------------------------------------

添加了搜索引擎的支持,陆续加入google soso sogou bing等

aws ec2上面的instance type的切换,事实上free type的m1.micro也不是完全免费的

因为还有ebs的费用和data tranfer的费用

如果你的m1.micro不够用了,或是不能支持你的网站,ebs太小了,cpu太慢了,内存太小了

尤其是使用redis内存型database,600多M的是不够用的。所以选择m1.medium这个heavy型的

只在白天的时候change为m1.medium到了晚上没有人访问了,就停止对新闻的搜索,change回free的type,

操作方法是:先把你的instance stop,选中点右键,等一会,再右键行选change instance type

,选择m1.medium,这个在东京要每小时$0.184,我可以在白天使用10个多小时 ,大约$2元

change完成后再右键 start,并且一定要把 Elastic IP这一项重新选择一下,要不然无法连接

最近又使用了aws ec2的IAM(Identify and Access Management),download一个google 两步验证的app到android的手机上,当然你的手机最好安装一个二维码扫描如:quicksmark,发现lenovo的 s880不能安装,真垃圾啊联想。这样再登录aws ec2时,再输入完email和密码后,要求你再输入一下六位的数字,这样加密,保证别人不会登录你的账户,如果非要买那个key就没有必要了。

=====================2012-10-24========================

新加小说搜索功能



说一下域名的事,www.west263.com这个域名注册商真是垃圾,域名过户还要收30元,国外注册商直接push了之后,域名信息就改变了。垃圾的国内注册商。

新加了几个关于搜个够的域名方便大家访问:

http://sogego.com

http://sogego.net

http://sogegou.com

http://sogegou.net

http://sougego.com

http://sougego.net

http://sougegou.com

http://sougegou.net





一、先讲位于日本东京的服务器aws ec2

使用aws ec2,都说位于美国西海岸的ping值低,事实上比较一下美国西海岸、新加坡、日本到中国的距离就知道了,新加坡网络节点还要绕到意大利再回中国,这个地方的VPS根本没法用,慢的要死,事实上速度最快的要数位于日本东京的ec2机房了,建议大家使用这个,其ping值在上海或是宁波、深圳的地方可以低于80ms,而美国西海岸的ping值都大于250ms,日本东京要快得多。

这和你是不是国人,爱不爱国没有关系,因为在上海到日本有一条海底光缆。

先启动一个Instance,我们使用Ubuntu 12.04

aws ec2默认不让ping。你只需要点左侧Security Groups,再点右侧Inbound的All ICMP 确定就可以ping通了

最后说一下Bitvise SSH ,它比Putty可强大多了,而且还带有sftp功能。你不得不用。

二、VPS Ubuntu 的配置

安装一些常用的比如 g++ make git libssl等

最主要的是在这里配置好git服务器,并同时让git server 自动同步到网站目录下,也就是说,比如我在本地机器win7上 commit了代码到了git server,那么访问http://sogego.com它就是最新修改过的,而且是带有版本号的,这样方便以后出现错误做回滚操作,不使用ftp工具,而是使用aws的 pubkey
,用ssh的方式做commit操作,当然也可以使用sftp。

安装Nginx来做负载均衡,让它指向nodejs的地址 比如:http://sogego.com

安装redis来做缓存数据库,以后再详细说明在nodejs中使用redis的操作。

三、程序开发

推荐webstorm开发工具,带有git和nodejs的语法支持,如果你非要用Notepad++,我个人只能说你是个二。

我们在nodejs中使用最新的express 3框架,它与express 2有了一些改变

我们不使用jade这个模板,原因是什么,自己去想吧,个人觉得与html相距太大,不习惯,

而是使用juicer,它是一个极限渲染模板,其写法与速度你自己试了就不会再用其它的

我已和juicer的作者沟通多次解决bug和添加功能,目前版本号是0.6.0.使用完全没有问题

我们安装一个npm install jquery来分析抓取到的网页数据

我们还要安装一个npm install iconv-lite它比iconv要快一些,用来解决非utf8编码,大多的国内网站还在使用gb2312的编码。

我们再来安装一个npm install forever来永久启动你的nodejs程序,它的操作基本是forever start 你的nodejs文件名

forever stop 你的nodejs文件名

forever list

为了开方的方便还来一个npm install node-dev,使用方法node-dev 你的nodejs文件名

这样当我们改变了nodejs,就不用手动重启,尤其是配合webstorm一起使用,因为webstorm不需要按crtl+s来保存,而是它自己即时保存,这样你的程序就会时实重启。

我们在后台使用了redis那就再安装一个npm install redis来连接redis数据库

我们还要使用websocket协议,而不是用ajax请求。所以再来一个npm install socket.io

最后注意当我们使用nodejs 的Crypto模块时用到了base64,注意base64的 + 问题转为空格

=========在此给出加解密function大家可以直接使用==============

使用方法:

var tools = require('../tools');

var sogego_cipher = tools.crypto().cipher(‘你要加密的数据’);

var sogego_decipher = tools.crypto().decipher(‘你要解密的数据’);

//加密与解密方法,把下面的function保存在tools.js中,在其它的.js文件中使用上面的方法调用

exports.crypto = function(){

var algorithm = "aes-256-ecb";

var password = "http://sogego.com"; //加密的密匙

var iv = "http://sogego.net"; //对密匙进行加密 实现双保险

var cipher, ciphered, decipher, deciphered;

return {

cipher: function(data){

// console.log('data = ',data);

cipher = crypto.createCipher(algorithm, password,iv);

ciphered = cipher.update(data, "utf8", "base64");

ciphered += cipher.final("base64");

// console.log('加密 = ',ciphered);

return ciphered;

},

decipher: function(data){

// console.log('data = ',data);

decipher = crypto.createDecipher(algorithm, password,iv);

deciphered = decipher.update(data, "base64", "utf8");

deciphered += decipher.final("utf8");

// console.log('解密 = ',deciphered);

return deciphered;

}

}

}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: