Zaki

  • 🍟首页
  • 🍘目录
    • 🍏软件分享
    • 🍹干货分享
    • 🥝网络资源
    • 🍾有感而发
  • 🍋工具
    • 🌽IP路由追踪
    • 🍯KMS激活
    • 🍐域名Whois查询
    • 🥘域名被墙查询
    • 🍧IP正常检测
    • 🔥IP端口检测
    • 🍆短网址
这是我的小小文字角落,记录观点、分享热爱,也期待与每一个同频的你在此相遇。
  1. 首页
  2. 干货分享
  3. 正文

禅道二次开发

2025年8月30日 53点热度 0人点赞 0条评论

禅道二次开发

前言

  • 禅道版本:18.12
  • php版本:7.4
  • nginx版本:1.18.0
  • mysql版本:5.7

注意:禅道的二次开发不能直接从官方镜像仓库拉取代码(坑!!!)

到以下链接直接下载安装包(源码)

源码地址

环境准备

这里采用 docker 的方式进行开发环境的搭建。

拉取一下镜像到本地(docker 已封,需设置代理)

  • php:7.4-fpm-buster
  • nginx:1.18.0
  • bitnami/mysql:5.7

制作fpm增强镜像

解释下,php:7.4-fpm-buster是基础镜像,没有安装任何php拓展,禅道的开发是需要前置拓展)

# 启动一个fpm容器
$ docker run -d -it --name php74_fpm php:7.4-fpm-buster
# 进入容器
$ docker exec -it php74_fpm /bin/bash

下载php源码包

使用docker-php-source的extract命令将源代码导入到容器的/usr/src/php下面。
(待会用到)

$ docker-php-source extract

安装一些依赖库和工具

# 更新下源
$ apt-get update
# 安装依赖和工具
$ apt-get -y install wget libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev libc-client-dev libkrb5-dev libzip-dev git vim

准备下软件包下载目录

在根目录下新建一个packages目录

$ cd /
# 新建目录
$ mkdir packages
# 进入该目录
$ cd /packages

安装mysql拓展

# 安装
$ docker-php-ext-install pdo_mysql
# 启用
$ docker-php-ext-enable pdo_mysql

安装bcmath拓展

# 安装
$ docker-php-ext-install bcmath
# 启用
$ docker-php-ext-enable bcmath

安装gd拓展

# 先设置一些配置参数
$ docker-php-ext-configure gd --with-jpeg=/usr/include --with-freetype=/usr/include/
# 安装
$ docker-php-ext-install gd
# 启用
$ docker-php-ext-enable gd

安装redis拓展

# 下载安装包
$ wget http://pecl.php.net/get/redis-4.1.0.tgz
# 解压
$ tar -xzvf redis-4.1.0.tgz
# 进入安装包目录
$ cd redis-4.1.0
# 配置并编译安装
$ /usr/local/bin/phpize
$ ./configure --with-php-config=/usr/local/bin/php-config
$ make && make install
# 回到原来的软件包下载目录
$ cd ..
# 启用拓展
$ docker-php-ext-enable redis

安装imap拓展(非必需)

# 先设置一些配置参数
$ docker-php-ext-configure imap --with-kerberos --with-imap-ssl
# 安装
$ docker-php-ext-install imap
# 启用
$ docker-php-ext-enable imap

安装psr拓展(非必需,建议安装)

# 使用pecl进行安装
$ pecl install psr

安装xdebug拓展(调试使用)

打开https://xdebug.org/wizard这个网站

xdebug网站

获取当前 php 的信息。

# 指定后拷贝其输出值
$ php -i

粘贴到该输出框

xdebug网站

xdebug网站

输出结果如下

输出结果

输出结果

# 下载安装包
$ wget https://xdebug.org/files/xdebug-3.1.6.tgz
# 解压安装包
$ tar -xvzf xdebug-3.1.6.tgz
# 进入该目录
$ cd xdebug-3.1.6
# 配置并安装
$ phpize
$ ./configure
$ make
$ cp modules/xdebug.so /usr/local/lib/php/extensions/no-debug-non-zts-20190902/

配置(重要!!!)

使用生产环境的配置文件模板复制出php.ini文件。

$ cd /usr/local/etc/php/
$ cp php.ini-production php.ini
关闭错误提示

display_errors = Off

$ vi /usr/local/etc/php/php.ini

设置错误级别

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED

设置错误日志

error_log = /var/log/php_errors.log

设置时区

date.timezone = Asia/Shanghai

通过执行一段代码测试时区设置和错误设置是否正确。

$ php -r "echo \"Now is \". date(\"Y-m-d H:i:s\"). \"\n\";bad_fun_call();"

启用xdebug、bcmath、psr拓展

因为安装的是 xdebug3 ,默认端口为 9003,另外**xdebug.client_host **更换为你本机的 ip。(建议使用 mac地址 锁定ip)

extension = bcmath.so

extension = psr.so



[xdebug]

; xdebug3.x

zend_extension=xdebug.so

xdebug.mode=debug

xdebug.client_host = "172.33.5.54"

xdebug.client_port = 9003

保存容器为镜像(最后一步)

退出容器

$ docker commit php74_fpm php:7.4-fpm-buster-enhance

启动mysql镜像

这里我设置的超管密码为 123456

其他配置请自行查看https://hub.docker.com/r/bitnami/mysql

# 创建个存储卷
$ docker volume create mysql_data__5_7
# 启动
$ docker run -d --name mysql_5_7 \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -v mysql_data__5_7:/bitnami/mysql/data \
    bitnami/mysql:5.7

启动fpm增强镜像

/Users/zaki/work/php-env/74/www目录自行替换为自己的,这个目录是放源代码的

# 启动
$ docker run -tid --name php-env-php74-fpm \
    -p 9000:9000 \
    -v /Users/zaki/work/php-env/74/www:/www \
    --link mysql_5_7:mysql \
    php:7.4-fpm-buster-enhance

启动nginx镜像

新建 nginx 配置,放置禅道源代码

my-nginx.conf配置

server {

    listen       80;

    server_name  localhost;



    location / {

        root   /usr/share/nginx/html/zentaopms/www;

        index  index.php index.html index.htm default.php default.htm default.html;

    }



    location ~ \.php$ {

        fastcgi_pass   php:9000;

        fastcgi_index  index.php;

        fastcgi_param  SCRIPT_FILENAME  /www/zentaopms/www$fastcgi_script_name;

        include        fastcgi_params;

    }

}
# 启动
$ docker run -tid --name php-env-php74-nginx \
    -p 80:80 \
    -v /Users/zaki/work/php-env/74/www:/usr/share/nginx/html:ro \
    -v /Users/zaki/work/php-env/74/nginx-conf/conf.d:/etc/nginx/conf.d:ro \
    --link php-env-php74-fpm:php \
    nginx:1.18.0

最后访问禅道地址http://127.0.0.1/index.php进行配置,最后可看到此页面

安装完,会产生这些文件(不要提交到 git)

开发调试

这是使用的开发工具为PhpStorm

核心原理和 java 的远程调试是一样的

配置代理(关键)

服务器地址映射(关键)

本地源码位置和服务器(容器里面)的位置

开启监听

浏览器安装个xdebug插件

sessionkey保持和PhpStorm DBGp代理的IDE键一致

这时候你点击网页的按钮就会进入断点(先在指定代码位置打好断点)

这时候你们会问,如果是接口访问呢?如何进断点?

打开 postman ,右边找到 Cookies 。

点击 Cookies ,填入 XDEBUG_SESSION=PHPSTORM,之后即可调起 PhpStorm 的调试功能

在 Headers 中新增{KEY:Cookie,VALUE:XDEBUG_SESSION=PHPSTORM}

然后发起 send 请求,由 PhpStorm 捕捉,成功进入断点。

注意: 若是还无法成功捕捉断点,可以在 Headers 里新增XDEBUG_SESSION_START的值尝试一下

其中,XDEBUG_SESSION_START 的值在 PHPstorm 开启调试的右上角 Debugger 中可以找到。

原理图

单机调试原理示意图

多机调试原理示意图

标签: Docker Php
最后更新:2025年8月30日

zaki

业务驱动技术,技术只是手段。

打赏 点赞

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
最新 热点 随机
最新 热点 随机
禅道二次开发
禅道二次开发
最近评论
标签聚合
Php Docker

COPYRIGHT © 2025 Zaki. ALL RIGHTS RESERVED.

粤ICP备2025465197号