之前写过使用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容器并还原数据
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容器并还原数据
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
|
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的参数也可以调整,不然的话,一段时间后可能内存就不够用了
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
|
补充点
所有迁移完成后,由于机器IP域名等可能会变化,所以应用间的联通性需要重新建立,这就牵涉使用问题了,不赘述了。以后有其他操作及坑再同步。