未来往事
心存感恩的人,才能收获更多的人生幸福和生活快乐。 [2017年 第26周/共52周]

zeroMQ/php-zmq消息队列安装配置

zeroMQ消息队列介绍及zeroMQ/php-zmq安装
首先了解下ZMQ的概念,ØMQ(ZeroMQ)是啥玩意儿?
ZeroMQ是个类似于Socket的一系列接口,他跟Socket的区别是:普通的socket是端到端的(1:1的关系),而ZMQ却是可以N:M 的关系,人们对BSD套接字的了解较多的是点对点的连接,点对点连接需要显式地建立连接、销毁连接、选择协议(TCP/UDP)和处理错误等,而ZMQ屏蔽了这些细节,让你的网络编程更为简单。ZMQ用于node与node间的通信,node可以是主机或者是进程。
ZeroMQ是网络栈中新的一层,它是个可伸缩层,分散在分布式系统间。因此,它可支持任意大的应用程序。ØMQ不是简单的点对点交互,相反,它定义了分布式系统的全局拓扑。ØMQ应用程序没有锁,可并行运行。此外,它可在多个线程、内核和主机盒之间弹性伸缩。

与其他的消息队列相比,ZeroMQ有以下一些特点
1、点对点无中间节点
传统的消息队列都需要一个消息服务器来存储转发消息。而ZeroMQ则放弃了这个模式,把侧重点放在了点对点的消息传输上,并且(试图)做到极致。以为消息服务器最终还是转化为服务器对其他节点的点对点消息传输上。ZeroMQ能缓存消息,但是是在发送端缓存。ZeroMQ里有水位设置的相关接口来控制缓存量。当然,ZeroMQ也支持传统的消息队列(通过zmq_device来实现)。
2、强调消息收发模式
在点对点的消息传输上ZeroMQ将通信的模式做了归纳,比如常见的订阅模式(一个消息发多个客户),分发模式(N个消息平均分给X个客户)等等。下面是目前支持的消息模式配对,任何一方都可以做为服务端。
• PUB and SUB
• REQ and REP
• REQ and XREP
• XREQ and REP
• XREQ and XREP
• XREQ and XREQ
• XREP and XREP
• PUSH and PULL
• PAIR and PAIR
3、以统一接口支持多种底层通信方式(线程间通信,进程间通信,跨主机通信)
如果你想把本机多进程的软件放到跨主机的环境里去执行,通常要将IPC接口用套接字重写一遍。非常麻烦。而有了ZeroMQ就方便多了,只要把通信协议从"ipc:///xxx"改为"tcp://*.*.*.*:****"就可以了,其他代码通通不需要改,如果这个是从配置文件里读的话,那么程序就完全不要动了,直接复制到其他机器上就可以了。以为ZeroMQ为我们做了很多。
4、异步,强调性能
ZeroMQ设计之初就是为了高性能的消息发送而服务的,所以其设计追求简洁高效。它发送消息是异步模式,通过单独出一个IO线程来实现,所以消息发送调用之后不要立刻释放相关资源哦,会出错的(以为还没发送完),要把资源释放函数交给ZeroMQ让ZeroMQ发完消息自己释放。

zeromq的官方网站: http://www.zeromq.org/

系统环境约定:
OS:centos 6.3 X64
web目录:/htdoc/web
软件临时存放目录:/opt/
zeromq安装目录:/usr/local/webserver/zeromq


一、安装zeromq
Tip:To build on UNIX-like systems,make sure that libtool, autoconf, automake are installed.
[root@iredmail opt]# wget http://download.zeromq.org/zeromq-3.2.3.tar.gz
[root@iredmail opt]# tar -zxvf zeromq-3.2.3.tar.gz
[root@iredmail opt]# cd zeromq-3.2.3
[root@iredmail zeromq-3.2.3]# ./configure --prefix=/usr/local/webserver/zeromq --with-pgm=libpgm-5.1.118~dfsg
(libpgm-5.1.118~dfsg位于zeromq-3.2.3/foreign/openpgm/目录下)
[root@iredmail zeromq-3.2.3]# make && make install
[root@iredmail zeromq-3.2.3]# ldconfig
官方文档:http://www.zeromq.org/area:download
Tip:If you get an error:configure: "error: cannot link with -luuid, install uuid-dev".Please install e2fsprogs-devel


二、安装php扩展
[root@iredmail zeromq-3.2.3]# cd..
[root@iredmail opt]# git clone git://github.com/mkoppanen/php-zmq.git
Tip: If you get an error of git command,please install git or use other download tools
[root@iredmail opt]# cd php-zmq
[root@iredmail php-zmq]# /usr/local/webserver/php5318/bin/phpize
Tip:
①/usr/local/webserver/php5318/is my php installation path;
②If you are using php installed from your distribution's package manager the 'phpize' command is usually in php-dev or php-devel package
[root@iredmail php-zmq]# ./configure --with-php-config=/usr/local/webserver/php5318/bin/php-config --with-zmq=/usr/local/webserver/zeromq
Tip:
①/usr/local/webserver/zeromq is my zeromq installation path;
②If you get an error:"checking libzmq installation... configure: error: Unable to find libzmq installation",please use param"--with-zmq" specify the zeromq installation path.
[root@iredmail php-zmq]# make && make install
Installing shared extensions:     /usr/local/webserver/php5318/lib/php/extensions/no-debug-non-zts-20090626/
表示生成了动态链接库文件zmq.so.这个时候可以查看一下目录里有没有zmq.so 这个文件.

Add the following line to your php.ini:
extension=zmq.so
OR:
If you are using PHP 5.4.x and/or using PHP-FPM, you will need to add a zmq.ini file in /etc/php5/conf.d:
Add the following:
extension=zmq.so
Restart php-fpm

访问phpinfo页面就可以看到zeroMQ的消息了:
点击在新窗口中浏览此图片

官方文档:http://www.zeromq.org/bindings:php
If you need an Java language environment,you can get client from:https://github.com/zeromq/jzmq
If you need an Python language environment,you can get client from:https://github.com/zeromq/pyzmq


三、实例测试
+阅读全文

Firefox js alert输出乱码解决

博客中有个alert输出的地方是在php后台文件中,在MSIE、Chrome等浏览器下弹出框中文字体均无乱码现象,但是今天突然发现在Firefox浏览器下弹出的提示框内容却是乱码,php文件中是这样打印出的JS弹出框:
  1. print "<script type='text/javascript'> alert('错误提醒!\\r\\r未来往事 - http://fity.cn');history.go(-1);</script>";  
原因是未定义页面编码,声明了字符编码后恢复正常了。

修改后
......
+阅读全文

bo-blog搜索程序发生错误解决

......
+阅读全文

性能测试,你真的懂吗?

在用到一个新产品时,我们肯定会做的一件事就是做性能测试。但是你真的会做性能测试吗?今天要说的是一个关于Redis性能测试的争论。

事情起因是一篇叫做Redis vs Memcached的文章,本文作者在听说Redis之后将Redis和Memcached进行了一组性能对比测试,测试结果Redis完败。然而其测试方法却引起了不小的争执,其博文下的第一篇回复就是Redis作者antirez同学的回复。antirez非常有风度的感谢了他的测试结果,然后指出其测试中的问题。

而后在antirez的一篇博文......
+阅读全文

Bo-blog IIS Nginx Rewrite伪静态规则

适用于:bo-blog2.X以上版本  Windows IIS站点主机和Nginx主机

IIS ISAPI_Rewrite:
[ISAPI_Rewrite]

# 3600 = 1 hour
CacheClockRate 3600

RepeatLimit 32

# Protect httpd.ini and httpd.parse.errors files
# from accessing through HTTP
#Bo-Blog 2.1.1 Release ISAPI_Rewrite http://fity.cn
RewriteRule ^(.*)/post/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ $1/read\.php\?entryid=$2&page=$3&part=$4
RewriteRule ^(.*)/page/([0-9]+)/([0-9]+)/?$ $1/index\.php\?mode=$2&page=$3
RewriteRule ^(.*)/starred/([0-9]+)/?([0-9]+)?/?$ $1/star.php\?mode=$2&page=$3
RewriteRule ^(.*)/category/([^/]+)/?([0-9]+)?/?([0-9]+)?/?$ $1/index\.php\?go=category_$2&mode=$3&page=$4
RewriteRule ^(.*)/archiver/([0-9]+)/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ $1/index\.php\?go=archive&cm=$2&cy=$3&mode=$4&page=$5
RewriteRule ^(.*)/date/([0-9]+)/([0-9]+)/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ $1/index\.php\?go=showday_$2-$3-$4&mode=$5&page=$6
RewriteRule ^(.*)/user/([0-9]+)/?$ $1/view\.php\?go=user_$2
RewriteRule ^(.*)/tags/([^/]+)/?([0-9]+)?/?([0-9]+)?/?$ $1/tag\.php\?tag=$2&mode=$3&page=$4
RewriteRule ^(.*)/component/id/([0-9]+)/?$ $1/page\.php\?pageid=$2
RewriteRule ^(.*)/component/([^/]+)/?$ $1/page\.php\?pagealias=$2

#Customized URL
#RewriteRule ^(.*)/([^\/]*)\.html$ $1/$2/ [I]
RewriteRule ^(.*)/([^/|.]+)/?([0-9]+)?/?([0-9]+)?/?$ $1/read.php\?blogalias=$2&page=$3&part=$4 [I]

#fity.cn伪RSS XML订阅页面
RewriteRule ^(.*)/rss.xml$ $1/feed\.php
RewriteRule ^(.*)/sitemap.xml$ $1/sitemap\.php


Nginx Rewrite:也是本站当前在用的
+阅读全文

Discuz!X2.5/X3.0/X3.1 单页制作教程

这篇文章主要叙述Discuz x2.5 X3.0 X3.1 php单页面的制作方法,包括单页的DIY,选项卡页面的制作等。Discuz单页的制作其实还是很简单的,本文以制作美食单页面为例。

单页包括该单页的php文件和该单页的模板(.htm)文件,比如:food.php、food.htm。下面就开始分析说明单页的代码:
1、首先创建一个php文件,这里我把文件命名为food.php(存在论坛的根目录)
  1. < ?php  
  2. define('CURSCRIPT''fity');  //body的一个class标识  
  3. require './source/class/class_core.php';  //引入系统核心文件  
  4. $discuz = & discuz_core::instance();  //以下代码为创建及初始化对象  
  5. $discuz->init();  
  6. loadcache('diytemplatename');  //DIY要载入缓存  
  7. $navtitle = 'Discuz!X2.5/X3 单页制作教程 | 未来往事';  //单页的标题  
  8. $metakeywords = 'Discuz!X2.5单页制作教程,Discuz!X3 单页制作教程,Discuz单页制作';  //单页的关键词  
  9. $metadescription = 'Discuz单页面制作教程';  //单页的描述说明  
  10. include template('diy:portal/food');  //调用单页模版文件的路径  
  11. ?>  
注意:food为模板文件名,不需要加.htm扩展名,这里暂定存在默认风格目录下的portal目录下。如果不理解可以看看Discuz!模板解析机制:http://open.discuz.net/?ac=document&page=dev_template


2、新建一个支持Diy的普通单页面模板文件:food.htm(存在论坛当前风格的portal目录,上面已经定义了路径)
undefined


3、新建带有右侧边栏的单页模版文件代码(根据自己需要,如果不需要就不用建立)
+阅读全文

HTTP/1.1 新建会话失败故障解决方法

故障描述:
今天一台windows2003服务器IIS站点页面访问突然报“HTTP/1.1 新建会话失败”错误,经过排查发现为有效内存过少,来源为COM+,分类为激活,事件:4238

原因分析:
服务器的资源耗尽,或者是IIS,或者内存,或者流量,或者CPU.......

解决方法:
重启IIS或DefaultAppPool或重启服务器。

补充说明:如果你的服务器该故障是因上述原因引起的,那么重新启动服务/服务器后问题就......
+阅读全文

图片等比例缩放CSS样式:max-width:100%兼容IE6方法

图片自动等比例缩放css: max-width:100%兼容IE6、IE7、IE8、Firefox
CSS的防止图片撑破页面的代码,图片会自动按比例缩小适应当前容器的宽度。

max-width, min-width, max-height 和 min-heigh是CSS2的属性,它工作于IE7以及更高版本和或者Mozilla Firefox、Chrome等支持CSS2的浏览器,但不能与IE 6和更低版本IE浏览器兼容,比较常用的解决方案是通过CSS表达式让IE6实现相同的效果。例如:如果有一个或多个图像,显示图像的宽度应该......
+阅读全文

IE6 img标签png图片透明方法

在页面的< head>与< /head>之间加上
undefined
当然你也可以把以上js代码单独写入到文件中,然后进行引入,例如:
<script language="JavaScript" type="text/javascript" src="xxxx.js"></script>


在需要透明的png img标签处修改格式为(只是多了onload="fixpng(this)"而已):
undefined

补充说明:这种方法解决的是在html里面使用img标签时遇到的png透明问题。如果你需要解决css样式背景png透明问题请自行Google。......
+阅读全文

cacti不出图无数据常见错误问题解决

最后更新时间:2013-09-09
  • 2013-05-07 发布到博客
  • 2013-09-09 最后更新


使用cacti监控工具的朋友都经常会遇到这样的问题,比如说无图像或者无数据等。今天遇到cacti不出图无数据,总结排查思路如下:
1、图像没有生成,运行#/usr/local/webserver/php5320/bin/php /htdoc/cacti/cacti/poller.php --force 看看是否成功,并查看日志记录了什么错误
2、system utilities -->Rebuild poller cache
3、系统时间不准确,重新设置时间
4、权限问题,修改权限#chmod 777 -R /srv/www/htdocs/cacti/rra
......
+阅读全文

CentOS下yum安装配置samba服务

Samba 是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。
这些年来,Windows 和Linux 操作系统各自拥有自己的用户群和市场。然而在一般的公司或学校里,可能同时有Windows 和Linux 操作系统的主机。Windows 主机彼此间可利用“网上邻居”来访问共享的资源,NFS也能使Linux 主机之间实现资源共享。但如何能使Windows 主机和Linux主机之间实现资源共享呢?
微软的“网上邻居(就是Windows 上利用SMB通信协议实现资源共享的程序)”一经推出,便广受用户的好评,大家突然觉得原来要在网上共享资源尽是那么简单,有鉴于此,便有一些Linux 爱好者开始在Linux 主机上实现SMB通信协议,后来这个实现了SMB功能的软件既被称为 Samba ,它使得Windows 主机和Linux主机之间实现了资源共享。

注意:本文的原则是只将文件共享应用于内网服务器,并让将要被共享的目录拥有充分的读写权限属性,读者可顺着本文的思路完成基本配置流程,如需复杂读写权限功能请自行google。

系统信息约定:
操作系统:CentOS 6.3 X64
共享目录:/share/fity.cn

1、使用yum命令安装samba
# yum -y install samba     //-y参数:如遇询问自动选择y,全自动下载并安装samba

2、检查samba服务包的安装情况
# rpm -qa | grep samba
samba-common-3.0.33-3.7.el5_3.1    //服务器和客户端均需要的文件
samba-3.0.33-3.7.el5_3.1                 //服务器端文件

3、用whereis命令查看samba安装位置
# whereis samba
samba: /etc/samba /usr/lib/samba /usr/share/samba /usr/share/man/man7/samba.7.gz

4、配置samba服务
# vi /etc/samba/smb.conf
(1)[global]    //找到全局设置标签,在下面进行配置
workgroup =  WORKGROUP  //说明:设定 Samba Server 所要加入的工作组或者域
server string = Samba Server Version %v  //说明:设定 Samba Server 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号。
; hosts allow = 192.168.1. 192.168.2. 127. 找到此行,去掉行首的“;”,并制定访问限制改为hosts allow = 192.168.1. 127.,指定内网IP地址及本地,只允许这两种情况的访问
security = user
说明:设置用户访问Samba Server的验证方式,一共有四种验证方式。
1. share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。
2. user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。
3. server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用 Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。
4. domain:域安全级别,使用主域控制器(PDC)来完成认证。

(2)配置最简单访问目录几个基本属性:
[share]    windows客户端查看时看到的文件夹名
path = /share/fity.cn    共享目录位置,要系统中存在的目录,也可以配置完再创建
read only = no
public   = yes

5、给配置的共享目录设置权限:
# mkdir /var/samba/share       如刚才配置的共享目录不存在则创建
# chown -R nobody. /var/samba/share       设置共享目录归属为 nobody
# chmod 777 /var/samba/share       将共享目录属性设置为 777

6、配置登录用户信息
+阅读全文

wget命令详解之网站目录文件下载

wget是linux下命令行的下载工具,功能很强大,虽然很少用,一般下在一些小东西都是直接用firefox,seamonkey这些浏览器自带的下载功能下载,没有必要用wget或者其他下载工具。但是某些时候却不是浏览器自带的下载功能和一些其他的下载软件所能做的的,这时候就得用wget了。比如如果你想下载一个网页目录下的所有文件,如何做呢?

例如:wget -c -r -np -k -L -p http://test.fity.cn/apache/  #下载http://fity.cn/apache/目录下的所有文件

wget命令的帮助文档:
# wget --help

  GNU Wget 1.9.1,非交互式的网络文件下载工具。
  用法: wget [选项]… [URL]…

  长选项必须用的参数在使用短选项时也是必须的。

启动:
  -V, –version 显示 Wget 的版本并且退出。
  -h, –help 打印此帮助。
  -b, -background 启动后进入后台操作。
  -e, -execute=COMMAND 运行‘.wgetrc’形式的命令。


日志记录及输入文件:
  -o, –output-file=文件 将日志消息写入到指定文件中。
  -a, –append-output=文件 将日志消息追加到指定文件的末端。
  -d, –debug 打印调试输出。
  -q, –quiet 安静模式(不输出信息)。
  -v, –verbose 详细输出模式(默认)。
  -nv, –non-verbose 关闭详细输出模式,但不进入安静模式。
  -i, –input-file=文件 下载从指定文件中找到的 URL。
  -F, –force-html 以 HTML 方式处理输入文件。
  -B, –base=URL 使用 -F -i 文件选项时,在相对链接前添加指定的 URL。


下载:
  -t, –tries=次数 配置重试次数(0 表示无限)。
  –retry-connrefused 即使拒绝连接也重试。
  -O –output-document=文件 将数据写入此文件中。
  -nc, –no-clobber 不更改已经存在的文件,也不使用在文件名后
  添加 .#(# 为数字)的方法写入新的文件。
  -c, –continue 继续接收已下载了一部分的文件,断点续传。
  –progress=方式 选择下载进度的表示方式。
  -N, –timestamping 除非远程文件较新,否则不再取回。
  -S, –server-response 显示服务器回应消息。
  –spider 不下载任何数据。
  -T, –timeout=秒数 配置读取数据的超时时间 (秒数)。
  -w, –wait=秒数 接收不同文件之间等待的秒数。
  –waitretry=秒数 在每次重试之间稍等一段时间 (由 1 秒至指定的 秒数不等)。
  –random-wait 接收不同文件之间稍等一段时间(由 0 秒至 2*WAIT 秒不等)。
  -Y, –proxy=on/off 打开或关闭代理服务器。
  -Q, –quota=大小 配置接收数据的限额大小。
  –bind-address=地址 使用本机的指定地址 (主机名称或 IP) 进行连接。
  –limit-rate=速率 限制下载的速率。
  –dns-cache=off 禁止查找存于高速缓存中的 DNS。
  –restrict-file-names=OS 限制文件名中的字符为指定的 OS (操作系统) 所允许的字符。


目录:
  -nd –no-directories 不创建目录。
  -x, –force-directories 强制创建目录。
  -nH, –no-host-directories 不创建含有远程主机名称的目录。
  -P, –directory-prefix=名称 保存文件前先创建指定名称的目录。
  –cut-dirs=数目 忽略远程目录中指定数目的目录层。


HTTP 选项:
  –http-user=用户 配置 http 用户名。
  –http-passwd=密码 配置 http 用户密码。
  -C, –cache=on/off (不)使用服务器中的高速缓存中的数据 (默认是使用的)。
  -E, –html-extension 将所有 MIME 类型为 text/html 的文件都加上 .html 扩展文件名。
  –ignore-length 忽略“Content-Length”文件头字段。
  –header=字符串 在文件头中添加指定字符串。
  –proxy-user=用户 配置代理服务器用户名。
  –proxy-passwd=密码 配置代理服务器用户密码。
  –referer=URL 在 HTTP 请求中包含“Referer:URL”头。
  -s, –save-headers 将 HTTP 头存入文件。
  -U, –user-agent=AGENT 标志为 AGENT 而不是 Wget/VERSION。
  –no-http-keep-alive 禁用 HTTP keep-alive(持久性连接)。
  –cookies=off 禁用 cookie。
  –load-cookies=文件 会话开始前由指定文件载入 cookie。
  –save-cookies=文件 会话结束后将 cookie 保存至指定文件。
  –post-data=字符串 使用 POST 方法,发送指定字符串。
  –post-file=文件 使用 POST 方法,发送指定文件中的内容。


HTTPS (SSL) 选项:
+阅读全文

MySQL数据库存储引擎选择 - 性能优化

MySQL 的存储引擎可能是所有关系型数据库产品中最具有特色的了,不仅可以同时使用多种存储引擎,而且每种存储引擎和MySQL之间使用插件方式这种非常松的耦合关系。由于各存储引擎功能特性差异较大,这篇文章主要是介绍如何来选择合适的存储引擎来应对不同的业务场景。

MyISAM
特性:
不支持事务:MyISAM存储引擎不支持事务,所以对事务有要求的业务场景不能使用
表级锁定:其锁定机制是表级索引,这虽然可以让锁定的实现成本很小但是也同时大大降低了其并发性能
读写互相阻塞:不仅会在写入的时候阻塞读取,MyISAM还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读
只会缓存索引:MyISAM可以通过key_buffer缓存以大大提高访问性能减少磁盘IO,但是这个缓存区只会缓存索引,而不会缓存数据

适用场景:
不需要事务支持(不支持)
并发相对较低(锁定机制问题)
数据修改相对较少(阻塞问题)
以读为主
数据一致性要求不是非常高

最佳实践:
尽量索引(缓存机制)
调整读写优先级,根据实际需求确保重要操作更优先
启用延迟插入改善大批量写入性能
尽量顺序操作让insert数据都写入到尾部,减少阻塞
分解大的操作,降低单个操作的阻塞时间
降低并发数,某些高并发场景通过应用来进行排队机制
对于相对静态的数据,充分利用Query Cache可以极大的提高访问效率
MyISAM的Count只有在全表扫描的时候特别高效,带有其他条件的count都需要进行实际的数据访问


InnoDB
特性:
具有较好的事务支持:支持4个事务隔离级别,支持多版本读
行级锁定:通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响
读写阻塞与事务隔离级别相关
具有非常高效的缓存特性:能缓存索引,也能缓存数据
整个表和主键以Cluster方式存储,组成一颗平衡树
所有Secondary Index都会保存主键信息

适用场景:
需要事务支持(具有较好的事务特性)
行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成
数据更新较为频繁的场景
数据一致性要求较高
硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽可能减少磁盘 IO

最佳实践:
主键尽可能小,避免给Secondary index带来过大的空间负担
避免全表扫描,因为会使用表锁
尽可能缓存所有的索引和数据,提高响应速度
在大批量小插入的时候,尽量自己控制事务而不要使用autocommit自动提交
合理设置innodb_flush_log_at_trx_commit参数值,不要过度追求安全性
避免主键更新,因为这会带来大量的数据移动


NDBCluster
+阅读全文

CentOS 6.3 x64 安装redmine2.3.0

Redmine 是一个开源的、基于Web的项目管理和缺陷跟踪工具。它用日历和甘特图辅助项目及进度可视化显示。同时它又支持多项目管理。Redmine是一个自由开放源码软件解决方案,它提供集成的项目管理功能,问题跟踪,并为多个版本控制选项的支持。Redmine是一个有用的Scrum和敏捷的选择。 由于Redmine的设计受到Trac的较大影响,所以它们的软件包有很多相似的特征。Redmine建立在Ruby on Rails的框架之上,他可以跨平台和数据库。

Redmine 是用Ruby开发的基于web的项目管理软件,是用ROR框架开发的一套跨平台项目管理系统,据说是源于Basecamp的ror版而来,支持多种数据库,有不少自己独特的功能,例如提供wiki、新闻台等,还可以集成其他版本管理系统和BUG跟踪系统,例如SVN、CVS、TD等等。这种 Web 形式的项目管理系统通过“项目(Project)”的形式把成员、任务(问题)、文档、讨论以及各种形式的资源组织在一起,大家参与更新任务、文档等内容来推动项目的进度,同时系统利用时间线索和各种动态的报表形式来自动给成员汇报项目进度。

一、系统约定
操作系统:  CentOS 6.3_x64
Nginx目录:  /data/web
MySQL版本/数据库:  MySQL 5.5.20/redmine
Redmine版本:  2.3.0
本机IP:  192.168.0.249
测试域名:  redmine.fity.cn

二、redmine环境需求
注意redmine的版本:
点击在新窗口中浏览此图片
来源:http://www.redmine.org/projects/redmine/wiki/RedmineInstall
安装redmine2.3.0版本,需求表中已经详细列出.

三、环境准备
1、安装ruby with libyaml
下载最新版libyaml:http://pyyaml.org/
wget http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz
tar xzvf yaml-0.1.4.tar.gz
cd yaml-0.1.4
./configure --prefix=/usr/local
make && make install

2、安装Ruby
下载最新版Ruby:http://www.ruby-lang.org/en/downloads/
wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p392.tar.gz
tar xzvf ruby-1.9.3-p392.tar.gz
cd ruby-1.9.3-p392
./configure --prefix=/usr/local --enable-shared --disable-install-doc --with-opt-dir=/usr/local/lib  
make && make install
安装成功后执行ruby -v可看到ruby的版本信息:
ruby 1.9.3p392 (2013-02-22 revision 39386) [i686-linux]

3、安装rubygems
如果系统中已经存在rubygems,可以通过如下方法卸载:
#ruby -e 'puts $:'  //查找rubygems安装目录
#cd /usr/local/ruby/lib/ruby/site_ruby/1.8/
#rm -rf ubygems.rb rubygems rubygems.rb
#which gem gem1.8   //查找gem包的安装目录
#rm -rf /usr/local/ruby/bin/gem

下载最新版:http://rubyforge.org/frs/?group_id=126&release_id=46730
wget http://rubyforge.org/frs/download.php/76729/rubygems-1.8.25.tgz
tar xzvf rubygems-1.8.25.tgz
cd rubygems-1.8.25
ruby setup.ruby

安装成功后执行gem -v可看到版本信息。

4、安装rake、rails和相关gems
yum install ruby-devel ruby-irb ruby-rdoc ruby-ri curl-devel ImageMagick ImageMagick-devel ImageMagick-c++-devel mysql-devel sqlite-devel
gem install rake
gem install rdoc
gem install rails   //或gem install rails -v=2.3.5
gem install sqlite3-ruby
gem install bundler
gem install rmagick
gem install mysql2   //或gem install mysql,安装mysql适配器
bundle install --without development test
可选:
gem install i18n -v=0.4.2
gem install ruby-mysql

5、安装Nginx
这里我的机器已经安装过了nginx,这里略过。

6、安装mysql
推荐5.0以上版本。这里我的机器已经安装过了mysql,这里略过。
创建Redmine数据库,执行mysql -u root -p登录mysql,在mysql>命令行中输入如以下sql代码:
create database redmine character set utf8 collate utf8_general_ci;
grant all privileges on redmine.* to 'redmine'@'localhost' identified by 'fity.cn@2013';
flush privileges;

添加一个数据库readmine,创建一个用户登录用户redmine,密码和用户名相同,并且授权访问redmine数据库。

四、redmine 2.3.0安装配置
+阅读全文

发现源码泄露漏洞 修复方法

漏洞描述:
目标地址/页面存在源码泄露漏洞
内容泄露:页面存在源代码泄露

危害:
1.恶意攻击者可以利用该漏洞获取目标服务器上的WEB应用程序的源码。
2.恶意攻击者可以利用获取到的WEB应用程序源码更加深入地了解应用的逻辑,或进行应用复制,或进一步地实施漏洞测试发现其潜在的安全问题,从而进一步的对目标服务器进行攻击。

修复方法:
到目标地址/页面删除如下类似代码:
< ? php ? >
< % = xxxx % >......
+阅读全文