Jira介绍
shell
Jira 是由 Atlassian 公司开发的一款全球广泛使用的 项目与问题跟踪管理工具,最初专为软件开发团队设计
现已扩展至各类团队(如 IT、运营、市场、产品等)用于任务管理、敏捷开发和工作流自动化。
一、Jira 的核心功能
1. 问题(Issue)跟踪
2. 敏捷开发支持(Scrum & Kanban)
3. 高度可定制的工作流(Workflow)
4. 强大的权限与角色控制
5. 丰富的集成生态
6. 报告与仪表盘(Dashboard)
二、Jira 的主要产品线
------------------------------------------------------------------------------------------
产品 | 适用场景
------------------------------------------------------------------------------------------
Jira Software | 软件开发团队(敏捷/DevOps) 最常用
------------------------------------------------------------------------------------------
Jira Service Management (JSM) | IT 服务台、客户支持(类似工单系统)
------------------------------------------------------------------------------------------
Jira Work Management | 非技术团队(市场、HR、法务等)的任务协作
------------------------------------------------------------------------------------------
Jira Core | 通用项目管理(已逐步整合到其他产品中)
------------------------------------------------------------------------------------------
Bug 跟踪:测试人员提交 Bug,开发修复,QA 验证闭环
迭代管理:规划 Sprint,分配 Story,每日站会同步进度。
CI/CD集成:提交代码时关联Jira Issue ,自动更新状态
跨部门合作:产品提需求,开发拆任务,设计跟进UI,它不仅仅是提bug的地方,更是现代软件团队实现透明化、可追溯、高效交付的核心工具
安装Jira
使用docker安装(方便快捷。企业里也可以使用docker安装)
如果没有安装docker的,可以看 清华大学开源镜像站安装docker-ce
- 安装版本: 7.12.0 (因为是pj版的,所以使用的是7.x的版本哈,功能上完全是足够的,放心食用)
- pj的文件jar包和数据库的jar包如链接:github个人仓库链接

1.构建自己的镜像
我们需要通过原本的镜像文件,去构建新的镜像,目的是为了将pj的jar包构建进去
记得提前将jar包上传到服务器上,随便哪个目录都行,例如/opt/jira下,然后创建Dockefile文件
构建dockerfile文件
dockerfile
vim Dockerfile
FROM cptactionhank/atlassian-jira-software:7.12.0
LABEL maintainer=hustcsxg@163.com
USER root
COPY atlassian-agent.jar /opt/atlassian/jira/
RUN echo 'export CATALINA_OPTS="-javaagent:/opt/atlassian/jira/atlassian-agent.jar ${CATALINA_OPTS}"' >> /opt/atlassian/jira/bin/setenv.sh
将Dockerfile文件和pj文件jar包放在同一目录下,然后执行
shell
docker build -t test/jira-software:7.12.0 .
名字随便起,不一定叫test , 然后 最后有个顿点 '.' ,记得别忘了
2.部署Jira
shell
1. 创建对应目录
sudo mkdir -p /data/docker-compose/jira/{jira-mysql,jira-web} # 创建存放jira的目录,mysql是数据库存放数据位置,web是jira存放数据位置
sudo touch /data/docker-compose/jira/docker-compose.yaml # 创建compose文件
sudo touch /data/docker-compose/jira/.env # 创建密码文件
sudo mkdir /data/docker-compose/jira/jira-mysql/{data,conf.d} # 创建mysql配置文件目录和数据持久化目录
sudo touch /data/docker-compose/jira/jira-mysql/conf.d/my.cnf # 创建mysql的配置文件
sudo chown -R user:user /data/ # 将拥有者设置为当前用户,我的是user,你的不一定是user,或者其他专门管理jira的用户,都行。
sudo chmod 600 /data/docker-compose/jira/.env # 设置.env的权限
shell
2.编写compose文件内容,内容如下
services:
jira:
image: test/jira-software:7.12.0
container_name: jira-web
restart: unless-stopped
ports:
- "8080:8080"
- "8082:8082"
volumes:
- ./jira-web/data:/var/atlassian/jira
- ./jira-web/mysql-connector-java-5.1.49.jar:/opt/atlassian/jira/atlassian-jira/WEB-INF/lib/mysql-connector-java.jar
- ./jira-web/jira/conf:/opt/atlassian/jira/conf
- ./jira-web/jira/bin:/opt/atlassian/jira/bin
depends_on:
- mysql
networks:
- jira-net
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "3"
mysql:
image: mysql:5.7.44
container_name: jira-mysql
restart: unless-stopped
#ports: # 生产环境禁止外联DB
#- "3306":"3306"
volumes:
- ./jira-mysql/data:/var/lib/mysql
- ./jira-mysql/conf.d:/etc/mysql/conf.d
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: jiradb
MYSQL_USER: jirauser
MYSQL_PASSWORD: ${MYSQL_JIRA_PASSWORD}
healthcheck:
test: ["CMD","mysqladmin","ping","-h","localhost","-u","root","--password=${MYSQL_ROOT_PASSWORD}"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- jira-net
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "3"
networks:
jira-net:
driver: bridge
internal: false # 允许jira对外提供服务,但是DB不暴露
shell
3.写入密码文件,密码自定义即可
vim /data/docker-compose/jira/.env
MYSQL_ROOT_PASSWORD=********
MYSQL_JIRA_PASSWORD=********
shell
4.定义mysql启动参数,写入my.cnf文件
vim data/docker-compose/jira/jira-mysql/conf.d/my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin
max_allowed_packet=256M
default-authentication-plugin=mysql_native_password
shell
5.启动jira
docker compose up -d
然后浏览器访问http://ip:8080 即可
3.网页设置和PJ Jira
3.1 选第二个,下一步

3.2数据库设置
Hostname填写mysql(我们并未将mysql映射到宿主机上,所以是容器间通信,直接写服务名即可),然后点击测试链接,测试通过即可
Database是compose文件里定义的
Username是compose文件里定义的
Password是.env文件里定义的

3.3 然后继续下一步即可
3.4 生成license码
方法如下:
记住页面中的Server ID: xxxx-xxxx-xxxx-xxxx
然后去到服务器上,进入jira容器
docker exec -it jira-web /bin/bash
执行如下命令
java -jar /opt/atlassian/jira/atlassian-agent.jar -d -p jira -m 【邮箱】 -n 【名称】 -o [组织名称] -s 【ServerID】

会生成密钥,如下图,复制粘贴到页面的框里即可

然后通过验证后,继续下一步,下一步,即可。
4.性能优化
jira非常建议做性能优化,说白了就是增大默认的jvm内存,不然会非常卡
shell
#1.进入容器
docker exec -it jira-web /bin/bash
vi /opt/atlassian/jira/bin/setenv.sh
#修改其中的jvm参数,提升性能
JVM_MINIMUM_MEMORY="2048m"
JVM_MAXIMUM_MEMORY="4096m"
# 保存退出,修改后重启jira-web容器
docker restart jira-web
5.Jira nginx for https
用Nginx反向代理jira,并添加自定义生成的HTTPS证书,使用域名访问
这里的域名我设置为 jira.ztf.com ,可以在本地hosts文件里暂时先添加一条配置,便于用域名访问,
jira.ztf.com 192.168.192.12
shell
#1.安装nginx
sudo apt install nginx -y
# 2.生成自定义的SSL证书
mkdir -p /etc/nginx/ssl
cd /etc/nginx/ssl
# 生成无密码的 RSA 私钥
sudo openssl genrsa -out jira.key 2048
# 生成证书请求(CSR)
sudo openssl req -new -key jira.key -out jira.csr
# 自签名证书(有效期 365 天)
sudo openssl x509 -req -days 365 -in jira.csr -signkey jira.key -out jira.crt
shell
# 3.创建nginx反向代理配置
sudo vim /etc/nginx/sites-available/jira
# 这里完全参照官方给的配置反向代理的模板进行配置的。
# HTTP重定向到HTTPS
server {
listen 80;
server_name jira.ztf.com;
return 301 https://$server_name$request_uri;
}
# HTTPS配置
server {
listen 443 ssl http2;
server_name jira.ztf.com;
# SSL证书
ssl_certificate /etc/nginx/ssl/jira.crt;
ssl_certificate_key /etc/nginx/ssl/jira.key;
# SSL安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
# 现代SSL配置
ssl_stapling on;
ssl_stapling_verify on;
# 设置HSTS头(可选)
add_header Strict-Transport-Security "max-age=63072000" always;
# 客户端请求体大小限制
client_max_body_size 100M;
# 访问日志
access_log /var/log/nginx/jira.access.log;
error_log /var/log/nginx/jira.error.log;
# 反向代理配置
location / {
proxy_pass http://192.168.192.12:8080;
# 必须的头信息
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
# 重要:确保Tomcat能识别HTTPS
proxy_set_header X-Forwarded-Ssl on;
# 连接超时设置
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
# WebSocket支持
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
# 禁用缓存
proxy_buffering off;
proxy_request_buffering off;
# 确保传递原始请求URI
proxy_pass_request_headers on;
proxy_pass_request_body on;
}
}
server_name 使用的域名(如果只是本地测试,可以写成 jira.local 或 IP 地址)。
你需要修改的点:
1.server_name:需要改为你自己的域名,或者IP地址。(建议用域名)
2.proxy_pass:写成IP:端口的形式。
3.确保SSL证书的路径位置正确即可。
shell
#4.启用站点并重启 Nginx
sudo ln -s /etc/nginx/sites-available/jira /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
shell
#5.配置 Jira 信任 HTTPS
Jira 默认不信任来自反向代理的 HTTPS 请求,需要修改 Jira 内部的Tomcat的配置文件
# 5.1备份原有的server.xml文件。
cd /data/docker-compose/jira/jira-web/jira/conf
mv server.xml server.xml.bak
# 5.2写入新的server.xml文件内容
vim /data/docker-compose/jira/jira-web/jira/conf/server.xml # 在compose配置里我持久化了这个conf目录
######################################################################################################
<?xml version="1.0" encoding="utf-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<!-- 连接器1:用于HTTPS代理(端口8080) -->
<Connector port="8080"
maxThreads="150"
minSpareThreads="25"
maxSpareThreads="75"
connectionTimeout="20000"
enableLookups="false"
maxHttpHeaderSize="8192"
protocol="HTTP/1.1"
useBodyEncodingForURI="true"
redirectPort="8443"
acceptCount="100"
disableUploadTimeout="true"
proxyName="jira.ztf.com"
proxyPort="443"
scheme="https"/>
<!-- 连接器2:用于直接IP访问(端口8082),IP访问为了内部排查问题。 -->
<Connector port="8082"
relaxedPathChars="[]|"
relaxedQueryChars="[]|{}^\`"<>"
maxThreads="150"
minSpareThreads="25"
connectionTimeout="20000"
enableLookups="false"
maxHttpHeaderSize="8192"
protocol="HTTP/1.1"
useBodyEncodingForURI="true"
redirectPort="8443"
acceptCount="100"
disableUploadTimeout="true"/>
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="${catalina.home}/atlassian-jira" reloadable="false" useHttpOnly="true">
<Resource name="UserTransaction" auth="Container" type="javax.transaction.UserTransaction"
factory="org.objectweb.jotm.UserTransactionFactory" jotm.timeout="60"/>
<Manager pathname=""/>
<JarScanner scanManifest="false"/>
</Context>
</Host>
<Valve className="org.apache.catalina.valves.AccessLogValve"
pattern="%a %{jira.request.id}r %{jira.request.username}r %t "%m %U%q %H" %s %b %D "%{Referer}i" "%{User-Agent}i" "%{jira.request.assession.id}r""/>
</Engine>
</Service>
</Server>
###############################################################################
上述的server.xml里,需要注意的是:
proxyName="jira.ztf.com"
proxyPort="443"
scheme="https"
#5.3 重启容器
docker restart jira-web
shell
#6. Jira页面修改基本的URL地址。
先通过192.168.192.12:8082 访问Jira,并登录
进入后,点右上角【齿轮】-->【系统】--【一般配置】--> 【基本URL】,改为https://jira.ztf.com即可,如下图。

然后再使用域名访问,如果页面无异常报错,那证明成功了。如图
