Ubuntu上部署Jira与Confluence实战:MySQL配置与运维避坑指南

发布时间:2026/9/16 22:26:42
Ubuntu上部署Jira与Confluence实战:MySQL配置与运维避坑指南 1. 写在前面为什么还要碰这套“老版本”组合看到这个题目估计不少人会嘀咕都什么年代了Jira怎么还装在 Linux 服务器上MySQL 5.7 不是早就不维护了吗Confluence 6.15 那都是哪年的版本了我来说说我的真实场景。公司要搭一套内部的项目管理与知识库系统领导指着 Jira 和 Confluence 说就这两个。但采购流程卡着正版授权的报价还没批下来可项目又不能等。于是我先用开源/社区版摸一套流程出来跑通业务闭环等授权下来了再平滑迁移。这个背景下版本选择就得“能跑就行”“稳为主”不能一味追新——新版本对服务器配置要求高插件兼容性也不确定反而 5.7 的 MySQL、8.x 的 Atlassian 全家桶在 2核4G 的小机器上就能转得动资料也多、坑都被人踩平了很适合做内部系统的“临时底座”。另外一点很现实很多公司内部网环境隔离压根没法访问外网下载新版安装包而旧版本安装包、依赖包往往内网镜像里都有。用旧版本下载和离线部署都省心。你要是也想在公司搭一套类似的内部系统这篇就是按我实际踩坑后的流程整理的照着做能少走很多弯路。2. 环境准备与版本选型思路2.1 服务器与操作系统基础要求我用的是 Ubuntu 18.04 LTS虚拟机分配了 2 核 CPU、4GB 内存、60GB 硬盘。这个配置跑 Jira Confluence MySQL 三件套日常十来个人用完全够。如果你的团队超过五十人建议内存加到 8GBJVM 堆内存能多分点否则高峰期明显卡顿。Ubuntu 版本尽量选 18.04 或 20.04。太新的 22.04 也能装但 MySQL 5.7 在 22.04 上默认源里没有得自己加源或下载安装包依赖问题比较烦。我的建议是如果纯粹为了复现这套环境直接 18.04 最省事如果服务器上已经有现成的 20.04那也问题不大后面我会写清楚怎么处理。2.2 版本选择的深层逻辑为什么是 MySQL 5.7 Jira 8.3.1 Confluence 6.15.7选这套组合前我翻了 Atlassian 官方的 Supported Platforms 文档这里要养成习惯装 Atlassian 全家桶之前先查这张表能避免 80% 的兼容性问题。对照结果Jira 8.3.1 官方支持的 MySQL 版本就是 5.7而不是 8.0。8.0 虽然在列表里但 JDBC 驱动连接时经常报时区、认证插件的问题5.7 稳得多。Confluence 6.15.7 对 MySQL 5.7 的支持同样成熟而且它和 Jira 8.x 是同一个时代的版本应用链接、用户目录共享这些跨系统集成功能兼容性最好。这两个 Atlassian 产品都需要 Java 环境Jira 8.3.1 要求 Java 8OpenJDK 1.8Confluence 6.15.7 同样基于 Java 8。这俩共用同一个 JDK省事。版本选型这件事说白了就是个“匹配游戏”。把 Java 版本、数据库版本、应用版本三条线对齐后面能少折腾好几天。我见过有人非要用 MySQL 8.0 配 Jira 7.x结果驱动报错、时区报错、字符集报错轮番上阵最后还得降级重来。3. MySQL 5.7.27 安装完整实录3.1 安装方式选择apt源 vs 离线包MySQL 5.7 在 Ubuntu 18.04 上有个坑默认 apt 源里没有。所以要么用 MySQL 官方 apt 仓库要么直接下载 deb 离线包。我建议用官方 apt 仓库因为后续的依赖关系系统会自动处理。# 下载官方仓库配置包 wget https://dev.mysql.com/get/mysql-apt-config_0.8.14-1_all.deb sudo dpkg -i mysql-apt-config_0.8.14-1_all.deb安装过程中会弹出蓝框配置界面让你选择 MySQL 版本。这里要注意默认选中的可能是 8.0必须手动选择 5.7。选择路径Configure → Server → mysql-5.7 → Ok。有一步会让你选 MySQL Server 的版本注意看光标位置不仔细看很容易直接回车选成 8.0后面麻烦就大了。然后更新仓库并安装sudo apt update sudo apt install mysql-server -y安装过程会提示设置 root 密码还有选择认证插件。注意这里建议选择 Using Legacy Authentication而不是 Strong Password Encryption。因为 Jira 和 Confluence 的 JDBC 驱动对后者支持不好连接时经常报 Unable to load authentication plugin caching_sha2_password。这个坑我踩过第一次装好后 Jira 怎么都连不上数据库查了半天日志才发现是认证插件不兼容。3.2 基础配置字符集、时区、权限装完后第一件事修改 MySQL 配置文件/etc/mysql/mysql.conf.d/mysqld.cnf加入以下内容[mysqld] character-set-server utf8mb4 collation-server utf8mb4_bin default-time-zone 8:00 max_allowed_packet 512M innodb_buffer_pool_size 1G transaction-isolation READ-COMMITTED逐行解释一下utf8mb4Jira 和 Confluence 的数据里可能有 emoji、特殊符号utf8 存不下必须 utf8mb4。而utf8mb4_bin排序规则是因为 Atlassian 官方文档要求的用默认的utf8mb4_general_ci在某些情况下会导致 Jira 索引创建失败。default-time-zone 8:00服务器时区如果不是 CSTJira 里显示的时间会和本地差 8 小时用户会一脸懵。max_allowed_packet 512MConfluence 上传大附件、导入备份时包大小超限会直接报错这个参数最好一开始就调大。innodb_buffer_pool_size 1G4G 内存的机器给 1G 是合理的保证 MySQL 的查询性能。transaction-isolation READ-COMMITTED这是 Atlassian 官方明确要求的如果你的 MySQL 默认是 REPEATABLE-READJira 运行时某些事务会出现死锁。改完配置重启 MySQLsudo systemctl restart mysql然后创建 Jira 和 Confluence 的数据库和用户。注意权限不要偷懒用 root 去连应用分开建用户以后排查问题会轻松很多。sudo mysql -uroot -pCREATE DATABASE jira CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; CREATE USER jiralocalhost IDENTIFIED BY Jira123456; GRANT ALL PRIVILEGES ON jira.* TO jiralocalhost; FLUSH PRIVILEGES; CREATE DATABASE confluence CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; CREATE USER confluencelocalhost IDENTIFIED BY Conf123456; GRANT ALL PRIVILEGES ON confluence.* TO confluencelocalhost; FLUSH PRIVILEGES;注意我这里写的是jiralocalhost因为应用和数据库在同一台机器上用 socket 连接最安全也最快。如果你把数据库单独部署了记得把 host 换成应用服务器的 IP防火墙也要放行 3306 端口。3.3 MySQL 驱动安装Jira/Confluence 连接数据库最关键的一步很多人在这一步栽跟头。Jira 8.3.1 自带的 MySQL 驱动是 5.1.x连接 5.7 没啥问题但有个性能相关的 bug最好换成官方推荐的 MySQL Connector/J 5.1.49 或 8.0.x。我这里用的是 5.1.49稳定优先。下载驱动并放到 Jira 的 lib 目录先下载好后面装 Jira 时直接放进去wget https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-java-5.1.49.tar.gz tar zxvf mysql-connector-java-5.1.49.tar.gz # 先放到一个临时目录后面 Jira 装完再拷贝 cp mysql-connector-java-5.1.49/mysql-connector-java-5.1.49.jar ~/Confluence 6.15.7 也一样需要把驱动放到/opt/atlassian/confluence/lib/。忘了放驱动的话配置数据库连接那一步会直接报 ClassNotFound 错误连测试连接的机会都没有。4. Jira 8.3.1 安装部署详记4.1 下载安装包与 Java 环境准备Jira 8.3.1 的安装包可以从 Atlassian 官方归档站下载。注意8.3.1 是 2019 年的版本官方下载页默认肯定不展示了要用归档地址wget https://product-downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-8.3.1-x64.bin这个 bin 文件是图形化安装向导服务器上没有图形界面的话用-console参数跑命令行安装。先装 Java 8sudo apt update sudo apt install openjdk-8-jdk -y java -version确认输出是 OpenJDK 1.8。如果系统里装了多个 Java 版本用update-alternatives --config java把默认版本切到 8。我当时机器上有个默认的 Java 11Jira 启动直接报 UnsupportedClassVersionError折腾了一会儿才反应过来是 Java 版本问题。4.2 控制台模式安装与初始化配置我用的命令是cd ~ chmod x atlassian-jira-software-8.3.1-x64.bin sudo ./atlassian-jira-software-8.3.1-x64.bin -console安装过程会问几个问题安装目录默认/opt/atlassian/jira我保持默认数据目录默认/var/atlassian/application-data/jira保持默认HTTP 端口默认 8080我改了 8081因为后面 Confluence 要用 8080避免冲突服务端口RMI 端口默认 8005保持默认这几个端口规划很重要。我当时规划的是Jira 用 8081Confluence 用 8080。如果都跑在同一台机器上端口号必须错开不然第二个装的时候端口被占启动直接失败。装完后先不启动因为要先把 MySQL 驱动放进去sudo cp ~/mysql-connector-java-5.1.49.jar /opt/atlassian/jira/lib/然后启动 Jirasudo /opt/atlassian/jira/bin/start-jira.sh首次启动大概需要 2-3 分钟可以用tail -f /opt/atlassian/jira/logs/catalina.out观察日志。看到 Server startup in xxx ms 就说明起来了。4.3 浏览器配置向导数据库连接与站点地址浏览器访问http://服务器IP:8081进入配置向导。这里有几个关键点数据库连接选择 “My own database”数据库类型选 MySQL。配置项如下HostnamelocalhostPort3306DatabasejiraUsernamejiraPasswordJira123456JDBC Drivercom.mysql.jdbc.DriverJDBC URLjdbc:mysql://localhost:3306/jira?useUnicodetruecharacterEncodingutf8useSSLfalsesessionVariablestransaction_isolationREAD-COMMITTEDURL 里我手动加了useSSLfalse和sessionVariablestransaction_isolationREAD-COMMITTED这一步很关键。useSSLfalse是避免 MySQL 8.0 驱动的 SSL 警告transaction_isolation是确保会话级的事务隔离级别符合 Atlassian 要求。点击 Test Connection正常情况下会显示连接成功。我当时第一次测试报错是因为认证插件没换回 Legacy后来重新配置 MySQL 用户后就好了。应用属性应用程序标题自定义比如 “XX科技研发管理”模式我选的 Private内部使用不需要注册基础 URLhttp://服务器IP:8081如果你有域名这里用域名后期改很麻烦涉及邮件通知里的链接一定要一次填对4.4 许可证申请与插件处理走到许可证这步如果你没有正版授权可以先申请 30 天试用版。点击 “Generate a Jira trial license”用 Atlassian 账号登录即可生成。这里纯粹是试用不是破解合法合规。下一步选择插件默认全选即可后续可以在插件管理里按需启用或禁用。如果机器配置一般建议把不用的插件禁用有些插件非常占内存。我当时就把一些用不到的 marketplace 插件都停了内存占用能少将近 1G。4.5 管理员账号创建与中文切换最后一步创建管理员账号。密码注意复杂度至少 8 位且包含字母和数字。填完邮箱后退出向导用刚创建的管理员登录。中文切换是个高频问题。Jira 8.3.1 安装后默认英文切换方法是管理员账号登录 → 右上角设置齿轮图标 → System → 左下角 Languages → Add Language 找到简体中文 → Add 后选择它作为默认语言界面立即变成中文不需要重启。如果你在切换语言时发现中文语言包下载失败是因为 Jira 需要访问 Atlassian 插件市场下载语言包如果服务器不能访问外网就得手动下载语言包 jar 文件放到/opt/atlassian/jira/atlassian-jira/WEB-INF/lib/下再重启 Jira。5. 邮箱服务器配置SMTP 全程踩坑5.1 为什么一定要配邮箱服务Jira 的邮件通知是刚需有人给你提了 Bug、任务分配到你头上、评论被回复……这些场景都要靠邮件提醒否则大家不会主动打开 Jira 看更新。另外密码找回、审批流程通知、报表订阅全都依赖邮件服务器配置。我这次配的是公司内部的 SMTP 服务也可以是 QQ 邮箱、163 邮箱的 SMTP逻辑完全相同我这里以通用 SMTP 为例。5.2 Jira 邮件配置完整步骤进入 Jira 管理后台设置 → System → Mail → 电子邮件。先配置 SMTP 服务器电子邮件格式HTML 或 Text建议 HTML通知内容可读性更好。协议SMTP服务器地址smtp.company.com按你的实际情况填服务器端口465 或 587取决于邮件服务商。465 对应 SSL587 对应 STARTTLS我用的是 465。发送方地址jiracompany.com用户名jiracompany.com密码邮箱密码或授权码注意如果你用 QQ 邮箱或 163 邮箱这里的密码不是登录密码而是邮箱设置里生成的“授权码”。我之前用登录密码配一直认证失败换了授权码秒通。然后配置通知方案设置 → System → 通知方案 → 默认通知方案 → 添加事件通知。建议把“问题创建”“问题分配”“问题已解决”“评论添加”这几类事件都勾上收件人选择“当前处理人”“报告人”“项目负责人”这样核心干系人收到邮件的覆盖率就比较全了。5.3 邮件发不出去的排查方法邮件配置提交流程后系统会发送一封测试邮件。我那次测试邮件等了两分钟没收到第一反应是看日志sudo tail -f /opt/atlassian/jira/logs/atlassian-jira.log日志里赫然写着ERROR [MailHandler] Exception sending mail: com.sun.mail.smtp.SMTPSendFailedException: 550 5.7.1 Client host rejected:这个是反垃圾邮件策略导致的。公司 SMTP 服务器把 Jira 所在的虚拟机 IP 当成了垃圾邮件来源拒绝投递。解决办法是把服务器 IP 加入邮件服务器的白名单或者用邮件服务商的“专用密码/授权码”来认证。另一种常见问题是 SSL 证书错误。如果 Jira 日志中出现SSLHandshakeException说明 SMTP 服务器的证书是自签名的Jira 的 JVM 不信任它。我之前的处理方式是把公司 SMTP 的 SSL 证书导入 Jira 的 Java 信任库。# 导出服务器证书用 openssl 连接并导出 openssl s_client -connect smtp.company.com:465 -showcerts /dev/null 2/dev/null | openssl x509 -outform PEM smtp.crt # 导入到 JVM 信任库 sudo keytool -import -alias smtp.company.com -keystore /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts -file smtp.crt执行过程中会提示输入密码默认是changeit。导完证书后重启 Jira再测就能发出去了。5.4 Confluence 的邮箱配置大同小异但有区别Confluence 里的邮箱配置在管理后台 → 常规配置 → 邮件服务器。添加 SMTP 服务器时填的内容和 Jira 基本一致但注意一个区别Confluence 在“发件人地址”之外还可以额外配置“回复地址”。如果留空收件人点击回复时邮件会发到 Jira 的 no-reply 邮箱容易造成“回复了但没人看”的假象。建议直接把回复地址也设为项目组的公共邮箱。Confluence 测试邮件时日志位置不同sudo tail -f /opt/atlassian/confluence/logs/atlassian-confluence.log我在 Confluence 上踩过另一个坑邮件模板中文乱码。翻了配置才发现是 Java 启动参数里没加-Dfile.encodingUTF-8在/opt/atlassian/confluence/bin/setenv.sh里的CATALINA_OPTS加上这行重启后解决。6. Confluence 6.15.7 安装与 Jira 集成6.1 安装过程与数据库连接Confluence 6.15.7 的安装包在归档站也能找到wget https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-6.15.7-x64.bin chmod x atlassian-confluence-6.15.7-x64.bin sudo ./atlassian-confluence-6.15.7-x64.bin -console端口规划上我在安装向导里把 HTTP 端口设成了 8080。其他保持默认。装完后同样先拷贝 JDBC 驱动sudo cp ~/mysql-connector-java-5.1.49.jar /opt/atlassian/confluence/lib/启动 Confluencesudo /opt/atlassian/confluence/bin/start-confluence.sh6.2 配置数据源时的坑isshowsignup 报错浏览器访问http://服务器IP:8080进入 Confluence 配置向导。一路点下来到“配置数据库”这里填数据库类型MySQL连接方式JDBC Connection StringJDBC URLjdbc:mysql://localhost:3306/confluence?useUnicodetruecharacterEncodingutf8useSSLfalsesessionVariablestransaction_isolationREAD-COMMITTED用户名confluence密码Conf123456测试连接正常通过。然后进入站点配置创建管理员账号。问题来了有同事在备份数据恢复时遇到了isshowsignup application cannot be null的报错。这个报错我在安装时没遇到是在恢复备份时遇到的。后来查了很久发现原因是恢复的是旧版本 Confluence 的备份文件里面的一些系统配置和新版本 schema 不一致导致用户目录初始化时找不到 application 字段。解决方法是先让 Confluence 完成一次全新的初始化创建管理员账号并登录成功再进后台“恢复备份”而不是在初始化向导阶段直接导入备份文件。也就是说初始化阶段必须走完让它自己建好完整的系统表和配置项然后再恢复数据就不会再报这个错了。如果已经报错了把数据库删掉重新创建再走一遍向导即可。6.3 验证码不显示的排查记录Confluence 登录页有验证码但配置完成后第一次访问验证码区域一片空白也不报错只是图片不显示。这个问题在 6.15.x 上比较典型原因是验证码图片生成依赖 JFreeChart 和字体服务器上缺少中文字体或字体配置不对图片渲染时抛异常被吞掉了。排查过程先看 Confluence 日志发现大量java.lang.NullPointerException at org.jfree.chart.title.TextTitle...确认是字体问题。解决办法安装字体库sudo apt install fontconfig -y fc-list :langzh如果没有任何中文字体就装一个sudo apt install fonts-wqy-microhei -y装完之后重启 Confluence验证码图片恢复正常。这个坑很隐蔽因为日志中报错信息不直接指向字体很容易被困在验证码插件本身。6.4 部署 Jira 与 Confluence 的应用链接两个系统都装好后把它们关联起来实现“Jira 里点问题编号直接跳转 Confluence 对应页面”的双向链接。在 Confluence 中管理后台 → 一般配置 → 应用链接 → 创建应用链接。输入 Jira 地址http://服务器IP:8081点继续。如果出现“服务器返回响应异常”之类的提示不用管直接在下一步里把两个应用的 URL 都填上并使用默认的信任配置。配置完成后在 Jira 的问题页面上会多出一个“Confluence”面板在 Confluence 的页面上也可以嵌入 Jira 的过滤器宏直接在文档里展示未完成任务列表。6.5 Confluence 备份恢复时报错完整解决过程还原这个问题值得单独拎出来写因为太典型了。同事把生产环境的 Confluence 备份传过来我在测试环境恢复点了“恢复备份”按钮进度条走了一小段就弹红isshowsignup application cannot be null。按我 6.2 里说的思路我已经把全新初始化走完了但还是报错。于是深入看日志发现是备份包里的user_mapping表结构和当前版本 schema 不一致。原环境是从旧版本4.x 或 5.x一路升级上来的备份数据带了历史遗留字段而 6.15.7 的建表脚本里没有这个字段所以 UPDATE 语句报错。当时我尝试了两个方向一是手工改备份 XML 里的字段删掉报错那部分配置但备份文件几百 MB直接改 XML 太危险放弃了二是换个思路用原环境的旧版 Confluence 先恢复再通过升级方式迁移。最后我用了这个方案找了一台干净机器装一个 Confluence 6.15.7 的早期版本比如 6.15.0完成初始化后恢复备份成功后再上传 6.15.7 的安装包原地升级。升级过程比较顺利数据完整保留问题解决。如果你的备份包里涉及用户目录是 Jira 托管的即 Confluence 使用 Jira 用户目录那isshowsignup报错还可能是应用链接的 App ID 配置对不上。这时需要检查/data/confluence/database前缀下的数据库表app_user、bucket等是否为空如果为空手动刷新用户目录缓存即可。7. 常见启动失败与安装问题速查整理这篇的过程中把我在两台 Ubuntu 机器上反复安装时遇到的问题按频率排了个序做成了速查表覆盖安装全流程中最高频的报错和解决方案。问题现象根本原因解决方式Jira 连接 MySQL 报Unable to load authentication pluginMySQL 用户用了 caching_sha2_password 认证插件在 MySQL 里执行ALTER USER jiralocalhost IDENTIFIED WITH mysql_native_password BY 密码;Jira 启动页面访问 403 或空白Java 版本不对或内存不足确认 Java 是 1.8检查catalina.out内存参数必要时调大堆内存Confluence 验证码空白服务器缺中文字体JFreeChart 渲染失败安装 fonts-wqy-microhei 后重启 Confluence邮件发送报 550 被拒SMTP 服务器反垃圾策略拦截把服务器 IP 加白名单或改用授权码认证Ubuntu 22.04 上装 MySQL 5.7 找不到包官方源不支持 22.04改用mysql-apt-config指定 5.7 源或用 bionic 源手动安装Jira 页面很慢内存分配不足修改/opt/atlassian/jira/bin/setenv.sh中JVM_MINIMUM_MEMORY和JVM_MAXIMUM_MEMORY为 1G/2GJira 登录页一直跳转secure死循环配置了基础 URL 但请求访问用 IP把浏览器访问的地址和基础 URL 保持一致或用域名访问Confluence 导入备份时提示版本不兼容备份文件版本过高或过低先装与备份版本相近的 Confluence恢复后再升级8. 最后再分享几个实操中特别有用的细节安装包的路径统一管理。我习惯把下载的安装包、依赖包都放在/opt/software下按date %Y%m%d建子目录。以后要补装或重装不用翻历史记录直接去对应目录找省时间。日志是排错的第一现场。Jira 和 Confluence 的日志路径分别是/opt/atlassian/jira/logs/和/opt/atlassian/confluence/logs/。遇到任何异常先打开catalina.out或atlassian-jira.log搜索 ERROR不要瞎猜。Jira/Confluence 服务启停脚本先记牢。所有配置改动后不一定都要重启但改了 Java 参数、lib 目录内容、MySQL 驱动必须重启。我已经习惯了任何改动后顺手重启一次避免出现 “我明明改了怎么没生效” 的局面。数据库备份策略要提前想。Jira 数据在 MySQL 里Confluence 的内容也在 MySQL 里所以数据库备份就是核心。我写了个简单 crontab每天凌晨 2 点执行mysqldump导出全库保留七天。知识库的内容和附件可以单独备份/var/atlassian/application-data/confluence整个目录。0 2 * * * /usr/bin/mysqldump -uroot -p密码 --all-databases /backup/mysql_backup_$(date %Y%m%d).sql备份文件别和系统放同一个磁盘。给虚拟机挂了一块额外的数据盘专门放备份。这也是我这次的教训之一之前备份写到了系统盘结果系统盘满了导致服务直接挂掉那叫一个尴尬。这套环境现在已经稳定跑了两年多除了偶尔的重启和升级没出过大的问题。如果你也在摸索 Atlassian 全家桶的部署希望你在我踩过的坑上面直接把路走平。