禅道搭建手记

folder_open
comment1条评论

最近shuax给我的更新器提了不少的bug,我就寻思着干脆找个什么玩意把这些东西记录下来。想起工作中经常用到的禅道,干脆自己也搭建个禅道吧。

先说说服务器环境:

  • 系统:CentOS 7
  • 集成环境:lnmp(by licess)
  • PHP:7.1.5
  • MySQL:5.7
  • 禅道版本:9.3

虽然官方强烈建议直接使用他们的集成环境(zbox),但是我已经有了一个集成环境了,没必要再去跑另一个环境,所以还是决定直接安装。

安装前的检查:

这里有个小插曲,就是我突然一下子脑抽发现把MySQL密码给忘了,遂先重置一下密码,过程如下:

插曲结束,继续:

先去翻看一下禅道官方的安装手册

总结下来只有一个要求,那就是需要php有pdo, pdo_mysql, json, filter这几个模块, php -m 看了一下,都有。

开始安装:

首先建立相应的vhost,由于我是lnmp集成环境,直接 lnmp vhost add 。

向导完成之后会在对应的位置建立Home Directory文件夹(这里我假设是/home/wwwroot/ooxx/)。cd过去,在禅道的下载页找到相应的下载链接然后wget下来,unzip解压,解压后发现出现了子目录zentaopms,使用 mv zentaopms/* . 将其移出来。

 

由于禅道的架构设计,需要将home改为/home/wwwroot/ooxx/下的www,编辑当前vhost的conf文件,找到root段,在/home/wwwroot/ooxx后面加上/www,然后保存并退出, nginx -s reload 重载nginx。

此时浏览器打开相应的地址,我遇到了第一个坑,服务器提示500

于是前往禅道的www目录,编辑index.php,将 error_reporting(0); 改为 ini_set("display_errors", "On"); error_reporting(E_ALL | E_STRICT);

再次刷新,看到提示: Warning: include(): open_basedir restriction in effect. File(/home/wwwroot/ooxx/framework/router.class.php) is not within the allowed path(s)

原来是引用错误,想起禅道的架构是上层引用的,而此时默认的open_basedir在/home/wwwroot/ooxx/www这个子文件夹中,引用不到上级目录中的东西,所以继续编辑vhost的conf,找到server中的fastcgi_param段(由于我用的集成环境,是采取引用enable-php.conf的形式,所以我将其注释掉然后从相应的文件中将内容复制过来),找到其中的fastcgi_param PHP_ADMIN_VALUE行,将其改为 fastcgi_param PHP_ADMIN_VALUE “open_basedir=$document_root:/tmp/:/proc/:/home/wwwroot/ooxx“; 注意我标红的地方

再次刷新,已经能够出现安装界面了,但是碰到了第二个坑:安装检查没有通过,提示Session目录不存在

那么继续,找到php的配置文件(如果不知道在哪就使用 php -i | grep 'Configuration File' 命令来查找),然后定位到session.save_path的行,给它赋值一个当前php用户可写的目录。

重载一下php-fpm,再次刷新,已经可以正常安装了。

安装完成以后,发现地址栏的地址不是伪静态的,而是直接的index.php+query路径,根据禅道官方说法,我需要修改requestType为PATH_INFO,所以找到我的禅道配置文件(我这里是/home/wwwroot/ooxx/config/my.php),将 $config->requestType = 'GET'; 改为 $config->requestType = 'PATH_INFO';

再次刷新,遇到了第三个坑:404 Not Found

应该是伪静态的问题,观摩一下禅道官方集成环境的.htaccess,找到它的伪静态

由于nginx的-e可以同时代表-f和-d,所以nginx的伪静态可以写成这样

将上面这段加到 location / {} 里面,让nginx -s reload

自信满满,再次刷新,没想到依然404,打开日志看看,说是根本没找到PATH_INFO这个变量

去搜索一番,在这个帖子里面找到解决方案,修改vhost的php段,加入PATH_INFO相关内容:

(这里请注意一下,帖子里面也有相关的伪静态配置,核心语句为 rewrite  ^(.*)$  /index.php?s=$1 last; ,这个实际上并不能在新版的禅道中生效,各位可以观察一下和我上面写的有什么不同)

保存之后再次重载nginx,浏览器刷新,终于正常,可喜可贺……

最后将index.php中开启的详细错误关闭,并清理掉为了方便观察加入的多余的nginx日志变量。

总结:

  • 善用搜索引擎
  • 多看日志
  • 抄代码时动动脑筋,想想哪些可以抄哪些不能抄
  • 最好能研究一下别人为什么会那样写
Tags:

看看其他

1条评论. Leave new

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Fill out this field
Fill out this field
请输入有效的电子邮箱地址。