Docker方式下Bitbucket及confluence和jira的迁移

之前写过使用Docker部署Confluence、Jira、Bitbucket的文档,由于宿主服务器硬件有点跟不上了,所以前端时间进行了这些服务的迁移。这里先介绍Confluence及Jira的迁移过程。简单介绍下做的事情
迁移思路:

  • 按照原来搭建方法在新宿主机上新建相同的容器(注意控制版本,可以用指定的版本来替代image的latest标签)
  • 将备份的数据导入新的容器中

这里面最容易出问题的就是备份数据是否是完全完整的,比如Jira的附件及插件、Bitbucket代码是可以导入等,当然许多官方会有相关的提示,不过并没有提供更详尽的解决过程,这里算一个补充吧。
PS:Atlassian的这几个服务都是有自动备份功能的,所以也不需要过多干涉,后面的还原数据操作,Jira和Confluence都是用的应用自己的备份,备份路径也是官方Docker的路径(这个就根据实际情况拿到备份就行了)。还有本来想贴几个图可能会更直观,不过七牛的图床域名被回收了,之后应该会用【chevreto】,有时间了整一整。

创建Mysql容器

  • 启动容器
    先说一下为什么用Mysql,因为刚开始只是有一个Jira的需求,然后选用DB的时候感觉Mysql相对Postsql更易于操作维护,就选了这个,这导致了后面Confluence的DB问题,不过都顺利解决了。Docker启动新容器的命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    docker run --name mysql
    -p 3306:3306 \
    -v /data/mysql/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=root \
    -idt docker.io/mysql:5.7.21 \
    --character-set-server=utf8 \
    --collation-server=utf8_bin \
    --character-set-server=utf8 \
    --collation-server=utf8_bin \
    --max_allowed_packet=512M \
    --innodb_log_file_size=2GB

    注意Mysql启动时候的参数,不注意这个后面会有好多个坑。
    使用Mysql的要求 =>【Confluence的文档】
    修改建议 =>【Confluence的建议】
    关于参数的解释 => 【CSDN上的一篇博客】

  • Mysql容器的配置
    登入Mysql进行DB和用户的创建

    1
    2
    3
    4
    5
    6
    7
    8
    mysql> CREATE DATABASE jira_db CHARACTER SET utf8 COLLATE utf8_bin;
    mysql> grant ALL PRIVILEGES on jira_db.* to jira_user@"%" Identified by "jira_pass";
    mysql> CREATE DATABASE confluence CHARACTER SET utf8 COLLATE utf8_bin;
    mysql> grant ALL PRIVILEGES on confluence.* to confluence_user@"%" Identified by "confluence_pass";
    #mysql> grant SELECT on *.* to backup_user@"%" Identified by "backup_user";
    #mysql> grant ALL PRIVILEGES on *.* to sa_user@"%" Identified by "sa_user";
    mysql> flush privileges;
    #set global max_allowed_packet=1073741824; 当导入时有可能是这个值过小,可以临时进行调整。
  • Mysql容器的检查
    登入Mysql对配置进行检查

    1
    2
    3
    4
    5
    docker exec -it mysql /bin/bash #进入mysql容器
    mysql> show global variables; 展示所有配置
    mysql> show engine innodb status\G; 查看innodb装填
    mysql> show variables like 'character%'; 查看字符集设置
    mysql> show variables like 'innodb_log_file%';查看innodb_log_file设置

新建Jira容器并还原数据

  • 启动Jira容器
    先启动容器,不做其他操作

    1
    docker run -p 18080:8080 -dit --name jira docker.io/cptactionhank/atlassian-jira:7.8.2
  • 原数据导出
    注意权限,也可以在导入操作进行权限的修改。另外官方备份的数据并不包括附件及插件等,具体可参照【官方说明】

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #导出Jira应用数据
    docker cp jira_v1:/var/atlassian/jira/export/2018-Nov-18--1058.zip ./
    chown -R daemon.daemon 2018-Nov-18--1058.zip
    #导出Jira附件
    docker exec -it jira_v1 /bin/bash
    > cd /var/atlassian/jira/
    > tar czvf jira_data_20181118.tar.gz /data/
    docker cp /var/atlassian/jira/jira_data_20181118.tar.gz ./
    #导出插件
    docker cp jira_v1:/var/atlassian/jira/jira_plugins_20181118.tar.gz ./
  • 将备份数据导入指定目录

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #导入Jira应用数据
    docker cp 2018-Nov-18--1058.zip jira:/var/atlassian/jira/import/
    chown -R daemon.daemon 2018-Nov-18--1058.zip
    #导入附件
    scp old-host:/tmp/jira_data_20181118.tar.gz ./jira_data_20181118.tar.gz
    chown daemon.daemon jira_data_20181118.tar.gz
    docker cp jira_data_20181118.tar.gz jira:/var/atlassian/jira/
    #导入插件
    docker cp jira_v1:/var/atlassian/jira/jira_plugins_20181118.tar.gz ./
    scp old-host:/tmp/jira_plugins_20181118.tar.gz ./
    docker cp jira_plugins_20181118.tar.gz jira:var/atlassian/jira/
  • Jira初始化
    在完成数据导入后,就可以登录http://your_host:18080,按照提示进行授权码的购买或输入。然后在最后的步骤会让选择是作为新的服务器还是从备份恢复,选择从备份恢复即可。提示还是很到位的,注意权限,权限不对的话数据导入会报错,在Jira的log里会有体现。

    1
    docker logs -f jira #追踪jira的log输出

    没有问题的话,Jira就恢复完成了,另外还有下一步的参数优化,因为官方设置的JVM默认值偏低,所以最好提前调整了。

  • Jira的参数优化
    其实容器启动的时候也可以指定,不过这个后续可能还会变动,直接修改便于维护就这样了,这个根据实际使用情况修改吧

    1
    2
    3
    4
    5
    6
    docker exec -it -u root jira /bin/bash
    #进入容器后执行以下命令
    sed -i 's@JVM_MINIMUM_MEMORY=.*@JVM_MINIMUM_MEMORY="1024m"@' /opt/atlassian/jira/bin/setenv.sh
    sed -i 's@JVM_MAXIMUM_MEMORY=.*@JVM_MAXIMUM_MEMORY="2048m"@' /opt/atlassian/jira/bin/setenv.sh
    #修改完之后,退出容器然后重启Jira容器即可
    docker restart jira

    OK,完成了Jira的迁移还原操作

新建Confluence容器并还原数据

  • 启动Confluence容器

    1
    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
  • Confluence原数据导出
    因为这个数据目录是直接挂在出来的,备份路径在/data/confluence/backups/backup-2018_11_18.zip(根据挂在路径的不同略有差异)

  • Confluence数据导入

    1
    2
    3
    scp old-host:/data/confluence/backups/backup-2018_11_18.zip ./
    mv backup-2018_11_18.zip /data/confluence/restore/
    chown daemon.daemon /data/confluence/restore/backup-2018_11_18.zip
  • Confluence初始化
    访问http://your_host:8090,根据提示进行设置,需要注意连接DB的设置需要指定连接Mysql的参数,选择JDBC的方式,如下

    1
    jdbc:mysql://your_host:3306/confluence?sessionVariables=tx_isolation='READ-COMMITTED'&useSSL=false&useUnicode=true&characterEncoding=utf8

    然后就可以正常使用了,跟Jira一样,JVM的参数也可以调整,不然的话,一段时间后可能内存就不够用了

  • Confluence启动参数修改

    1
    2
    3
    4
    5
    docker exec -it -u root confluence /bin/bash
    #进入Confluence容器后,执行以下命令
    sed -i 's@CATALINA_OPTS="-Xms.*@CATALINA_OPTS="-Xms4096m -Xms4096m ${JVM_SUPPORT_RECOMMENDED_ARGS} -Dconfluence.home=${CONFLUENCE_HOME} -XX:+UseG1GC ${CATALINA_OPTS}"@' /opt/atlassian/confluence/bin/setenv.sh
    #修改完参数后重启即可
    docker restart confluence

新建Bitbucket容器并还原数据

Bitbucket的迁移采用了相对暴力的方式,可以参照【官方迁移向导】

  • Bitbucket使用的是Docker-compose的方式进行部署的,如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    postgresql:
    image: sameersbn/postgresql:9.4-3
    environment:
    - DB_USER=bitbucket
    - DB_PASS=bitbucket_pass
    - DB_NAME=bitbucket
    volumes:
    - /srv/docker/bitbucket/postgresql:/var/lib/postgresql
    bitbucket:
    image: atlassian/bitbucket-server:5.0
    links:
    - postgresql:postgresql
    ports:
    - "80:7990"
    - "7999:7999"
    environment:
    - 'BITBUCKET_PROXY_NAME='
    - 'BITBUCKET_PROXY_PORT='
    - 'BITBUCKET_PROXY_SCHEME='
    - 'BITBUCKET_DELAYED_START='
    volumes:
    - /srv/docker/bitbucket/app-data:/var/atlassian/application-data/bitbucket
  • 导出数据
    先停止原服务,防止迁移过程中有数据的读写变化

    1
    2
    3
    #从上一步可以看出是直接原来的数据目录直接全部拿过来了
    tar czvf bitbucket_20181118.tar.gz /srv/docker/bitbucket/
    bitbucket_20181118.tar.gz
  • 将备份数据放入挂载目录

    1
    tar xvf bitbucket_20181118.tar.gz
  • 启动Bitbucket

    1
    docker-compose up -d

补充点

所有迁移完成后,由于机器IP域名等可能会变化,所以应用间的联通性需要重新建立,这就牵涉使用问题了,不赘述了。以后有其他操作及坑再同步。