导读:本期聚焦于椎名光创作的《如何使用 Docker 容器化部署 Jira 与 Confluence?完整实践指南》,敬请观看详情。Jira 和 Confluence 想要迁移到 Docker 环境中运行,数据库该怎么配置,数据卷如何规划,容器之间如何联动,这些都是部署过程中最容易踩坑的环节。本文围绕容器化部署 Atlassian 全家展开,从镜像选择、docker-compose 编排、PostgreSQL 数据库对接,一直到反向代理配置、SSL 证书处理、数据备份与恢复策略,给出完整可落地的操作步骤。同时分析了官方镜像与社区镜像的差异、内存参数调优方法以及升级时的注意事项,帮助你在生产环境中稳定运行容器化的 Jira 与 Confluence。

把 Jira 和 Confluence 从传统虚拟机迁移到 Docker 容器中运行,是不少团队在做 DevOps 标准化时的常见选择。容器化之后,环境一致性、升级回滚、批量部署都会变得简单许多。不过 Atlassian 的这两款产品对内存、数据库连接和反向代理都有一定要求,直接照搬普通 Web 应用的部署方式很容易翻车。本文结合实际生产经验,从镜像选择到数据持久化,再到反向代理与备份,完整梳理容器化部署的关键步骤。

如何使用 Docker 容器化部署 Jira 与 Confluence?完整实践指南

一、镜像选择与部署前的准备工作

部署 Jira 与 Confluence 时,镜像的选择直接影响后续维护成本。官方渠道有两个方向:一个是 Atlassian 官方发布的 atlassian/jira-software、atlassian/confluence 镜像(托管在 Docker Hub 和 Atlassian 自己的容器仓库),另一个是社区维护的 atlassian-data-center 系列镜像。官方镜像的更新最及时,安全性有保障,生产环境优先选官方版本。

镜像选择之外,部署前还要确认两件事:数据库和内存规划。Jira 和 Confluence 官方推荐使用外部数据库,PostgreSQL 是兼容性最好的选择之一,MySQL 和 Oracle 也可以,但 H2 内置数据库只适合试用,正式环境绝对不要用,否则后续迁移数据会非常痛苦。内存方面,Jira Software 一般建议堆内存 2GB 以上,Confluence 建议 1.5GB 以上,宿主机至少准备 8GB 内存才能保证两个应用加数据库流畅运行。

下面是一个基础的环境变量配置示例,通过环境变量可以直接设置 JVM 堆内存和反向代理参数,避免进入容器手动修改:

docker run -d --name jira \
  -p 8080:8080 \
  -v jira-data:/var/atlassian/application-data/jira \
  -e JVM_MINIMUM_MEMORY=1g \
  -e JVM_MAXIMUM_MEMORY=2g \
  atlassian/jira-software:latest

注意 -v jira-data:/var/atlassian/application-data/jira 这一行,数据目录必须挂载出来。Jira 的附件、索引、配置文件全部存放在这个目录下,如果不做持久化,容器删除后所有数据都会丢失,这是容器化部署中最致命的一个坑。

二、使用 docker-compose 编排完整环境

单独用 docker run 启动容器管理起来很混乱,实际部署推荐用 docker-compose 把 PostgreSQL、Jira、Confluence 统一编排。compose 的好处是服务依赖关系明确,网络互通,一条命令即可拉起整套环境。

下面是一份经过验证的编排文件,包含了数据库、Jira 和 Confluence 三个服务,并配置了健康检查和固定的容器网络:

version: "3.8"

services:
  postgresql:
    image: postgres:15
    container_name: atlassian-db
    environment:
      POSTGRES_USER: atlassian
      POSTGRES_PASSWORD: your_secure_password
      POSTGRES_DB: postgres
    volumes:
      - pg-data:/var/lib/postgresql/data
    restart: unless-stopped

  jira:
    image: atlassian/jira-software:latest
    container_name: jira
    depends_on:
      - postgresql
    environment:
      ATL_JDBC_URL: jdbc:postgresql://postgresql:5432/jiradb
      ATL_JDBC_USER: jira
      ATL_JDBC_PASSWORD: jira_password
      ATL_DB_TYPE: postgres72
      JVM_MINIMUM_MEMORY: 1g
      JVM_MAXIMUM_MEMORY: 2g
    volumes:
      - jira-data:/var/atlassian/application-data/jira
    ports:
      - "8080:8080"
    restart: unless-stopped

  confluence:
    image: atlassian/confluence:latest
    container_name: confluence
    depends_on:
      - postgresql
    environment:
      ATL_JDBC_URL: jdbc:postgresql://postgresql:5432/confluencedb
      ATL_JDBC_USER: confluence
      ATL_JDBC_PASSWORD: confluence_password
      ATL_DB_TYPE: postgresql
      JVM_MINIMUM_MEMORY: 1g
      JVM_MAXIMUM_MEMORY: 2g
    volumes:
      - confluence-data:/var/atlassian/application-data/confluence
    ports:
      - "8090:8090"
    restart: unless-stopped

volumes:
  pg-data:
  jira-data:
  confluence-data:

这份配置里有一个容易被忽略的细节:Jira 和 Confluence 需要各自独立的数据库和数据库账号。需要在 PostgreSQL 初始化后手动创建 jiradb 和 confluencedb,并分别为它们创建授权用户。可以通过进入数据库容器执行 SQL 完成:

-- 创建 Jira 数据库与账号
CREATE DATABASE jiradb WITH ENCODING 'UNICODE' LC_COLLATE 'C' LC_CTYPE 'C' TEMPLATE template0;
CREATE USER jira WITH PASSWORD 'jira_password';
GRANT ALL PRIVILEGES ON DATABASE jiradb TO jira;

-- 创建 Confluence 数据库与账号
CREATE DATABASE confluencedb WITH ENCODING 'UNICODE' LC_COLLATE 'C' LC_CTYPE 'C' TEMPLATE template0;
CREATE USER confluence WITH PASSWORD 'confluence_password';
GRANT ALL PRIVILEGES ON DATABASE confluencedb TO confluence;

执行完成后,通过 docker compose up -d 启动整套服务,浏览器访问宿主机的 8080 端口即可进入 Jira 的安装向导,8090 端口对应 Confluence。安装向导中选择手动配置数据库,填入 compose 文件中的连接信息即可完成初始化。

三、反向代理与 HTTPS 配置

生产环境几乎不可能让用户直接通过 IP 加端口访问,通常前面会挂一层 Nginx 做反向代理并终结 SSL。这里的关键点是告知 Jira 和 Confluence 它们运行在代理之后,否则会出现回调地址错误、附件下载异常、登录后跳转错误等问题。

Atlassian 官方镜像提供了专门的环境变量来处理代理场景,核心配置如下:

environment:
  ATL_PROXY_NAME: wiki.example-domain.com
  ATL_PROXY_PORT: 443
  ATL_TOMCAT_SCHEME: https
  ATL_TOMCAT_SECURE: "true"

Nginx 侧的配置同样重要,需要正确传递 Host 头和真实客户端 IP,同时处理 WebSocket 连接,Confluence 在线编辑功能依赖 WebSocket:

server {
    listen 443 ssl;
    server_name wiki.example-domain.com;

    ssl_certificate     /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    location / {
        proxy_pass http://confluence:8090;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # WebSocket 支持
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        client_max_body_size 200m;
    }
}

其中 client_max_body_size 200m 不要遗漏,Confluence 上传大附件、Jira 导入备份文件时,默认的 1MB 限制会直接报 413 错误,很多人排查半天发现是 Nginx 拦截了请求。

四、数据备份、恢复与版本升级

容器化之后备份策略反而更清晰了。Jira 和 Confluence 的完整备份包含两部分:数据卷目录(附件、配置、索引)和数据库内容。只备份数据库是不够的,附件全部存在数据卷里,丢了这个目录等于丢了所有上传的文件。

一个简单可靠的方案是定时备份数据卷加数据库导出,示例脚本如下:

#!/bin/bash
BACKUP_DIR=/backup/atlassian/$(date +%Y%m%d)
mkdir -p $BACKUP_DIR

# 备份数据库
docker exec atlassian-db pg_dump -U atlassian jiradb > $BACKUP_DIR/jiradb.sql
docker exec atlassian-db pg_dump -U atlassian confluencedb > $BACKUP_DIR/confluencedb.sql

# 备份数据卷
docker run --rm \
  -v jira-data:/data:ro \
  -v $BACKUP_DIR:/backup \
  alpine tar czf /backup/jira-data.tar.gz -C /data .

docker run --rm \
  -v confluence-data:/data:ro \
  -v $BACKUP_DIR:/backup \
  alpine tar czf /backup/confluence-data.tar.gz -C /data .

升级版本时要遵守固定流程:先完整备份,再修改 compose 文件中的镜像版本号,然后重建容器。注意不要用 latest 标签在生产环境,跨大版本升级需要逐步进行,例如从 8.x 升到 9.x 之前,先查看官方的升级说明,确认插件兼容性。升级后首次启动会比较慢,因为需要重建索引和执行数据库迁移脚本,耐心等待启动完成,不要中途强制重启容器。

总体来看,容器化 Jira 与 Confluence 的核心就三点:数据卷必须持久化、数据库必须外置且独立、代理参数必须配对。把这三件事处理好,剩下的镜像版本调整、扩容内存都只是修改配置文件的工作。配合 docker-compose 和定时备份脚本,整套环境可以长期稳定运行,升级回滚也只需要几分钟时间。

Jira容器化部署Docker部署ConfluenceAtlassian运维修改时间:2026-09-16 19:42:49

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/0916/58147.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。