Docker实战:部署JAR应用并连接数据库,集成Jira服务



Docker迁移Jira

  • 场景描述
  • A服务器操作
  • B服务器操作


场景描述

之前在本地服务器上用Docker部署了JIRA以及Confluence,现在需要将服务转移到另外一台服务器上,目前另外一台服务器是干净的什么都没有。下文中A代表原来有服务的本地服务器;B代表新的服务器。

A服务器操作

登录JIRA点击右上角设置–系统–备份系统,输入备份文件名称之后点击备份,之后会在页面中的目录内生成备份文件名.zip压缩文件,这里我输入的是jira.bak

docker部署jar 连接数据库 docker部署jira_jira


docker部署jar 连接数据库 docker部署jira_jira_02

mkdir /home/bak_jira/
cd /home/bak_jira/
# 将备份文件拷贝到宿主机内,这里的路径仅供参考,实际路径请拷贝自己页面中的备份文件输出路径
# 拷贝命令 docker cp <容器名>:<文件完整路径> <宿主机路径>
docker cp jira:/var/atlassian/jira/export/jira.bak.zip /home/bak_jira

# 将头像喝附件也拷贝出来,备份文件是不含附件和用户头像的,需要单独拷贝
# attachments是附件文件夹,avatars是用户头像文件夹
docker cp jira:/var/atlassian/jira/data/ /home/bak_jira
# 拷贝出来之后对其进行打包
cd /home/bak_jira/
tar -zcvf attachments.tar.gz attachments/
tar -zcvf avatars.tar.gz avatars/

# 打包命令 docker commit <容器名> <新镜像名>
docker commit jira bak_jira

# 查看新的镜像是否创建成功
docker images

# 将新的镜像打包成tar压缩包
# 压缩命令 docker save -o <压缩包名称> <镜像名称>
docker save -o bak_jira.tar bak_jira

#将所有的压缩包传到B服务器,这里的方法比较多,可以使用sz命令或scp命令
scp /home/bak_jira/bak_jira.tar root@192.168.1.3:/home/
scp /home/bak_jira/jira.bak.zip root@192.168.1.3:/home/
scp /home/bak_jira/attachments.tar.gz root@192.168.1.3:/home
scp /home/bak_jira/avatars.tar.gz root@192.168.1.3:/home
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

B服务器操作

这里默认B已经安装了Docker,安装步骤可以参考 这里

# cd到压缩文件目录,我这里是/home
cd /home

# 加载镜像命令 docker load -i <压缩包名称>
docker load -i bak_jira.tar

# 查看镜像是否加载成功
docker images

# 此时镜像已经拉进来了,但是启动还需要数据库,这里要尽量保持与原数据库一致,比如jira连接的用户如果是非root用户的话需要在新的数据库中也创建一样的数据库用户并赋予权限。这里请参考上面的链接里面有详细安装步骤

# 接下来启动镜像
docker run -d --name jira  --restart always -p 18009:8080   -e TZ="Asia/Shanghai"   -m 4096M   -v /home/data/jira:/var/atlassian/jira bak_jira
# 参数接释:
# -d 后台运行
# --name 容器名称
# --restart 自启动
# -p 宿主机映射容器内端口,18009是宿主机端口,8080是容器内的服务端口
# -e 时区
# -m 给JIRA分配的最大内存,根据自己的机器配置来,一般2G就够
# -v 将容器内的/var/atlassian/jira文件夹挂载到宿主机的/home/data/jira 方便修改配置文件以及查看日志

# 由于我这里挂载了文件夹,所以直接把压缩包mv到宿主机的/home/data/jira/import即可
mv jira.bak.zip /home/data/jira/import
# 没有挂载也可以使用拷贝命令将备份文件打到容器内的import文件夹,这里的import文件夹路径仅供参考
docker cp jira.bak.zip jira:/var/atlassian/jira/import

# 不知道import文件夹的位置可以使用下面的方法,进入容器内部找
docker exec -it jira bash
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

镜像启动之后访问服务我这里是http://localhost:18009按照流程进行设置

docker部署jar 连接数据库 docker部署jira_jira_03

docker部署jar 连接数据库 docker部署jira_运维_04


这里选择导入

docker部署jar 连接数据库 docker部署jira_docker_05


输入备份文件全称之后点击导入,等待导入完成

docker部署jar 连接数据库 docker部署jira_服务器_06


导入完成之后再次访问http://localhost:18009

docker部署jar 连接数据库 docker部署jira_docker_07


如果这里不能登录报错了是因为server.xml配置错误,没有报错请跳过这一节

docker部署jar 连接数据库 docker部署jira_服务器_08

# 进入到jira容器中查看server.xml
docker exec -it jira bash
cd /opt/atlassian/jira/conf/
cat server.xml
# 复制打印的内容,exit到宿主机中使用vim命令创建server.xml文件并粘贴刚刚复制的内容,进行修改
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

这里的设置还是服务器A的,由于域名和ip都变了,需要修改成新的,这里先使用默认的http配置,后面根据需要再改

<Server port="8005" shutdown="SHUTDOWN">
    <Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
    <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on"/>
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>

    <Service name="Catalina">
        <!--
         ==============================================================================================================
         DEFAULT - Direct connector with no proxy for unproxied access to Jira.

         If using a http/https proxy, comment out this connector.
         ==============================================================================================================
        -->

        <!-- Relaxing chars because of JRASERVER-67974 -->
        <Connector port="8080" relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`"<">>"
                   maxThreads="150" minSpareThreads="25" connectionTimeout="20000" enableLookups="false"
                   maxHttpHeaderSize="8192" protocol="HTTP/1.1" useBodyEncodingForURI="true" redirectPort="8443"
                   acceptCount="100" disableUploadTimeout="true" bindOnInit="false"/>
	
        <!--
         ==============================================================================================================
         HTTP - Proxying Jira via Apache or Nginx over HTTP

         If you're proxying traffic to Jira over HTTP, uncomment the below connector and comment out the others.
         Ensure the proxyName and proxyPort are updated with the appropriate information if necessary as per the docs.

         See the following for more information:

            Apache - https://confluence.atlassian.com/x/4xQLM
            nginx  - https://confluence.atlassian.com/x/DAFmGQ
         ==============================================================================================================
        -->

       
       <!-- <Connector port="8080" relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`"<>"
                   maxThreads="150" minSpareThreads="25" connectionTimeout="20000" enableLookups="false"
                   maxHttpHeaderSize="8192" protocol="HTTP/1.1" useBodyEncodingForURI="true" redirectPort="8443"
                   acceptCount="100" disableUploadTimeout="true" bindOnInit="false" scheme="http"
                   proxyName="jira.mrbun.cn" proxyPort="80"/>
	-->
        
        <!--
         ==============================================================================================================
         HTTPS - Proxying Jira via Apache or Nginx over HTTPS

         If you're proxying traffic to Jira over HTTPS, uncomment the below connector and comment out the others.
         Ensure the proxyName and proxyPort are updated with the appropriate information if necessary as per the docs.

         See the following for more information:

            Apache - https://confluence.atlassian.com/x/PTT3MQ
            nginx  - https://confluence.atlassian.com/x/DAFmGQ
         ==============================================================================================================
        -->

        
	<!-- <Connector port="8080"
	           relaxedPathChars="[]|"
		   relaxedQueryChars="[]|{}^\`"<>"
		   maxThreads="150"
		   minSpareThreads="25"
		   connectionTimeout="20000"
		   enableLookups="false"
		   maxHttpHeaderSize="8192"
		   protocol="HTTP/1.1"
		   useBodyEncodingForURI="true"
		   redirectPort="8443"
		   acceptCount="100"
		   disableUploadTimeout="true"
		   bindOnInit="false"
		   secure="true"
		   scheme="https"
		   proxyName="xxx.domain.com"
		   proxyPort="443"/>
	    -->

        <!--
         ==============================================================================================================
         AJP - Proxying Jira via Apache over HTTP or HTTPS

         If you're proxying traffic to Jira using the AJP protocol, uncomment the following connector line
         See the following for more information:

            Apache - https://confluence.atlassian.com/x/QiJ9MQ
         ==============================================================================================================
        -->

        <!--
        <Connector port="8009" URIEncoding="UTF-8" enableLookups="false" protocol="AJP/1.3"/>
        -->

        <Engine name="Catalina" defaultHost="localhost">
            <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

                <Context path="" docBase="${catalina.home}/atlassian-jira" reloadable="false" useHttpOnly="true">
                    <Resource name="UserTransaction" auth="Container" type="javax.transaction.UserTransaction"
                              factory="org.objectweb.jotm.UserTransactionFactory" jotm.timeout="60"/>
                    <Manager pathname=""/>
                    <JarScanner scanManifest="false"/>
                    <Valve className="org.apache.catalina.valves.StuckThreadDetectionValve" threshold="120" />
                </Context>

            </Host>
            <Valve className="org.apache.catalina.valves.AccessLogValve"
                   pattern="%a %{jira.request.id}r %{jira.request.username}r %t "%m %U%q %H" %s %b %D "%{Referer}i" "%{User-Agent}i" "%{jira.request.assession.id}r""/>
        </Engine>
    </Service>
</Server>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
# 将server.xml文件拷贝到容器内
docker cp server.xml jira:/opt/atlassian/jira/conf/
# 重启JIRA
docker restart jira
  • 1.
  • 2.
  • 3.
  • 4.

再次访问JIRA即可登录

docker部署jar 连接数据库 docker部署jira_运维_09


恢复附件以及用户头像

cd /home
tar -zxvf attachments.tar.gz
tar -zxvf avatars.tar.gz
docker cp attachments jira:/var/atlassian/jira/data
docker cp avatars jira:/var/atlassian/jira/data
docker restart jira
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

至此整个JIRA迁移工作完成,迁移后原来的应用可能会丢失,需要重新安装,记得记录下原来服务中的应用,无需重新购买可以直接安装。


QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空