FineBI6.1单机安装教程

  • 简要说明
    • FineBI 是帆软软件有限公司推出的一款商业智能(Business Intelligence)产品
    • 定位于自助大数据分析的BI工具,能够帮助企业的业务人员和数据分析师,开展以问题导向的探索式分析
    • 官方文档 https://help.fanruan.com/finebi/

14.1 资源选配

  • 操作如下

    • 指导文档 https://help.fanruan.com/fineops/doc-view-134.html,参考指标如下
    1、业务高可用:存在至少2个bi-web组件,确保某个业务节点宕机时,其他业务节点可替代完成任务
    2、日活用户数:每天登录过FineBI系统的用户数量去重,取平均值
    3、分析表最大行数:FineBI仪表板中,单个组件调用的单个自助数据集的数据行数,取最大值
    4、表数量:FineBI系统中所有表的数量总和(包括数据库表、SQL数据集、Excel数据集、自助数据集等)
    • 公共配置要求
    # 硬件配置
    linux x86_64 内核 3.10版本及以上 2.5GHz及以上  固态硬盘(SSD)- 500G
    
    # 支持操作系统 , 官方推荐 Ubuntu 22 版本
    Ubuntu 18.04.4 及以上版本(不支持 Ubuntu20.04 版本 )
    CentOS 7.3~7.9 版本
    redhat 7.6 及以上版本
    Rocky Linux 8.8~9.4版本
    
    # 磁盘类型
    XFS - 官方推荐,理由:bi-minio组件高可用模式依赖O_DIRECT特性,XFS文件系统支持该特性。
    EXT4 - 如上所示,本次仅单机没有使用高可用配置
    • 方案简介,仅单机且不考虑部署运维平台
    ## 方案一  CPU16核、内存64G
    
    日活用户数:0~300
    分析表最大行数:0~1kw
    表数量:0~2000
    
    随机读写: IOPS(4K)> 1W:磁盘每秒可以执行至少 1w 个以上的 4KB 数据块的读写操作
    顺序读写: IOPS(1024K)> 315.5MB/s:磁盘每秒可以传输至少 315.5MB 的数据块
    内网带宽: ≥2.5Gbps(312.5MB/s)
    外网带宽: ≥50Mbps(6.25MB/S)按需,一般用内网然后代理转发
    
    # 方案二  CPU32核、内存128G
    日活用户数:0~600
    分析表最大行数:0~1ww
    表数量:0~1w
    
    随机读写: IOPS(4K)> 2W:磁盘每秒可以执行至少 2w 个以上的 4KB 数据块的读写操作
    顺序读写: IOPS(1024K)> 625MB/s:磁盘每秒可以传输至少 625MB 的数据块
    内网带宽: ≥5Gbps(625MB/s)
    外网带宽: ≥100Mbps(12.5MB/S) 按需,一般用内网然后代理转发
    • 综合实际选定配置
    # 根据大数据侧同事反馈及结合体验环境资源消耗情况
    日活用户数:受登录账号量限制,0~250
    分析表最大行数:帆软预览有限制5千行,查询压力大部分会交给holo数据库,有把数据拉到帆软数据库的场景,最大考虑 5kw~10kw
    表数量:3k~5k

    综上,服务对内存需求较高,对于cpu的需求不高,因此可选择 8-64 或者 16-64 的资源配置

14.2 FineBI 部署

  • 注意事项

    • FineBI 安装路径不可包含中文,否则会启动失败
    • JDK 1.8 且小版本需在 JDK8u102 以上
    • 建议使用新购服务器,若不是新服务器需确保以下端口不被占用
    48888  30266  8090 14496  8000 
    8001   8002  12100  37799  25655 22931

14.2.1 准备安装包

  • 操作如下

    • 下载安装包
    # 访问 FineBI下载页面,在「个人本地试用及其他版本下载>个人本地试用」中,点击下载「Linux版本」
    https://www.finebi.com/product/download
    • 将安装包 linux_unix_FineBI6_1-CN.sh 上传至服务器
    # 路径 /bigdata/package
    linux_unix_FineBI6_1-CN.sh
    # 授权
    chmod +x linux_unix_FineBI6_1-CN.sh

14.2.2 安装中文字体

  • 操作如下

    • 查看字体列表
    # 如没有命令需安装 yum install fontconfig -y
    fc-list | grep chinese
  • 拷贝本地window字体

    # 路径:C:WindowsFonts ,或者直接从下面共享链接下载
    https://pan.baidu.com/s/1MOhYbPJ_p7DM9ARl1m9ewg 提取码: vqzk 
  • 将以上字体压缩包上传到/usr/share/fonts

    # tree chinese_fonts
    chinese_fonts
    ├── SIMLI.TTF
    ├── STFANGSO.TTF
    ├── STKAITI.TTF
    ├── STXINWEI.TTF
    ├── STZHONGS.TTF
    ├── msyh.ttc
    ├── msyhbd.ttc
    ├── msyhl.ttc
    ├── simfang.ttf
    ├── simhei.ttf
    ├── simkai.ttf
    └── simsun.ttc

- 调整配置文件

  ```shell
  # 修改配置 vim /etc/fonts/fonts.conf 在<!-- Font directory list --> 模块将中文字体路径添加进去
  # sed -i "/Font directory list/ a        <dir>/usr/share/fonts/chinese_fonts</dir>" /etc/fonts/fonts.conf
  <dir>/usr/share/fonts/chinese_fonts</dir>
  • 刷新内存中的字体缓存运行

    # 刷新缓存
    fc-cache
    # 验证是否添加字体成功
    fc-list | grep chinese

14.2.3 执行安装

  • 操作如下

    • 创建安装目录 /bigdata/FineBI6.1
    • 执行以下安装操作
    # /bigdata/package
    ./linux_unix_FineBI6_1-CN.sh
    • 协议部分一律按回车键
    • 选择安装目录/bigdata/FineBI6.1
    • 设置最大jvm内存,57344M 即 56G
    • 其他设置

    • 安装完成后,到安装目录中将会看到以下文件
    [root@hukanfa FineBI6.1]$ ls
    bin  jre  lib  NOTICE  RELEASE-NOTES  RUNNING.txt  server  temp  uninstall  webapps
    • 补充:后续调整工程内存分配操作下面配置文件即可
    # 调整后需重启工程服务
    /bigdata/FineBI6.1/bin/finebi.vmoptions

14.2.4 配置开机自启

  • 操作如下

    • 前置操作
    ## 创建日志目录(启动服务也会自动创建)
    mkdir -p /bigdata/FineBI6.1/logs
    • 直接启动
    # cd /bigdata/FineBI6.1
    /bigdata/FineBI6.1/bin/finebi start
    • finebi-manager.sh 创建启动脚本
    #!/bin/bash
    
    # FineBI 可执行文件路径
    FINEBI_BIN="/bigdata/FineBI6.1/bin/finebi"
    
    # 验证当前用户是否为 hukanfa
    CURRENT_USER=$(whoami)
    if [ "$CURRENT_USER" != "hukanfa" ]; then
    echo "错误: 当前用户为 $CURRENT_USER,必须以 hukanfa 用户运行此脚本!"
    exit 1
    fi
    
    # 检查 FineBI 可执行文件是否存在
    if [ ! -f "$FINEBI_BIN" ]; then
    echo "错误: $FINEBI_BIN 不存在!"
    exit 1
    fi
    
    # 函数:获取 FineBI 进程 ID
    get_pid() {
    pgrep -f "$FINEBI_BIN"
    }
    
    # 函数:启动 FineBI
    start() {
    echo "正在启动 FineBI..."
    "$FINEBI_BIN" start
    if [ $? -eq 0 ]; then
      sleep 2 # 等待进程启动
      PID=$(get_pid)
      if [ -n "$PID" ]; then
        echo "FineBI 启动成功!进程 ID: $PID"
        echo "$PID" > /bigdata/FineBI6.1/finebi.pid # 写入 PID 文件
      else
        echo "FineBI 启动失败!未找到进程 ID。"
      fi
    else
      echo "FineBI 启动失败!"
    fi
    }
    
    # 函数:停止 FineBI
    stop() {
    echo "正在停止 FineBI..."
    "$FINEBI_BIN" stop
    if [ $? -eq 0 ]; then
      sleep 2 # 等待进程停止
      PID=$(get_pid)
      if [ -z "$PID" ]; then
        echo "FineBI 停止成功!"
      else
        echo "FineBI 停止失败!进程 ID 仍存在: $PID"
      fi
    else
      echo "FineBI 停止失败!"
    fi
    }
    
    # 函数:重启 FineBI
    restart() {
    stop
    start
    }
    
    # 函数:查看 FineBI 状态
    status() {
    echo "正在检查 FineBI 状态..."
    PID=$(get_pid)
    if [ -n "$PID" ]; then
      echo "FineBI 正在运行,进程 ID: $PID"
    else
      echo "FineBI 未运行。"
    fi
    }
    
    # 函数:强制重新加载 FineBI
    force_reload() {
    echo "正在强制重新加载 FineBI..."
    "$FINEBI_BIN" force-reload
    if [ $? -eq 0 ]; then
      echo "FineBI 强制重新加载成功!"
    else
      echo "FineBI 强制重新加载失败!"
    fi
    }
    
    # 函数:直接运行 FineBI(前台)
    run() {
    echo "正在直接运行 FineBI(前台)..."
    "$FINEBI_BIN" run
    }
    
    # 函数:重定向运行 FineBI(前台,输出重定向到日志)
    run_redirect() {
    echo "正在重定向运行 FineBI(前台,输出重定向到日志)..."
    "$FINEBI_BIN" run-redirect
    }
    
    # 主逻辑
    if [ $# -eq 0 ]; then
    echo "用法: $0 {start|stop|restart|status|force-reload|run|run-redirect}"
    echo "参数说明:"
    echo "  start        启动 FineBI 服务"
    echo "  stop         停止 FineBI 服务"
    echo "  restart      重启 FineBI 服务"
    echo "  status       查看 FineBI 服务状态"
    echo "  force-reload 强制重新加载 FineBI 服务"
    echo "  run          直接运行 FineBI(前台)"
    echo "  run-redirect 重定向运行 FineBI(前台,输出到日志)"
    exit 1
    fi
    
    case "$1" in
    start)
      start
      ;;
    stop)
      stop
      ;;
    restart)
      restart
      ;;
    status)
      status
      ;;
    force-reload)
      force_reload
      ;;
    run)
      run
      ;;
    run-redirect)
      run_redirect
      ;;
    *)
      echo "错误: 未知参数 '$1'"
      echo "用法: $0 {start|stop|restart|status|force-reload|run|run-redirect}"
      echo "参数说明:"
      echo "  start        启动 FineBI 服务"
      echo "  stop         停止 FineBI 服务"
      echo "  restart      重启 FineBI 服务"
      echo "  status       查看 FineBI 服务状态"
      echo "  force-reload 强制重新加载 FineBI 服务"
      echo "  run          直接运行 FineBI(前台)"
      echo "  run-redirect 重定向运行 FineBI(前台,输出到日志)"
      exit 1
      ;;
    esac
    
    exit 0
    # 启动服务
    /bin/bash finebi-manager.sh start
    # 停止服务
    /bin/bash finebi-manager.sh stop
    # 查看服务状态
    /bin/bash finebi-manager.sh status
    • 通过 Systemd 服务管理,需要配合 finebi-manager.sh 实现
    # vim /etc/systemd/system/finebi.service
    [Unit]
    Description=FineBI Service
    After=network.target
    
    [Service]
    Type=forking
    User=hukanfa  # 请按需修改运行用户
    PIDFile=/bigdata/FineBI6.1/finebi.pid
    ExecStart=/bigdata/FineBI6.1/finebi-manager.sh start
    ExecStop=/bigdata/FineBI6.1/finebi-manager.sh stop
    TimeoutStopSec=20s
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    
    # 重载配置
    systemctl daemon-reload
    # 启动并加入开机自启
    systemctl start finebi
    systemctl enable finebi
    # 查看服务状态
    systemctl status finebi
    # 重启服务
    systemctl restart finebi
    • (可选)配置日志轮转(官方程序默认有日志轮转,不用额外配置)
    ## 创建 logrotate 配置文件 (root权限)
    vim /etc/logrotate.d/finebi
    
    /bigdata/FineBI6.1/logs/*.log {
      daily              # 每天轮转一次
      missingok          # 如果日志文件不存在,不报错
      rotate 15          # 保留最近 15 天的日志
      compress           # 压缩旧日志(使用 gzip)
      delaycompress      # 延迟压缩,下一次轮转时再压缩
      notifempty         # 如果日志文件为空,不轮转
      create 0644 hukanfa hukanfa  # 轮转后创建新文件,并设置权限和所有者
      sharedscripts      # 在所有日志轮转完成后执行脚本
      su hukanfa hukanfa # 以 hukanfa 用户和用户组身份运行 logrotate
      postrotate
          # 重启 systemd 服务以确保日志文件重新打开 ,|| true 确保即使命令失败,logrotate 也不会报错
          systemctl restart finebi.service > /dev/null 2>&1 || true
      endscript
    }
    
    ## 测试 logrotate 配置是否正确 -d 选项表示调试模式,不会实际执行轮转,仅输出调试信息
    sudo logrotate -d /etc/logrotate.d/finebi
    
    ## 补充:关于轮转如何执行
    1、logrotate 默认会通过系统的定时任务(cron)自动执行
    2、logrotate 定时任务配置在 /etc/cron.daily/logrotate
    3、这个脚本会每天执行一次,调用 logrotate 并加载 /etc/logrotate.conf 和 /etc/logrotate.d/ 中的配置

14.3 外接数据库

  • 说明

    • 对于外接数据库的配置官方文档说明有详细介绍,相关文档地址如下
    # 关于外接数据库的整体介绍文档
    https://help.fanruan.com/finebi/doc-view-437.html
    # 关于外接数据库mysql版本的配置要求文档
    https://help.fanruan.com/finebi/doc-view-1248.html
    • 关于外接数据库的主要信息如下
    ## BI 内置的数据库为 HSQL 数据库
    1、HSQL 数据库不能多线程访问,集群环境、数据量较大可能会导致 HSQL 数据库不稳定的情况,适用于本地试用产品功能
    
    ## 支持数据库类型 RDS MySQL、MySQL、Oracle、SQL Server、DB2、PostgreSQL,下面仅以 MySQL 示例
    # mysql 支持以下版本
    1、5 系列
    5.1.73、5.5.31、5.5.46、5.5.56、5.5.62、5.6.22、5.6.28、5.6.31、5.6.35、5.6.37、5.6.44
    5.7.16、5.7.23、5.7.26、5.7.33
    2、8 系列
    8.0.11、8.0.16、8.0.20、8.0.21、8.2
  • 操作如下 MySQL8.0

    • 数据库默认字符集为 utf8 ,默认排序规则为 utf8_bin,官方文档提示不支持 utf8mb4 编码
    • 大小写敏感,综上要求需调整mysql配置文件以下配置
    # conf/my.cnf
    character-set-server = utf8
    collation-server = utf8_bin
    lower_case_table_names = 0
    • 启动服务
    ## 提供 Mysql 的 docker-compose 工程压缩包,注意按需调整初始 root 密码,conf/mysql.env
    # https://pan.baidu.com/s/18YpU_LFR4X0KTdwaoIXOxw 提取码: a1dx
    docker-compose up -d
    • 创建FineBI工程所需数据库用户及数据库
    # docker exec -it mysql8.0 mysql -uroot -p 回车输入密码
    CREATE USER 'finebi_rw'@'%' IDENTIFIED BY 'Vp3k5eI&L%';
    create database finebi CHARACTER SET utf8 COLLATE utf8_bin;
    GRANT ALL ON finebi.* TO 'finebi_rw'@'%';
    flush privileges;
    • 至此,外接数据库部分准备完毕

14.4 初始化配置

  • 操作如下

    • 启动后,还需要访问界面进行一些初始配置,访问地址 http://IP:37799/webroot/decision
    • 设置管理员账号信息
    • 点击下一步,进行外接数据库的配置

14.5 Nginx 配置

  • 操作如下

    • finebi.xxx.com.conf
    server {
      listen 80;
      listen 443 ssl;
      # websocket转发
      listen 48889 ssl;
      server_name  finebi.xxx.com;
      include allow_list.conf;
      ssl_certificate certs/xxx.com.crt;
      ssl_certificate_key certs/xxx.com.key;
      access_log  logs/finebi61_access.log  qlmain;
      error_log logs/finebi61_error.log error;
      # 正常接收和处理带下划线的请求头
      underscores_in_headers on;
      # 不收录
      location /robots.txt {
          root /usr/local/nginx/html;
          index index.html;
      }
    
      location ~ ^/(webroot/websocket|socket.io) {
        proxy_pass http://192.168.26.21:48888;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;
      }
    
      location / {
      proxy_pass http://192.168.26.21:37799;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_connect_timeout 60s;
      proxy_send_timeout 120s;
        proxy_read_timeout 120s;
        proxy_next_upstream_timeout 10s;
        proxy_next_upstream_tries 3;
    
      }
    }
    • 关于underscores_in_headers参数说明
    1、默认情况下,Nginx 会忽略请求头名称中包含下划线(如 X_Custom_Header)的字段(视为无效头),即默认值 off
    2、Finebi移动端h5是通过header里的public_link_token参数进行检验的,默认忽略,所以需要配置为on
    • 关于websocket转发,以下监控功能用到。请求端口配置 48889,转发端口 48888 不能配其他的端口。

14.6 环境迁移

  • 说明

    • 企业一般在接入帆软工程前,会安装测试版本体验,之后需将测试数据相关信息迁移到正式环境
    • 当然,也可以将当前测试环境当正式用。但不巧的是本次测试环境装在内网物理机上,因此需要迁移
    • 非容器化迁移官方指导文档,不过下面的操作多少没有按照官方文档步骤来,总体上是一样的
    https://help.fanruan.com/finebi/doc-view-68.html
    https://help.fanruan.com/finebi/doc-view-383.html
    • 迁移整体流程
    1、迁移数据库,将测试实例数据迁移到新服务器上空闲的 mysql02
    2、在新服务器运行新的BI工程环境,配置数据库为 mysql01 且完成所有初始配置
    3、将测试环境的 webroot 打包迁移到新服务器相同路径下,新服务器原 webroot 目录重命名让出位置
    4、调整测试拷贝过来的 webroot 相关配置文件,保证相关路径在测试和新服务器一致,若不一致就更新路径(若都一致就跳过本步骤)
    5、启动BI工程,进行功能及数据验证
    • 服务器规划如下
    ## 体验版服务器
    192.168.26.20    /data/FineBI6.1
    ## 新服务器(正式环境) - 需创建同版本的新BI工程
    192.168.26.21    /bigdata/FineBI6.1
    mysql01  finebi_rw  Vp3k5eI&L%  3307  # 新工程配置的数据库
    mysql02  finebi_rw  Vp3k5eI&L%  3308  # 同步体验工程的数据库

14.6.1 数据库迁移

  • 操作如下

    • 官方指导文档参考
    https://help.fanruan.com/finebi/doc-view-1249.html
    • 登陆测试体验版BI工程,在 管理系统 -> 系统管理 -> 常规 -> 常规参数 修改外接数据库配置为 mysql02

14.6.2 工程目录迁移

  • 操作如下

    • 将体验版工程目录打包,上传到新服务器
    # 体验 /data/FineBI6.1/webapps 
    tar -zcvf webroot_test.tar.gz ./webroot
    # 上传到生产
    scp ./webroot_test.tar.gz hukanfa@192.168.26.21:/bigdata/FineBI6.1/webapps
    # 重命名生产新部署的工程名字,让出位置 /bigdata/FineBI6.1/webapps
    mv webroot webroot-init
    # 解压体验版压缩包
    tar -zxvf webroot_test.tar.gz
    • 调整相关配置文件工程目录路径 若迁移前后路径一致则跳过
    # 调整1 注意:文件名称会有所不同的,请根据实际情况找出对应的文件,如通过关键词过滤等
    sed -i 's#/data#/bigdata#g' ./assets/check/fa58e19f6018671123bb40fc2f3c3339684f21cb591833c34be45c0d67dbbc37_InspectionReport_20250113-144312.html
    # 调整2
    sed -i 's#/data#/bigdata#g' ./assets/check/fa58e19f6018671123bb40fc2f3c3339684f21cb591833c34be45c0d67dbbc37_InspectionReport_20250113-144312.json
    # 调整3
    sed -i 's#/data#/bigdata#g'  /bigdata/FineBI6.1/webapps/webroot/bi-data/polars/worker/conf/polars_log.xml 
    # 调整4
    sed -i 's#/data#/bigdata#g' /bigdata/FineBI6.1/webapps/webroot/bi-data/polars/master/conf/polars_log.xml 
    • 完成上述操作后,重启finebi服务,查看生产环境 /data 下是否有 FineBI6.1 目录生成
    • 若没有则代表路径调整成功,至此整个工程迁移操作结束!