使用 Confluence 搭建知识库
操作系统:CentOS
- 安装目录:/app/service/confluence
- 数据目录:/app/data/confluence
常规部署
数据库
MySQL 相关
修改 MySQL 配置文件:my.cnf
,详细见 Confluence 数据库连接说明创建 confluence 数据库和用户1
2
3
4
5
6
7
8
9# 指定默认字符设置为 utf8mb4
character-set-server=utf8mb4
collation-server=utf8mb4_bin
# 将默认存储引擎设置为 InnoDB
default-storage-engine=INNODB
max_allowed_packet=256M
innodb_log_file_size=2GB
transaction-isolation=READ-COMMITTED
binlog_format=row1
2
3CREATE DATABASE confluence CHARACTER SET utf8mb4 COLLATE 'utf8mb4_bin';
grant all privileges on confluence.* to 'confluence'@'localhost' identified by 'confluence@Abc#12345';
SET PASSWORD FOR 'confluence'@'localhost' = PASSWORD('Abc#12345');2.知识库
点击下载想要的版本(如:atlassian-confluence-7.13.7.tar.gz)并上传到安装目录;OpenJDK 必须使用 fontconfig,需要提前安装1
yum install -y fontconfig
解压部署 Confluence
1
2
3
4tar -zxvf atlassian-confluence-7.13.7.tar.gz -C /app/service
mv /app/service/atlassian-confluence-7.13.7 /app/service/atlassian-confluence
mkdir -p /app/data/confluence
echo 'confluence.home=/app/data/confluence/' > /app/service/atlassian-confluence/confluence/WEB-INF/classes/confluence-init.properties拷贝 MySQL 驱动
1
2cp confluence/mysql-connector-java-8.0.22.jar /app/service/atlassian-confluence/confluence/WEB-INF/lib/
ll /app/service/atlassian-confluence/confluence/WEB-INF/lib/*mysql*修改配置文件
1
vi /app/service/atlassian-confluence/conf/server.xml
启动 Confluence
1
2cd /app/service/atlassian-confluence/bin
./start-confluence.sh初始化 Confluence
浏览器访问 ip:8090 开始安装,语言选中文,产品安装下一步,获取应用部分不选直接下一步
根据服务器 ID:BF6I-AQX1-33EY-YALN,生成授权码,并填写到相应的输入框中1
java -jar /opt/atlassian/atlassian-agent.jar -p conf -m 10086@qq.com -n Yuwei -o YQKJ -s BF6I-AQX1-33EY-YALN
使用自己的数据库,用的 MySQL,Confluence 需要一个驱动程序以连接到 MySQL
点击提供的连接下载好驱动程序,将 .jar 文件放入 /opt/atlassian/confluence/confluence/WEB-INF/lib 下重启 Confluence 并刷新页面继续安装:1
2unzip mysql-connector-java-5.1.49.zip
cp mysql-connector-java-5.1.49/mysql-connector-java-5.1.49.jar /opt/atlassian/confluence/confluence/WEB-INF/lib/etc/init.d/confluence restart
然后通过连接字符串连接数据库,等待完成设置
为了提前熟悉使用,加载内容选示范站点
最后配置管理员即可容器部署
数据库
1
2mkdir -pv /opt/mysql/{data,logs}
vi my.cnf创建构建数据库的 Dockerfile 文件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[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
port = 3306
#设置 utf8mb4 编码
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
skip-character-set-client-handshake
#隔离级别,Confluence 要求读提交
transaction-isolation = READ-COMMITTED
#修改加密方式
default_authentication_plugin = mysql_native_password
#不区分大小写
lower_case_table_names = 1
#跳过 DNS 反查询
skip-name-resolve = 1
max_connections = 20000
open_files_limit = 65535
max-connect-errors = 10000
log-error = /var/log/mysql/error.log
#慢查询
slow_query_log = 1
long_query_time = 10
#min_examined_row_limit = 1000
slow_query_log_file = /var/log/mysql/slow_query.log
#InnoDB 日志文件大小
max_allowed_packet = 128M
innodb_log_file_size = 512M
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4创建并启动 MySQL 容器1
2
3
4
5vi MySQL-Dockerfile
FROM mysql:8.0.22
USER root
COPY "my.cnf" /etc/1
2
3
4
5
6
7
8
9
10docker build -f MySQL-Dockerfile -t mydb:8.0.22 .
docker run -d \
--restart=always \
--name mydb \
-p 3306:3306
--privileged=true \
-v /app/data/mysql/:/var/lib/mysql \
-v /app/logs/mysql:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=root@123 \
mydb:8.0.22创建 Confluence 数据库1
2[ERROR] [MY-010187] [Server] Could not open file '/var/log/mysql/error.log' for error logging: Permission denied
[ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.1
2
3
4docker exec -it mydb /bin/bash
mysql -uroot -proot@123
CREATE DATABASE confluence CHARACTER SET utf8mb4 COLLATE 'utf8mb4_bin';
ALTER USER 'root'@'%' IDENTIFIED BY 'root@123' PASSWORD EXPIRE NEVER;1
docker exec -it mydb /bin/cat /etc/hosts
知识库
创建构建文件夹, 下载注册机并解压到该目录编辑 Dockerfile1
2mkdir confluence
vi Dockerfile开始构建并运行 Confluence 容器1
2
3
4
5
6
7
8FROM atlassian/confluence-server:7.13.7
USER root
#将代理破解包加入容器
COPY "atlassian-agent.jar" /opt/atlassian/confluence/
#将 MySQL 驱动加入容器
COPY "mysql-connector-java-8.0.22.jar" /opt/atlassian/confluence/confluence/WEB-INF/lib/
#设置启动加载代理包
RUN echo '\nexport CATALINA_OPTS="-javaagent:/opt/atlassian/confluence/atlassian-agent.jar ${CATALINA_OPTS}"' >> /opt/atlassian/confluence/bin/setenv.sh初始化 Confluence:浏览器访问 ip:8090,复制 Server ID:BYPA-J1TQ-72BY-ZY101
2
3
4
5
6
7
8
9
10
11docker build -f Dockerfile -t mykb:7.13.7 .
docker run -d \
--restart always \
--name mykb \
-v /app/data/confluence:/var/atlassian/application-data/confluence \
-v /app/conf/confluence:/opt/atlassian/confluence/conf \
-p 8090:8090 -p 8091:8091 \
-e JVM_MINIMUM_MEMORY=2048m \
-e JVM_MAXIMUM_MEMORY=4096m \
-e TZ="Asia/Shanghai" \
mykb:7.13.7
进入容器,运行1
2docker ps -all
docker exec -it kb java -jar /opt/atlassian/confluence/atlassian-agent.jar -p conf -m i@yuwei.cc -n author: 君玉自牧 -o JYZM -s BYPA-J1TQ-72BY-ZY10
将计算出来的 license code 拷贝到下图所示红框中,下一步
使用自己的数据库,MYSQL 需要下载驱动,5.7 和 8.0 不一样,下载好以后放到容器指定目录,也可以添加 COPY 构建镜像重启容器,网页访问继续配置1
docker cp mysql-connector-java-8.0.22.jar kb:/opt/atlassian/confluence/confluence/WEB-INF/lib
Compose
使用容器编排的方式部署,先编辑 YAML 文件:vi docker-compose.yml
开始编排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
43version: '3' #语法格式版本
services: #定义服务
kb: #服务名称
build: #Dockerfile 路径,可以是相对/绝对路径
context: kb #Dockerfile 名称
dockerfile: Dockerfile
volumes: #相当于 docker run -v
- "/app/data/confluence:/var/atlassian/application-data/confluence" #主机路径:容器路径
command: [ #相当于 Dockfile 中的 CMD 且优先级更高
]
container_name: kb #容器名称
depends_on: #该服务依赖的其他服务,可修改启动顺序
- mysql
ports: #映射端口
- "8090:8090" #主机端口:容器端口
mysql:
#build:
#context: mysql
#dockerfile: Dockerfile
image:mysql:8.0.22
ports:
- "3306:3306"
environment: #相当于 docker run -e
MYSQL_ROOT_PASSWORD: root@123 #初始化的数据库密码
MYSQL_DATABASE: author: 君玉自牧 #初始化的数据库名称
container_name: mysql
restart: always #自动重启
volumes:
- "/app/data/mysql:/var/lib/mysql"
command: [ #相当于 Dockfile 中的 CMD 且优先级更高
"mysqld",
"--lower_case_table_names=1", #设置表名不区分大小写
"--default-authentication-plugin=mysql_native_password", #设置密码认证插件,低于 8.0.4 版本忽略
"--character-set-server=utf8mb4",
"--collation-server=utf8mb4_general_ci",
"--max_connections=3000" #设置最大连接数
]
networks:
default:
external:
name: kbnet1
docker-compose up -d
其他设置
反向代理
使用二级域名访问,直接反代即可;实现 http://example:8090/conference 使用下述步骤:设置目录
在 Tomcat 中设置 Confluence 应用程序路径(主机名和端口之后的部分),编辑<安装目录>/conf/server.xml,找到“上下文”定义:并将其更改为1
2
3
4
5<Context path=""
docBase="../confluence"
debug="0"
reloadable="false"
useHttpOnly="true">重新启动 Confluence,并检查您是否可以在 http://example:8090/conference1
2
3
4
5<Context path="confluence"
docBase="../confluence"
debug="0"
reloadable="false"
useHttpOnly="true">配置连接器
先停止 Confluence,找到并编辑文件:/opt/atlassian/confluence/conf/server.xml;按实际情况修改 proxyName、proxyPort、scheme 的值,保存文件:请确保包含的值正确协议以及代理名称,如果是 http 访问请如下配置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<Connector port="8090"
maxThreads="48"
minSpareThreads="10"
connectionTimeout="20000"
enableLookups="false"
protocol="org.apache.coyote.http11.Http11NioProtocol"
redirectPort="8443"
acceptCount="10"
debug="0"
URIEncoding="UTF-8"
secure="false"
scheme="http"
proxyName="www.example.com"
proxyPort="443"
maxHttpHeaderSize="8192" />修改 context -> path 的值,不要使用内置的路径,例如:resources 等,保存文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<Connector port="8090"
maxThreads="48"
minSpareThreads="10"
connectionTimeout="20000"
enableLookups="false"
protocol="org.apache.coyote.http11.Http11NioProtocol"
redirectPort="8443"
acceptCount="10"
debug="0"
URIEncoding="UTF-8"
secure="false"
relaxedPathChars="[]|"
relaxedQueryChars="[]|{}^\`"<>"
scheme="http"
proxyName="www.example.com"
proxyPort="80"
maxHttpHeaderSize="8192" />找到并编辑文件:/var/atlassian/application-data/confluence/confluence.cfg.xml,修改 confluence.webapp.context.path 字段1
2
3
4
5<Context path="/doc"
docBase="../confluence"
debug="0"
reloadable="false"
useHttpOnly="true">重启启动 Confluence,需要在缓存管理里清空一遍缓存1
<property name="confluence.webapp.context.path">/doc</property>
配置 Nginx
需要在 Nginx 中指定一个监听服务器,如下例所示:将以下内容添加到 Nginx 配置中,替换服务器名称以及 SSL 证书和密钥的位置等1
2
3
4
5
6
7
8location /confluence/ {
proxy_pass http://192.168.10.20:8090/confluence/;
proxy_redirect off;
client_max_body_size 100m;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}故障及优化
附件乱码
复制并安装字体修改 setenv.sh 脚本1
2
3docker cp ./zh_CN docker:/tmp/
cp -r /tmp/zh_CN /usr/share/fonts/
fc-list备份并清空缓存文件1
2
3
4
5docker cp kb:/opt/atlassian/confluence/bin/setenv.sh setenv.sh
vim /opt/atlassian/confluence/bin/setenv.sh
#搜索`CATALINA_OPTS`, 在最后一个匹配行后追加
CATALINA_OPTS="-Dconfluence.document.conversion.fontpath=/usr/share/fonts/Zh_CN/ ${CATALINA_OPTS}"重启服务1
2
3
4
5
6
7
8
9
10#备份目录
cp -r /var/atlassian/application-data/confluence/viewfile/ /root/viewfile_xxxxxx
cp -r /var/atlassian/application-data/confluence/shared-home/ /root/shared-home_xxxxxx
cp -r /var/atlassian/application-data/confluence/thumbnails/ /root/thumbnails_xxxxxx
#清空文件
rm -rf /var/atlassian/application-data/confluence/viewfile/*
rm -rf /var/atlassian/application-data/confluence/thumbnails/*
rm -rf /var/atlassian/application-data/confluence/shared-home/dcl-document/*
rm -rf /var/atlassian/application-data/confluence/shared-home/dcl-document_hd/*
rm -rf /var/atlassian/application-data/confluence/shared-home/dcl-thumbnail/*1
/opt/atlassian/confluence/bin/stop-confluence.sh && /opt/atlassian/confluence/bin/start-confluence.sh
InnoDB 日志文件大小
设置太小会
先停止 Confluence 和 MySQL 服务
将 logfile 转移到备份目录,修改配置文件后启动 MySQL 会重新生成1
2
3cd /app/data/mysql
mv ib_logfile* /app/backup/mysql
mv aria_log* /app/backup/mysql
vi my.cnf 增加max_allowed_packet = 128M
和innodb_log_file_size = 512M
::: warning 注意
不建议删除内置用户组
:::
用户没有权限
同事将 confluence 默认的管理和用户组全删了,新建了管理组,然后除了管理员其他的都没有权限了
然后发现,除了空间给组添加权限以外还需要在管理后台全局权限菜单给相应的组设置权限
无法创建用户
同事将 confluence 默认的管理和用户组全删了,然后导致无法创建用户,重新创建“confluence-users”组就好了
confluence-users:这是所有新用户的默认组,分配给该组的权限将分配给所有新注册的 Confluence 用户
如果还有问题进数据库查看并更新相关的默认组
::: danger
修改数据库前,一定要先备份
:::
1 | SELECT bandanavalue FROM bandana WHERE bandanakey='atlassian.confluence.settings'; |
然后将结果(XML 格式)拷贝出来,搜索并修改<defaultUsersGroup>
标签对的值,然后将复制出来的数据拷贝到更新语句中执行1
UPDATE bandana SET bandanavalue='修改后的数据' WHERE bandanakey='atlassian.confluence.settings';
其他问题
管理左下角故障排除和技术支持工具中找到 Confluence 自带的日志分析器,扫描,点击可以查看具体的报错及解决办法
服务迁移
原来没有考虑到二级目录以及对外访问的问题,所以使用的是官方镜像,没有进行修改,最好的做法就是重新迁移