nginx博客系统(内含nginx图片缩略图处理代码,不错)
一直以来都在Qzone、CSDN等上面写博客,偶尔有些想法就在Paas平台上搭建服务,新浪和曾经的google上都用过其appengine。可是在别人的平台上写东西,总归有些不方便,有受制于人的感觉。《深入理解Nginx》这本书的在线支持站点,当时因为时间紧,就随便在weebly平台弄了个下载示例代码和写作勘误的页面,毕竟离有效的在线支持网站还是有差距的,至少读者不容易在网站上反馈。想到毕竟在阿里云的弹性计算工作,总不能都不用自己开发的产品吧?于是就买了阿里云的低端服务器,开始了我的第一次完整的建站历程。
作为一个10年互联网后台开发经验的程序员,对于后台开发自然没有问题,可是仔细查了查自己的知识储备与建站所需的知识点,还真是不太匹配。我所熟悉的大规模分布式、高性能服务器设计,其实在流量极小的个人站点上用不上什么,小站点更强调的快速堆砌功能反而是我欠缺的。前端网页设计经验的缺乏其实是最大难题,对于HTTP协议和基本的HTML知识虽然熟,可是最需要了解的CSS、jQuery、JavaScript等却几乎就是门外汉。怎么入手呢?
先选定语言吧。虽然长年在C和C++上打滚,但对Python并不陌生,尤其是非常喜欢它的语法,很漂亮!更重要的一点是,它的开发效率正是这种小站点所需要的,运行效率差点反而无所谓。选定python,就选择了一条不断“找前人肩膀站立”之路了,不像C语言的项目常常需要“自己动手、丰衣足食”的完成各种组件,python项目就是找各种已完成组件,找到其相应的、与自己软件匹配版本的使用方法。
先要选定web框架,而得到广泛应用的django就迈入了眼帘。现在它已经发展到了django1.6版本,就用最新的了,后面发现其新版本往往不兼容老版本上的组件,这好像是python世界的惯例,真够BT的(所以,virtualEnv才有市场,所以才需要在每个python工程上使用virtualEnv虚拟python环境,以支持多个项目下同一个python组件的不同版本并行存在)。有了django,其实很多web开发的组件都具备了。首先,django是一个“关系数据库驱动”的WEB框架,可见,其先天就是为小站点而生。安装了MySQL-python库后,就可以利用django的框架来快速操作mysql数据库了。django的模板系统也是必用的,它将表现层与业务层分离,即,将html与数据分离了,它的各种用法可以在djangobook中找到,当然,这本书的中文版有些老了,1.6的django需要找英文资料。有了模板和数据库的MTV架构,站点已经可以慢慢的边coding边调试了,我们再来看环境。
阿里云服务器实在是小站点的首选,我真不是在做广告:-)
1、足够便宜。最低配是每月55元,年付费还能便宜点。在最低配上现在负载都达不到0.1。
2、带宽不是按量计费的,而是限定了带宽的速度上限。对于无法预估流量的新网站,还是适合的。而且,我可以把图片等耗流量的文件放在服务器上,而不用去考虑为了计费去把图片放在其他平台上,增加复杂度。
3、IO虽然差,可是可靠性高,写磁盘时是强制3份数据写成功,潜台词就是我不用每天备份mysql数据、静态图片等资源了。这种小站点也用不到什么磁盘IO。
4、如果真的站点访问量上来了,服务器资源不够了,加钱在线升级服务器配置呗。
5、云监控是免费的。很有用的东东,关键是不怎么消耗本就是低端服务器的linux资源,后文再详述。
6、带宽稳定。阿里巴巴的ABTN骨干网络还是很靠谱的,对电信、联通网络的支持都很好。
7、备案方便,后文再详述。
购买阿里云服务器当然选择了linux系统,稳定高效的无二选择,随系统阿里云对linux赠送了20G的系统盘。一般来说是够用了,主要是目前我们在做云磁盘,使得用户购买的数据盘以后可以脱离虚拟机而存在。我希望一些数据还是放在数据盘方便以后的管理,就又买了块数据盘。需要注意的是,拿到root及密码、公网IP的服务器,SSH登上去会找不到数据盘,至少从容量上是找不到的,这是因为需要手工挂载。这个真的是阿里云弹性计算需要改进的地方。挂载方式在阿里云官网FAQ里都有。
接下来,就是要充分使用云主机了。目前云盾和云监控是免费的,云盾自动生效,而云监控是要安装一个agent在自己的服务器上,这个agent会定期的上报一些检查信息到云监控服务里,这样从WEB管理控制台上就可以设置监控阀值。每个月有1000条免费通知短信,当服务器的监控项发生变化时,例如进程挂掉、磁盘写满等,就可以及时手机得到通知了。
下面开始讨论网站框架,如下图所示:
前端放Nginx基本是必须的,django没有并发处理能力,而Nginx可以处理十万百万级的并发连接。静态文件特别是大量的图片都交由Nginx加本地磁盘处理,其执行效率不用担心,至少在现在的访问量下是无所谓的。Nginx的access访问日志很关键,它可以给出很有意义的数据分析,所以,慎重设置它的格式,把想统计的信息都记录下来。然后安装awstats这个软件,配置好解析access日志的格式。将access按天来切分文件是个很好的处理方式,awstats的crontab脚本会分析、累加每个过去日子的统计结果,使在页面上可以看到网站的运行情况。
如果是图片服务器,Nginx还可以承担更重要的责任,我们常见的缩略图功能就很有必要。原始图片可能以M为单位,传输这样的图片然后在浏览器上压缩为缩略图,这显示会耗尽我们本就不多的带宽。将Nginx的proxy cache功能和image filter引入,就可以把图片在服务器端压缩后再缓存到硬盘里,下次拉取只取压缩过的图片,减少带宽的损耗。实际上image filter模块功能很弱,只支持一种压缩率,而Nginx的rewriter模块提供了脚本式的变量赋值功能,综合起来就可以很方便的提供各种压缩分辨率,例如下面这段配置,就可以根据URI内容来指定分辨率,并将压缩图缓存之:
location /static/resize {
alias /mnt/nginx/resize_image;
set $width 550;
set $height 500;
set $dimens "";
if ($uri ~* "^/static/resize_(\d+)x(\d+)/(.*)" ) {
set $width $1;
set $height $2;
set $image_path $3;
set $demins "_$1x$2";
}
if ($uri ~* "^/static/resize/(.*)" ) {
set $image_path $1;
}
set $image_uri static/image_resize/$image_path?width=$width&height=$height;
if (!-f $request_filename) {
proxy_pass http://127.0.0.1:9000/$image_uri;
break;
}
proxy_store /mnt/nginx/resize$demins/$image_path;
proxy_store_access user:rw group:rw all:r;
proxy_temp_path /mnt/tmp/images;
proxy_set_header Host $host;
}
location /static/image_resize {
alias /mnt/images/;
image_filter resize $arg_width $arg_height;
image_filter_jpeg_quality 75;
allow 127.0.0.0/8;
deny all;
error_log /tmp/test.log debug;
}
location /static/image {
alias /mnt/images/;
}
django定位为处理动态内容,其实也就是除了静态文件外的所有URL。由django的模板设计HTML,而由mysql里的数据来渲染模板输出HTML页面。这套系统在django book中有详细描述,这里不提。同时,mysql的访问速度是较慢的,用全内存的memcached服务来缓存mysql表数据也是一个很好的选择。django book里仍然有说过用法。
站长管理站点内容时,使用admin功能来直接修改mysql数据库是个几乎最佳选择。django先天对此支持的极好。所以,站点内容尽量向mysql里放吧,这样可以完全在web页面上来管理站点,而不用ssh登上后操作。
对于我最不熟悉的CSS就完全靠bootstrap了。这套系统把常见的CSS、js、jquery都封装成各种CSS类了,使用起来很简单,轻松把一些复杂的页面功能搞定。
如果是博客,那么评论系统就非常重要。当然,自己搞一个用户系统肯定不靠谱,多少用户会在一个小站点上在注册用户记住密码呢?使用已有的如微博、QQ等帐户系统肯定是利人利己的。基于这样的登陆系统再存储评论数据当然是王道,可是时间有限啊,实在没功夫了,这时看到了多说,这个平台就是为小站点们创建的,它把各站点的评论数据放在它的数据库里,这也是多说能拿风投的核心竞争力了吧?使用多说很方便,直接复制一些代码就搞定了。
怎样录入博客呢?输入字符串加回车?太简单了,这样的博客太难看。输入HTML代码?太复杂了,每篇博客使用html的各种标签,效率太低了。于是,在python世界就主推了一个文档语言,叫做reStructureText格式,简写为RST格式。使用它来录入博客内容,再用一些python库将RST格式转到HTML格式即可。在django1.6中,我使用了rstify库来完成转换工作。
一个技术站点最重要的就是展示源代码了。如果能把源代码按语法来展示,类似“printf“这样的关键字高亮显示,岂不是很好?已经有pygments库完成这件事了,同时,rstify就集成了这一功能,使得在rst格式的输入中直接在HTML加CSS指定样式里可以高亮显示源码。
最后说说备案那些事。web服务调试通过,域名也买好了,可是用公网IP访问就是好的,用taohui.org.cn域名访问却总是失败!查看access日志看到错误码是499,很诡异,这是客户端程序主动关连接,可能吗?客户端是浏览器,不会干这事的。那一定是云主机前端的网络出问题了。查了下才发现,原来是国内的Iaas提供商都强制域名必须先在国家备案才允许访问!于是开始查如何备案。阿里云的备案算是非常替小站长考虑了,一系列流程都可以在家用电脑搞定,发拍照的备案幕布速度很快,基本一周搞定,域名可以使用了。
转自:http://blog.csdn.net/russell_tao/article/details/20065881
nginx博客系统(内含nginx图片缩略图处理代码,不错)的更多相关文章
- 【完全开源】Django多人博客系统——支持MarkDown和tinyMce
目录 说明 功能 如何使用 说明 这是一个用Django开发的多人博客系统,功能简单,但完全满足公司内部或个人的博客使用需求.支持普通富文本编辑器(tinyMCE)和MarkDown编辑器 由于嫌弃D ...
- 二、Java多人博客系统-演变
任何项目都是由小到大,逐步演变的.自己写的这个博客系统也不例外. 更新日志如下: 一.2014年底-2015年初 功能及技术: 1.定位为个人网站,介绍自己情况和发布文章等. 2.首页模块有:个人简介 ...
- Vue、Node全栈项目~面向小白的博客系统~
个人博客系统 前言 ❝ 代码质量问题轻点喷(去年才学的前端),有啥建议欢迎联系我,联系方式见最下方,感谢! 页面有啥bug也可以反馈给我,感谢! 这是一套包含前后端代码的个人博客系统,欢迎各位提出建议 ...
- 从零开始,搭建博客系统MVC5+EF6搭建框架(5),博客详情页、留言、轮播图管理、右侧统计博文
一.博客系统进度回顾 上一遍博客介绍到,系统已经实现到了发布以及前台布局展示,接下来就是实现一些,详情页,留言.轮播图管理.右侧博文统计信息实现. 二.博客系统详情页实现 2.1先来看看详情页展示的效 ...
- CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.13+博客系统WordPress3.3.2
说明: 操作系统:CentOS 6.2 32位 系统安装教程:CentOS 6.2安装(超级详细图解教程): http://www.osyunwei.com/archives/1537.html 准备 ...
- 如何快速部署国人开源的 Java 博客系统 Tale
除了闷头专研技术之外,程序员还需要不断地写作进行技术积累,写博客是其中最重要的方式之一.商业博客平台不少,但是更符合程序员背景的方案,是自己开发一个博客平台或者使用开源的博客平台. 开源的博客平台多如 ...
- 使用Phalcon框架开发一个简易的博客系统
使用Phalcon PHP框架开发一个简易的博客系统(类似于CMS) 最近在做Phalcon(Phalcon在英文中指的是鸟类中飞得最快的那一个物种,由于是高性能框架,借用了这个词)相关的项目,由于刚 ...
- Ubuntu 搭建Ghost1.0博客系统
最近想使用Ghost搭建自己的博客网站,网上搜索了下大多都是1.0之前版本搭建的文章,但是Ghost1.0版本已经可用好一段时间了,所以决定根据官方文档搭建Ghost1.0版本的博客系统. 下面开始一 ...
- 26种基于PHP的开源博客系统
26种基于PHP的开源博客系统 来源:本站原创 PHP学习笔记 以下列举的PHP开源Blog系统中,除了我们熟知的WordPress之外,大多都没有使用过,其中一些已经被淘汰,或者有人还在使用.除了做 ...
随机推荐
- mvc-4控制器和状态(1)
导语 将状态保存在客户端可以加快页面反映:但应当避免状态或数据保存在DOM中:在MVC中,状态应该保存在控制器中 控制器是视图和模型的纽带,只有控制器知道视图和模型的存在并将它们连接在一起:当加载页面 ...
- WMS移动仓库管理系统 PDA仓库管理系统
电子仓库管理系统,简称WMS系统,英文名Warehouse Management System,是应用条码和RFID自动识别技术的现代化仓库管理系统,能有效地对仓库流程和空间进行管理,实现批次管理.快 ...
- LCIS HDOJ 4512 吉哥系列故事——完美队形I
题目传送门 题意:中文题面 分析:LCIS应用:设置b[]为a[]的反转,然后LCIS,若相等的是自己本身,则+1, 否则+2 代码: #include <cstdio> #include ...
- C# 使用 Direct2D 实现斜角效果
Direct2D 是微软新的二维图形 API,可为二维几何图形.位图和文本提供高性能和高质量的呈现.Direct2D 支持硬件加速,无论是绘制速度还是绘制质量,Direct2D 都要比 GDI 和 G ...
- POJ3189 Steady Cow Assignment(最大流)
题目大概说,有n头牛和b块草地,每头牛心中分别对每块草地都有排名,草地在牛中排名越高牛安排在那的幸福度就越小(...),每块草地都能容纳一定数量的牛.现在要给这n头牛分配草地,牛中的幸福度最大与幸福度 ...
- 稳定的奶牛分配 && 二分图多重匹配+二分答案
题意: 农夫约翰有N(1<=N<=1000)只奶牛,每只奶牛住在B(1<=B<=20)个奶牛棚中的一个.当然,奶牛棚的容量有限.有些奶牛对它现在住的奶牛棚很满意,有些就不太满意 ...
- C#多线程与异步的区别
随着拥有多个硬线程CPU(超线程.双核)的普及,多线程和异步操作等并发程序设计方法也受到了更多的关注和讨论.本文主要是想与园中各位高手一同探讨一下如何使用并发来最大化程序的性能. 多线程和异步操作的异 ...
- BZOJ3444: 最后的晚餐
Description [问题背景] 高三的学长们就要离开学校,各奔东西了.某班n人在举行最后的离别晚餐时,饭店老板觉得十分纠结.因为有m名学生偷偷找他,要求和自己暗恋的同学坐在一起. [问题描述] ...
- COJ 删除数字
试题描述 输入正整数N和M,在N中删除掉M位,能留下的最大整数是多少? 输入 正整数N和M 输出 留下的最大整数 输入示例 233390323 5 输出示例 9323 其他说明 1<=N< ...
- Graph database_neo4j 底层存储结构分析(5)
3.5 Property 的存储 下面是neo4j graph db 中,Property数据存储对应的文件: neostore.propertystore.db neostore.propertys ...