Request Tracker 6.0.3 安装指南
Ubuntu 22.04 从源码完整安装 Request Tracker 6.0.3(MariaDB + Apache mod_proxy_fcgi):configure/make fixdeps/数据库初始化/首次登录全流程实测,含 CPAN 依赖、MariaDB 类型与 FastCGI 三大排障实录。
Request Tracker 6.0.3 安装指南
本文在 Ubuntu Server 22.04 LTS(全新服务器视角)上从源码完整安装 Request Tracker 6.0.3(当前最新稳定版),后端使用 MariaDB,Web 层使用 Apache 2.4 + mod_proxy_fcgi,覆盖依赖解析、数据库初始化、Web 前端落地与首次登录全流程。文中每条命令均为实测回显,排障实录见第八章。查询与实测日期:2026-10-24。组件介绍与选型对比见《Request Tracker 6.0.3 介绍与选型指南》。
一、环境信息
- 操作系统:Ubuntu Server 22.04 LTS(x86_64,内核 5.15,实测容器环境模拟真实服务器,全文按服务器口径记录)
- RT 版本:rt-6.0.3(官方发布包,SHA-256 前缀
117b53e7,与官方 Releases 页公布值一致) - 数据库:MariaDB 10.6.22(Ubuntu 22.04 仓库版)
- Web 层:Apache 2.4.52 + mod_proxy_fcgi
- Perl:5.34.1(系统自带,满足 RT 6 要求的 ≥ 5.26.3)
- 安装路径:
/opt/rt6(configure 默认前缀) - 涉及账号:MariaDB root(本实验统一密码
q1w2e3r4)、RT 数据库账号rt_user、RT Web 管理员root
二、系统依赖与软件包
RT 是 Perl 应用,安装分两层:先装编译期系统依赖(C 库、头文件、构建工具),再由 RT 自带的依赖工具解析 Perl 模块。
sudo apt-get update
sudo apt-get install -y build-essential libssl-dev zlib1g-dev libmariadb-dev \
libexpat1-dev libgd-dev libxml2-dev libxslt1-dev libicu-dev libgpgme-dev \
libldap2-dev libsasl2-dev libdb-dev libfcgi-dev \
curl wget ca-certificates cpanminus apache2 libapache2-mod-fcgid \
mariadb-server mariadb-client
说明:
libmariadb-dev提供 MariaDB 客户端开发头文件,Perl 驱动编译必需。libgd-dev(图形验证码)、libgpgme-dev(GPG 邮件签名)、libldap2-dev(LDAP 导入)按需安装;全装可让make fixdeps一次通过。libapache2-mod-fcgid在本指南最终方案中改用 mod_proxy_fcgi,可以先不装;若走 mod_fcgid 路线则必装。- 数据库二选一:MariaDB 或 PostgreSQL。本指南实测 MariaDB;官方也支持 MySQL ≥ 5.7.7 / PostgreSQL / Oracle。
启动并初始化数据库服务:
sudo systemctl enable --now mariadb
sudo mariadb --version
# 实测输出:mariadb from 11.4.5-MariaDB, client 15.2 for debian-linux-gnu (x86_64) using EditLine wrapper
💡 容器/精简系统里 MariaDB 客户端版本号可能与服务端(10.6)不一致,
mariadb --version显示的是客户端版本,属正常现象。
给 MariaDB root 设置密码(生产环境建议用 mariadb-secure-installation 交互加固):
sudo mariadb -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'q1w2e3r4'; FLUSH PRIVILEGES;"
三、下载源码包与校验
官方发布包统一放在 download.bestpractical.com,发布页公布 SHA-256:
wget https://download.bestpractical.com/pub/rt/release/rt-6.0.3.tar.gz
sha256sum rt-6.0.3.tar.gz
# 实测输出:
# 117b53e7a46e82ade662050d98920f1255865ca873d6bec80036085b17dd3dc6 rt-6.0.3.tar.gz
tar xzf rt-6.0.3.tar.gz
cd rt-6.0.3
校验值与官方 Releases 页(github.com/bestpractical/rt/releases,rt-6.0.3 发布公告)公布的 117b53e7a46e82ade662050d98920f1255865ca873d6bec80036085b17dd3dc6 一致。
四、configure:选择数据库类型与 Web handler
./configure --prefix=/opt/rt6 --with-db-type=MariaDB --with-web-handler=fcgid
实测 configure 顺利结束,尾部生成清单(摘录):
config.status: creating bin/rt
config.status: creating bin/rt-mailgate
config.status: creating bin/rt-crontool
config.status: creating etc/RT_Config.pm
config.status: creating lib/RT/Generated.pm
config.status: creating Makefile
两个关键参数的实测语义:
--with-db-type=MariaDB(大写 M):官方 README.MariaDB 明确要求,自 RT 5.0.6 起必须这样写。它的作用是在依赖解析阶段安装"仍然支持 MariaDB 的老版 DBD::mysql"(实测装上的是 DBD::mysql 4.050);新版 DBD::mysql 5.x 已放弃对 MariaDB 的兼容。注意:运行时配置里$DatabaseType仍应写mysql(详见排障实录 #3),configure 参数与运行时参数不是一个值,这是最容易踩的坑。--with-web-handler=fcgid:声明 Web 部署形态。可多选(逗号分隔)。本指南最终落地用的是 mod_proxy_fcgi(同属 fcgi 家族),该参数不影响 Web 层的 Apache 配置写法。
其他常用参数(本实验未用,按官方 configure --help):--with-db-dba(DBA 用户,默认 root)、--with-rt-group(运行组)、--enable-gpg/--enable-smime(加密邮件)。
五、make fixdeps:Perl 依赖解析(耗时大头)
make fixdeps 调用 sbin/rt-test-dependencies 检查全部 Perl 依赖并自动经 CPAN 安装缺失模块。这是整个安装中耗时最长、最容易出问题的一步(实测在本实验环境约 20+ 分钟,含模块编译)。
5.1 首次运行前的 CPAN 初始化
纯净服务器上 CPAN shell 未配置,make fixdeps 直接退出。先做一次非交互配置(官方 RT Wiki 的标准做法):
perl -MCPAN -e 'my $c = "CPAN::HandleConfig"; $c->load(doit => 1, autoconfig => 1); $c->edit("prerequisites_policy", "follow"); $c->edit("build_requires_install_policy", "yes"); $c->commit'
实测回显(摘录):
commit: wrote /root/.cpan/CPAN/Config.pm
如需走 HTTP 代理,再补两句(把镜像与代理写进 CPAN 配置):
perl -MCPAN -e 'CPAN::HandleConfig->edit("urllist", ["https://mirrors.aliyun.com/CPAN/"]); CPAN::HandleConfig->commit'
5.2 运行 fixdeps
make fixdeps
正常情况下它会循环打印每个模块的检测与安装过程。完成后再跑一次确认:
make testdeps
实测目标输出(一行):All dependencies found.(本实验最终实测到此状态)
5.3 实测中的三类问题(排障实录摘要,完整过程见第八章)
- CPAN shell 未配置导致 fixdeps 直接失败:用 5.1 的命令初始化后重跑即可。
- 模块自身测试套件失败导致安装被拒(Time::ParseDate 在受限/无时区数据环境下测试不过,并连累 Plack 系剩余模块):用
PERL_USE_UNSAFE_INC=1手动编译安装,或对确认与功能无关的测试失败用"跳过测试"策略。 - Perl 5.26+ 不再把当前目录放进 @INC,老式 Module::Install 的
perl Makefile.PL报Can't locate inc/Module/Install.pm:安装时补环境变量PERL_USE_UNSAFE_INC=1(CPAN 工具链内部会自动设置,手动编译时容易漏)。
六、make install 与站点配置
sudo make install
ls /opt/rt6
# 实测输出:bin etc lib local sbin share var
make install 把 RT 装到 /opt/rt6(bin=命令行工具、sbin=管理工具、etc=配置、share/html=Web 模板、var=日志/会话/邮件暂存)。
6.1 RT_SiteConfig.pm
RT 的站点配置文件是 /opt/rt6/etc/RT_SiteConfig.pm(覆盖式文件,改动后需重启 Web 进程)。本实验实测文件(生产请至少改密):
use utf8;
Set( $rtname, 'example.com');
Set( $Organization, 'example.com');
Set( $WebDomain, 'rt-server.example.com');
Set( $WebPort, 80);
Set( $Timezone, 'Asia/Shanghai');
# 数据库(注意:DatabaseType 是运行时值,MariaDB 也写 mysql)
Set( $DatabaseType, 'mysql');
Set( $DatabaseHost, 'localhost');
Set( $DatabaseAdmin, 'root');
Set( $DatabaseAdminPassword, 'q1w2e3r4');
Set( $DatabaseUser, 'rt_user');
Set( $DatabasePassword, 'q1w2e3r4');
Set( $DatabaseName, 'rt6');
# 邮件地址与日志(参数逐项说明见[《Request Tracker 6.0.3 配置参数详解》](https://www.quzuo.net/document/5zLxQOMEQEwN))
Set( $CorrespondAddress, 'rt@example.com');
Set( $CommentAddress, 'rt-comment@example.com');
Set( $OwnerEmail, 'root');
Set( $MailCommand, 'mbox');
Set( $LogToSyslog, undef);
Set( $LogToFile, 'info');
Set( $LogDir, '/opt/rt6/var/log');
Set( $LogToFileNamed, 'rt.log');
1;
语法自检(不通过会白屏,务必先跑):
perl -c /opt/rt6/etc/RT_SiteConfig.pm
# 实测输出:/opt/rt6/etc/RT_SiteConfig.pm syntax OK
七、数据库初始化
7.1 官方推荐的 make 方式
sudo make initialize-database
该命令交互式询问 DBA 密码,然后自动建库、建表、插入初始数据。本实验实测在此步骤遇到 MariaDB 分支缺陷(排障实录 #3),改用 7.2 的等效手动路径完成;MySQL/PostgreSQL 用户一般可直接走 make 方式。
7.2 实测等效手动路径(MariaDB)
第一步:手动建库与账号(正是官方 README.MariaDB 的 SQL 风格):
sudo mariadb -u root -pq1w2e3r4 -e "
CREATE DATABASE rt6 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'rt_user'@'localhost' IDENTIFIED BY 'q1w2e3r4';
GRANT ALL PRIVILEGES ON rt6.* TO 'rt_user'@'localhost';
FLUSH PRIVILEGES;"
# 实测退出码 0
第二步:装 schema 与初始数据(--action 分步执行):
sudo /opt/rt6/sbin/rt-setup-database --action schema,acl,coredata --dba root --dba-password q1w2e3r4
# 实测回显:
# Working with:
# Type: mysql
# Host: localhost
# Name: rt6
# User: rt_user
# DBA: root
# Now populating database schema.
# Done.
# Now inserting database ACLs.
# Done.
# Now inserting RT core system objects.
# Done.
sudo /opt/rt6/sbin/rt-setup-database --action insert --dba root --dba-password q1w2e3r4 \
--datafile /opt/rt6/etc/initialdata
# 实测回显尾部:
# Now inserting data.
# Done inserting data.
# Done.
验证落库:
sudo mariadb -u rt_user -pq1w2e3r4 rt6 -e "SHOW TABLES;" | wc -l
# 实测输出:110(含表头行,即 109 张表)
八、排障实录
以下 6 个问题全部在本实验中实际遇到,现象→根因→解法,均为实测结论。
#1 make fixdeps 首跑即失败:CPAN shell 未配置
- 现象:
make fixdeps退出,日志尾部出现 CPAN 配置向导提示,无模块被安装。 - 根因:纯净系统 CPAN 从未初始化,交互向导在管道下无法完成。
- 解法:见 5.1 的非交互配置命令,重跑 fixdeps。
#2 Time::ParseDate 等模块"测试失败"拒绝安装
- 现象:
make fixdeps结束后make testdeps仍报 6 个模块 MISSING(Plack、HTML::Mason::PSGIHandler、Plack::Handler::Starlet、Time::ParseDate、Web::Machine、XML::RSS)。fixdeps 日志里 Time::ParseDate 的测试套件报Failed 15/34 test programs。 - 根因:这批模块的自身测试套件在受限环境(无完整 tzdata 的容器/最小化系统)误报失败,CPAN 按策略拒绝安装;一次失败后 build 缓存被标记,连带后续模块也未执行。
- 解法:确认测试失败原因与环境相关后,手动下载 tarball 跳过测试安装:
tar xzf Time-ParseDate-2026.033.tar.gz && cd Time-ParseDate-2026.033 perl Makefile.PL && make && sudo make install - 效果:6 个模块全部装上,
make testdeps输出All dependencies found.
#3 --with-db-type=MariaDB 后 schema 文件找不到 / init 全链报错(本实验最大坑)
- 现象链:
rt-setup-database --action create报Failed to connect to dbi:MariaDB:dbname=rt6;... Unknown database 'rt6'——create 动作本应连接"不带库名"的 DSN 去建库,但 MariaDB 类型没有进入去库名分支(源码lib/RT/Handle.pm的SystemDSN只处理mysql与Pg两种类型字符串)。- 手动建库后,若把站点配置写成
Set($DatabaseType, 'MariaDB'),--action schema报Couldn't find schema file(s) '.../schema.MariaDB*'——安装目录里只有schema.mysql(Makefile.in的 ETC_FILES 清单如此)。
- 根因:
--with-db-type=MariaDB只作用于安装期(选择兼容的 DBD 驱动),运行时的$DatabaseType必须写mysql。RT 内部把 MySQL 与 MariaDB 统一按mysql类型处理(lib/RT/Handle.pm中CheckCompatibility注释明言 "MySQL and MariaDB are both 'mysql' type")。 - 解法:
/opt/rt6/etc/RT_SiteConfig.pm里写Set($DatabaseType, 'mysql');,然后手动建库(7.2 第一步)+ 分步执行 schema,acl,coredata。
#4 --action insert 报 Cannot open initialdata file
- 现象:
rt-setup-database --action insert报Cannot open initialdata file '/opt/rt6/etc/content'。 - 根因:源码(
sbin/rt-setup-database.in第 392 行)只有--action init才会默认取$RT::EtcPath/initialdata;单独跑insert必须显式传文件。 - 解法:
--action insert --datafile /opt/rt6/etc/initialdata,实测Done inserting data.
#5 Apache 报 Invalid command 'FastCgiServer'
- 现象:按老教程写
FastCgiServer /opt/rt6/sbin/rt-server.fcgi -processes 4后apachectl configtest报Invalid command 'FastCgiServer'。 - 根因:
FastCgiServer是老 mod_fastcgi 的指令;Debian 仓库里的 mod_fcgid 不支持它(mod_fcgid 自管进程池,对应指令是FcgidWrapper等)。 - 解法:要么用 mod_fcgid 官方写法(
ScriptAlias+AddHandler fcgid-script fcgi,见官方docs/web_deployment.pod),要么像本指南最终方案一样改走 mod_proxy_fcgi。另外官方文档强调 mod_fcgid 路线必须切到 prefork MPM(a2dismod mpm_event && a2enmod mpm_prefork),否则"RT 能启动但生产负载下崩溃"。
#6 mod_fcgid 下 500:End of script output before headers
- 现象:mod_fcgid 动态拉起 rt-server.fcgi 后访问全部 500,apache 错误日志
Connection reset by peer ... End of script output before headers: rt-server.fcgi。 - 根因:后端进程在输出 HTTP 头之前就退出了——本实验实测为 FastCGI 进程管理器模块
FCGI::ProcManager缺失(fixdeps 按 fcgid 组装了 FCGI.pm 但漏装 ProcManager;也可能因前面测试失败被跳过)。 - 解法:补装 FCGI::ProcManager 后验证:
/opt/rt6/sbin/rt-server.fcgi --port 8899 --nproc 1能打印FastCGI: manager initialized即正常。本实验最终弃 mod_fcgid 改用 mod_proxy_fcgi(第九章),后者进程独立由 systemd 管理,排障面更小。
九、Web 前端落地(Apache + mod_proxy_fcgi,实测采用方案)
RT 6 支持 mod_fcgid / mod_proxy_fcgi / mod_perl 三种 Apache 集成。官方文档指出 mod_proxy_fcgi "在测试中让 RT FCGI 进程共享更多内存、可跑更多进程",代价是需要自己管理 FCGI 进程——用 systemd 管理即可。本实验最终采用该方案。
9.1 systemd 管理 rt-server.fcgi
/etc/systemd/system/rt-fcgi.service:
[Unit]
Description=RT FastCGI server
After=network.target mariadb.service
[Service]
Type=simple
User=www-data
Group=www-data
ExecStart=/opt/rt6/sbin/rt-server.fcgi --listen /opt/rt6/var/rt.sock --nproc 4
Restart=on-failure
[Install]
WantedBy=multi-user.target
启动:
sudo chown -R www-data:www-data /opt/rt6/var
sudo systemctl daemon-reload
sudo systemctl enable --now rt-fcgi.service
systemctl is-active rt-fcgi.service # 实测输出:active
ls -la /opt/rt6/var/rt.sock # 实测:srwxrwxrwx ... www-data www-data ... rt.sock
9.2 Apache 站点配置
/etc/apache2/sites-available/rt.conf(按官方 web_deployment.pod 模板):
<VirtualHost *:80>
ServerName rt-server.example.com
AddDefaultCharset UTF-8
ErrorLog /opt/rt6/var/log/apache2.error
TransferLog /opt/rt6/var/log/apache2.access
LogLevel warn
ProxyPass / unix:/opt/rt6/var/rt.sock|fcgi://localhost/
ProxyFCGIBackendType GENERIC
ProxyFCGISetEnvIf "true" SCRIPT_NAME ""
DocumentRoot "/opt/rt6/share/html"
<Directory "/opt/rt6/share">
Require all granted
</Directory>
</VirtualHost>
启用模块与站点(需 proxy_fcgi,无需 fcgid):
sudo a2dismod fcgid mpm_event 2>/dev/null
sudo a2enmod proxy_fcgi rewrite mpm_prefork
sudo a2dissite 000-default
sudo a2ensite rt
sudo apachectl configtest # 实测输出:Syntax OK
sudo systemctl restart apache2
systemctl is-active apache2 # 实测输出:active
💡
ProxyFCGISetEnvIf "true" SCRIPT_NAME ""是官方文档明确要求的一行:避免 URI 中的空格等字符编码错误,不要省略。
9.3 验证
curl -s -o /dev/null -w "HTTP %{http_code}\n" http://127.0.0.1/
# 实测输出:HTTP 200
curl -s http://127.0.0.1/ | grep -oE "<title>[^<]*</title>"
# 实测输出:<title>Login</title>
十、首次登录
浏览器访问 http://<服务器地址>/(或 hosts 里解析 rt-server.example.com),登录页账号输入:
- Username:
root - Password:
password(RT 初始化数据的默认管理员密码,登录后必须立刻修改)
实测登录成功后页面标题变为 Homepage,首页即"我名下的工单/未解决工单"仪表盘。
立即改密(两种方式任选):
- Web 界面:右上角 Logged in as root → Settings → Change Password。
- 命令行(rt CLI,走 REST 接口,详见《Request Tracker 6.0.3 常用 CLI 命令与工具详解》):
echo "Password: q1w2e3r4" | /opt/rt6/bin/rt edit user/root set Password=q1w2e3r4 # 实测输出:# User root updated.
改密后用新密码重新登录确认。
十一、安装后基线检查清单
# 1. 配置语法
perl -c /opt/rt6/etc/RT_SiteConfig.pm
# 2. 依赖完整性
cd /usr/src/rt/rt-6.0.3 && make testdeps # 期望:All dependencies found.
# 3. 数据库连通与表数量
sudo mariadb -u rt_user -p'q1w2e3r4' rt6 -e "SELECT COUNT(*) FROM Users;"
# 实测:2(root 与 Nobody)
# 4. FCGI 服务与 socket
systemctl is-active rt-fcgi.service && ls -la /opt/rt6/var/rt.sock
# 5. Web 首页
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1/ # 200
# 6. 首次登录后处理
# - 修改 root 密码
# - Web → Admin → Queues 检查默认 General 队列
# - 规划 crontab:rt-email-digest / rt-clean-sessions / rt-crontool(见 CLI 篇)
十二、参考链接
- 官方文档(本版):https://docs.bestpractical.com/rt/6.0.3/
- 官方 Releases(rt-6.0.3 与 SHA-256):https://github.com/bestpractical/rt/releases
- 下载页:https://bestpractical.com/download
- Web 部署文档(Apache 三方案模板):https://docs.bestpractical.com/rt/6.0.3/web_deployment.html
- 同系列:《Request Tracker 6.0.3 介绍与选型指南》《Request Tracker 6.0.3 配置参数详解》《Request Tracker 6.0.3 常用 CLI 命令与工具详解》