操作系统:CentOS

  • 安装目录:/app/service/confluence
  • 数据目录:/app/data/confluence

    常规部署

    数据库

    MySQL 相关
    修改 MySQL 配置文件:my.cnf,详细见 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=row
    创建 confluence 数据库和用户
    1
    2
    3
    CREATE 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
    4
    tar -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
    2
    cp 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
    2
    cd /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 下
    1
    2
    unzip 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
    重启 Confluence 并刷新页面继续安装:/etc/init.d/confluence restart
    然后通过连接字符串连接数据库,等待完成设置

    为了提前熟悉使用,加载内容选示范站点

    最后配置管理员即可

    容器部署

    数据库

    1
    2
    mkdir -pv /opt/mysql/{data,logs}
    vi my.cnf
    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
    创建构建数据库的 Dockerfile 文件
    1
    2
    3
    4
    5
    vi MySQL-Dockerfile

    FROM mysql:8.0.22
    USER root
    COPY "my.cnf" /etc/
    创建并启动 MySQL 容器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    docker 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
    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.
    创建 Confluence 数据库
    1
    2
    3
    4
    docker 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

    知识库

    创建构建文件夹, 下载注册机并解压到该目录
    1
    2
    mkdir confluence
    vi Dockerfile
    编辑 Dockerfile
    1
    2
    3
    4
    5
    6
    7
    8
    FROM 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 容器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    docker 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
    初始化 Confluence:浏览器访问 ip:8090,复制 Server ID:BYPA-J1TQ-72BY-ZY10

    进入容器,运行
    1
    2
    docker 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
    43
    version: '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: kbnet
    开始编排
    1
    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">
    并将其更改为
    1
    2
    3
    4
    5
    <Context path="confluence"
    docBase="../confluence"
    debug="0"
    reloadable="false"
    useHttpOnly="true">
    重新启动 Confluence,并检查您是否可以在 http://example:8090/conference

    配置连接器

    先停止 Confluence,找到并编辑文件:/opt/atlassian/confluence/conf/server.xml;按实际情况修改 proxyName、proxyPort、scheme 的值,保存文件:
    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" />
    请确保包含的值正确协议以及代理名称,如果是 http 访问请如下配置
    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="[]|{}^&#x5c;&#x60;&quot;&lt;&gt;"
    scheme="http"
    proxyName="www.example.com"
    proxyPort="80"
    maxHttpHeaderSize="8192" />
    修改 context -> path 的值,不要使用内置的路径,例如:resources 等,保存文件
    1
    2
    3
    4
    5
    <Context path="/doc"
    docBase="../confluence"
    debug="0"
    reloadable="false"
    useHttpOnly="true">
    找到并编辑文件:/var/atlassian/application-data/confluence/confluence.cfg.xml,修改 confluence.webapp.context.path 字段
    1
    <property name="confluence.webapp.context.path">/doc</property>
    重启启动 Confluence,需要在缓存管理里清空一遍缓存

    配置 Nginx

    需要在 Nginx 中指定一个监听服务器,如下例所示:将以下内容添加到 Nginx 配置中,替换服务器名称以及 SSL 证书和密钥的位置等
    1
    2
    3
    4
    5
    6
    7
    8
    location /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;
    }

    故障及优化

    附件乱码

    复制并安装字体
    1
    2
    3
    docker cp ./zh_CN docker:/tmp/
    cp -r /tmp/zh_CN /usr/share/fonts/
    fc-list
    修改 setenv.sh 脚本
    1
    2
    3
    4
    5
    docker 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
3
cd /app/data/mysql
mv ib_logfile* /app/backup/mysql
mv aria_log* /app/backup/mysql

vi my.cnf 增加max_allowed_packet = 128Minnodb_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 自带的日志分析器,扫描,点击可以查看具体的报错及解决办法

服务迁移

原来没有考虑到二级目录以及对外访问的问题,所以使用的是官方镜像,没有进行修改,最好的做法就是重新迁移

大致步骤

  1. 在新环境安装部署 Confluence
  2. 备份 Confluence【旧】 数据并迁移到现有环境
  3. 备份 Confluence【旧】 数据库并导入新库
  4. 重启 Confluence【新】,进行检查测试
    1. Nginx 配置代理和证书,增加访问的安全性