资讯详情

飞腾CPU上部署禅道:ARM环境源码编译与踩坑全记录

📅 2026/10/19 3:53:05 | 华诺云谱 👁 阅读
飞腾CPU上部署禅道:ARM环境源码编译与踩坑全记录
在飞腾CPU上装禅道比想象中多踩的坑我都替你趟了一遍前阵子单位采购了一批基于飞腾CPU的国产化终端和服务器要求把内部的项目管理工具迁过去。我们选定了禅道这套开源项目管理软件想着“装个系统还不简单”结果上手才发现网上大部分禅道安装教程都是基于x86_64架构写的直接套到飞腾这类ARM平台上第一步就卡住了。整个过程折腾了两天把“飞腾CPU安装禅道”这个事情的坑基本都摸了一遍。这篇博文就是完整记录给同样要在国产化飞腾环境里部署禅道或者其他PHP应用的朋友做个参考。你可能会遇到三种情况手头有一台飞腾CPU的服务器操作系统是麒麟、统信UOS或者Ubuntu或者你就想在办公室一台飞腾主机上跑个禅道做团队管理再或者你已经装了官方一键包但发现跑不起来。不管是哪种这篇文章都能帮你少走弯路。下面我按实际部署顺序把环境准备、源码安装、踩坑排查、验证优化都讲清楚。1. 为什么在飞腾上装禅道会翻车——先说透这个环境的真实情况1.1 飞腾CPU到底特殊在哪飞腾处理器用的是ARMv8指令集也就是我们常说的64位ARM架构。和普通PC上常见的Inter/AMD x86_64架构完全不是一个指令体系。这意味着很多直接在x86机器上编译好的二进制文件在飞腾机器上根本没法跑。这不是“性能差一点”的问题而是“二进制格式不兼容”的硬性问题。打个比方x86_64的程序是“简体中文”ARM64的程序是“繁体中文”看着差不多但直接念是念不出来的。操作系统能识别这是个可执行文件但CPU执行不了里面的指令后果就是各种奇怪的报错。禅道的官方一键安装包里核心的Web服务器进程是官方预先编译好的x86_64二进制拿到飞腾机器上运气好会提示Exec format error运气不好直接No such file or directory因为动态链接器的路径都没找到。在排查这个问题之前我一度以为是文件损坏重新下载了好几遍折腾了一晚上才搞明白是架构问题。1.2 适合在飞腾上跑禅道的常见操作系统组合从我实际测试来看目前飞腾平台上比较常见的系统有这么几类操作系统包管理器自带PHP版本适合的处理方式银河麒麟 V10yum/dnf通常偏老或没有建议源码编译指定版本统信UOS 20apt可能存在建议源码编译指定版本Ubuntu 20.04/22.04 LTS部分飞腾开发板/服务器apt7.4/8.1可用包管理或源码编译Debian ARM64apt7.4/8.0可用包管理或源码编译原则上只要系统是合法的ARM64 Linux发行版禅道源码包都能部署差别只在依赖库怎么解决。如果你手里是银河麒麟我建议直接用源码方式装PHP和Nginx因为麒麟的软件源里面PHP版本经常很老而且部分依赖包缺失用 yum 硬装可能把系统搞乱。1.3 先定方案一键包、Docker还是源码部署禅道的部署方式主要有三种我在飞腾环境下都试过官方一键安装包兼容性最差。一方面官方包大都是x86_64编译产物飞腾上装不了另一方面即使你下载到了单独的ARM64包官方有些版本有提供内置的数据库、PHP版本也比较固定后期想换配比较麻烦。Docker部署如果系统支持Docker又有对应的ARM64镜像这是最省事的路子。但很多内网环境不允许用外部镜像仓库而且旧版本禅道的镜像质量参差不齐不适合生产环境长期用。源码包部署最稳。禅道官方提供纯净的PHP源码包配合自己编译的Nginx、PHP、MySQL完全可控后续升级、备份都方便。这也是我最终采用的方式。说实话现在禅道官方有提供基于ARM架构的安装包但不同版本覆盖情况不一样你下载的时候一定要看清楚标题里有没有写arm64或aarch64。如果你拿到的安装包后缀是x86_64或者linux64那就直接放弃一键包这条路换源码部署吧。2. 装之前先盘点环境——这几步省了后面一大堆麻烦2.1 确认CPU架构和操作系统版本开工第一步不是下载源码而是把这台机器的“户籍”查清楚。登录服务器后执行uname -m cat /etc/os-release lscpu | grep -i architecture如果uname -m输出aarch64恭喜你这确实是ARM64平台后面所有软件包都要按这个架构来选。lscpu里能看到型号比如飞腾的FT-2000/4或者D2000/8核数不同编译时间会差不少做好心理准备。2.2 基础系统设置和防火墙放行新拿到的机器先做三件小事# 设置时区不然日志时间对不上 timedatectl set-timezone Asia/Shanghai # 创建一个用于运行Web服务的系统用户 useradd -M -s /sbin/nologin www # 确认80端口是否被占用 ss -tlnp | grep :80如果服务器上有防火墙记得放行80端口和443端口如果你要用HTTPSfirewall-cmd --permanent --add-port80/tcp firewall-cmd --permanent --add-port443/tcp firewall-cmd --reload这一步看似简单但很多人在装完禅道之后发现外网访问不了回头排查才发现是防火墙没放行。先做了后面安心。2.3 预装基础编译工具禅道是PHP写的PHP和一些扩展需要从源代码编译安装缺少编译工具链会寸步难行。在麒麟/UOS这类yum系系统上yum install -y gcc gcc-c make automake autoconf libtool yum install -y libxml2-devel openssl-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel zlib-devel bzip2-devel oniguruma-devel sqlite-devel如果你用的是Ubuntu/Debian系apt-get update apt-get install -y build-essential autoconf libtool apt-get install -y libxml2-dev libssl-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libfreetype6-dev libzip-dev libonig-dev其中oniguruma-devel这个包很容易被漏掉它是PHP的 mbstring 扩展的依赖。如果这个没装后面编译PHP时会在 check 阶段直接报mcrypt.h not found之类的错误还得回头补。建议一次性装齐。2.4 软件包下载前必做的确认动作去下载禅道源码包的时候不要只看文件名就下载。官网的下载列表里一般会有禅道开源版XX版本的链接点进去找后缀是.zip的源码包而不是那个几GB的zbox一键包。源码包通常只有几十MB理论上只要是PHP应用任何CPU架构都能跑区别只在运行环境。下载完成后先校验一下文件完整性md5sum ZenTaoPMS-XX.zip unzip -l ZenTaoPMS-XX.zip | head -20如果文件能正常列出内容说明下载没问题。这时候再去准备PHP和MySQL你会发现飞腾环境下的坑基本都集中在PHP编译环节。3. 飞腾ARM64环境下的源码部署全流程3.1 编译安装指定版本的PHP禅道不同版本对PHP版本要求不同老版本禅道12要求PHP 5.4以上新版本禅道18通常建议PHP 7.2以上。我这里用的是当前兼容性最稳的组合PHP 7.4搭配MySQL 5.7。如果你不想踩更多兼容性的坑我建议复制这套组合至少我测下来没有出现版本冲突问题。下载PHP源码并解压wget https://www.php.net/distributions/php-7.4.33.tar.gz tar -zxvf php-7.4.33.tar.gz cd php-7.4.33编译配置命令如下注意每个参数都是有用途的不要随意剪裁./configure \ --prefix/usr/local/php \ --with-config-file-path/usr/local/php/etc \ --enable-fpm \ --with-fpm-userwww \ --with-fpm-groupwww \ --enable-mysqlnd \ --with-mysqlimysqlnd \ --with-pdo-mysqlmysqlnd \ --enable-mbstring \ --with-openssl \ --with-curl \ --with-gd \ --with-jpeg \ --with-freetype \ --with-zlib \ --with-gettext \ --enable-bcmath \ --enable-zip \ --enable-opcache其中几个关键点单独说明一下--enable-fpm禅道通过PHP-FPM方式与Nginx配合必须开启。--with-mysqli和--with-pdo-mysql都使用mysqlnd驱动这是禅道连接MySQL的核心扩展。--enable-opcache一定要编译进去禅道开启OPcache后性能提升非常明显后面调优会再说。编译和安装make -j$(nproc) make install飞腾D2000八核处理器编译PHP大约耗时10~15分钟如果是FT-2000/4四核可能要半小时泡杯茶等吧。期间出现任何checking for ... not found的提示多半是你少了对应的devel包回头补上重新configure即可。3.2 配置PHP-FPM与Nginx安装完成后把默认配置文件复制一份cp /usr/local/php/etc/php.ini-production /usr/local/php/etc/php.ini cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf编辑php.ini确认下面几个配置项是开启的extensionpdo_mysql extensionmysqli extensionopenssl extensioncurl extensionmbstring extensiongd extensionzip date.timezone Asia/Shanghai如果在编译时扩展已经静态编译进PHPphp.ini里不一定需要extension行但为了保险我建议用php -m命令先看一眼/usr/local/php/bin/php -m | grep -E pdo_mysql|mysqli|mbstring|openssl然后启动PHP-FPM/usr/local/php/sbin/php-fpm看到9000端口监听就说明成功了。接着装Nginx麒麟系统可以直接用yum install nginx但版本可能老一点也可以源码编译。我这里用发行版自带的Nginx够用了。编辑Nginx站点配置核心内容如下server { listen 80; server_name _; root /www/zentaopms; index index.php index.html; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }try_files这一行很多人会忽略没有它的话禅道的伪静态页面全都会404。配好之后nginx -t检查语法然后启动。3.3 准备MySQL数据库和账号MySQL我直接用麒麟软件源里的MySQL 5.7有的系统是MariaDB也能凑合但禅道兼容性上MySQL 5.7更稳。安装并启动后进入数据库创建库和账号CREATE DATABASE zentao DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE USER zentaolocalhost IDENTIFIED BY 这里写你的密码; GRANT ALL PRIVILEGES ON zentao.* TO zentaolocalhost; FLUSH PRIVILEGES;你如果用MySQL 8.0以上的版本要注意认证插件的问题MySQL 8默认使用caching_sha2_password认证而低版本的PHP mysqli驱动可能不支持导致连接失败。这时候要么换MySQL 5.7要么在创建用户时指定老认证方式CREATE USER zentaolocalhost IDENTIFIED WITH mysql_native_password BY 这里写你的密码;这个坑我在后面还要专门提一下是我踩过的最隐蔽的一个。3.4 部署禅道源码包把下载好的禅道源码包解压到Web根目录mkdir -p /www unzip ZenTaoPMS-XX.zip -d /www chown -R www:www /www/zentaopms然后浏览器访问http://服务器IP/install.php。如果能看到禅道安装向导说明环境搭建已经成功了一大半。安装向导会让你填数据库信息也就是刚才创建的库和账号。如果到这里一切顺利整个“飞腾CPU安装禅道”最核心的部分就完成了。安装向导完成后确认一下config/config.php是否已经生成然后删除install.php防止被再次执行rm -f /www/zentaopms/install.php4. 我在飞腾上踩过的五个真坑——从报错到定位的完整过程4.1 坑一一键安装包在飞腾上跑不起来的报错特征最开始我想用官方一键包服务器上执行解压安装脚本报出-bash: ./zbox: cannot execute binary file: Exec format error咋一看是执行权限问题我又chmod x zbox重新试依旧报错。后来我用file zbox查看文件类型输出里明确写着ELF 64-bit LSB executable, x86-64才反应过来这是x86_64的二进制。飞腾是ARM架构跑不了x86的程序就这么简单。排查命令file zbox ldd zboxldd显示动态依赖库的时候如果系统提示No such file or directory也是典型的二进制与CPU架构不匹配。所以如果你准备在飞腾机器上用一键包先去下载页确认有没有aarch64后缀的版本没有就直接改走源码部署路线别浪费时间。4.2 坑二PHP扩展缺失导致安装页面白屏源码部署后我第一次访问install.php页面一片空白。查了Nginx错误日志只有简单的open() ... failed提示没说到底什么问题。后来直接在命令行用PHP解释器执行一下/usr/local/php/bin/php -r echo phpversion();能输出版本号说明PHP本身没毛病。再检查错误信息/usr/local/php/bin/php -i | grep -E configure command|extension_dir最后在php.ini里打开了display_errors On重新访问安装页面才看到具体提示“对不起系统提示缺少PHP扩展pdo_mysql”。这是因为我在编译PHP时虽然启用了--with-pdo-mysql但是php.ini里没有加载对应扩展。解决办法就是确认扩展已编译到PHP中并且在php.ini里启用相关配置。排查链路是看日志 → 命令行测试 → 打开PHP错误显示 → 定位到缺失扩展。这套思路在Linux下调试PHP应用非常通用。4.3 坑三MySQL 8认证插件不兼容导致数据库连接失败安装向导填完数据库信息点击保存弹回错误“抱歉数据库连接失败请检查配置”。我第一反应是密码错了反复确认了几遍。后来用命令行直接连接数据库是成功的mysql -uzentao -p -h127.0.0.1但禅道就是连不上。这时候我想到MySQL 8的caching_sha2_password认证插件和PHP老版本驱动的兼容性问题。查看用户认证方式SELECT user, host, plugin FROM mysql.user WHERE userzentao;果然plugin字段显示的是caching_sha2_password。解决方式是把用户改成旧版认证ALTER USER zentaolocalhost IDENTIFIED WITH mysql_native_password BY 这里写你的密码; FLUSH PRIVILEGES;改完再刷新安装向导就顺利过去了。这个问题在内网环境尤其容易发生因为你可能连不上外网搜索解决方案只能靠自查。4.4 坑四目录权限不对安装向导写不了配置文件禅道安装向导在前几步会检查目录权限比如config/目录、www/data/目录。如果报错“无法写入config.php”通常就是目录属主或者权限不对。我遇到过一种特殊场景禅道包是用root解压的然后把整个目录chmod 777结果PHP-FPM运行在这个环境下虽然能写文件但后续升级、备份时会因为权限太乱出各种怪问题。正确姿势是chown -R www:www /www/zentaopms chmod -R 755 /www/zentaopms chmod -R 775 /www/zentaopms/tmp /www/zentaopms/config /www/zentaopms/www/data这样既保证了Web服务用户可写又不会让所有用户都能动敏感文件。4.5 坑五伪静态配置缺失登录后页面全404禅道部署完成、管理后台也进去了但点击“产品管理”“项目”等功能菜单页面全部404。这个现象很误导人我一度以为源码包有问题。排查后确定是Nginx伪静态规则没配好。禅道的URL是带路由参数的比如/project-index-1.html这样的路径需要Nginx把不存在的URI转交给index.php处理。我配置里加了try_files $uri $uri/ /index.php$is_args$args;之后所有页面恢复。还有一个细节禅道官方文档对Nginx伪静态有额外的location规则你在网上搜索“禅道Nginx伪静态配置”能找到通用版本按照官方建议加上即可。这一个坑的教训是PHP应用部署完成后先测试普通动态页面index.php?m...是否正常再开伪静态这样能快速定位问题出在PHP环境还是Nginx重写规则。5. 部署完成后的验证、备份与性能调优5.1 功能验收清单别只看安装成功安装向导显示“禅道安装成功”并不代表一切OK我建议按照下面的清单逐项过一遍验收项操作方法预期结果后台登录访问http://IP/index.php?muserflogin默认账号 admin 可登录创建产品后台创建产品并设置计划页面无报错创建项目执行项目迭代并关联产品项目列表正常显示提交Bug提交一个带附件的Bug附件能上传列表能查看邮件通知配置SMTP接收邮件能收到系统发出的通知邮件通知这一项尤其要重点验证因为它依赖openssl和curl扩展。如果SMTP配置正确但还是发不出邮件优先检查php.ini里的openssl扩展是否加载。5.2 备份与升级的注意事项禅道的数据由两部分组成MySQL数据库里的业务数据以及www/data/目录下的附件和上传文件。备份时必须同时备份这两部分只备份数据库会导致附件丢失。我的备份脚本思路# 数据库备份 mysqldump -uzentao -p密码 zentao /backup/zentao_$(date %Y%m%d).sql # 附件目录备份 tar czf /backup/zentao_data_$(date %Y%m%d).tar.gz /www/zentaopms/www/data升级禅道版本之前务必先完整备份以上两部分。升级过程本质是用新版源码覆盖旧版目录如果操作不当数据库结构可能不兼容。官方升级包会执行数据库升级脚本但我见过升级到一半卡住的场景稳妥的做法是在升级脚本执行前手动备份数据库一旦出错立刻回滚。5.3 飞腾平台上的性能调优建议禅道本身是PHP应用性能瓶颈通常在PHP解析和数据库I/O。飞腾CPU的整数运算能力不错但单核性能相比主流x86桌面CPU还是有差距所以调优策略要聚焦在“减少PHP进程重复编译、提高数据库缓存命中率”上。PHP-FPM运行池配置编辑php-fpm.d/www.confpm dynamic pm.max_children 30 pm.start_servers 5 pm.min_spare_servers 3 pm.max_spare_servers 10max_children不是越大越好每多一个PHP-FPM进程就会多占一批内存。飞腾服务器如果是8核30个左右已经够用了你可以在禅道压力测试时用free -m观察内存余量再微调。开启OPcache在php.ini末尾加zend_extensionopcache.so opcache.enable1 opcache.memory_consumption128 opcache.interned_strings_buffer8 opcache.max_accelerated_files10000 opcache.validate_timestamps1我测下来开启OPcache之后禅道后台操作响应速度肉眼可见地提升了一个档次尤其模块多、插件多的时候效果更明显。PHP是解释型语言每次请求都要解析一遍源代码OPcache直接把解析后的字节码缓存到内存里相当于把“每次看一遍原文”变成了“看速记卡”省下来的时间非常可观。MySQL方面编辑/etc/my.cnf把innodb_buffer_pool_size设为物理内存的50%~70%比如8GB内存的机器可以设4GB到5GB[mysqld] innodb_buffer_pool_size 4G这个参数决定了InnoDB表数据和索引在内存里的缓存大小。缓存越大SQL查询时直接读内存、不用落盘的次数就越多。对于禅道这种以读为主的管理系统效果立竿见影。最后提一个飞腾平台特别要注意的点如果服务器带图形界面或者预装了很多桌面软件这些都会吃掉内存。禅道部署建议用最小化安装的服务器版系统没有GUI进程的干扰PHP和MySQL能拿到更多内存系统也更稳定。我这台机器上有GNOME桌面部署完禅道之后还在跑着内存占用轻松超过了3GB后来我直接把桌面服务停掉内存瞬间解放那之后MySQL和PHP的缓存配置才真正生效。写在最后这次在飞腾CPU上部署禅道整体思路其实不复杂就是“源码编译 逐个排查坑点”的过程。相比x86平台飞腾环境的软件生态还不够丰富很多包源里没有预编译好的ARM64版本习惯了Console直接装的人会有点不适应。但只要你有耐心走一遍编译流程并且会看报错信息禅道跑在飞腾上是完全没问题的。最后说个实在的建议如果你是在单位或公司里做这类部署一定把每一步操作和遇到的报错截图留存下来。我这次就把整个过程整理成了内部文档后续同一型号的运维同事再做类似部署时直接照文档走效率提升了非常多。这份经验的价值不只在你自己这次少踩坑更在于让后来的人完全不用踩坑。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑