@felixonmars 点名要一份trac的最简易配置步骤,不过其实trac这样一个geek东西,即使按本文配置好跑起来后也依然是一套半成品,还有很多东西需要去看文档去配置,就像awesome, vim等,在一段陡峭的学习曲线之前,都不怎么好用。 所以其实本文也不会降低多少门槛,大概比直接看官方的guide安装的时候少点压力,但不一定是好事。 此前有在公司技术部内推广使用trac做项目管理的想法,做过了解,不过因为各种原因还是用不下来。赖勇浩的博客有一系列文章介绍trac,也包括了在公司环境使用的经验。 Trac作为一套web应用,其实部署步骤和此前介绍的MoinMoin, Mercurial很类似的。 以下步骤介绍安装包含多国语言的基本trac环境。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 [...]
Nginx团队维护的PPA源带有PHP 5.3.x的子源,更新迅速,现在在Ubuntu部署Nginx+PHP环境真是太容易了(虽然LAMP更容易,一句apt-get install lamp-server^搞定,别漏了最后的上尖号)。像以前那样跑cgi-fcgi简直弱爆了。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 apt-get install python-software-properties add-apt-repository ppa:nginx/stable add-apt-repository ppa:nginx/php5 #Ubuntu 10.10 以后可不需添加以上源 apt-get update apt-get install nginx apt-get install php5-cgi php5-mysql php5-fpm php5-curl php5-mcrypt #或者你需要更齐全的php包: #aptitude install php5-cgi php5-mysql php5-fpm php5-curl php5-gd php5-idn php-pear php5-imagick [...]
Mercurial/hg是分布式版本管理工具之一,如google code等公共代码服务都直接支持。不过公共服务通常都有如公开开源、空间大小等等的限制,如果特殊情况,需要自己在VPS上假设一套,也不太难。 如果单独一个hg仓库,直接运行hg serve就已经是在线仓库,用nginx做的http_proxy反向代理就够了,各种功能齐全。但是要host多个hg仓库,需要用hgwebdir。 Ubuntu当中安装的mercurial已经包含了架设仓库所用的程序,包括cgi/fcgi/wcgi的,主接口在/usr/share/doc/mercurial-common/examples下的hgwebdir.(ws|(f)c)gi。虽然其中的wsgi有效的只有三行。 Mercurial官方Wiki上主要介绍了用apache2来跑cgi方式的仓库,但是作为python的程序,wsgi才是最原生的嘛。用Nginx+uwsgi的方式,资源占用、响应效率等,都要比apache + cgi靠谱。 Nginx+uwsgi的方式很普遍,参见本博客之前的MoinMoin 与 Nginx, fastcgi 与 uwsgi 的配置一文。 但是因为uwsgi处于快速开发过程当中,ppa的打包也还不十分成熟,里面的路径跟以前有些不一样了。 add-apt-repository ppa:nginx/stable add-apt-repository ppa:uwsgi/release apt-get update apt-get install nginx uwsgi-python python-virtualenv mercurial mkdir -p /var/www/hgwebdir virtualenv /var/www/hgwebdir/python-home cat >/var/www/hgwebdir/hgwebdir_wsgi.py << EOF from mercurial import demandimport; demandimport.enable() from mercurial.hgweb.hgwebdir_mod import hgwebdir class hgwebdir_with_fixed_staticfile(hgwebdir): def __call__(self, env, respond): [...]
WordPress的缓冲插件wp-super-cache默认支持apahce的缓冲方式,在生成了静态页面数据后,通过.htaccess的规则直接让apache读取静态文件,完全不经过PHP,可以很大的提高博客的页面性能。 但是Nginx的改写规则就没这么容易让代码来配置了,虽然wp-super-cache的第二种缓存方式就是为这种使用环境设计,但实际上是用了PHP来提供静态数据了,在使用apache benchmark压力的时候,php-cgi依然占很高的CPU占有率。 通过编写nginx的rewrite规则还是可以让nginx直接读取静态文件,参考来自Code Exchange: nginx rewrite rules for WordPress + WP Super Cache,这里的配置被很多地方引用过,但实际尝试使用过程看到那里面的代码还需要微调。 server { listen 80; server_name apt-blog.net; root /var/www/pt-sites/wordpress; index index.html index.htm index.php; location / { # enable search for precompressed files ending in .gz # nginx needs to be complied using –-with-http_gzip_static_module # for this to work, comment out if using [...]
给自己架了个Wiki http://wiki.apt-blog.net作为自己的知识管理工具。虽然这个博客本来就是工具之一,也累积了快两年了,但经常碰到有些小东西,不值得为之写篇博客,很有用,但用完就忘记。个人wiki适合做写细小的笔记,当累积一定的时候还可以整理成博客。 Wiki我选择了用Python的MoinMoin,一定程度上受CPYUG社区 ZoomQuiet 大妈的推荐影响,首次试用感觉非常impresive,所以就定了。再加上 GraphViz 工具的支持,实在的强大。 在vps上服务,肯定是无视apache的,内存有限。之前架设过用来上Twitter奶瓶腿,是Nginx + php-cgi的方案,nginx是必须的。 Python跟web前端的架构方式有太多选择了,五花八门,MoinMoin的发行包里面都提供了moin.cgi moin.scgi moin.ajp moin.fcgi moin.wsgi等多种启动方式。MoinMoin里面全部通过内置的flup作为中间件提供这些接口,目前我仅尝试使用了fastcgi和wsgi。 虽然解压了moin的源码包就可以直接运行里面的wikiserver.py来本地访问了,但在服务器上通常是由nginx/lighttpd等服务来综合转发。php的话是通过spawn-fcgi启动一些php-cgi的进程,服务器接受到动态的请求就通过本地socket跟php-cgi通讯,返回的结果展现回给客户。php-cgi是使用FastCGI协议的。 MoinMoin 源码当中wiki/server/moin.fcgi就是一个类似php-cgi功能的fastcgi服务,类似地可以使用spawn-fcgi来启动moin.fcgi,作为后端的处理进程。 Running MoinMoin Wiki with Nginx via FastCGI and Flup该文章很形象解释了fastcgi的角色,以及提供了一段很方便的服务脚本来启动spawn-fcgi。 Client ----> Nginx Web Frontend -----------+ | fastcgi_pass \|/ +-------------------------+ moin.fcgi | spawn-fcgi-moin.socket | spawn-fcgi ---------------> | or | | localhost:port | +-------------------------+ 但是文章当中的nginx配置不完整,而且复杂了,这是我的配置: server { listen 80; [...]
先来一段他们的广告式简介: 广州技术沙龙,是由珠三角地区的 web、游戏开发人员自发组织的线下交流活动,计划每月举办一期,以主题演讲和松散交流为形式;吸引来自广州、珠海、深圳等珠三角城市的很多位技术人员参加活动,其中不乏来自网易、金山、腾讯、中国移动等公司的开发人员,活动举办后,大家通过 twitter、python-cn maillist 和 blog 持续交流,取得了比较好的线下交流效果。 https://groups.google.com/group/guangzhou-tech-party 第二期活动的两个主要演讲题目: 《深入 nginx 源码》 Zhu Zhaoyuan 广州梦境网络 《 MMOrpg 副本自动地图生成》 林伟 广州网易 我刚开始看到他们的题目预告时候,第一感觉是,啊,那么高深的东西,我去怎么听得懂阿……不过想到如果都是听自己熟悉的东西,那更不是浪费时间么,而且看了第一期录像,《选好业务与技术,单枪匹马做游戏》 (赖勇浩),感觉虽然不是自己感兴趣的题材,但是收获还是不少的,这是很难得的“基层人员”的信息啊!所以一早就报名参加了此次活动。 《深入 nginx 源码》让我了解到nginx内部代码的实现是如何精益求精,比如说处理HTTP Request时候的指令,GET、PUT等的指令,nginx里面可不是用C库里面的strcmp,而是自己写了比较函数(似乎是一个maroc),具体实现我没看清楚,但我估计是把指令的前两个char放入一个short里面来比较,这样只需在switch之类的处理时候,单比较就完成了!当然这可不是nginx性能的突出点,只是冰山一角的例子罢了。nginx自己实现了一个很巧妙的内存池,使用排序链来管理获得分配的内存(减少内存碎片,这点是lighttpd没有的),跟apahe相比,更加在进程处理上面的洁癖。 虽然我自己在机器上配置过nginx,但很难想象我会花时间去看其代码,但发现这么看确实能学到不少东西…… 《游戏自动地图生成》这个题材,自己也没想过做游戏开发或者之类的,但是听小林介绍下去几种地图生成算法时,兴趣大增了;其提到一个“细胞自动机算法”觉得颇为经典,在在自动生成地图的整个过程里面也用的比较多。其实就是一个很现实化的思想,局部性原理;现实世界中,某个坐标跟它相邻坐标对应的物体,很大几率就是相同的;操作系统的磁盘调度、内存调度、缓存快写,通通都用到局部性原理,当请求了A地址的内容,A+1地址的内容很可能将会被访问到。其他如平滑连接随机点算法(集合、概率)、侵蚀算法、次优选择等等一大堆的思想,颇让我大开眼界。 收集一下资料吧: 广州技术沙龙第二期流程笔记Ayou的nginx、Linux服务器配置笔记(推荐!很多很重要很实用的资料!)
Update: nginx+php的环境可以更快捷的方法完成,参看Nginx + PHP (via php-fpm) on Ubuntu 环境最佳实践 比起传统的LAMP Web服务构架,nginx替换Apache能够在同样硬件配置情况下提高10倍的并发性能;PT尝试在Arch下用nginx简单搭建一个让wordpress运行的LNMP环境的笔记:(实际上nginx+fastcgi的架构在目前看来性能并不高,甚至比apache+mod_cgi差,也许nginx做前端服务,apache做后端处理合适一点[误]) Update:nginx+fastcgi跑服务的组合通常用在一些低端的vps上,其内存甚至不到100M,所以apache等庞物是不适合的。按下文方法启动的fcgi只有一个worker进程,而且nginx配置当中没有fastcgi的缓冲,所以会有性能低下的感觉,其实可以通过PHP_FCGI_CHILDREN环境变量等来进行优化。另外推荐使用这里提到的启动脚本来启动php-cgi。参考一些nginx调优方案,再加上一些Wordpress Cache之类的,一台64M的vps足够跑上一打wordpress博客了。 安装nginx。 nginx在源里面,很简单就安装完成; 1 /etc/rc.d/nginx start 启动nginx的服务,因为有默认的配置,这时用浏览器看看http://localhost,可见到nginx的错误页了,完成; 安装php 安装php也是从源里来的,至于运行php,按arch wiki推荐的方法是使用fcgi,顺便装上,运行: 1 cgi-fcgi -start -connect localhost:9000 /usr/bin/php-cgi nginx的默认目录在/srv/http/nginx,在里面新建一个index.php,包含简单的代码: 1 2 3 <?php phpinfo(); ?> 然后我们要让nginx使用php来解释这个文件,编辑/etc/nginx/conf/nginx.conf 配置nginx的重点就是这个文件,但先不管,在适当的地方贴入这段: location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } 重启一下nginx 1 [...]
Page optimized by WP Minify WordPress Plugin