Jira部署安装教程

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="[]|{}^&#x5c;&#x60;&quot;&lt;&gt;"
                   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 &quot;%m %U%q %H&quot; %s %b %D &quot;%{Referer}i&quot; &quot;%{User-Agent}i&quot; &quot;%{jira.request.assession.id}r&quot;"/>
        </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即可,如下图。

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

相关推荐
不过如此19512 天前
Jira系统中JQL语句的介绍
python·sql·jira
不过如此19512 天前
Python操作Jira实现不同项目之间的Issue同步
python·jira·issue
Dontla13 天前
Jira工具介绍(项目管理工具)
jira
龙智DevSecOps解决方案13 天前
研讨会回顾|Atlassian Cloud + Rovo AI 实战指南:Jira + Confluence + Bitbucket集成演示、龙智云迁移服务
人工智能·atlassian·devops·jira·rovo
跟YY哥学Jira18 天前
2026 Atlassian 认证体系重大变革:全面拥抱云时代与 AI 战略
人工智能·经验分享·项目管理·atlassian·认证·jira
johnny23318 天前
开源Jira替代品:
jira
qq 1808095120 天前
光伏逆变器系统架构图](https://fakeimg.pl/600x400/00ff00/000/?text=PV+Inverter+Block
jira
一叶轻舟随风行22 天前
kanass全面介绍(12) - 如何自定义事项类型,满足个性化需求
jira·禅道·开源项目管理工具
mylinke23 天前
NGO - XGBoost回归:新手友好的数据回归预测
jira