git flow 应用于已经存在的项目

前提:团队协作时,使用git来管理代码仓库,使用git-flow这个扩展来实现分支模型。并且已经把master和develop分支推送到远程仓库。

那么在用户新克隆了代码仓库时,如果直接用git flow init来初始化项目,就会出现问题,因为刚克隆下来的仓库默认分支是master。会把master的代码自动创建一份develop分支。而不是真正远程仓库中的develop分支。所以要先切换到develop分支上,再运行git flow init.

然后git flow就会提示你确认一堆分支名字及前端,一路回车默认即可。即完成了git flow对仓库的初始化。

git clone git@youdomain.com:project.git #克隆仓库
git checkout -b develop origin/develop #切换到develop分支
git flow init #初如化git flow
Posted in git | Tagged | Leave a comment

针对Yii框架的nginx配置

我曾经针对yii制作了 个nginx配置,其中包括了以下几项内容:

  • rewrite规则(try_file),需要nginx0.8.6版本以上支持。
  • 针对于icon, robots.txt文件的日志优化
  • .svn, .git,等版本控制文件的忽略,以及Mac本身索引文件目录
  • Yii框架本身应该禁止web访问的目录。
  • 图片等静态文件缓存优化

在这里分享一下demo

server {
    listen       80;
    server_name  youdomain.com;
    index index.html index.htm index.php;
    root  /home/wwwroot/htdocs/yii-1.1.8.r3324/demos/blog;
    #charset koi8-r;

    # 这里的main,是nginx默认的httpd段的一个日志格式定义
    access_log  /home/wwwlogs/localhost.access.log  main;
    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    #error_page   500 502 503 504  /50x.html;

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    ################ Yii framework rule #################
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ /(protected|framework|nbproject|themes/\w+/views|index-test\.php) {
        deny all;
        # for production
        internal;
        log_not_found off;
        access_log off;
    }
    ################ for Yii framework end #################

    location ~ \.php$ {
        fastcgi_pass   php;
        fastcgi_index  index.php;
        include fastcgi.conf;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /(\.svn|\.git|\.ht|\.DS) {
        deny all;
        internal;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
         expires max;
         log_not_found off;
    }

}
Posted in Web Server | Tagged , | Leave a comment

wordpress插件推荐:WP CleanFix

WP CleanFix 是一个清理wordpress数据库的插件。多达十七项清理,包括数据库的碎片整理,包括草稿、历史版本,用户、分类、评论,post自不必说,是清理项最多的。甚至还包含搜索替换的功能。

清理的非常彻底。对于对数据有洁癖的人来说,是不可或缺的利器。下面仅仅贴出其对Posts的优化项截图供参考。

插件地址:http://wordpress.org/extend/plugins/wp-cleanfix/

Posted in wordpress | 2 Comments

使用gitosis来管理git项目和用户

git依赖包 gcc zlib-devel,以下安装基于Centos,同时,很多人可能会同时使用多个私钥,由于私钥默认为id_rsa,所以如果使用多个公钥的话,需要在~/.ssh 目录下创建一个config文件,其内容后面会给出demo.

下载并安装git:

wget http://git-core.googlecode.com/files/git-1.7.7.tar.gz
tar -zxvf git-1.7.7.tar.gz
cd git-1.7.7
yum install -y gcc zlib-devel
./configure
make
make install
cd ..

安装gitosis
安装python安装工具

yum install python-setuptools

克隆gitosis仓库

git clone git://eagain.net/gitosis
cd gitosis
python setup.py install

本地生成公钥和私钥

ssh-keygen -t rsa -f gitserver.com #生成名为git_server.pub的公钥,一路回车
scp ~/.ssh/git_server_rsa root@xxx.xxx.xxx.xxx:/tmp/ #上传ssh public key到服务器

初始化gitosis

adduser git #创建git用户和组
su - git #切换到git用户
gitosis-init < /tmp/gitserver.com.pub
su root
rm /tmp/gitserver.com.pub

本地配置,可以同时拥有多个私钥,如果有多个私钥,就设置多个Host:

vim ~/.ssh/config

config文件内容

Host gitserver.com
Compression yes
IdentityFile ~/.ssh/gitserver.com

获取并配置gitosis-admin:
#在本地执行,获取gitosis管理项目
git clone git@giterver.com:gitosis-admin.git

剩下的就是编辑gitosis.conf配置文件,以及将用户的公钥,记得是公钥,以.pub结尾的公钥放入keydir目录中。

可以参考这里:http://progit.org/book/zh/ch4-7.html

Posted in git | Tagged , | Leave a comment

Nginx gzip参数详解

这个模块支持在线实时压缩输出数据流
_ _使用范例_ _

gzip             on;
gzip_min_length  1000;
gzip_proxied     expired no-cache no-store private auth;
gzip_types       text/plain application/xml;

gzip

语法: gzip on|off

默认值: gzip off

作用域: http, server, location, if (x) location

开启或者关闭gzip模块

gzip_buffers

语法: gzip_buffers number size

默认值: gzip_buffers 4 4k/8k

作用域: http, server, location
设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。

如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。

gzip_comp_level

语法: gzip_comp_level 1..9

默认值: gzip_comp_level 1

作用域: http, server, location

gzip压缩比,1 压缩比最小处理速度最快,9 压缩比最大但处理最慢(传输快但比较消耗cpu)。

gzip_min_length

语法: gzip_min_length length

默认值: gzip_min_length 0

作用域: http, server, location
设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。

默认值是0,不管页面多大都压缩。

建议设置成大于1k的字节数,小于1k可能会越压越大。 即: gzip_min_length 1024

gzip_http_version

语法: gzip_http_version 1.0|1.1

默认值: gzip_http_version 1.1

作用域: http, server, location

识别http的协议版本。由于早期的一些浏览器或者http客户端,可能不支持gzip自解压,用户就会看到乱码,所以做一些判断还是有必要的。 注:21世纪都来了,现在除了类似于百度的蜘蛛之类的东西不支持自解压,99.99%的浏览器基本上都支持gzip解压了,所以可以不用设这个值,保持系统默认即可。

gzip_proxied

语法: gzip_proxied [off|expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any] …

默认值: gzip_proxied off

作用域: http, server, location

Nginx作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,匹配的前提是后端服务器必须要返回包含”Via”的 header头。

  • off – 关闭所有的代理结果数据的压缩
  • expired – 启用压缩,如果header头中包含 “Expires” 头信息
  • no-cache – 启用压缩,如果header头中包含 “Cache-Control:no-cache” 头信息
  • no-store – 启用压缩,如果header头中包含 “Cache-Control:no-store” 头信息
  • private – 启用压缩,如果header头中包含 “Cache-Control:private” 头信息
  • no_last_modified – 启用压缩,如果header头中不包含 “Last-Modified” 头信息
  • no_etag – 启用压缩 ,如果header头中不包含 “ETag” 头信息
  • auth – 启用压缩 , 如果header头中包含 “Authorization” 头信息
  • any – 无条件启用压缩

 

gzip_types

语法: gzip_types mime-type [mime-type ...]

默认值: gzip_types text/html

作用域: http, server, location

匹配MIME类型进行压缩,(无论是否指定)”text/html”类型总是会被压缩的。
注意:如果作为http server来使用,主配置文件中要包含文件类型配置文件

http {
      include        conf/mime.types;
      ........
     }

 

gzip_vary

syntax: gzip_vary on|off

default: gzip_vary off

context: http, server, location

Enables response header of “Vary: Accept-Encoding”. Note that this header causes IE 4-6 not to cache the content due to a bug

注意:如果开启了这个参数,并且前端有一层缓存层的话,缓存命中率将大受影响

example:

gzip  on;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types       text/plain text/javascript application/x-javascript text/css application/xml;
gzip_vary on;
Posted in Web Server | Tagged | 2 Comments

宴几道诗两道

临江仙

身外闲愁空满,眼中欢事常稀。明年应赋送君诗。细从今夜数,相会几多时。

浅酒欲邀谁劝,深情惟有君知。东溪春近好同归。柳垂江上影,梅谢雪中枝。

临江仙

梦后楼台高锁,酒醒帘幕低垂。去年春恨却来时。落花人独立,微雨燕双飞。

记得小苹初见,两重心字罗衣。琵琶弦上说相思。当时明月在,曾照彩云归。

Posted in 心情随笔 | Tagged | 2 Comments

google apps免费版5月10日后新注册只有10个帐户

从5月10号开始,google apps免费用户,就只有10个帐户了。 还没注册google apps的域名,抓紧注册吧。

以下是google apps Team发来的邮件:

Hello,

We recently announced upcoming changes to the maximum number of users for Google Apps. We want to let you know that, as a current customer, the changes will not affect you.

As of May 10, any organization that signs up for a new account will be required to use the paid Google Apps for Business product in order to create more than 10 users. We honor our commitment to all existing customers and will allow you to add more than 10 users to your account for akii.org at no additional charge, based on the limit in place when you joined us.

Sincerely,

The Google Apps Team

Posted in Google Service | Tagged | 2 Comments

很忙,很久未写日志,贴两条我最近关注的消息

@yurii_yu: 招商银行联合贝恩咨询作了一项关于中国个人净资产值的研究发现:在个人净资产很高的中国人中,有大约60%的人已经移民或正认真考虑移民一事 http://goo.gl/agSmo

@lihliihttp://goo.gl/tqQwa #aiww 寻人启事-我们都是艾未未 wuala 下载: http://goo.gl/z40LQ 欢迎传播。:) 在墙内传播是可以说,呀,快来看完全用 iphone4 制作令人震惊的短片!

pearlher 《文汇报》梁立人称艾未未的行為藝術為「淫亂行為」,是對藝術和公序良俗的褻瀆。这是鼓吹文化艺术神圣化。面对老艾所展示的后现代主义和新自由主义对社会和文化秩序的解构,某种程度上是为某个阶层对自己“文化特权”的失落发出哀叹

Posted in 心情随笔 | Tagged , | 1 Comment

MocoSpace网站的架构

MocoSpace.com 是一家移动社交网站,有1200多万注册用户,每个月30亿的 PV ,是美国最大的移动社区。我们来看看 MocoSpace 是如何来架构他们的网站的。先来看看他们的统计数据,注意他们只有1个系统管理员,8个程序员,14台服务器(数据和原文来自 MOCOSPACE ARCHITECTURE – 3 BILLION MOBILE PAGE VIEWS A MONTH):

数据

每月30亿 PV
全美第4大流量的网站,继 MySpace, Facebook, Google 之后
75% 手机 Web, 25% Web
1200 万用户
每月600万独立访问
10万在线用户
每月上传1200万照片
每天接受和发送450万 email
8个程序员,2个测试员,1个系统管理员

平台和工具

CentOS + Red Hat
Resin application server, Java Servlets, JavaServer Pages, Comet
PostgreSQL
Memcached
ActiveMQ’s job + message queue,Red Hat 集群做 HA
Squid 静态内容缓存,曾试过 Varnish 但是 Varnish 不稳定
JQuery + Ajax
S3 用来存储用户照片和视频,现在用 Amazon S3 做外部存储是主流,EC2 用来做照片处理
F5 BigIP 负载均衡,用 gzip 压缩所有页面
Akamai CDN,每天 2TB 数据、2.5亿次请求。
Nagios 用来警告,Zabbix 用来监测
EMC SAN 用大量磁盘做 RAID 10 做需要高 IO 的数据库存储,用来替代高性能的 SSD,节省了大量成本
PowerMTA 做邮件传送,用Barracuda 做 spam 和 firewall
Subversion 做源代码控制,Hudson 做 continuous integration
FFMPEG 用来做视频处理
Selenium 用来自动测试浏览器
5x Dell 1950, 2x dual core, 16G RAM(Web 服务器)
5x Dell 6950/R905, 4x dual core, 32G RAM(Web 服务器)
2x Sun Fire X4600 M2 Server, 8x quad core, 256G RAM(数据库服务器)
2x Dell 6950, 4x dual core, 64G RAM(数据库服务器)

Continue reading

Posted in 互联网络 | 4 Comments

sql查询优化小结

1. SQL优化的原则是:将一次操作需要读取的BLOCK数减到最低,即在最短的时间达到最大的数据吞吐量。
调整不良SQL通常可以从以下几点切入:

  • 检查不良的SQL,考虑其写法是否还有可优化内容
  • 检查子查询 考虑SQL子查询是否可以用简单连接的方式进行重新书写
  • 检查优化索引的使用
  • 考虑数据库的优化器

2. 避免出现SELECT * FROM table 语句,要明确查出的字段。

3. 在一个SQL语句中,如果一个where条件过滤的数据库记录越多,定位越准确,则该where条件越应该前移。

4. 查询时尽可能使用索引覆盖。即对SELECT的字段建立复合索引,这样查询时只进行索引扫描,不读取数据块。

5. 在判断有无符合条件的记录时建议不要用SELECT COUNT (*)和select top 1 语句。

6. 使用内层限定原则,在拼写SQL语句时,将查询条件分解、分类,并尽量在SQL语句的最里层进行限定,以减少数据的处理量。

7. 应绝对避免在order by子句中使用表达式。

8. 如果需要从关联表读数据,关联的表一般不要超过7个。
Continue reading

Posted in PHP & MYSQL | Tagged | 1 Comment