news 2026/10/1 8:43:48

CentOS下部署禅道如何自定义数据库与附件存储路径

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CentOS下部署禅道如何自定义数据库与附件存储路径

CentOS下部署禅道,最容易被忽略的不是安装过程,而是存储位置。很多人装完就跑,结果跑几个月发现根分区满了,数据库把磁盘撑爆,最后只能停机搬家,那个滋味我太熟悉了。这篇文章就把我自己在CentOS上部署禅道、并且把数据库存储路径和文件存储位置都自定义到独立分区的完整过程讲清楚,从环境准备到参数修改,再到排错补坑,一次讲透。

1. 部署前要想清楚的几件事

1.1 为什么非要自定义存储路径

禅道默认安装方式会把所有东西都塞进一个目录,包括程序代码、MySQL数据文件、附件上传文件。CentOS系统盘一般也就几十GB,装完系统、装了其他服务,剩余空间本来就不宽裕。禅道跑起来之后,MySQL的ibdata1、binlog日志、附件目录增长都很快,尤其是研发团队天天传截图、传文档,几个月下来几十GB很正常。

最麻烦的是,根分区一旦写满,不只是禅道挂掉,整个服务器上的MySQL、nginx、其他依赖服务可能全部异常,数据库表损坏的风险直接翻倍。所以我在部署之前就决定:数据库文件放独立数据盘,附件文件也放独立目录,跟系统盘彻底隔离。这样即便将来磁盘空间不够,扩数据盘就能解决,不用碰系统分区,风险小很多。

1.2 哪些情况最需要这个方案

  • 公司服务器只有一块系统盘,但业务数据会持续增长,希望预留扩容空间
  • 云服务器挂载了独立的数据盘(比如阿里云、腾讯云的云盘),想把数据放在数据盘上
  • 有备份需求,希望直接用文件系统快照或者rsync备份数据库目录和附件目录,不用备份整个系统
  • 服务器上同时跑了多个应用,禅道只是其中一个,不希望禅道把系统盘占满影响其他业务

这几种场景我都实际踩过,尤其是最后一种,多应用共存的服务器上,存储规划不好真的会互相连累。提前把存储路径想好,后面能省掉大量返工时间。

1.3 部署方案的版本选择

禅道官方提供了几种部署方式:

部署方式适用场景我的评价
一键安装包(linux安装包)新手快速体验、内部小团队集成度高,但存储路径固定,后期改起来麻烦
源码包 + 自建AMP环境需要自定义路径、已有LAMP/LNMP环境灵活度最高,适合正式生产
Docker部署有容器化运维经验的团队存储靠volume挂载,能自定义,但需要懂Docker底层
云市场镜像不想折腾服务器路径同样不好改,且依赖云厂商环境

我在生产环境选的是源码包 + 自建LAMP环境。原因是禅道官方的一键安装包其实也是内置了一套Apache、PHP、MySQL,但它把MySQL数据目录和附件目录都放在安装目录内部,想要调整存储位置需要改一堆配置,还要考虑内置MySQL的特殊启动脚本。自建环境虽然前期安装步骤多一点,但所有路径都是自己定的,后面扩容、迁移、备份都清楚,出了问题自己也能排查到根上。

这里多说一句,如果你已经有现成的LNMP/LAMP环境,比如宝塔面板,或者手工装的nginx+PHP+MySQL,那直接下禅道源码包丢进去就行了,不用再看下面的LAMP安装部分,重点看数据库路径和文件存储位置的自定义部分即可。我的服务器是CentOS 7.9,下面所有命令和路径都以这个版本为准,CentOS 8/9、Rocky Linux、Alibaba Cloud Linux基本都是通用的。

2. 环境准备与数据盘划分

2.1 系统基础配置

CentOS 7.9这个版本虽然官方已经停止维护了,但企业内部用得非常广,稳定性和兼容性经过多年验证,禅道这种老牌PHP应用跑在上面一点问题没有。我建议内核和系统包保持统一版本,不要随意升级,尤其不要动MySQL和PHP的版本基线,稳定压倒一切。

系统和依赖包的准备:

# 关闭SELinux(不关的话后面改权限会非常痛苦) sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config setenforce 0 # 安装EPEL源(后面装依赖包会用到) yum install -y epel-release # 更新系统基础包 yum update -y

SELinux是真的坑,不是说不安全,而是默认Enforcing模式下,自定义的nginx或者Apache目录、MySQL数据目录都会触发权限拦截,查看日志全是denied,排查起来相当费时。如果公司安全要求必须开SELinux,那就要给相关目录打allow规则,这个操作比关SELinux复杂很多,一般中小团队没必要。

2.2 数据盘的挂载与目录规划

假设你的服务器上有一块未格式化的数据盘,设备名是/dev/vdb(云服务器常见的是vdb,物理机可能是sdb,具体用lsblk查看)。我的规划是这样:

  • 数据盘挂载到/data
  • 数据库数据目录设置为/data/mysql-data
  • 禅道程序安装到/data/www/zentao
  • 禅道附件及上传文件目录为/data/www/zentao/www/data/upload
  • 临时备份目录/data/backup

这样做的最大好处是:代码、数据库、附件、备份全都在数据盘上,系统盘只放操作系统和依赖的软件包。将来如果数据盘快满了,给云盘扩容后直接扩展分区就行,不需要搬数据。

挂载数据盘的完整操作:

# 查看磁盘分区情况 lsblk # 对数据盘分区(此处是vdb,请根据自己实际情况替换) fdisk /dev/vdb # 在fdisk交互界面依次输入:n -> p -> 1 -> 回车 -> 回车 -> w # 格式化分区 mkfs.ext4 /dev/vdb1 # 创建挂载目录并挂载 mkdir -p /data mount /dev/vdb1 /data # 写入fstab实现开机自动挂载 echo '/dev/vdb1 /data ext4 defaults 0 0' >> /etc/fstab # 验证挂载是否成功 df -h

这里有一个多次踩坑后的经验:fstab写入的UUID比设备名更稳。因为云服务器重启后设备名有可能变化,vdb变成vdc的情况我确实遇到过。用UUID方式写入fstab:

# 获取UUID blkid /dev/vdb1 # 假设输出 UUID="abcd-1234-5678-efgh" echo 'UUID="abcd-1234-5678-efgh" /data ext4 defaults 0 0' >> /etc/fstab mount -a df -h

2.3 Swap空间的设置

CentOS安装的时候如果默认分区,Swap一般是2GB左右。禅道本身不太吃内存,但MySQL的InnoDB缓冲池、PHP-FPM进程多了之后,内存还是很关键的。我建议服务器内存低于4GB时,把Swap设到内存的1.5倍;内存8GB及以上,Swap设4GB就够了。

数据盘空间富余的话,把Swap也放到数据盘的swapfile上:

# 创建4G的swapfile fallocate -l 4G /data/swapfile chmod 600 /data/swapfile mkswap /data/swapfile swapon /data/swapfile # 写入fstab echo '/data/swapfile none swap sw 0 0' >> /etc/fstab # 验证 free -h swapon --show

为什么Swap要单独处理而不是直接依赖系统默认的?因为我遇到过根分区空间被Swap文件占着,导致后续想给系统盘腾空间很被动。Swap挪到数据盘之后,系统盘空间能省一点是一点,尤其是不方便扩容系统盘的环境,这种做法非常实用。

3. 禅道源码包部署全流程

3.1 获取禅道源码包

禅道分为开源版和商业版(企业版、旗舰版等),开源版在官方下载页面就能找到。务必选择与PHP版本匹配的源码包,因为禅道从12.x版本开始要求PHP 7.0以上,18.x版本要求PHP 7.2以上,具体看官方发布说明。

下载开源版源码包的典型步骤:

cd /usr/local/src # 这里以18.5版本为例,实际下载时到官网找最新的源码包链接 wget https://www.zentao.net/dl.php?product=zentao_pro&version=18.5&type=tar.gz -O zentao.18.5.tar.gz # 解压到目标目录 mkdir -p /data/www tar -zxvf zentao.18.5.tar.gz -C /data/www/

解压后目录名通常就是zentao,里面有bin、config、module、www等目录。源码包本身是不带数据库和PHP运行环境的,所以需要我们自己准备好。

3.2 安装Apache与PHP环境

禅道其实对Nginx也支持得很好,但我个人习惯用Apache来跑禅道,原因有两个:一是禅道官方说明文档里Apache部署示例最多,遇到问题好搜;二是禅道的伪静态规则在Apache下配置比较简单,不用像Nginx那样写一堆location规则。

# 安装Apache yum install -y httpd httpd-devel # 安装PHP及相关扩展(CentOS 7默认PHP 5.4,版本太低,需要额外装PHP 7.x) yum install -y epel-release rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm yum install -y php72w php72w-cli php72w-gd php72w-ldap php72w-mbstring php72w-mysqlnd php72w-pdo php72w-xml php72w-zip php72w-fpm

PHP版本这里非常关键。禅道18.x以上版本对PHP版本有硬性要求,PHP 5.4这种古董版本跑不起来。Webtatic源里的php72w系列是CentOS 7上比较容易装到的PHP 7.2版本,兼容性和稳定性都验证过。如果你在等官方源,会发现在CentOS 7上默认的PHP版本根本达不到要求。

装完确认一下版本:

php -v

如果输出是PHP 7.2.x就没问题。

配置Apache的虚拟主机:

cat > /etc/httpd/conf.d/zentao.conf <<'EOF' <VirtualHost *:80> ServerName zentao.example.com DocumentRoot /data/www/zentao/www <Directory /data/www/zentao/www> Options FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog logs/zentao-error.log CustomLog logs/zentao-access.log combined </VirtualHost> EOF # 启动Apache并设置开机自启 systemctl start httpd systemctl enable httpd

注意这里AllowOverride All是必须的,禅道目录里自带的.htaccess文件依赖这个配置来实现URL重写和部分安全规则。如果这里写成AllowOverride None,访问会出现404或者样式丢失的问题。

3.3 设置目录权限

禅道运行和升级需要写权限的目录包括config、module、tmp、www/data,以及www/.htaccess等。我之前遇到过附件传不上去、后台修改配置报错,十有八九都是权限没给对。

chown -R apache:apache /data/www/zentao chmod -R 755 /data/www/zentao chmod -R 777 /data/www/zentao/www/data chmod -R 777 /data/www/zentao/tmp

生产环境里www/data和tmp给777权限是禅道官方文档明确建议的,因为PHP-FPM和Apache进程需要在这些目录里写缓存文件,纯755在部分场景下会报错。如果你是安全洁癖,可以把目录属主改成apache用户,然后给775,实测也大多数情况能用,但升级插件、换主题的时候偶尔会有权限不足的问题。省心起见还是按官方建议来。

提示:服务器时间务必用NTP校准。禅道生成token、session、附件路径时会带时间戳,如果服务器时间偏差大,首次访问可能会出现登录状态异常、验证码不显示等怪异问题。

4. 自定义MySQL数据库存储路径

4.1 安装MySQL并初始化

禅道推荐的数据库是MySQL,版本最好选择5.7或8.0。在CentOS 7上我选的MySQL 5.7,性能稳定、兼容性好,禅道生态里的插件和第三方工具对5.7的支持最成熟。

# 安装MySQL官方Yum源 rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm # 安装MySQL服务端 yum install -y mysql-community-server

安装完成后,先把数据目录准备好。默认情况下MySQL的数据目录是/var/lib/mysql,现在我们要迁移到/data/mysql-data。

mkdir -p /data/mysql-data chown mysql:mysql /data/mysql-data chmod 750 /data/mysql-data

4.2 修改MySQL配置文件指定datadir

MySQL的配置文件是/etc/my.cnf。这里需要改两个核心参数:datadir和socket。socket文件路径如果改了,PHP连接MySQL的时候也要跟着改,所以我的做法是socket文件路径保持默认,只改datadir,减少一个出错的环节。

在[mysqld]段下修改或者新增:

[mysqld] datadir=/data/mysql-data socket=/var/lib/mysql/mysql.sock # InnoDB相关参数,禅道系统并发不高,不用给太多 innodb_buffer_pool_size=512M innodb_log_file_size=128M innodb_flush_log_at_trx_commit=2 # binlog日志也放到数据盘 log-bin=/data/mysql-data/binlog/mysql-bin expire_logs_days=7

这里innodb_flush_log_at_trx_commit=2是我个人的偏好。默认值是1,代表每次事务提交都刷到磁盘,数据最安全但性能最差。设置为2,代表每秒刷一次磁盘,性能好很多,极端情况下丢的数据最多1秒。对于禅道这种非金融级应用,选2是性价比最高的方案。

4.3 迁移已有MySQL数据目录

如果你是在已有MySQL实例上做迁移,千万不要直接改配置文件然后启动,那样MySQL会因找不到系统表而启动失败。正确迁移步骤:

# 停止MySQL服务 systemctl stop mysqld # 使用rsync保留文件属主和权限地复制数据目录 rsync -av /var/lib/mysql/ /data/mysql-data/ # 备份原目录(不要直接删除,万一新目录有问题还能回滚) mv /var/lib/mysql /var/lib/mysql.bak # 确保新目录属主正确 chown -R mysql:mysql /data/mysql-data # 启动MySQL systemctl start mysqld # 检查运行状态 systemctl status mysqld mysql -uroot -p

这里必须用rsync而不是cp,因为rsync的-a参数会保留目录权限、属主、时间戳,MySQL数据目录里有些文件的属主如果不是mysql,启动会直接报权限错误。cp -r虽然也能复制内容,但权限经常对不上,到时候排查起来很被动。

如果是全新安装的MySQL,连上面这些都不用做,直接改/etc/my.cnf里的datadir到新的空目录,保证目录属主是mysql、启动服务即可,初始化动作会自动完成:

# 全新安装MySQL后直接启动会自动初始化数据目录 systemctl start mysqld # 查看临时密码 grep 'temporary password' /var/log/mysqld.log # 用临时密码登录并修改密码 mysql -uroot -p # 在MySQL交互界面执行 ALTER USER 'root'@'localhost' IDENTIFIED BY '你的强密码'; FLUSH PRIVILEGES;

4.4 创建禅道数据库账号

禅道安装完成后,它会在数据库中建库。数据库root账号密码你自己保管好,给禅道单独创建一个专用账号,权限只给这一个库,避免禅道被攻破后连累整个数据库实例:

CREATE DATABASE IF NOT EXISTS zentao DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE USER 'zentao'@'localhost' IDENTIFIED BY 'StrongPassword_2024'; GRANT ALL PRIVILEGES ON zentao.* TO 'zentao'@'localhost'; FLUSH PRIVILEGES;

5. 文件存储位置的自定义

5.1 禅道附件存储机制说明

禅道的文件附件、上传图片、导入的Excel等,默认存储在www/data/upload目录下。这个目录在源码包里就存在,初次解压后是空的,但上传第一个文件之后,就会按日期生成子目录。

禅道的存储规则基本上是upload/年/月/日期/文件名的结构。这种结构对运维来说很友好,备份的时候只要按日期维度增量同步就行。

5.2 修改文件存储配置

源码包里有个配置文件/data/www/zentao/config/my.php,这里记录了禅道的数据库连接、存储路径等信息。默认情况下,my.php可能不存在,需要从config.php复制一份再改。

cd /data/www/zentao/config cp config.php my.php chown apache:apache my.php chmod 644 my.php

在my.php中通过配置指定文件存储目录:

<?php $config->webRoot = '/'; $config->default->view = 'html'; // 自定义文件存储路径 $config->dataRoot = '/data/www/zentao/www/data/upload';

这里需要说明的是,禅道源码包的版本不同,dataRoot这个配置项的写法可能有细微差异。更早的版本里,有人用$config->attachPath,后来版本统一成了$config->dataRoot。如果配置后上传文件还是跑到默认目录,可以查看framework/base/router.class.php里的存储目录逻辑,或者直接看module/common/model.php里面getAttachPath方法的实现,这是最直接的排查路径。

另一个更省事、也几乎不会出错的方案是用软链接。不修改禅道内部配置,直接在建好的目录上做软链接指向目标位置:

# 先把默认上传目录改名作为备份 mv /data/www/zentao/www/data/upload /data/www/zentao/www/data/upload.bak # 创建新目录 mkdir -p /data/zentao-upload/upload chown -R apache:apache /data/zentao-upload/upload # 建立软链接 ln -s /data/zentao-upload/upload /data/www/zentao/www/data/upload

软链接方案的优点在于完全不改PHP配置,不会因为版本差异导致配置项不生效。缺点是如果将来别的维护人员看目录结构,发现upload是个软链接,可能感到困惑。我在实际项目中两种方式都试过,最终都会在my.php里加注释,把存储路径信息写清楚,方便后来人接手。

5.3 PHP临时上传目录的处理

附件上传走的是HTTP协议,文件会先落到PHP配置的upload_tmp_dir临时目录里,然后再移动到存储目录。如果临时目录空间不够,小文件能传,大文件会直接失败。

检查PHP配置:

php -i | grep upload_tmp_dir

默认情况下upload_tmp_dir是空的,会落到系统临时目录/tmp。我建议把它也指定到数据盘:

; 在 /etc/php.ini 中修改 upload_tmp_dir = /data/php-tmp post_max_size = 64M upload_max_filesize = 128M max_execution_time = 300

然后创建目录并给权限:

mkdir -p /data/php-tmp chown -R apache:apache /data/php-tmp chmod 750 /data/php-tmp # 重启Apache使配置生效 systemctl restart httpd

这里upload_max_filesize和post_max_size的取值要根据团队实际使用情况定。我们团队之前传大的测试包经常到30M,所以我把上限拉到128M。如果公司只是传些截图和文档,64M绰绰有余。

6. 禅道安装与后台存储验证

6.1 浏览器端安装禅道

环境准备好之后,在浏览器里访问Apache虚拟主机配置的域名或服务器IP,会自动进入禅道安装界面。安装向导会检查目录权限、PHP扩展、数据库连接等,所有项目都打绿勾就可以继续。

数据库配置页面,填写之前创建的数据库名zentao、用户名zentao和密码。如果这里的数据库连接失败,常见原因是PHP的MySQL扩展没装好,用php -m | grep mysql检查一下是否包含mysqli或pdo_mysql。

6.2 验证数据库存储位置是否生效

安装完成后,马上验证一下数据是否真的写到了自定义目录:

# 查看数据目录内容 ls -lh /data/mysql-data/

正常情况下你会看到ibdata1、ib_logfile0、ib_logfile1、zentao目录等文件。zentao目录就是禅道数据库实际存储的位置,里面是各个数据表的.ibd文件。

再验证一下数据库表是否能正常访问:

mysql -uzentao -p -e "USE zentao; SHOW TABLES;"

如果表列表能正常显示,说明数据库路径迁移完全没问题。

6.3 验证文件存储位置是否生效

登录禅道,随便建一个产品,在产品详情页传一张图片或者上传一个附件。然后去服务器上看文件落点:

# 查看上传目录的实时文件 find /data/zentao-upload/upload -type f | tail -20

如果能找到刚才上传的文件,说明文件存储位置自定义成功。如果文件跑到默认目录/data/www/zentao/www/data/upload里了,说明my.php配置没生效,这时候优先检查my.php是否存在、属主是否正确、PHP是否有权限读到,或者直接用软链接方案替代。

6.4 后台存储参数查看

禅道后台也提供了存储信息查看入口,这个很多文章没提过。登录禅道后,进入“后台” -> “系统” -> “系统信息”,在“目录权限”和“系统变量”页面能直接看到:

  • 文件上传目录(uploadPath)
  • 数据目录(dataRoot)
  • 临时目录(tmpPath)

这是最直观的验证方式,不用上服务器翻文件夹,给非运维人员确认存储位置的时候很方便。

7. 常见问题与排查技巧实录

7.1 MySQL启动失败:权限或SELinux问题

修改datadir之后MySQL起不来,日志报Permission denied,优先排查三步:

# 1. 检查目录属主 ls -ld /data/mysql-data # 2. 检查SELinux状态 getenforce # 3. 查看MySQL错误日志 tail -100 /var/log/mysqld.log

SELinux如果处于Enforcing模式,即使目录属主是mysql也会被拦截。尽快关闭SELinux或者给数据目录打标签:

semanage fcontext -a -t mysqld_db_t "/data/mysql-data(/.*)?" restorecon -Rv /data/mysql-data

没有安装semanage工具的话,执行yum install -y policycoreutils-python。

7.2 上传文件报错“文件不存在”

这个坑我印象很深。配置完自定义存储路径后,上传附件提示成功但前端显示“文件不存在”,页面刷新后附件预览空白。

排查下来发现是禅道内部存储路径与URL访问路径不一致导致的。禅道生成附件预览地址时,是基于www/data/upload这个相对路径构建的,如果文件实际放在别处,虽然有软链接或者配置,但权限不对时Apache无法读取,就会报文件不存在。

解决办法:把自定义存储目录软链接回原始路径,并确保软链接的最终指向目录的权限是apache可读的。如果用了软链接方案,注意设软链接时用绝对路径,不要用相对路径,相对路径在升级的时候容易失效。

7.3 数据库磁盘空间不足的应急预案

即便规划好了,数据增长也可能会超出预期。建议部署完立刻加一个监控脚本,定期检查/data分区的使用率:

#!/bin/bash # /usr/local/bin/check_disk.sh THRESHOLD=80 USAGE=$(df /data | awk 'NR==2 {print $5}' | sed 's/%//') if [ $USAGE -gt $THRESHOLD ]; then echo "Warning: /data partition usage is ${USAGE}%" | mail -s "Disk Alert" ops@example.com fi

配合crontab:

*/30 * * * * /usr/bin/bash /usr/local/bin/check_disk.sh

如果服务器没有邮件服务,可以在脚本里加一句把结果写入日志,然后用zabbix或者Prometheus自带的文件监控功能来抓取告警。

7.4 禅道升级后存储路径被重置

禅道升级的时候,安装包里的config/config.php会覆盖config/my.php,导致自定义配置丢失。我连续两次在升级后发现上传目录回到了默认位置,非常崩溃。

解决方案:升级前把my.php备份出来,升级完再覆盖回去:

cp /data/www/zentao/config/my.php /data/backup/my.php.bak # 执行升级 cp /data/backup/my.php.bak /data/www/zentao/config/my.php chown apache:apache /data/www/zentao/config/my.php

同样道理,禅道升级后目录权限可能被重置,建议升级后手动跑一遍权限设置命令。

7.5 MySQL binlog把数据盘吃满

开启binlog后,如果不设置过期时间,binlog文件会一直累积。我的expire_logs_days=7只保留7天,但高峰期一天就几个GB,还是需要注意。建议再配合定时清理:

# 每天凌晨2点清理10天前的binlog 0 2 * * * mysql -uroot -p'密码' -e "PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 10 DAY);"

binlog这个配置是开启还是关闭,要看公司备份策略。如果有专门的全量备份方案,比如每周用XtraBackup做全备,那binlog其实不是必须常开的,关了能省不少磁盘空间。只有需要做时间点恢复(PITR)的时候才必须开。

7.6 PHP错误日志定位问题更快

禅道页面白屏、500错误的时候,别先在浏览器端瞎猜,直接看日志:

tail -100 /etc/httpd/logs/zentao-error.log tail -100 /var/log/php-fpm/error.log

日志里如果出现open_basedir restriction in effect之类的提示,说明PHP的open_basedir限制把禅道目录挡在外面了。解决办法是改/etc/php.ini里的open_basedir,加上禅道目录和自定义的临时目录:

open_basedir = /data/www/zentao:/data/php-tmp:/tmp

8. 备份与恢复的实用建议

存储路径自定义完之后,备份策略也要调整。以前备份禅道可能要备份整个安装目录,现在数据和代码分离了,备份可以精确到目录级别,针对性强很多。

我习惯的备份方案:

# 1. MySQL逻辑备份(每晚12点) mysqldump -uzentao -p'密码' --single-transaction --routines --triggers zentao > /data/backup/zentao_$(date +%Y%m%d).sql # 2. 附件目录增量备份(每2小时) rsync -av --delete /data/zentao-upload/upload/ /data/backup/upload_$(date +%Y%m%d)/ # 3. 保留最近7天备份 find /data/backup -name "*.sql" -mtime +7 -exec rm -f {} \;

--single-transaction这个参数特别重要。不加这个参数,mysqldump在导数据的时候会对表加锁,禅道正在跑着的业务如果撞上备份,用户可能会卡顿甚至报错。加了--single-transaction之后,备份是走InnoDB的多版本快照,业务不受影响。

恢复的时候也简单,直接把备份的SQL导入:

mysql -uzentao -p zentao < /data/backup/zentao_20240101.sql

附件直接rsync回去就行,目录结构不变,软链接指过去就能恢复。

9. 部署完成后的性能小调优

禅道默认配置偏保守,手头服务器配置尚可的话,有几个参数值得动一动。

MySQL侧,在/etc/my.cnf的[mysqld]段,把max_connections从默认的151适当调高。如果团队几十个人同时用,151也够,但为了峰值时段保险,调到300不亏。innodb_buffer_pool_size分配物理内存的50%-70%,比如8G内存的机器设4G-5G,这个参数对MySQL整体性能影响最大。

PHP侧,/etc/php.ini里的memory_limit从默认128M调到256M,防止后台导出报表之类的大操作导致内存不足。max_execution_time=300上面已经写过了,如果团队有导入大量Excel的场景,这个值再调大些也不为过。

还有Apache的KeepAlive建议开启,MaxRequestWorkers根据服务器内存适当调大,否则人多的时候并发上不去,页面会时不时转圈。

10. 最后讲讲个人这几次部署的心得

第一次部署禅道的时候,我图省事用了官方一键安装包,装完确实省心,但后来要迁移数据库到独立数据盘,折腾了快一天才搞利索,期间还因为权限问题把禅道搞挂了一次。之后所有新环境都改成源码包+自定义路径的方式,前期多花半小时,后期能省好几个小时。

自定义存储路径这件事,本质上是把“不可控”变成“可控”。系统盘哪天满了、数据盘想扩容、备份想单独做,这些都因为提前规划而变得很简单。运维工作最怕的就是出问题时才发现结构不合理,改起来各种受限。把存储规划想在前头,后面几千人的研发团队用起来也不会出大乱子。

如果你现在正准备在CentOS上部署禅道,或者已经在用了但数据还在系统盘上,真心建议抽个维护窗口按这篇的思路把存储结构调整一下。迁移前一定要做一次完整备份,别嫌麻烦,备份永远是运维最后的底牌。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 8:43:33

2026 企业端可完成全链路任务的办公 AI 选型指南

很多企业在调研AI办公工具的过程中&#xff0c;很容易陷入几个典型的选型误区。有的团队把不同产品的功能列表拉出来逐项比对&#xff0c;功能条目多的就直接纳入候选池&#xff0c;忽略了很多标注出来的功能只是演示场景可用&#xff0c;放到真实业务流程里根本跑不通。有的团…

作者头像 李华
网站建设 2026/10/1 8:43:29

2026 企业 AI 办公工具选型指南:从场景匹配到平台全景盘点

一、企业选AI办公工具&#xff0c;为什么不能只看功能列表很多企业在调研AI办公工具的过程中&#xff0c;会陷入几个典型误区&#xff1a;把功能列表的长度作为核心判断标准&#xff0c;把低价作为选型的第一优先级&#xff0c;或是直接跟风选择市场知名度最高的产品。不少有自…

作者头像 李华
网站建设 2026/10/1 8:43:21

PHP短视频解析源码实战:从部署到批量处理

简介&#xff1a;这是一套面向开发者与数据分析人员的短视频解析源码&#xff0c;主打“上传即可使用”&#xff0c;无需复杂配置即可提取视频链接、封面、标题、播放量、评论等关键数据&#xff0c;适用于内容监控、市场趋势研究与第三方应用开发等场景。压缩包共14个文件&…

作者头像 李华
网站建设 2026/10/1 8:42:40

不换ERP也能上AI:查数、分析、代办业务实战

上周一位做精密制造的朋友跟我聊了近一个小时&#xff0c;核心就一句话&#xff1a;公司用了十多年的ERP&#xff0c;老板最近天天在问&#xff0c;AI能不能直接从系统里把数据要出来。他的困境很有代表性——流程单据全在老系统里&#xff0c;历史数据动不得&#xff0c;换套系…

作者头像 李华
网站建设 2026/10/1 8:41:13

OpenRIG开源赛车模拟舱搭建全攻略:从铝型材选材到直驱调校

说到 openrig&#xff0c;圈内朋友一般把它叫作“开放赛车模拟舱”——一个把赛车模拟器座舱的设计图纸、搭建方案、零件清单全部开源出来的项目。它解决的不是“怎么把方向盘装上桌子”的入门问题&#xff0c;而是“如何用合理的预算&#xff0c;自己搭出一套结构稳固、调校到…

作者头像 李华