[5-30微信墙]使用git管理nodejs+socket.io+redis+mongoose+mongodb+bootstarp+juicer+waterfall+nginx+ubuntu+aws ec2开发sogego.com网站
 发布于 13 年前  作者 sogego  26412 次预览  最后一次回复是 10 年前  来自  

服务器:aws ec2 Ubuntu 12.04 (64位) web服务器:nginx1.3.5 缓存数据库:redis2.6.13 持久数据库:mongodb2.2.2 nodeJS: 0.10.7 框架:express 3.2.5 模板渲染:bootstrap+juicer + html5 + css3 + jquery 数据交互:websocket and ajax 前端展现:瀑布流

我们使用nodejs来开发一个搜索网站 示例:http://sogego.net 并使用git版本控制工具来管理位于vps上的网站,让我们抛弃ftp工具来上传文件的方式,一键commit到网站目录下。 我们在nodejs服务端render数据到前端,并用juicer来渲染,然后在瀑布流waterfall中使用socket.io来无限制加载数据,用redis做缓存数据库,mongodb做持久数据库。

技术交流加入QQ群:261654896

------------------------------------2013-05-25----------------------------- 新加 微信墙功能,努力完善中。。。。。。。。。。。。。 http://phoneqq.comhttp://phoneqq.net enter image description here =====================2013-05-23======================= 改用bootstrap前端设计,并加入微信公众平台, 欢迎大家使用微信关注,希望快快达到500人的关注。谢谢,请用微信:添加朋友-》扫一扫下面或关注 手机扣扣(微信公众账号:phoneqq ) enter image description here

=====================2013-01-12======================= 新加新闻 enter image description here

------------------------------------------------2012-11-29------------------------------------------- 最新修改了约20%的代码,换成了mongodb数据库做持久存储,为了保持新闻与小说 搜索功能 仍然使用redis做缓存,也就是首页和search页查询的时候用的还是redis

-------------------------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======================== 新加小说搜索功能 enter image description here

=====================2012-11-08========================

添加网站的免费CDN,加快了网站的访问 1,把域名放在godaddy上,dns使用国内免费的dnspod,这样可以加快域名解析 2,服务器放在tokyo 3,使用加速乐,jiasule.com 建立服务器IP的cname,比如是:*****.cdn.jiasule.com 4,在dnspod中删除A记录,并添加cname,其指向到上面的CDN 5,切记开发期间,每次commit新代码一定要去jiasule上刷新一下各节点的缓存

=============================================

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

新加了几个关于搜个够的域名方便大家访问: http://happy369.com 星空网 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.net

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

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

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

我们不使用jade这个模板,原因是什么,自己去想吧,个人觉得与html相距太大,不习惯, 而是使用juicer,它是一个极限渲染模板,其写法与速度你自己试了就不会再用其它的 我已和juicer的作者沟通多次解决bug和添加功能,目前版本号是0.6.3.使用完全没有问题

我们安装一个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

2012-11-29今天又加入了mongodb,所以再来一个 npm insall mongoose

最后注意当我们使用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; } }

}

108 回复
sogego

怎么没有人回复呢。大家这样的架构与开发,有什么好的建议呢

sogego

加入:图片的延迟加载功能 使用的是imgLzayLoading 同时整合到 waterfall中

安装supervisor 自动重启redis 时要用 sudo unlink /var/run/…lock

添加新域名到nginx

sogego

加入了IE与webkit分别使用ajax和websockte数据交互的功能。

xiaojue

网站里好多的广告。。

DoubleSpout

感觉怎么像个垃圾站?

sogego

update了 ec2的 m1-medium instances 速度过了不少

lonevan

无所谓广告不广告,楼主分享自己的实战经验把线上产品放出来无可厚非吧~ 个人感觉应该很多干货,再细点的粒度一块一块分享出来就更好了~ 赞个

a272121742

速度好慢,先收藏了。

cuksany

牛x…先收了再说.

henson

感觉UI好乱,还是简单为好!

dolphinboy

不错,源码共享吗?

sogego

thanks for everybody foucs me

yjj676

为什么要用nginx来做负载均衡,这的原理我不懂?求教

dolphinboy

supervisor 是管理 redis 用的吗?

dolphinboy

imgLzayLoading 是什么东西啊,怎么搜不到?

dolphinboy

Bitvise SSH 貌似只能在Windows平台啊?

sogego

目前正在内测,稍后推出

sogego

比如 说,你的image或是css或是js文件 以前要用http://sogego.com/css或是image或js来访问 如果使用nginx可以用 /www/sogego.com来访问,减轻http server的压力

再有就是负载的使用,可以转到其它IP或是域名下来访问,以减轻主服务器的压力

sogego

supervisor可以自动重启redis

就好比用forever来自动重启 nodejs一样

sogego

是一个当滚动条滚动时,才加载图片,如果不滚动就不加载,试想如果一个page中包括了10屏,我们不能一次把所有的图片连接都显示出来,最好的办法就是滚动一点加载一点,事实上这个我试过了,在waterfall中并不好用。

sogego

我在win7上使用bitvise用 public key 来连接aws ec2 没有在linux上试过

yjj676

@sogego 大概了解了,谢谢^.^

yjj676

@sogego 请问服务器集群也是这个道理吗?我对服务器集群的概念不是很懂。

sogego

@yjj676 这个我也没有用过

_13

啵错,ui再简单点

dolphinboy

这个整体架构和我想的差不多,不过比我想的更完善,牛掰,其他……

dolphinboy

我觉得如果做完之后,可以写一篇连续的文章来详细介绍……

leizongmin

@sogego

usage: ssh [-1246AaCfgkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-e escape_char] [-F configfile]
           [-i identity_file] [-L [bind_address:]port:host:hostport]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-R [bind_address:]port:host:hostport] [-S ctl_path]
           [-w local_tun[:remote_tun]] [user@]hostname [command]

应该是加个-i参数来指定public key吧:ssh -i public_key文件

shinka

首页的UI可以稍微修饰一下吧 然后整体感觉还挺好 就是速度上稍微有一点点慢 顶~

sogego

目前想了几个目录 比如说:aws ec2上的instance使用, ec2 ebs使用 ec2 各类instance区别

程序部分,以后主要讲一下如何用把nodejs .socket.io redis juicer waterfall结合到一起。估计这个得写出好几章来

目前正在使用ec2上的m1.small instance 这是对网站的测试期,稳定后,会看看到底是哪种的instance适合。

sogego

你指的是网站的首页。还是新闻waterfall的那页?

shinka

@sogego 首页 就是今日最新和本周关注那个 看着让人会感觉到有点烦 个人感觉而已哈

youdoce

非常好的架构构想,在摸索中前行吧。

sogego

真jb倒霉,被百度K站了,大家有什么好办法恢复。

lwl8881081

希望楼主分享能在细一点 让人更加的了解

sogego

新加小说搜索功能

sogego

UI确实不咋滴

yjj676

哥,我看你的小说是爬自红袖的,请问抓来的小说文字是放到自己的数据库吗?这样的话,版权什么的问题有吗?我很感兴趣 ^-^

sogego

@yjj676 是的,何谓版权,我认为凡是在互联网上的数据,就是共享的,兄弟们,干吧,国外的空间,关它个叼事。

yjj676

@sogego 哈哈,顶你!挺牛逼的。

sogego

终于换上了aws ec2的 东京的 m1.medium 两个ecu处理器,4G内存。吼吼。

sogego

sogego.com 另外一个域名 : http://happy369.com 使用了 jiasule.com的免费CDN加速,网站快了不少,在此也推荐其它站长使用,前提是你的域名是有备案号。

sogego

jiasule目前不算稳定,但速度够快

iamsur123

学习了,界面在美化一下就更好了

sogego

又一构思, 把搜索的功能 用redis来存,并且cache一会儿 新闻和小说还有其它的data 放到mongodb里,目前小说的已经测试完成,搞到ec2上再试试

lwl8881081

什么时候能达到楼主这个程度,嘿嘿

luofei614

你是用 jquery 来处理抓取来的数据吧? 太帅了。

sogego

@yjj676 最近又加了zongheng的 吼吼。

sogego

是的。其实也就是jsdom

shiqubai

干活比较多, mark下

sogego

新增mongodb持久数据库来保存新闻与小说 首页与搜索功能仍然使用redis来缓存

sogego

完善了search功能

zstar

先收藏了,只是不喜欢前台的UI,其余的倒是喜欢

laryiii

恩。界面丑了点。

sogego

网站出问题了?

sogego

新加图片新闻

sogego

新加图片,整合功能

zensh

mark,回头看

zensh

mark,回头看

fedaniel

首页的index.js写的不好,鼠标多动动就看出来了,建议使用mouseenter,mouseleave

xiove

呵呵,收藏了,感觉除了UI,其他功能蛮好的!!!主要还是技术NB

anuxs

1、探索精神值得称赞,平台技术可以,都是主流的。AWS我也是用东京的; 2、楼主写东西没有条理,建议写成系列文章,每次把一个方面说清楚; 3、你介绍的网站的到底有什么用?除了爬虫搜索、耸人听闻的花边新闻、美女图还有啥?界面美丑就不说了,你用这个玩意建这个站点目的是什么?做的玩儿? 4、标题起的很撮,你这个网站用到git做源代码管理,为啥还罗列那么一大筐用到的库和工具放在标题里面?看着这样的标题就不想看。进来只是吐槽的,没想到你是做的技术分享。

建议楼主把握重点,技术不是纯粹的堆砌就强大。练手不反对。

anuxs

5、一个月70多美刀的aws费用,不贵但也不便宜,我在想楼主靠啥子盈利; 6、用jsdom/jquery做网页采集的技术细节,期待分享的更详细。jsdom的文档看着XXXX。

sogego

网站的目的就是爬各大网站的新闻,新浪,163,21cn,67.comifeng.com,yahoo,QQ,eastday.com,cri.com等, 还有hongxiu,zongheng,的小说,是为了让看新闻的朋友以瀑布流的方式,冲击视觉体验,这里有时实的,最新,最全的,容易阅读。

用git管理是为了不用ftp上传,直接用git做commit到网站目录下

罗列的库和工具是为了,让有此一样开发的朋友看到,我是用什么技术开做的

这是一个总结的过程,和每做一个大的更新都上来说明一下,每一个方面说出来都要好几个topic才能说完,这算是一个目录形式的

平时公司的项目不可能会用到这么多,所以把自己认为不错的技术或是框架拿出来实践, 提高一下自己的技术水平

目前网站是以新闻和小说,美图来充载的,网站的最终目的是要做成一个搜索, 对各个搜索出来的结果进行统计和分析,因为baidu,soso,sogo,google,youdao,so.com它们只是把用户的关键词搜索出来,并没有进行分析和统计

网上的标题起为:sogego 搜个够,就是想让用户输入关键词后,得到他想要的数据,而不是像各个搜索网站一下,列表出来,让用户一页页的点,一条条的点,点到自己想要的,就收藏起来,这不是用户想要的,用户想要的是分析,比如某一个词,用户最想知道的是在哪个网站出现过,每个网站有多少条在描述它的搜索词,这是最终目的,当前上线的部分只是为了让用户先留在这个网站,看看新闻或是小说

sogego

网站不赢利,每个月信用卡会划走50刀左右,这是一个个人创业的起步,赢利是以后的事。 目前我正在想写一个目录的每一个详细项,但工作也忙,没有时间啊,目前正在构思,前面的回复中也提到了

一个人的时间有限,我得在工作下班之后,孩子睡了,晚上11点开始搞一点,搞到1点,每天就这么点时间,还有公司的项目目前正在搞 appcelerator titanium studio, alloy框架开发跨平台的手机端,这个在 搜个够 来说,以后也会推出,都是新技术,都得学啊,

期待共同分享。

bdtgzj

收了,感谢分享!

anuxs

@sogego 关于 http://www.appcelerator.com/ ,我一个朋友,外行程序员,用这个工具也做了一个跨平台的手机微博应用。js现在是锤子,什么都可以锤两下。

anuxs

@sogego 看来你很辛苦。有了宝宝更辛苦。

sogego

@anuxs 都是一群,苦逼的屌丝

poplardddcn

请问nginx配置静态文件后,nodejs反而不能访问css,js文件了,这种问题该怎么写nginx配置文件呢,求教 @sogego

poplardddcn

@sogego 楼主你的网站是跑在vps上的,上面跑了好些服务,这需要多大的内存啊

poplardddcn

被百度k站是啥意思?

poplardddcn

楼主是重庆人?

maniwang

楼主加油哈,看起来很不错~!

firstgeniusboy

学习了,其实我一直在想,现在的时代创业哪种更有竞争力。是产品还是服务。

sogego

打算用上bootstrap

sogego

加入微信公众平台。欢迎大家使用微信关注,希望快快达到500人的关注。谢谢

springlin2012

感觉有点慢, 没风格, 不过能搭建起来很不错, 值得顶

sogego

新加 微信墙功能,努力完善中。。。。。。。。。。。。。 http://sogego.net/weixinwall

fyddaben

我靠。。功能好屌。。用的soketio吧?微信公众账号好申请吗??

sogego

聊天室功能搞定

marshal

其实我对waterfall的理解是最好不要超过4列 三列的视觉效果最好 我以前有看到有人在cloudfoundry的比赛中 做了个八卦街 http://baguajie.cloudfoundry.com 也是像你这样弄得 不过那个主要是图片 还比较容易接受 你这种文字的 就没什么阅读欲了 不过楼主已经算是很强大了

yeefont

楼主,严重辛苦了。 推荐你CHEERIO,更换JSDOM或者JQuery把,速度8X提升(作者的说法)。

xiuxu123

为啥里面没有人啊???

wechat

真牛逼。关注下微信

kissme

楼主,请教一下,有没有办法将express的默认模板引擎从jade改成juicer? 文档里没提这个

sogego

var fs = require(‘fs’), juicer = require(‘juicer’); juicer.set(‘strip’,false); juicer.register(‘JSON’, JSON);

app.engine(‘html’, function(path, options, fn){ fs.readFile(path, ‘utf8’, function(err, str){ if (err) return fn(err); str = juicer(str, options); fn(null, str); }); }); app.set(‘view engine’, ‘html’); app.set(‘view options’, {layout: false});

sogego

开始搞易信啦

shanelau

楼主很牛B ,膜拜中。

有两个问题请教一下。系统是怎么架构的, redis作为缓存数据库,mongoDB作为持久数据库这是怎么做的? 数据先存redsi,让后定时刷新到mongodb吗?

还有一个问题是 nginx和nodeJs是怎么配合的。

cjnwan

您好,我想请问一下,怎么把mongodb中的数据同步到redis中,跪谢啊

pangguoming

楼主,你用 Socket.IO 干什么用? 是服务端实时推送消息到前台?