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