confluence 4.2 升级至 6.10.x 记录

confluence 4.2 升级至 6.10.x 记录

首先将线上环境中的 confluence 安装目录、数据目录以及数据库进行备份,相关信息以下:html

  • 安装目录:/opt/atlassian/confluence
  • 数据目录:/opt/confluencedata
  • 数据库:confluence_smc

具体升级过程以下:java

1、修改 confluence 服务应用程序目录

因为公司 confluence 服务 4.2 版本安装时,将应用程序目录移动至 webapps 目录下,致使升级时会没法识别到安装路径,因此须要修改应用程序路径,步骤以下:mysql

首先中止 confluence 服务,将 webapps 目录下的 wiki 目录移动到安装目录的根目录下,并重命名为 confluence:nginx

mv /opt/atlassian/confluence/webapps/wiki /opt/atlassian/confluence/confluence

修改 server.xml 文件,将 docBase 修改成以下内容:web

<Context path="" docBase="../confluence" debug="0" reloadable="false" useHttpOnly="true">

修改完成后从新启动 confluence 服务验证访问,此时直接输入 IP:端口 便可sql

/opt/atlassian/confluence/bin/startup.sh

2、修改数据库配置

1. 修改字符集和排序

因为公司当前使用的 confluence 服务的数据库字符集为 utf8,而且未指定排序方式。为了保证后面跨版本升级时新的数据库结构可以正常同步,首先须要对数据库中的默认字符集和排序方式进行修改,修改步骤以下:数据库

  1. 因为涉及修改的数据量比较大,首先设置忽略外键约束,避免修改时报错:
SET FOREIGN_KEY_CHECKS=0;
  1. 修改数据库默认字符集和排序,命令以下:
ALTER DATABASE confluence_smc CHARACTER SET utf8 COLLATE utf8_bin;
  1. 修改数据库中全部表的字符集和排序,命令以下:
SELECT CONCAT('ALTER TABLE `',  table_name, '` CHARACTER SET utf8 COLLATE utf8_bin;')
FROM information_schema.TABLES AS T, information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` AS C
WHERE C.collation_name = T.table_collation
AND T.table_schema = 'confluence_smc'
AND
(
    C.CHARACTER_SET_NAME != 'utf8'
    OR
    C.COLLATION_NAME != 'utf8_bin'
);

上面的命令执行完成后会生成修改全部表的 sql 语句,将这些 sql 复制到数据库内执行便可完成修改apache

  1. 修改全部数据类型为 varchar 字段的字符集和排序:
SELECT CONCAT('ALTER TABLE `', table_name, '` MODIFY `', column_name, '` ', DATA_TYPE, '(', CHARACTER_MAXIMUM_LENGTH, ') CHARACTER SET utf8 COLLATE utf8_bin', (CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END), ';')
FROM information_schema.COLUMNS 
WHERE TABLE_SCHEMA = 'confluence_smc'
AND DATA_TYPE = 'varchar'
AND
(
    CHARACTER_SET_NAME != 'utf8'
    OR
    COLLATION_NAME != 'utf8_bin'
);

上面的命令执行完成后会生成修改全部相关字段的 sql 语句,将这些 sql 复制到数据库内执行便可完成修改tomcat

  1. 修改全部数据类型不是 varchar 字段字符集和排序:
SELECT CONCAT('ALTER TABLE `', table_name, '` MODIFY `', column_name, '` ', DATA_TYPE, ' CHARACTER SET utf8 COLLATE utf8_bin', (CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END), ';')
FROM information_schema.COLUMNS 
WHERE TABLE_SCHEMA = 'confluence_smc'
AND DATA_TYPE != 'varchar'
AND
(
    CHARACTER_SET_NAME != 'utf8'
    OR
    COLLATION_NAME != 'utf8_bin'
);

上面的命令执行完成后会生成修改全部相关字段的 sql 语句,将这些 sql 复制到数据库内执行便可完成修改bash

  1. 设置开启外键约束:
SET FOREIGN_KEY_CHECKS=1;

2. 修改数据库配置文件

检查数据库的配置文件,在 [mysqld] 下面添加以下配置项:

character-set-server=utf8
collation-server=utf8_bin
default-storage-engine=INNODB
max_allowed_packet=256M
max_connections=1000
innodb_log_file_size=2GB
transaction-isolation=READ-COMMITTED
binlog_format=row

若是当前数据库中只有 confluence 一个业务,能够参考如上配置,若是有其余业务共用,为了不影响其余业务,能够考虑将字符集和引擎设置忽略(可在程序链接数据库时在 jdbc 链接中指定)。

若是数据库配置文件中有以下配置,须要将其删除,不然会引起报错。若是还开启了其余的 sql_mode ,只须要删除 NO_AUTO_VALUE_ON_ZERO 便可:

sql_mode = NO_AUTO_VALUE_ON_ZERO

若是开启了 NO_AUTO_VALUE_ON_ZERO 则会引起以下报错内容:

2020-08-14 09:26:06,520 ERROR [http-8090-4] [atlassian.event.internal.EventPublisherImpl] invokeListeners There was an exception thrown trying to dispatch event 'com.atlassian.confluence.event.events.content.comment.CommentCreateEvent[source=com.atlassian.confluence.pages.DefaultCommentManager@4b077b33]' from the invoker 'com.atlassian.event.internal.SingleParameterMethodListenerInvoker@25695aa2'.
 -- url: /rest/tinymce/1/content/524379/comment | userName: admin| referer: http://<confluence-url>/pages/viewpage.action?pageId=524379
java.lang.RuntimeException: java.lang.reflect.UndeclaredThrowableException
        at com.atlassian.event.internal.SingleParameterMethodListenerInvoker.invoke(SingleParameterMethodListenerInvoker.java:50)
        at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$2.run(AsynchronousAbleEventDispatcher.java:60)
        at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$1.execute(AsynchronousAbleEventDispatcher.java:28)
.....
Caused by: java.lang.reflect.UndeclaredThrowableException
        at $Proxy943.createOrUpdate(Unknown Source)
        at sun.reflect.GeneratedMethodAccessor1033.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
.....
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.GeneratedMethodAccessor1033.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.atlassian.mywork.client.service.ServiceSelectorImpl$3.invoke(ServiceSelectorImpl.java:144)
        ... 235 more
Caused by: java.lang.NullPointerException
        at net.java.ao.EntityManager$CacheKey.hashCode(EntityManager.java:1070)
        at java.util.HashMap.getEntry(Unknown Source)
        at java.util.LinkedHashMap.get(Unknown Source)
        at net.java.ao.EntityManager.getFromCache(EntityManager.java:247)
        at net.java.ao.EntityManager.peer(EntityManager.java:234)
        at net.java.ao.EntityManager.peer(EntityManager.java:299)
        at net.java.ao.EntityManager.create(EntityManager.java:411)
......

配置完成后重启数据库服务。

3. 修改 confluence 数据库配置文件

confluence 数据库配置文件存储在 confluence 家目录下,文件名称为 confluence.cfg.xml,将其中的 hibernate.connection.url 配置项进行修改:

<property name="hibernate.connection.url">jdbc:mysql://IP:3306/confluence_smc?sessionVariables=storage_engine%3DInnoDB</property>

<!--  将以上内容修改成以下( 添加&amp;useUnicode=true&amp;characterEncoding=utf8 )-->
<!--  添加这部份内容是因为数据库中字符集和排序已经修改成 utf8,若是不添加这部分配置会致使升级 5.x 版本时没法同步新的数据库结构,致使表缺失 -->

<property name="hibernate.connection.url">jdbc:mysql://IP:3306/confluence_smc?sessionVariables=storage_engine%3DInnoDB&amp;useUnicode=true&amp;characterEncoding=utf8</property>

须要注意的是,若是使用 mysql 5.7 版本,也须要将其中的 storage_engine 修改成 default_storage_engine

3、升级至 confluence 4.3.7 版本

confluence 4.X 中能升级的最大版本是 v4.3.7,因此先将 wiki 升级至 4.3.7 版本,步骤以下:

将原 wiki 服务进程中止,下载 4.3.7 版本安装包至 /opt 目录下,下载连接:https://www.atlassian.com/software/confluence/downloads/binary/atlassian-confluence-4.3.7-x64.bin

执行该二进制文件进行升级:

[root@localhost opt]# ./atlassian-confluence-4.3.7-x64.bin
Unpacking JRE ...
Starting Installer ...

This will install Confluence 4.3.7 on your computer.
OK [o, Enter], Cancel [c]

Choose the appropriate installation or upgrade option.
Please choose one of the following:
Express Install (uses default settings) [1], Custom Install (recommended for advanced users) [2], Upgrade an existing Confluence installation [3, Enter]							# 选择升级 confluence

Existing installation directory:
[/opt/atlassian/confluence]						   # 指定 confluence 的安装路径

Back Up Confluence Home
The upgrade process will automatically back up your Confluence Installation
Directory. You can also choose to back up your existing Confluence Home
Directory. Both directories are backed up as zip archive files in their
respective parent directory locations.

We strongly recommend choosing this option in the unlikely event that you
experience problems with the upgrade and may require these backups to
restore your existing Confluence installation.

If you have many attachments in your Confluence Home Directory, the zip
archive of this directory may consume a significant amount of disk space.
Back up Confluence home ?
Yes [y, Enter], No [n]							 # 备份 confluence 的家目录,若是此前已经作过备份,此处可选择 No
n

Checking for local modifications.

List of modifications made within Confluence directories.

The following provides a list of file modifications within the confluence
directory.

Modified files:
	confluence/WEB-INF/lib/atlassian-extras-2.4.jar
Removed files:
	(none)
Added files:
	(none)

[Enter]


Checking if your instance of Confluence is running
Upgrade Check List
Back up your external database
We strongly recommend you back up your Confluence database if you have not
already done so.

Please refer to the following URL for back up guidelines:
http://docs.atlassian.com/confluence/docs-43/Production+Backup+Strategy

Check plugin compatibility
Check that your non-bundled plugins are compatible with Confluence 4.3.7.

For more information see our documentation at the following URL:
http://docs.atlassian.com/confluence/docs-43/Installing+and+Configuring+Plugins+using+the+Universal+Plugin+Manager


Please ensure you have read the above checklist before upgrading.
Your existing Confluence installation is about to be upgraded! Do you want to proceed?
Upgrade [u, Enter], Exit [e]


Your instance of Confluence is currently being upgraded.
Checking if Confluence has been shutdown...
Backing up the Confluence installation directory

Deleting the previous Confluence installation directory...

Extracting files ...


Please wait a few moments while Confluence starts up.
Launching Confluence ...
Installation of Confluence 4.3.7 is complete
Your installation of Confluence 4.3.7 is now ready and can be accessed via
your browser.
Custom modifications
Your previous Confluence installation contains customisations that must be
manually transferred. Refer to our documentation more information:
http://docs.atlassian.com/confluence/docs-43/Upgrading+Confluence#UpgradingConfluence-custommodifications
Confluence 4.3.7 can be accessed at http://localhost:8090

Confluence 4.3.7 may take several minutes to load on first start up.
Finishing installation ...

启动完成后访问页面,若是页面正常访问且数据完整,则升级完成(在启动以前其实还涉及到激活的过程,这部分以前在博文写了,可是为了不引发没必要要的麻烦已经删除,有须要的朋友能够给我留言)。

4、升级至 5.10.9 版本

升级至 4.3.7 版本后,就能够直接升级至 5.10.9 版本,5.10.9 版本下载连接:https://www.atlassian.com/software/confluence/downloads/binary/atlassian-confluence-5.10.9-x64.bin

将下载后的安装包上传到 /opt 目录下,中止 wiki 服务,按照升级 4.3.7 的方式执行升级程序。

若是在执行升级程序时,报以下错误:

Could not display the GUI. This application needs access to an X Server.

这表明系统中缺乏 dejavu-sans-fonts 软件包,使用以下命令安装便可:

yum install -y dejavu-sans-fonts

启动完成后访问页面,若是页面正常访问且数据完整,则升级完成(在启动以前其实还涉及到激活的过程,这部分以前在博文写了,可是为了不引发没必要要的麻烦已经删除,有须要的朋友能够给我留言)。

5、升级至 6.15.9 版本

6.15.9 版本下载连接:https://www.atlassian.com/software/confluence/downloads/binary/atlassian-confluence-6.15.9-x64.bin

将下载后的安装包上传到 /opt 目录下,中止 wiki 服务,按照升级 5.10.9 的方式执行升级程序。

启动完成后访问页面,若是页面正常访问且数据完整,则升级完成(在启动以前其实还涉及到激活的过程,这部分以前在博文写了,可是为了不引发没必要要的麻烦已经删除,有须要的朋友能够给我留言)。

6、修改访问路径

原 confluence 将程序主目录放置在 /opt/atlassian/confluence/webapps 目录下,而新的 confluence 服务的程序主目录是在 /opt/atlassian/confluence 目录下,因此为了确保升级前的连接地址能够正常访问升级后的服务,须要作以下修改:

  1. 将 /opt/atlassian/confluence 目录下的 confluence 主程序目录移动至 /opt/atlassian/confluence/webapps 目录下,并重命名为 wiki

  2. 修改 /opt/atlassian/confluence/conf 目录下的 server.xml 文件,将其中指定程序主目录的配置进行修改:

<Context path="" docBase="../confluence" debug="0" reloadable="false" useHttpOnly="true">
    
<!-- 将上面的配置修改成以下内容 -->
    
<Context path="" docBase="" debug="0" reloadable="false" useHttpOnly="true">
    
<!-- 配置 docBase 部分为空,tomcat 启动时会自动到 webapps 目录下寻找项目启动 -->
  1. 重启 confluence 服务,此时就可使用原访问地址http://ops.wiki.com/wiki 进行访问。

7、处理预览文件显示乱码的问题

官方处理文档https://confluence.atlassian.com/confkb/the-text-in-a-powerpoint-excel-or-word-document-looks-different-when-using-the-viewfile-macro-200213562.html#TheTextinaPowerPoint,ExcelorWordDocumentisMissingorLooksDifferentwhenUsingtheViewfileMacro-InstallingMicrosoftFonts

confluence 6 版本添加了文件预览的功能,若是系统中缺乏字符集,预览的时候会显示乱码,解决办法以下:

首先在操做系统中建立以下目录(CentOS 系统):

mkdir -p /usr/share/fonts/msttcore/

找一台 Windows 系统的电脑,将 C:\Windows\Fonts 目录下的全部字体文件打包,上传到 /usr/share/fonts/msttcore 目录下。

在 /opt/atlassian/confluence/bin 目录下(安装目录),编辑 setenv.sh 脚本,在 CATALINA_OPTS 部分添加以下内容:

CATALINA_OPTS="-Dconfluence.document.conversion.fontpath=/usr/share/fonts/msttcore/ ${CATALINA_OPTS}"

在 /opt/confluencedata 目录下删除以下内容(数据目录):

rm -rf /opt/confluencedata/viewfile/*
rm -rf /opt/confluencedata/thumbnails/*
rm -rf /opt/confluencedata/shared-home/dcl-document/*
rm -rf /opt/confluencedata/shared-home/dcl-document_hd/*
rm -rf /opt/confluencedata/shared-home/dcl-thumbnail/*

重启 confluence 服务便可。

8、处理验证码不显示的问题

confluence 默认在登陆失败超过 3 次就会开启验证码认证,若是出现验证码彻底不显示,有多是字符编码的问题,通常日志中会有以下报错:

2020-09-05 15:01:27,053 ERROR [http-8090-1] [[Standalone].[localhost].[/].[jcaptcha]] log Servlet.service() for servlet jcaptcha threw exception
com.octo.captcha.CaptchaException: word is too tall: try to use less letters, smaller font or bigger background:  text bounds = {text=tasble

在 /opt/atlassian/confluence/bin 目录下(安装目录),编辑 setenv.sh 脚本,在 CATALINA_OPTS 部分添加以下内容:

CATALINA_OPTS="-Dfile.encoding=UTF-8"

在系统中安装以下软件(通常状况下都是默认安装好的):

yum -y install deja*

重启 confluence 便可。

若是只是部分验证码不显示(刷新屡次,偶现验证不显示的状况),多是因为缺失字体致使的,暂未找到解决办法,能够先关闭验证码功能。

9、处理升级 confluence 后没法建立页面的问题

官方处理文档:

confluence 升级至 6.15.10 版本后,建立空间或页面会显示以下报错:

该文件的加载时间比平时要长。请稍等片刻,而后尝试刷新

页面会一直卡在刷新的界面中,通过排查,能够肯定是因为 confluence 新增的协同编辑功能致使的。

协同编辑是经过 Synchrony 进行的,Synchrony 在默认的状况下是运行在 8091 端口的。这个可以实时的同步数据。Synchrony 是一个可执行的进程,这个进程是在 Confluence 以外运行的,可是又是由 Confluence 自动进行管理的。

若是没有在 confluence 中使用反向代理 ,那么会经过 Confluence 的内部 Synchrony 代理链接到 Synchrony。

若是 confluence 是运行在一个反向代理的后面的,那么就须要在反向代理中添加针对 Synchrony 服务 ws 请求的代理配置。例如当前使用 NGINX 做为反向代理,那么在 NGINX 中添加以下配置(与 confluence 在同一个 server 段):

location /synchrony {
		proxy_set_header X-Forwarded-Host $host;
		proxy_set_header X-Forwarded-Server $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_pass http://IP:8091/synchrony;
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection "Upgrade";
}

接下来修改 /opt/atlassian/confluence/conf 目录下的 server.xml 文件,在其中配置 tomcat 链接器:

<Connector port="8090" connectionTimeout="20000" redirectPort="8443"
		   maxThreads="48" minSpareThreads="10"
		   enableLookups="false" acceptCount="10" debug="0" URIEncoding="UTF-8"
		   protocol="org.apache.coyote.http11.Http11NioProtocol"
		   proxyName="ops.wiki.com" proxyPort="80" schema="http"/>

修改完成后重启 confluence 服务便可。

或者直接在 confluence 的设置中将协同编辑功能关闭,也能够解决该问题。

相关文章
相关标签/搜索