Docker compose 部署 Confluence 和 Jira

环境信息

  • Docker 26.1.1
  • Confluence Image: haxqer/confluence:9.0.2
  • Jira Image: atlassian/jira-software:9.12.11
  • postgresql 13

配置流程

创建项目所需新目录,用于存储持久化数据

# mkdir -p /opt/devops/{confluence,jira,postgresql}

下载 atlassian-agent.jar 文件,将其分别放置在 ./confluence/atlassian-agent.jar./jira/atlassian-agent.jar ,用于之后为 Confluence 和 Jira 生成 License

docker-compose.yaml 文件内容如下

docker-compose.yaml
vservices:
# --- 数据库服务 ---
postgres-db:
image: postgres:13
container_name: devops-postgres-db
volumes:
- ./postgresql:/var/lib/postgresql/data
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=<PG_PASSWORD>
- POSTGRES_DB=confluence
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
interval: 10s
timeout: 5s
retries: 5
networks:
- devops-net


# --- Confluence ---
confluence:
image: haxqer/confluence:9.0.2
container_name: confluence
depends_on:
postgres-db:
condition: service_healthy
ports:
- "8090:8090"
- "8091:8091"
environment:
- ATL_JDBC_USER=postgres
- ATL_JDBC_PASSWORD=<PG_PASSWORD>
- ATL_JDBC_URL=jdbc:postgresql://postgres-db:5432/confluence
- ATL_DB_TYPE=postgresql
- JVM_MINIMUM_MEMORY=2048m
- JVM_MAXIMUM_MEMORY=4096m
- TZ='Asia/Shanghai'
volumes:
- ./confluence:/var/confluence
networks:
- devops-net

# --- Jira ---
jira:
image: atlassian/jira-software:9.12.11
container_name: jira
depends_on:
postgres-db:
condition: service_healthy
ports:
- "8080:8080" # Jira 默认端口
environment:
- ATL_JDBC_USER=postgres
- ATL_JDBC_PASSWORD=<PG_PASSWORD>
- ATL_JDBC_URL=jdbc:postgresql://postgres-db:5432/jira # 注意这里是指向新创建的 jira 库
- ATL_DB_TYPE=postgresql
- JVM_MINIMUM_MEMORY=2048m
- JVM_MAXIMUM_MEMORY=4096m
- TZ='Asia/Shanghai'
- JVM_SUPPORT_RECOMMENDED_ARGS=-javaagent:/var/atlassian/application-data/jira/atlassian-agent.jar
volumes:
- ./jira:/var/atlassian/application-data/jira
networks:
- devops-net

networks:
devops-net:
driver: bridge

启动容器

# docker compose up -d

postgres 数据库启动正常后,执行以下命令为 Jira 创建数据库,Confluece 数据库在容器启动是会自动创建。

docker compose exec -it postgres-db psql -U postgres -c "CREATE DATABASE jira WITH ENCODING='UTF8' LC_COLLATE='en_US.utf8' LC_CTYPE='en_US.utf8' CONNECTION LIMIT=-1;"

Confluence 初始化部署

浏览器访问 http://<IP>:8090 在 Confluence 初始化页面拿到 Server ID

登录 Confluence 容器,执行以下命令获取破解得 License

# docker compose exec -it confluence bash
root@81d2f5a8f7e5:/opt/confluence# java -jar /var/agent/atlassian-agent.jar -d -p conf -m Hello@world.com -n Hello@world.com -o your-org -s B66H-ET1W-2LYR-Q7R2

====================================================
======= Atlassian Crack Agent v1.3.1 =======
======= https://zhile.io =======
======= QQ Group: 30347511 =======
====================================================

Your license code(Don't copy this line!!!):

AAABmA0ODAoPeJxtUVuPojAUfu+vINlnFKoLaNJkHWBWZwEZxbk8FjxII7akFBz21y8ik00mk/Sl5
7Tf9UdSNNoT5RrGmuEsZ3g5m2u/w0TDBraQK4EqJrhHFZDbRDdMHWPkt7Rshg3JaVkD8qDOJKuGy
YGX7MIUHLWSZcBr0NJOK5Sq6uV0+rdgJUyYQFt5opzVd5BONFIX8oQywfMJzRRrgSjZAHIFV/3dD
ykryRrKUvy6ClkeJ5m4oBF/TeuChO7VfXxczdPjayzCPG9e/NxN8dP845x4cbxeFc/VWwPTFrfRG
zarNGni0+HP+WotwmhFyJ16r6hUIEdXwyi4kyRdBRG9AHG3Yejv3M0qQL0oroBTnoH/UTHZjTk5C
92w+4PGvxuPBBtv70d6YNrWwrAN++fcdhy0B9mC7NcPlrXW/cR81XHwvtOf7R2+s/eI1AV+0zTkc
YbuBWR9C820jB7Jmc3MT57vRcSNzApaw9cSx/Q+4TDaN+n/Fge2QULUXFKQ2/xQ9y+JbqLeCPnGz
FjVENKXpv4BHKbJjjAtAhRlC24D9XOs3Z9LZwzE3PehVo5lhgIVAIaOykfNKCdhuAZn7PZsJR+qr
edbX02jn

命令参数说明:

-d 调试模式 必选,用于输出生成的许可证信息。

-m 电子邮箱 随便填 ,如 devops@example.com

-n 用户名 随便填 ,如 Organization_Admin。

-p 产品标识 不可乱填 。Confluence 是 conf ,Jira 是 jira ,Bitbucket 是 bitbucket

-o 组织/URL 建议填你的访问地址,如 https://wiki.mysite.com

-s Server ID 核心参数。必须填 Web 页面上显示的那个 16 位代码

License 验证成功后,填写数据库连接信息并测试连接成功

Jira 初始化部署

浏览器访问 http://<IP>:8080 打开 Jira 初始化页面,在 Jira setup 中选择 I'll set it up myself 。因为后面要指定数据库信息,因此要选择自定义。

根据提示填入数据库连接信息,测试无误后,到 Specify your license key 页面,复制 Server ID

登入 jira 容器,使用以下命令为 Jira 生成 License

root@69487899ebea:/var/atlassian/application-data/jira# java -jar /var/atlassian/application-data/jira/atlassian-agent.jar -d -p jira -m Hello@world.com -n Hello@world.com  -o your-org -s BYTU-X57R-U6U3-LSIB

====================================================
======= Atlassian Crack Agent v1.3.1 =======
======= https://zhile.io =======
======= QQ Group: 30347511 =======
====================================================

Your license code(Don't copy this line!!!):

AAAB5Q0ODAoPeJyNU9GSmjAUfecrmOkzboKuqDOZ6YpYmQW0onb7GPEK2SKhSdDFry8K2+6q43QmL
8ncc+455958+QEbfQxrHWMddQcmGpgd/Zu/0E1kdrVYAGQJz3MQLY9FkElYlDkEdAfEnvq+M7fdJ
0+zBVDFeDaiCsgJaCDTwFi7AxmBjATLTyiyzFK2Y6oSktYAfV3qiVK5HDw8HBOWQotxzacsU5DRL
ALnLWeibLr1+gayqqO9MkHfVTobVlMHnuu7C2ekBcVuDWK6XUoQkhh/xd3hygXfFJFqnS6G5Ft1o
AJaV0R3ammk2B6IEgV8yvLj+x14pYraULkWdWkTz6pqfDJnamGx/hfjucTZ07Q4D4NsaSob+kuiq
YhpxmRdV/JCGFzEms0zVSlzqqRTMoE05V8PXKSbVsR3Nc+V90bRhMqE+PbBHk/i+W8c8mdIO8fiu
UBHvJj23KHnhqun5DvDc0f1VsfZMB6/vqDH/jHocJaUMxQTUrf4z2hCRcXJTm2ymaU7Ip47Cp3A8
LBlIauPeman38GfVuPWNoYg9iAq+PDnYmm8PFpzY9ldtg0vdIfaLyjfE8ddhCzUa7fxra9xvXSzQ
kQJlXD5MT6Cz2PJBZON6Uo+uWGhGc5Z+cVs/gCvg0phMC0CFBCTfaevRY4wQYedPfgvyTwghlJmA
hUAlodnLvDqtFh/z+wXjAncJwqlqNc=X02n3


注意其中的参数 -p jira

根据提示完成其他配置即可开始使用 Jira。

Confluence 迁移

部署好相同版本的 Confluence 和 PostgreSQL 环境,

在开始之前,请确保:

  • 停止旧环境和新环境的 Confluence 容器,以保证数据一致性。
  • 确认新环境的 PostgreSQL 13 已经启动,并创建了一个空的数据库(例如名为 confluence )。
  1. 迁移 PostgreSQL 数据库

    由于版本一致,直接使用 pg_dump 是最稳妥的方案。

    docker exec -t <旧数据库容器名> pg_dump -U <用户名> <数据库名> > confluence_db.sql

    先删除新环境中的数据库 confluence,再新建

    # psql -h <HOST> -U postgres -d postgres

    postgres=> \l
    List of databases
    Name | Owner | Encoding | Collate | Ctype | Access privileges
    ------------+----------+----------+-------------+-------------+-----------------------
    confluence | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
    jira | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
    postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
    rdsadmin | rdsadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | rdsadmin=CTc/rdsadmin
    template0 | rdsadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/rdsadmin +
    | | | | | rdsadmin=CTc/rdsadmin
    template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
    | | | | | postgres=CTc/postgres
    (6 rows)

    postgres=> DROP DATABASE confluence;
    DROP DATABASE
    postgres=>

    postgres=> CREATE DATABASE confluence;
    CREATE DATABASE

    然后导入备份数据,将 confluence_db.sql 拷贝到新服务器,然后执行:

    cat confluence_db.sql | docker exec -i <新数据库容器名> psql -U <用户名> -d <数据库名>
  2. 迁移 Confluence Home 目录

    Confluence 的用户附件、索引、插件配置等都存储在 Home 目录下。进入旧服务器的映射目录,执行

    tar -zcvf confluence_home_backup.tar.gz /path/to/old/confluence_home

    将备份文件传输到新 Confluence 环境 Home 目录并解压

  3. 修改配置文件(如果数据库连接变了)

    如果新环境的数据库 IP、端口或密码与旧环境不同,你需要修改新环境 Home 目录下的配置文件:

    文件路径: <confluence-home>/confluence.cfg.xml

迁移完成后,重启 Confluence,即可加载到旧环境中的数据。

常见问题

迁移后文档无法编辑

迁移完成后,Confluence 打开正常,数据已经恢复,但是编辑文档保存时报错: Something went wrong after loading the editor. Copy your unsaved changes and refresh the page to keep editing.

这个错误通常意味着 Confluence 协作编辑(Collaborative Editing) 服务出现了通讯故障。在 Confluence 9.0.2 中,这通常与 Synchrony(负责实时协作的组件)的配置或网络环境有关。

可以 刷新 Synchrony 状态 解决

  1. 以管理员身份登录 Confluence。

  2. 前往 管理 (Confluence administration) > 协作编辑 (Collaborative editing)

  3. 点击 Change mode ,将其切换为 Disabled

  4. 等待几秒钟后,重新切换回 Enabled

    这会重启 Synchrony 进程并清理过时的锁定状态。