CentOS 8 部署禅道,并使用自己的数据库

发表于:2023-11-24 09:46

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:shijialeya.    来源:CSDN

  今天公司安排我搭建一个禅道,作为开发岗实习生的我只能搭建一个能跑的动的系统,下面记录一下搭建禅道的过程。
  需求:在服务器这中搭建禅道项目管理软件。
  要求:能用禅道自带的数据库,要使用自己的MySQL数据库。
  前提:CentOS 服务器一台,MySQL5数据库(MySQL 一定是 5 一定是 5,经测试 MySQL8 是跑不起来的)。
  MySQL8 跑不起来可能是跟 allowPublicKeyRetroeval 有关。现在要打工,干活要紧,有空再研究这个。
  1. 下载禅道开源代码
  源码可以在 禅道官网 处下载。
  下载你对应系统的版本我的服务器是CentOS 8的,我下载如图的版本。
  为了方便我直接只用 wget 命令下载,如果没有wget命令的可以通过yum进行安装。
  yum install -y wget
  wget 命令下载禅道源码
  wget https://dl.cnezsoft.com/zentao/16.5/ZenTaoPMS.16.5.zbox_64.tar.gz
  解压源码到 /opt 下
  tar -zxvf ZenTaoPMS.16.5.zbox_64.tar.gz -C /opt/
  注意一定要解压到/opt下,并且需要直接解压到/opt下,否则会发生奇奇怪怪的错误。
  2. 准备禅道所需的数据库
  因为我需要使用我自己安装的数据库运行禅道系统,所以先使用禅道自带的数据库运行,导出自带数据库的sql文件,再将这个sql文件导入自己的数据库中。
  修改禅道服务的端口、修改禅道自带数据库的端口(如果当前服务器已经安装了MySQL,那么一定要修改禅道自带数据库的端口,不然启动会出错的)
  /opt/zbox/zbox -ap 8080 -mp 3307
  8080 是禅道服务的端口、3307是惨到自带数据库的端口。
  修改网页登录数据库系统的登录密码
  /opt/zbox/auth/adduser.sh
  输入用户名
  输入密码
  这里是待会我们登录页面需要用到的用户名和密码,我输入的用户名和密码都是root。
  启动禅道
  /opt/zbox/zbox start
  上面我们设置了禅道服务的端口为8080,我们需要开放这个端口
  firewall-cmd --zone=public --add-port=8080/tcp --permanent
  systemctl restart firewalld
  如果是云服务器那么就在安全组放行8080端口。
  访问 服务器ip:8080 就可以看到禅道页面了,下面进入禅道自带的数据库,点击页面的数据库管理。
  输入刚刚设置的账号和密码,我设置账号密码都是root。
  在服务器中输入:127.0.0.1:3307(一定要加上端口,3306端口也要加上)
  用户名:root
  密码:123456
  数据库:zentao
  在左侧点击导出,输出选择保存,最后点击导出。
  这时候我们就得到了源数据库的sql文件,将这个sql文件导入我们自己的数据库中。我是创建了一个名为zentao 的数据库。
  3. 去除禅道自带的数据库功能
  先停止禅道服务
  /opt/zbox/zbox stop
  在禅道的启动脚本中,会自动启动禅道自带的数据库,我们需求修改这个脚本。
  cd /opt/zbox/bin/
  cp zbox.php zbox.php.copy
  vim /opt/zbox/bin/zbox.php
  将有关MySQL的指令删除,修改后的脚本如下:
  #!/opt/zbox/bin/php
  <?php
  array_shift($argv);
  $flipArgv = array_flip($argv);
  $basePath = dirname(dirname(__FILE__));
  if($basePath != '/opt/zbox') die("Run it in path /opt/zbox/\n");
  if(empty($argv) or isset($flipArgv['--help']) or isset($flipArgv['-h']))
  {
      echo <<<EOD
  Usage: zbox.php {start|stop|restart|status}
  Options:
      -h --help Show help.
      -ap --aport Apache port, default 80.
      -mp --mport Mysql port, default 3306.
  EOD;
      exit;
  }
  if(is_dir("$basePath/app/zentao/"))
  {
      `chmod -R 777 $basePath/app/zentao/tmp`;
      `chmod -R 777 $basePath/app/zentao/www/data`;
      `chmod 777 $basePath/app/zentao/www/`;
      `chmod 777 $basePath/app/zentao/config/`;
      `chmod -R a+rx $basePath/app/zentao/bin/*`;
  }
  if(is_dir("$basePath/app/zentaopro/"))
  {
      `chmod -R 777 $basePath/app/zentaopro/tmp`;
      `chmod -R 777 $basePath/app/zentaopro/www/data`;
      `chmod 777 $basePath/app/zentaopro/www/`;
      `chmod 777 $basePath/app/zentaopro/config/`;
      `chmod -R a+rx $basePath/app/zentaopro/bin/*`;
  }
  if(is_dir("$basePath/app/zentaoep/"))
  {
      `chmod -R 777 $basePath/app/zentaoep/tmp`;
      `chmod -R 777 $basePath/app/zentaoep/www/data`;
      `chmod 777 $basePath/app/zentaoep/www/`;
      `chmod 777 $basePath/app/zentaoep/config/`;
      `chmod -R a+rx $basePath/app/zentaoep/bin/*`;
  }
  /* Process argv. */
  $params = array();
  foreach($flipArgv as $key => $val)
  {
      if(strpos($key, '-') !== 0) continue;
      if($key == '--aport') $key = '-ap';
      if($key == '--mport') $key = '-mp';
      if(isset($argv[$val + 1]) and is_numeric($argv[$val + 1]))
      {
          $params[$key] = $argv[$val + 1];
          unset($argv[$val]);
          unset($argv[$val + 1]);
      }
  }
  if(isset($params['-ap'])) changePort($basePath . '/etc/apache/httpd.conf', $params['-ap'], array('^Listen +([0-9]+)', '<VirtualHost +.*:([0-9]+)>'));
  if(isset($params['-mp']))
  {
      changePort($basePath . '/etc/mysql/my.cnf', $params['-mp'], '^port *= *([0-9]+)');
      changePort($basePath . '/app/htdocs/index.php', $params['-mp'], 'localhost\:([0-9]+)\&');
      $myReg = '^\$config->db->port *= *.([0-9]+)..*;';
      if(file_exists("$basePath/app/zentao/config/my.php"))
      {
          `chmod 777 $basePath/app/zentao/config/my.php`;
          $myFile = "$basePath/app/zentao/config/my.php";
          changePort($myFile, $params['-mp'], $myReg);
      }
      if(file_exists("$basePath/app/zentaopro/config/my.php"))
      {
          `chmod 777 $basePath/app/zentaopro/config/my.php`;
          $myFile = "$basePath/app/zentaopro/config/my.php";
          changePort($myFile, $params['-mp'], $myReg);
      }
      if(file_exists("$basePath/app/zentaoep/config/my.php"))
      {
          `chmod 777 $basePath/app/zentaoep/config/my.php`;
          $myFile = "$basePath/app/zentaoep/config/my.php";
          changePort($myFile, $params['-mp'], $myReg);
      }
  }
  if(!empty($argv)) $params['-k'] = reset($argv);
  if(isset($params['-k']))
  {
      if(strpos(file_get_contents('/etc/group'), 'nogroup') === false) echo `groupadd nogroup`;
      if(strpos(file_get_contents('/etc/passwd'), 'nobody') === false) echo `useradd nobody`;
      `chmod -R 777 $basePath/tmp`;
      `chmod -R 777 $basePath/logs`;
      `chown -R nobody $basePath/data/mysql`;
      switch($params['-k'])
      {
      case 'start':
          $httpd = `ps aux|grep '\/opt\/zbox\/run\/apache\/httpd '`;
          if($httpd)
          {
              echo "Apache is running\n";
          }
          else
          {
              echo `$basePath/run/apache/apachectl start`;
              sleep(2);
              $httpd = `ps aux|grep '\/opt\/zbox\/run\/apache\/httpd '`;
              echo empty($httpd) ? "Start Apache fail. You can see the log /opt/zbox/logs/apache_error.log\n" : "Start Apache success\n";
          }
          break;
      case 'stop':
          $httpd = `ps aux|grep '\/opt\/zbox\/run\/apache\/httpd '`;
          if($httpd)
          {
              echo `$basePath/run/apache/apachectl stop`;
              sleep(2);
              $httpd = `ps aux|grep '\/opt\/zbox\/run\/apache\/httpd '`;
              echo empty($httpd) ? "Stop Apache success\n" : "Stop Apache fail. You can see the log /opt/zbox/logs/apache_error.log\n";
          }
          else
          {
              echo "Apache is not running\n";
          }
          break;
      case 'restart':
          echo `$basePath/run/apache/apachectl restart`;
          sleep(2);
          $httpd = `ps aux|grep '\/opt\/zbox\/run\/apache\/httpd '`;
          echo empty($httpd) ? "Restart Apache fail. You can see the log /opt/zbox/logs/apache_error.log\n" : "Restart Apache success\n";
          break;
      case 'status':
          $httpd = `ps aux|grep '\/opt\/zbox\/run\/apache\/httpd '`;
          echo empty($httpd) ? "Apache is not running\n" : "Apache is running\n";
      }
  }
  function changePort($file, $port, $regs)
  {
      if(!is_array($regs)) $regs = array($regs);
      $lines = file($file);
      foreach($lines as $i => $line)
      {
          foreach($regs as $reg)
          {
              if(preg_match("/$reg/", $line, $matches)) $lines[$i] = str_replace($matches[1], $port, $line);
          }
      }
      file_put_contents($file, join($lines));
  }
  修改连接MySQL的数据:
  vim /opt/zbox/app/zentao/config/my.php
  4. 启动禅道服务并加入开机自启
  开启服务
  /opt/zbox/zbox start
  此时就已经可以使用禅道了,并且没有使用的是我们自己的数据库,禅道自带的数据库没有运行。
  将禅道设置成开机自启
  chmod +x /etc/rc.d/rc.local
  vim /etc/rc.d/rc.local
  在尾部添加禅道的启动语句
  /opt/zbox/zbox start
  禅道服务默认登录账号为root,密码为:123456。
  登录之后按照提示操作就可以使用禅道了。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号