JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域。```

Confluence是一个专业的企业知识管理与协同软件,也可以用于构建企业wiki。使用简单,但它强大的编辑和站点管理特征能够帮助团队成员之间共享信息、文档协作、集体讨论,信息推送。 Phabricator是一套基于Web的软件开发协作工具,一个Web应用用于帮助软件公司构建更好的软件。原是facebook员工开发的可视化代码评审工具,主要功能有CodeReview、代码托管、Bug跟踪、Task管理、Wiki文档等功能。

环境准备 本地实践环境:

OS:CentOS Linux release 7.2.1511 (Core) Docker:v1.13.1

启动Docker并将Docker添加至开机启动 在Centos7上 [root@node-1 ~]# yum install docker -y [root@node-1 ~]# systemctl enable docker.service Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. [root@node-1 ~]# systemctl start docker.service Iptables及SELinux设置 [root@node-1 ~]# setenforce 0 setenforce: SELinux is disabled [root@node-1 ~]# sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux [root@node-1 ~]# getenforce Disabled [root@node-1 ~]# yum install iptables-services [root@node-1 ~]# iptables -I INPUT -p tcp --dport 3306 -j ACCEPT [root@node-1 ~]# iptables -I INPUT -p tcp --dport 18080 -j ACCEPT [root@node-1 ~]# iptables -I INPUT -p tcp --dport 8090 -j ACCEPT

[root@node-1 ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

[root@node-1 ~]# systemctl stop firewalld.service [root@node-1 ~]# systemctl disable firewalld.service 安装Myql 使用官方镜像直接启动容器即可。不过使用Jira和Confluence时需要添加几个mysql启动配置,具体可参考【Mysql镜像说明】,packet及log_file_size参数为应用要求防止大文件无法存储,utf8是为了支持中文 注意:mysql配置文件需要从别的地方拷过来在挂载。挂载文件执行覆盖操作,如果直接挂载会导致容器里和本地目录都没有my.cnf,5.6先在本地创建个/data/mysql/conf/conf.d 不做的话 会有socket问题,原因是配置文件不是5.6版本的配置文件

先创建一个带文件的mysql 在进入目录拷贝文件


[root@node-1 /]# docker run --name mysql -p 3306:3306 -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -idt mysql:5.6.35


进入容器后查看配置文件 root@a919c77c8981:/# cat /etc/mysql/my.cnf

[client] port = 3306 socket = /var/run/mysqld/mysqld.sock

[mysqld_safe] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock nice = 0

[mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql explicit_defaults_for_timestamp

Instead of skip-networking the default is now to listen only on localhost which is more compatible and is not less secure. #bind-address = 127.0.0.1

#log-error = /var/log/mysql/error.log

Recommended in standard MySQL setup sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0

  • IMPORTANT: Additional settings that can override those from this file! The files must end with '.cnf', otherwise they'll be ignored.

includedir /etc/mysql/conf.d/

删除容器 [root@node-1 /]# docker stop $(docker ps -aq)

[root@node-1 /]# docker rm $(docker ps -aq)

在创建挂载容器以及目录

[root@node-1 ~]# mkdir -p /data/mysql/conf/conf.d

[root@node-1 conf]# touch my.cnf

[root@node-1 conf]# cat my.cnf

[client] port = 3306 socket = /var/run/mysqld/mysqld.sock

[mysqld_safe] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock nice = 0

[mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql explicit_defaults_for_timestamp

Instead of skip-networking the default is now to listen only on localhost which is more compatible and is not less secure. bind-address = 127.0.0.1

log-error = /var/log/mysql/error.log

Recommended in standard MySQL setup sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0

  • IMPORTANT: Additional settings that can override those from this file! The files must end with '.cnf', otherwise they'll be ignored.

!includedir /etc/mysql/conf.d/

[root@node-1 ~]# docker run --name mysql -p 3306:3306 -v /data/mysql/data:/var/lib/mysql -v /data/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=123456 -idt mysql:5.6.35 c0f2f735b1db0325ed2b17013f9a735c7a167452a6df2130f630d591f2d7d50a

查看容器 [root@node-1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c0f2f735b1db mysql:5.6.35 "docker-entrypoint..." 3 seconds ago Up 2 seconds 0.0.0.0:3306->3306/tcp mysql 进入容器 [root@node-1 ~]# docker exec -it mysql bash

创建Jira数据库

root@c0f2f735b1db:/# mysql -uroot -p123456 mysql> show variables like 'char%';

mysql> CREATE DATABASE jira CHARACTER SET utf8 COLLATE utf8_bin; Query OK, 1 row affected (0.00 sec) mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,INDEX on jira.* TO 'jira'@'%' IDENTIFIED BY '123456'; Query OK, 0 rows affected (0.00 sec) mysql> SHOW CREATE DATABASE jira;

创建Confluence数据库 mysql> CREATE DATABASE confluence CHARACTER SET utf8 COLLATE utf8_bin; Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON confluence.* TO 'confluence'@'%' IDENTIFIED BY '123456'; Query OK, 0 rows affected (0.00 sec) 查询用户 mysql> SELECT User, Host, Password FROM mysql.user; mysql> SHOW CREATE DATABASE confluence;

安装Jira 使用官方镜像直接启动Jira容器。这个服务没有太多问题,注意端口是否监听正确及相关端口(数据库端口、应用端口)是否放开,这里的端口放开是指本机防火墙,外网防火墙不应放行数据库端口 [root@node-1 ~]# docker run -p 18080:8080 -dit --name jira docker.io/cptactionhank/atlassian-jira [root@node-1 ~]# docker ps [root@node-1 ~]#docker exec -it jira /bin/bash [root@node-1 ~]#docker restart jira [root@node-1 ~]#docker logs -f jira

在浏览器访问http://YOURIP:18080跟着提示安装即可。

设置自己的jira 点击下一步

用于自己的数据库 数据库类型选择mysql5.6 主机名是docker-0 的内网地址和你服务器的外网地址

点击测试链接 出现数据库链接成功即可

后续由于是管理员配置 自行配置即可 安装Confluence 由于Jira使用的是MySQL方便起见Confluence也要用Mysql,但是使用官方镜像会有以下问题

a.官方的对于PostSQL支持可以,但无法直接连接mysql需要自行安装支持java连接mysql的组件 b.中文Office在Confluence的预览查看会出现乱码情况,需要修改confluence连接参数及自行添加中文字体库 c.官方使用了不受支持的openjdk,需要更改jdk环境为Oracle JDK

鉴于这种情况使用这个官方镜像就很不理智了,还希望使用docker,只能自己做一个镜像了

制作镜像 准备工作 Step 1: 下载java-mysql 可以从Mysql官方【】进行下载解压,只需要其中的两个文件,按下面的目录结构存放就可以了 Step 2: 准备中文字体库 这个可以从身边现成的windows机器上直接压缩拷贝过来就行了,windows下的字体存放在C:\Windows\Fonts,然后按下面的目录结构存放就可以了,注意这个压缩包需要和我下面目录的一直,不然需要自行更改Dockerfile文件,还有这个压缩包应该是解压完后是Fonts/字体这样的结构

进入opt目录 [root@node-1 opt]# wget https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz 构建的目录结构 要保持在同级目录下

├── chinese-win.tar.gz ├── Dockerfile ├── entrypoint.sh ├── java-mysql ├── mysql-connector-java-5.1.46-bin.jar └── mysql-connector-java-5.1.46.jar

	构建文件及启动脚本

主构建文件Dockerfile如下

FROM anapsix/alpine-java:8_jdk LABEL "Author":"admin@qq.com"
"Date":"2018-04-11" ENV RUN_USER daemon ENV RUN_GROUP daemon ENV CONFLUENCE_HOME /var/atlassian/application-data/confluence ENV CONFLUENCE_INSTALL_DIR /opt/atlassian/confluence

VOLUME ["${CONFLUENCE_HOME}"]

EXPOSE 8090 EXPOSE 8091 WORKDIR $CONFLUENCE_HOME RUN apk update -qq
&& update-ca-certificates
&& apk add ca-certificates wget curl openssh bash procps openssl perl ttf-dejavu tini
&& rm -rf /var/lib/{apt,dpkg,cache,log}/ /tmp/* /var/tmp/*
&& mkdir -p ${CONFLUENCE_INSTALL_DIR} ARG CONFLUENCE_VERSION=6.8.1 ARG DOWNLOAD_URL=http://www.atlassian.com/software/confluence/downloads/binary/atlassian-confluence-${CONFLUENCE_VERSION}.tar.gz RUN curl -L --silent ${DOWNLOAD_URL} | tar -xz --strip-components=1 -C "$CONFLUENCE_INSTALL_DIR" ADD chinese-win.tar.gz /usr/share/fonts/ RUN fc-cache -fv ADD atlassian-confluence-6.8.1.tar.gz $CONFLUENCE_INSTALL_DIR/ RUN chown -R ${RUN_USER}:${RUN_GROUP} ${CONFLUENCE_INSTALL_DIR}/
&& sed -i -e 's/-Xms([0-9]+[kmg]) -Xmx([0-9]+[kmg])/-Xms${JVM_MINIMUM_MEMORY:=\1} -Xmx${JVM_MAXIMUM_MEMORY:=\2} ${JVM_SUPPORT_RECOMMENDED_ARGS} -Dconfluence.home=${CONFLUENCE_HOME}/g' ${CONFLUENCE_INSTALL_DIR}/bin/setenv.sh
&& sed -i -e '/.-Dconfluence.context.path=./a\CATALINA_OPTS="-Dconfluence.document.conversion.fontpath=/usr/share/fonts/Fonts/ ${CATALINA_OPTS}"' ${CONFLUENCE_INSTALL_DIR}/bin/setenv.sh
&& sed -i -e 's/port="8090"/port="8090" secure="${catalinaConnectorSecure}" scheme="${catalinaConnectorScheme}" proxyName="${catalinaConnectorProxyName}" proxyPort="${catalinaConnectorProxyPort}"/' ${CONFLUENCE_INSTALL_DIR}/conf/server.xml COPY entrypoint.sh /entrypoint.sh COPY java-mysql/mysql-connector-java-5.1.46.jar /opt/atlassian/confluence/confluence/WEB-INF/lib/mysql-connector-java-5.1.46.jar COPY java-mysql/mysql-connector-java-5.1.46-bin.jar /opt/atlassian/confluence/confluence/WEB-INF/lib/mysql-connector-java-5.1.46-bin.jar

RUN chown -R ${RUN_USER}:${RUN_GROUP} ${CONFLUENCE_INSTALL_DIR}/

CMD ["/entrypoint.sh", "-fg"] ENTRYPOINT ["/sbin/tini", "--"]

CMD tail -f /entrypoint.sh

启动脚本entrypoint.sh如下 !/bin/bash set -euo pipefail Setup Catalina Opts : ${CATALINA_CONNECTOR_PROXYNAME:=} : ${CATALINA_CONNECTOR_PROXYPORT:=} : ${CATALINA_CONNECTOR_SCHEME:=http} : ${CATALINA_CONNECTOR_SECURE:=false} : ${CATALINA_OPTS:=} CATALINA_OPTS="${CATALINA_OPTS} -DcatalinaConnectorProxyName=${CATALINA_CONNECTOR_PROXYNAME}" CATALINA_OPTS="${CATALINA_OPTS} -DcatalinaConnectorProxyPort=${CATALINA_CONNECTOR_PROXYPORT}" CATALINA_OPTS="${CATALINA_OPTS} -DcatalinaConnectorScheme=${CATALINA_CONNECTOR_SCHEME}" CATALINA_OPTS="${CATALINA_OPTS} -DcatalinaConnectorSecure=${CATALINA_CONNECTOR_SECURE}" export CATALINA_OPTS Start Confluence as the correct user if [ "${UID}" -eq 0 ]; then echo "User is currently root. Will change directory ownership to ${RUN_USER}:${RUN_GROUP}, then downgrade permission to ${RUN_USER}" PERMISSIONS_SIGNATURE=$(stat -c "%u:%U:%a" "${CONFLUENCE_HOME}") EXPECTED_PERMISSIONS=$(id -u ${RUN_USER}):${RUN_USER}:700 if [ "${PERMISSIONS_SIGNATURE}" != "${EXPECTED_PERMISSIONS}" ]; then chmod -R 700 "${CONFLUENCE_HOME}" && chown -R "${RUN_USER}:${RUN_GROUP}" "${CONFLUENCE_HOME}" fi Now drop privileges exec su -s /bin/bash "${RUN_USER}" -c "$CONFLUENCE_INSTALL_DIR/bin/start-confluence.sh $@" else exec "$CONFLUENCE_INSTALL_DIR/bin/start-confluence.sh" "$@" fi

上传中文包和脚本 解压下载的jdk [root@node-1 opt]# tar xf mysql-connector-java-5.1.46.tar.gz [root@node-1 opt]# mv mysql-connector-java-5.1.46 java-mysql

构建镜像 ls #进入dockerfile同级目录 [root@node-1 opt]# ls chinese-win.tar.gz Dockerfile entrypoint.sh java-mysql [root@node-1 opt]# docker build -t confluence-oracle-jdk:v6.8.1 . --no-cache 构建过程截图 出现成功完成没报错就表示成功 查看镜像

启动容器 [root@node-1 opt]# docker run -v /data/confluence:/var/atlassian/application-data/confluence --name="confluence" -d -p 8090:8090 -p 8091:8091 confluence-oracle-jdk:v6.8.1 c7f701586093f82b56cdcec3e602932640c18c9ad5d0d6017f774d998b202111 查看容器 全部为UP启动成功 [root@node-1 opt]# docker ps #Manage Confluence [root@node-1 opt]# docker ps [root@node-1 opt]# docker exec -it confluence /bin/bash [root@node-1 opt]# docker stop confluence [root@node-1 opt]# docker start confluence [root@node-1 opt]# docker logs confluence [root@node-1 opt]# docker logs -f confluence 打开浏览器输入ip地址:8090

出现这个页面就是成功现在配置授权和mysql 点击产品安装 然后下一步 出现插件 可以选择不安装直接下一步 也可以选择 这次什么都不选择

出现获取授权码点击 试用授权

出现界面 点击你需要选择的服务 填写团队名称 点击确定

确定后会出现IP检测 点击yes即可

网址会自动跳转到 授权码界面 点击下一步 

会出现 设置数据库选择自己的数据库选择 mysql 设置好 ip地址 和数据库名字密码

如果设置数据库出现以下错误请按照官方填写 在my.cnf 下添加以下字段 [mysqld] ... transaction-isolation=READ-COMMITTED

进入 confluence映射的配置文件 [root@node-1 conf]# vim /data/confluence/confluence.cfg.xml <properties> ... <property name="hibernate.connection.isolation">2</property> ... <properties>

重启 confluence和mysql服务 [root@node-1 conf]# docker restart mysql mysql [root@node-1 conf]# docker restart confluence confluence [root@node-1 conf]# docker ps 点击测试数据库出现成功 点击下一步 需要等待一分钟

出现以下内容可自行配置

总结: 本文先创建带文件的mysql容器 从mysql容器拷贝my.cnf文件 再次去拉起容器和映射文件 重启mysql