容器化部署和破解Confluence知识库

对于任何研发团队来说,知识和经验的分享无比重要,可以大幅提高团队内的沟通效率,并且非常有助于构建一个全功能/全栈的研发团队!Confluence是Atlassian公司推出的一种非常强大的知识库系统,本文将详述如何通过Docker容器来构建一套拥有丰富插件的知识库服务!

一、环境配置

  1. 操作系统
    版本:Deepin GNU/Linux 15.11
  2. Docker
    版本:Docker version 19.03.5, build 633a0ea838
    安装方式:《Get Docker Engine – Community for Debian
  3. MySQL
    版本:5.7.29
    安装方式:容器化
  4. Confluence
    版本:7.2.1
    安装方式:容器化

二、安装和配置数据库

1. 安装MySQL服务器

在shell中运行以下命令,容器化部署MySQL数据库:

docker run --detach \
           --restart=always \
           --name mysql \
           --hostname mysql \
           --publish 3306:3306 \
           --volume /var/lib/mysql:/var/lib/mysql \
           --env MYSQL_ROOT_PASSWORD=<password> \
           mysql:5.7.29 --innodb_log_file_size=2GB --max_allowed_packet=256M

上述命令的各个选项的用途,如下所述:

  • --detach:在后台运行容器,并且输出容器标识符。
  • --restart=always:当容器推出时,总是自动重启。
  • --name mysql:将容器名称设置为mysql。
  • --hostname mysql:将容器的主机名设置为mysql。
  • --publish 3306:3306:公开容器的3306端口,并且映射至宿主机的3306端口。
  • --volume /var/lib/mysql:/var/lib/mysql:将宿主机的指定目录挂载至容器,作为MySQL的数据目录。
  • --env MYSQL_ROOT_PASSWORD=<password>:设置MySQL的root用户的密码。
  • --innodb_log_file_size=2GB:将MySQL的日志文件大小设置为2GB,否则Confluence不能正常运行。
  • --max_allowed_packet=256M:将MySQL的最大允许数据包设置为256M,否则Confluence不能正常运行。

2. 创建用户和数据库

在shell中运行以下命令,创建confluence的库表和用户:

docker exec -it mysql mysql -uroot -p<password> -e "CREATE DATABASE confluence CHARACTER SET utf8 COLLATE utf8_bin;"
docker exec -it mysql mysql -uroot -p<password> -e "CREATE USER 'confluence'@'%' IDENTIFIED BY '<password>';"
docker exec -it mysql mysql -uroot -p<password> -e "GRANT ALL ON confluence.* TO 'confluence'@'%';"
docker exec -it mysql mysql -uroot -p<password> -e "FLUSH PRIVILEGES;"

三、构建破解插件

Confluence及其插件的使用授权非常昂贵,虽然我们可以对其进行破解,但只限于个人学习研究之用,不得用于商业用途!

1. 克隆代码

在shell中运行以下命令,克隆atlassian-agent工具的源码,然后切换至最新分支:

git clone https://gitee.com/pengzhile/atlassian-agent.git
cd atlassian-agent
git checkout v1.2.3

2. 编译打包

在shell中运行以下命令,使用maven进行编译和打包:

mvn package

编译打包完成之后,可以在target目录中找到atlassian-agent-jar-with-dependencies.jar文件,这就是破解工具!

3. 复制

在shell中运行以下命令,在宿主机上创建Confluence的工作目录,然后将破解工具复制过去:

sudo mkdir -pv /var/atlassian/application-data/confluence
sudo cp target/atlassian-agent-jar-with-dependencies.jar /var/atlassian/application-data/confluence/atlassian-agent.jar

四、安装和配置知识库

1. 安装Confluence知识库

在shell中运行以下命令,容器化部署Confluence知识库:

docker run --detach \
           --restart=always \
           --volume /var/atlassian/application-data/confluence:/var/atlassian/application-data/confluence \
           --volume /etc/localtime:/etc/localtime:ro \
           --name=confluence \
           --hostname=confluence \
           --link mysql \
           --env ATL_JDBC_URL="jdbc:mysql://mysql:3306/confluence?sessionVariables=tx_isolation=\"READ-COMMITTED\"&amp;useUnicode=true&amp;characterEncoding=utf8&amp;autoReconnect=true" \
           --env ATL_JDBC_USER=confluence \
           --env ATL_JDBC_PASSWORD=<password> \
           --env ATL_DB_TYPE=mysql \
           --env JAVA_OPTS="-javaagent:/var/atlassian/application-data/confluence/atlassian-agent.jar ${JAVA_OPTS}" \
           --publish 8090:8090 \
           --publish 8091:8091 \
           --publish 9083:9083 \
           atlassian/confluence-server:7.2.1

上述命令的各个选项的用途,如下所述:

  • --detach:在后台运行容器,并且输出容器标识符。
  • --restart=always:当容器推出时,总是自动重启。
  • --volume /var/atlassian/application-data/confluence:/var/atlassian/application-data/confluence:将容器的数据目录挂载至宿主机目录。
  • --volume /etc/localtime:/etc/localtime:ro:设置容器的市区,保持和宿主机一致。
  • --name confluence:将容器名称设置为confluence。
  • --hostname confluence:将容器的主机名设置为confluence。
  • --link mysql:连接mysql容器,可以用主机名替代IP地址。
  • --env:设置confluence容器使用的环境变量,每项环境变量的意义,如下所示:
    • ATL_JDBC_URL:Confluence连接MySQL数据库用的JDBC连接串。
    • ATL_JDBC_USER:Confluence的数据库用户名。
    • ATL_JDBC_PASSWORD:Confluence的数据库密码。
    • ATL_DB_TYPE:Confluence的数据库类型,本文使用MySQL数据库。
    • JAVA_OPTS:以Java Agent的形式运行破解工具,在字节码层面进行破解。
  • --publish8090:8090:公开Confluence的HTTP端口,并且映射至宿主机的8090端口。
  • --publish8091:8091:公开Confluence的HTTPS端口,并且映射至宿主机的8091端口。
  • --publish9083:9083:公开Confluence的Balsamiq线框图插件的端口(用于团队协作),并且映射至宿主机的9083端口。

2. 安装MySQL驱动

在Shell中运行以下命令,下载MySQL的JDBC驱动包,然后将其解压并拷贝至容器,最后重启容器:

cd ..
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.48.tar.gz
tar xvzf mysql-connector-java-5.1.48.tar.gz
docker cp mysql-connector-java-5.1.48/mysql-connector-java-5.1.48.jar confluence:/opt/atlassian/confluence/lib
docker restart confluence

3. 破解Confluence知识库

在浏览器中打开http://127.0.0.1:8090,进入Confluence的应用选择页面,如下图所示:

获取应用程序

点击“Next”按钮,进入授权页面,如下图所示:

授权页面

记住上图红框中的Server ID,这是Confluence为服务器生成的唯一标识符,每台服务器都不相同。在Shell中运行以下命令,破解Confluence知识库:

docker exec -it confluence java -jar /var/atlassian/application-data/confluence/atlassian-agent.jar \
-p conf -m <mailbox> -n <username> -o <organization> -s <server_id>

atlassian-agent.jar是Confluence知识库和插件的破解工具,其用法如下所示:

  • -d--datacenter:数据中心许可证,一般不用。
  • -h--help:输出帮助信息。
  • -m--mail:许可证使用的邮箱。
  • -n--name:许可证使用的用户名。
  • -o--organisation:许可证使用的组织/URL。
  • -p--product:需要破解的产品名称或密钥。支持的产品和插件:
    • crowd:Crowd
    • questions:Questions plugin for Confluence
    • crucible:Crucible
    • capture:Capture plugin for JIRA
    • conf:Confluence
    • training:Training plugin for JIRA
    • bitbucket:Bitbucket
    • tc:Team Calendars plugin for Confluence
    • bamboo:Bamboo
    • fisheye:FishEye
    • portfolio:Portfolio plugin for JIRA
    • jc:JIRA Core
    • jsd:JIRA Service Desk
    • jira:JIRA Software(common jira)
    • *:第三方插件的应用密钥,类似于“com.foo.bar”
  • -s--serverid:许可证的服务器标识符。

请根据实际情况,设置自己的邮箱、用户名、组织和服务器标识符!破解命令运行完成之后,Shell会输出相应的许可证,如下图所示:

输出的许可证

将获得的License Key复制和粘贴至许可证密钥的文本框,然后点击“Next”按钮,此时需要等待一两分钟,Confluence初始化数据库需要耗费一些时间。初始化完成之后,进入加载内容页面,如下图所示:

加载内容页面

点击“Empty Site”按钮,然后进入用户管理配置页面,如下图所示:

用户管理配置页面

如果已经安装了JIRA,那么可以将用户管理交给JIRA来处理。本文没有安装JIRA,因此选择在Confluence内部管理用户和组,点击“Manage users and groups within Confluence”按钮,进入系统管理员账号配置页面,如下图所示:

系统管理员账号配置页面

请根据实际情况,配置管理员账户的信息,然后点击“Next”按钮,进入设置成功页面,如下图所示:

设置成功页面

至此,Confluence的安装、破解和初步配置已经完成,还可以根据自身实际情况进一步配置!在Confluence控制台的“授权细节”中可以看到,已经破解成功,如下图所示:

授权成功

4. 安装和破解插件

登录Confluence控制台,进入“查找新应用”页面,搜索“Team Calendars”插件,结果如下图所示:

搜索插件

点击“免费试用”按钮,Confluence便会下载和安装这个插件。安装完成之后,进入“管理应用”页面,搜索“Team Calendars”插件,展开插件的折叠窗口,如下图所示:

插件安装状态

在Shell中运行以下命令,破解“Team Calendars”插件:

docker exec -it confluence java -jar /var/atlassian/application-data/confluence/atlassian-agent.jar \
-p tc -m <mailbox> -n <username> -o <organization> -s <server_id>

破解工具的使用方法不再赘述,将命令返回的License Key输入上图红框的“许可证关键字”的文本框中,然后点击“更新按钮”,稍待片刻便能破解成功!此时,可以看到插件的授权状态,如下图所示:

插件授权状态

其他插件的安装和破解方式类似于“Team Calendars”插件,只是破解命令中的-p参数有所不同,此处不再赘述其他插件的安装和破解过程!本文安装的插件包括:

  • Team Calendars:用于团队协作的日程表插件。
  • Questions:用于团队协作的Q&A插件。
  • Excellentable Spreadsheet:可以创建动态和交互式的电子表格的插件,类似于Excel。
  • Draw.io:可以画各种流程图的插件,类似于Visio。
  • Easymind:可以画思维导图的插件,类似于XMind。
  • Numbered Headings:自动给文章标题编号的插件。
  • Balsamiq Wireframes:绘画线框原型图的插件。
  • Advanced Codeblocks:渲染和显示各种语言代码块的插件。
  • Moqups:可以画各种流程图、原型图的插件。
  • LaTeX Math:显示和编辑数学公式的插件。
  • Markdown:显示和编辑Markdown文档的插件。
  • Table Filter and Charts:另一种交互式电子表格插件。
  • Refined:Confluence的主题插件。
  • Scroll Documents:文档管理插件。
  • Scroll Exporter Extensions:文档导出扩展插件。
  • Scroll PDF Exporter:PDF导出插件。
  • Scroll Word Exporter:Word导出插件

五、测试验证

登录Confluence知识库,点击“创建”按钮,如下图所示:

创建新文章

以创建流程图为例,点击“+”符号,然后点击“draw.io Diagram”,如下图所示:

创建流程图

在弹出的“draw.io”窗口中,选择“Flowcharts→ Data Flow 3”, 便能基于预定义的模板创建一个图表了,如下图所示:

预定义图表模板

点击“存储并退出”按钮,便能保存图表了!至此,Confluence知识库及其插件的安装和破解流程成功完成!