服务器: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.com 或 http://phoneqq.net =====================2013-05-23======================= 改用bootstrap前端设计,并加入微信公众平台, 欢迎大家使用微信关注,希望快快达到500人的关注。谢谢,请用微信:添加朋友-》扫一扫下面或关注 手机扣扣(微信公众账号:phoneqq ) ====================================================
=====================2013-01-12======================= 新加新闻
------------------------------------------------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======================== 新加小说搜索功能 =========================================================
=====================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; } }
}
加入:图片的延迟加载功能 使用的是imgLzayLoading 同时整合到 waterfall中
安装supervisor 自动重启redis 时要用 sudo unlink /var/run/…lock
添加新域名到nginx
比如 说,你的image或是css或是js文件 以前要用http://sogego.com/css或是image或js来访问 如果使用nginx可以用 /www/sogego.com来访问,减轻http server的压力
再有就是负载的使用,可以转到其它IP或是域名下来访问,以减轻主服务器的压力
是一个当滚动条滚动时,才加载图片,如果不滚动就不加载,试想如果一个page中包括了10屏,我们不能一次把所有的图片连接都显示出来,最好的办法就是滚动一点加载一点,事实上这个我试过了,在waterfall中并不好用。
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文件
目前想了几个目录 比如说:aws ec2上的instance使用, ec2 ebs使用 ec2 各类instance区别
程序部分,以后主要讲一下如何用把nodejs .socket.io redis juicer waterfall结合到一起。估计这个得写出好几章来
目前正在使用ec2上的m1.small instance 这是对网站的测试期,稳定后,会看看到底是哪种的instance适合。
1、探索精神值得称赞,平台技术可以,都是主流的。AWS我也是用东京的; 2、楼主写东西没有条理,建议写成系列文章,每次把一个方面说清楚; 3、你介绍的网站的到底有什么用?除了爬虫搜索、耸人听闻的花边新闻、美女图还有啥?界面美丑就不说了,你用这个玩意建这个站点目的是什么?做的玩儿? 4、标题起的很撮,你这个网站用到git做源代码管理,为啥还罗列那么一大筐用到的库和工具放在标题里面?看着这样的标题就不想看。进来只是吐槽的,没想到你是做的技术分享。
建议楼主把握重点,技术不是纯粹的堆砌就强大。练手不反对。
网站的目的就是爬各大网站的新闻,新浪,163,21cn,67.com,ifeng.com,yahoo,QQ,eastday.com,cri.com等, 还有hongxiu,zongheng,的小说,是为了让看新闻的朋友以瀑布流的方式,冲击视觉体验,这里有时实的,最新,最全的,容易阅读。
用git管理是为了不用ftp上传,直接用git做commit到网站目录下
罗列的库和工具是为了,让有此一样开发的朋友看到,我是用什么技术开做的
这是一个总结的过程,和每做一个大的更新都上来说明一下,每一个方面说出来都要好几个topic才能说完,这算是一个目录形式的
平时公司的项目不可能会用到这么多,所以把自己认为不错的技术或是框架拿出来实践, 提高一下自己的技术水平
目前网站是以新闻和小说,美图来充载的,网站的最终目的是要做成一个搜索, 对各个搜索出来的结果进行统计和分析,因为baidu,soso,sogo,google,youdao,so.com它们只是把用户的关键词搜索出来,并没有进行分析和统计
网上的标题起为:sogego 搜个够,就是想让用户输入关键词后,得到他想要的数据,而不是像各个搜索网站一下,列表出来,让用户一页页的点,一条条的点,点到自己想要的,就收藏起来,这不是用户想要的,用户想要的是分析,比如某一个词,用户最想知道的是在哪个网站出现过,每个网站有多少条在描述它的搜索词,这是最终目的,当前上线的部分只是为了让用户先留在这个网站,看看新闻或是小说
网站不赢利,每个月信用卡会划走50刀左右,这是一个个人创业的起步,赢利是以后的事。 目前我正在想写一个目录的每一个详细项,但工作也忙,没有时间啊,目前正在构思,前面的回复中也提到了
一个人的时间有限,我得在工作下班之后,孩子睡了,晚上11点开始搞一点,搞到1点,每天就这么点时间,还有公司的项目目前正在搞 appcelerator titanium studio, alloy框架开发跨平台的手机端,这个在 搜个够 来说,以后也会推出,都是新技术,都得学啊,
期待共同分享。
其实我对waterfall的理解是最好不要超过4列 三列的视觉效果最好 我以前有看到有人在cloudfoundry的比赛中 做了个八卦街 http://baguajie.cloudfoundry.com 也是像你这样弄得 不过那个主要是图片 还比较容易接受 你这种文字的 就没什么阅读欲了 不过楼主已经算是很强大了
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});