使用Docker搭建Jira和Confluence系统

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%';
使用Docker搭建Jira和Confluence系统

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;

使用Docker搭建Jira和Confluence系统
创建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;
使用Docker搭建Jira和Confluence系统
mysql> SHOW CREATE DATABASE confluence;
使用Docker搭建Jira和Confluence系统

安装Jira
使用官方镜像直接启动Jira容器。这个服务没有太多问题,注意端口是否监听正确及相关端口(数据库端口、应用端口)是否放开,这里的端口放开是指本机防火墙,外网防火墙不应放行数据库端口
[root@node-1 ~]# docker run -p 18080:8080 -dit --name jira docker.io/cptactionhank/atlassian-jira
[root@node-1 ~]# docker ps
使用Docker搭建Jira和Confluence系统
[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跟着提示安装即可。

使用Docker搭建Jira和Confluence系统

设置自己的jira 点击下一步
使用Docker搭建Jira和Confluence系统

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

点击测试链接 出现数据库链接成功即可
使用Docker搭建Jira和Confluence系统

后续由于是管理员配置 自行配置即可
安装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":"[email protected]" \
"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
构建过程截图
使用Docker搭建Jira和Confluence系统
使用Docker搭建Jira和Confluence系统
使用Docker搭建Jira和Confluence系统
使用Docker搭建Jira和Confluence系统
出现成功完成没报错就表示成功
查看镜像
使用Docker搭建Jira和Confluence系统

启动容器
[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
使用Docker搭建Jira和Confluence系统
#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

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

出现获取授权码点击 试用授权
使用Docker搭建Jira和Confluence系统

出现界面 点击你需要选择的服务 填写团队名称 点击确定
使用Docker搭建Jira和Confluence系统

确定后会出现IP检测 点击yes即可
使用Docker搭建Jira和Confluence系统

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

使用Docker搭建Jira和Confluence系统
会出现 设置数据库选择自己的数据库选择 mysql
使用Docker搭建Jira和Confluence系统
设置好 ip地址 和数据库名字密码

如果设置数据库出现以下错误请按照官方填写
使用Docker搭建Jira和Confluence系统
在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
点击测试数据库出现成功 点击下一步 需要等待一分钟

使用Docker搭建Jira和Confluence系统
出现以下内容可自行配置
使用Docker搭建Jira和Confluence系统

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

猜你喜欢

转载自blog.51cto.com/xia1314520ting/2411535