Web知识库应用程序LibreKB

什么是 LibreKB ?
LibreKB是一款知识库Web应用程序。免费、开源、自托管,基于PHP/MySQL。
官方并没有 Docker 镜像,老苏这次图省事,并没有像往常一样构建一个镜像,而是基于 Docker 搭建了一个 LAMP 环境,其中 LAP 由镜像 php:8.1-apache 完成,M 由群晖的 MariaDB 10 完成
之所以这么干,是因为上次应网友要求折腾 acg-faka 没成功,留下了一个现成的环境,干掉之前,怎么也得利用一下,发挥点作用吧
准备工作
建数据库
老苏用了群晖自带的 MariaDB 10 数据库。

在 phpMyAdmin 中创建名为 librekb 的空数据库。
为便于说明,假设数据库密码为
123456

所以根据上面的设置,最后得到的数据库相关的参数如下:
- 数据库主机:
192.168.0.199 - 数据库端口:
3307; - 数据库用户:
librekb - 数据库密码:
123456 - 数据库库名:
librekb,因为勾选了与用户同名;
下载代码
下载地址:https://github.com/michaelstaake/LibreKB/releases

安装
安装镜像
在群晖上以 Docker 方式安装。
之所以没用图形界面安装,是因为后续还要在命令行安装数据库驱动
如果你熟悉命令行,可能用 docker cli 更快捷
# 新建文件夹 librekb 和 子目录
mkdir -p /volume2/docker/librekb/www# 进入 librekb 目录
cd /volume2/docker/librekb# 运行容器
docker run -d \--restart unless-stopped \--name librekb \-p 8954:80 \-v $(pwd)/www:/var/www/html \php:8.1-apache
也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件
version: '3'services:php-apache-environment:image: php:8.1-apachecontainer_name: librekbvolumes:- ./www:/var/www/html/ports:- 8954:80
然后执行下面的命令
# 新建文件夹 librekb 和 子目录
mkdir -p /volume2/docker/librekb/www# 进入 librekb 目录
cd /volume2/docker/librekb# 将 docker-compose.yml 放入当前目录# 一键启动
docker-compose up -d
上传代码
因为还没上传代码,所以在浏览器中输入 http://群晖IP:8954只能看到错误页

可以在本地解压后上传

代码上传完成后,应该下面👇这个样子的

直接刷新页面是会报错,因为还要修改设置文件 config.php

设置代码的修改
还需要重命名 config.example.php 文件为 config.php,并修改其中数据库连接和邮件设置,邮件是用于密码重置的
下面👇是一个示例,其中 192.168.0.199 为群晖主机的 IP,其他参数比较简单,就不一一说明
<?php
require 'vendor/phpmailer/src/Exception.php';
require 'vendor/phpmailer/src/PHPMailer.php';
require 'vendor/phpmailer/src/SMTP.php';
class Config {public function __construct() {/* Database Configuration */$this->db_host = '192.168.0.199:3307';$this->db_user = 'librekb';$this->db_pass = '123456';$this->db_name = 'librekb';/* System Configuration */$this->systemURL = 'http://192.168.0.199:8954/'; //example https://kb.example.com/ or https://example.com/kb/$this->updateCheck = 'yes'; //change this to no if you wish to disable the update check. /* Email Configuration */$this->mailHost = 'smtp.88.com'; //Set the SMTP server to send through$this->mailSMTPAuth = true; //Enable SMTP authentication$this->mailUsername = 'wbsu2003@88.com'; //SMTP username$this->mailPassword = '<第三方邮件客户端密码>'; //SMTP password$this->mailSMTPSecure = 'ssl'; //Enable implicit TLS encryption$this->mailPort = 465; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`$this->mailFrom = 'wbsu2003@88.com';}
}
require_once('classes/Database.php');
require_once('classes/Search.php');
require_once('classes/Email.php');
require_once('classes/Article.php');
require_once('classes/Category.php');
require_once('classes/Setting.php');
require_once('classes/User.php');
?>
安装驱动
虽然设置已完成,涉及到数据库的页面会显示错误Connection failed: could not find driver,因为默认 php:8.1-apache 没有带数据库 PDO MySQL 驱动
所以要执行👇下面的命令来安装,这里假设你容器的名称未做修改,就叫 librekb
# 安装 PDO MySQL 驱动
docker exec -it librekb /bin/bash docker-php-ext-install pdo_mysql# 重新启动容器
docker restart librekb

Bug 代码的修改
虽然老苏不是程序员,但是还是觉得 /admin/index.php 应该是有 bug 的,在创建分类时会报错
Warning: Undefined array key "slug" in /var/www/html/admin/index.php on line 161 Warning: Undefined array key "icon" in /var/www/html/admin/index.php** on line 163 Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/admin/index.php:161) in /var/www/html/admin/index.php on line 175
查看了一下代码

而在页面中实际上并没有找到 slug 和 icon,可能是下一版作者准备添加的内容吧

新建文章时同样也会报错
Warning: Undefined array key "slug" in /var/www/html/admin/index.php on line 377 Warning: Undefined array key "featured" in **/var/www/html/admin/index.php** on line 382 Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/admin/index.php:377) in /var/www/html/admin/index.php on line 393

所以老苏修改了一下,其实也就是把报错的几行做了注释,可以在 https://github.com/wbsu2003/synology/blob/main/LibreKB/index.php 找到,替换掉 /admin 目录中的 index.php 即可

运行
上面这些都做完之后,终于可以打开 http://群晖IP:8954/install.php 进行安装了
后端
第一步要创建管理员

安装完成

打开页面 http://群晖IP:8954/admin,或者直接点页面上的 admin

登录成功后的主界面

为了安全,需要删除 install.php 和 update.php,不然页面上会有提示

点 Create Category 创建类别

完成之后

可以在该分类下 Create Article

完成之后

前端
回到前端的首页 http://群晖IP:8954

进入分类

查看文档

参考文档
michaelstaake/LibreKB: Knowledge Base Web App - Free, Open Source, Self Hosted, PHP/MySQL
地址:https://github.com/michaelstaake/LibreKB
LibreKB
地址:https://librekb.com/
Categories - docs.librekb.com
地址:https://docs.librekb.com/
相关文章:
Web知识库应用程序LibreKB
什么是 LibreKB ? LibreKB 是一款知识库 Web 应用程序。免费、开源、自托管,基于 PHP/MySQL。 官方并没有 Docker 镜像,老苏这次图省事,并没有像往常一样构建一个镜像,而是基于 Docker 搭建了一个 LAMP 环境࿰…...
神经网络和安全结合:一种基于神经网络的智能攻击检测与防御系统;构建攻击行为预测模型
目录 神经网络和安全结合 摘要 引言 理论基础 技术实现与创新点 实验验证 结论与展望 一种基于神经网络的智能攻击检测与防御系统 一、系统概述 二、主要功能 三、技术特点 四、应用前景 构建攻击行为预测模型 一、构建攻击行为预测模型的步骤 1. 数据收集 2. …...
音视频解封装demo:将FLV文件解封装(demux)得到文件中的H264数据和AAC数据(纯手工,不依赖第三方开源库)
1、README 前言 注意:flv是不支持h.265封装的。目前解封装功能正常,所得到的H.264文件与AAC文件均可正常播放。 a. demo使用 $ make clean && make DEBUG1 $ $ $ ./flv_demux_h264_aac Usage: ./flv_demux_h264_aac avfile/test1.flv./flv_d…...
51单片机(STC8051U34K64)_RA8889_SPI4参考代码(v1.3)
硬件:STC8051U34K64 RA8889开发板(硬件跳线变更为SPI-4模式,PS101,R143,R141短接,R142不接) STC8051U34K64是STC最新推出来的单片机,主要用于替换传统的8051单片机,与标…...
关于C# 开发Winfrom事后总结
一:要求能读取文件夹中视频及图片并判断 private void Form1_Load(object sender, EventArgs e){string foldPath "路径";//获取该目录下的文件 string[] files Directory.GetFiles(foldPath "\\", "*.*", System.IO.SearchOption…...
Python学习笔记35:进阶篇(二十四)pygame的使用之音频文件播放
前言 基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。 我们的下一步目标是完成python crash course中的外星人入侵项目,这是一个2D游戏项目。在这之前ÿ…...
Transformer-LSTM预测 | Matlab实现Transformer-LSTM多变量时间序列预测
Transformer-LSTM预测 | Matlab实现Transformer-LSTM多变量时间序列预测 目录 Transformer-LSTM预测 | Matlab实现Transformer-LSTM多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现Transformer-LSTM多变量时间序列预测,Transf…...
常见的点云数据的获取方式
1. 激光雷达(LiDAR) 获取方式:激光脉冲测距原理:激光雷达通过发射激光脉冲并接收反射信号来测量物体与传感器之间的距离。计算激光脉冲从发射到返回所需的时间,并将其转换为距离,从而生成三维点云数据。常…...
java 中钻石操作符 <> 的使用场景
在 Java 中,<> 符号通常被称为 "钻石操作符" (Diamond Operator),主要用于泛型类型的简化表示。<> 操作符引入于 Java 7,以减少泛型实例化时的冗余代码。以下是 <> 符号在 Java 中的几种主要使用场景:…...
C++ 定时器触发
c定时器,能够定时触发,即每隔一段固定时间执行一下函数 #include <iostream> #include <thread> #include <chrono> #include <signal.h> #include <time.h> #include <cstring> #include <glog/logging.h>#…...
【Docker 入门】
文章目录 概要 一、安装Docker CE1.1.配置阿里云镜像加速【可选】1.2.重启 二、Docker版本选择三、Docker指令1.Docker命令1.1.run1.2.start/stop/restart1.3.kill1.4.rm1.5.create1.6.ps1.7.exec1.8.top1.9.port 2.Dockerfile关键字3.镜像打包4.镜像运行5.镜像导入导出6.镜像查…...
现在有什么副业可以让人快速上岸?可以试试这个行业上岸其实不难
人为什么要努力赚銭? 当你想结婚的时候, 你可以慢慢挑,不着急。 当父母年老遭遇大病的时候, 你有机会尽孝。 当孩子需要时,你不会囊中羞涩。 年轻时以为金钱最重要, 如今年纪大了,发现这…...
每天一个数据分析题(四百二十)- 一元线性回归模型
现在通过参数估计得到一个一元线性回归模型为y 3x4,在回归系数检验中下列说法错误的是( ) A. 检验统计量是t统计量 B. 原假设是β13 C. 若拒绝原假设,就认为自变量与因变量存在显著的线性关系 D. 可以用P值与显著性水平比较结…...
day11:01文件处理
一、文件与文件模式介绍 1、什么是文件 文件是操作系统提供给用户/应用程序操作硬盘的一种虚拟的概念/接口 用户/应用程序(open()) 操作系统(文件) 计算机硬件(硬盘)2、为何要用文件 ①用户/应用程序可以通过文件将数据永久保存…...
一场夏测杀出个“双冠王”,极越01成为纯电SUV标杆
文 | AUTO芯球 作者 | 雷慢 万万没想到,懂车帝夏测运动会杀出一匹最大的黑马,竟然是极越01。 当前正在进行的懂车帝夏测运动会,在“纯电SUV/MPV续航达成率”赛事中,极越01以85.8%的续航达成率获得第一名。并且由于赛制规则限制…...
外科休克病人的护理
一、引言 休克是外科常见的危急重症之一,它是由于机体遭受强烈的致病因素侵袭后,有效循环血量锐减、组织灌注不足所引起的以微循环障碍、细胞代谢紊乱和器官功能受损为特征的综合征。对于外科休克病人的护理,至关重要。 二、休克的分类 外科休克主要分为低血容量性休克(包括…...
C-study(五).2
逻辑运算符 连接两个完整的关系表达式。 && 逻辑与,ab都为真时,a&&b的值真,其余时候假。 || 逻辑或,ab都为假时,a||b的值假,其余时候真。 ! 逻辑非、只需要一个运算对象,a真&a…...
使用Ultralytics YOLO进行模型验证
使用Ultralytics YOLO进行模型验证 使用Ultralytics YOLO进行模型验证简介为什么使用Ultralytics YOLO进行验证?验证模式的主要功能使用示例YOLO模型验证参数使用参数进行验证的示例使用Ultralytics YOLO进行模型验证 简介 验证是机器学习管道中的关键步骤,可以评估训练模型…...
MICCAI 2023 List of Papers
MICCAI 2023 - Accepted Papers, Reviews, Author Feedback List of Papers https://conferences.miccai.org/2023/papers/ • 3D Arterial Segmentation via Single 2D Projections and Depth Supervision in Contrast-Enhanced CT Images • 3D Dental Mesh Segmentation U…...
压缩文件的解析方式
一、解压缩zip格式 步骤: 1.根据压缩文件原始路径(字符串),创建源文件对象(File对象) 2.创建根目录对象,传入源文件的根目录 3.判断根目录,是否已经存在 ①如果存在,则删除; ②如果不存在,则创建根目录。 4.可以用Zip…...
Kimi-VL-A3B-Thinking实战教程:Chainlit中集成历史对话与文件上传功能
Kimi-VL-A3B-Thinking实战教程:Chainlit中集成历史对话与文件上传功能 1. 引言:让图文对话模型真正“好用”起来 如果你已经用vllm部署了Kimi-VL-A3B-Thinking这个强大的图文对话模型,并且通过Chainlit搭建了前端界面,那么恭喜你…...
Oracle Ogg集成模式升级全攻略:从条件检查到性能优化
Oracle GoldenGate集成模式升级实战手册:从条件预检到调优全解析 在数据同步技术领域,Oracle GoldenGate(OGG)的集成模式代表着新一代架构设计方向。与经典模式相比,集成模式深度整合了数据库内核级特性,在…...
ZYNQ调试别再傻等Program FPGA了!一个函数搞定PL端软复位(Vitis 2021.2)
ZYNQ高效调试:用软复位替代FPGA重编程的技术解析 调试ZYNQ项目时,最令人抓狂的莫过于每次修改代码后漫长的Program FPGA等待。作为一名长期与ZYNQ打交道的工程师,我深知这种重复操作不仅消耗时间,更会加速Flash芯片的老化。本文将…...
杰理AD14N/AD15N---自定义GPIO唤醒与长按键开关机配置实战
1. 认识杰理AD14N/AD15N的GPIO唤醒机制 第一次接触杰理AD14N/AD15N芯片的开发者,往往会被其GPIO唤醒机制搞得一头雾水。我刚开始调试时也踩过不少坑,比如明明按照手册配置了唤醒引脚,设备却怎么都唤不醒。后来才发现,问题出在对底…...
个人学习实时数据管道框架--4 数据入湖实战
4.1 环境准备 1. 安装 Java 8+ 和 Maven 3.6+ 2. 下载项目代码:git clone <项目地址> 3. 配置环境变量:JAVA_HOME, HADOOP_HOME 4.2 配置文件 核心配置文件 application.properties: # Flink 配置 flink.job.name=VehicleSOCPipeline flink.parallelism=4 flink…...
MogFace-large效果对比:在遮挡/小脸/密集场景下超越YOLOv8与RetinaFace实测
MogFace-large效果对比:在遮挡/小脸/密集场景下超越YOLOv8与RetinaFace实测 1. 引言:人脸检测的现实挑战 在实际应用中,人脸检测面临着三大难题:遮挡、小脸和密集场景。当人脸被口罩、眼镜或其他人遮挡时,传统检测器…...
awesome-rust数据备份恢复:灾难恢复与业务连续性
awesome-rust数据备份恢复:灾难恢复与业务连续性 数据丢失可能导致项目停滞、业务中断甚至经济损失。在开源项目管理中,建立完善的数据备份与灾难恢复机制是保障业务连续性的关键。本文将介绍如何利用awesome-rust中精选的Rust工具构建可靠的备份恢复系…...
Spring Boot 远程调试终于来了!IntelliJ IDEA 新版支持「无 Agent」远程调试
推荐阅读 IDEA 官宣全新AI CLI:Gemini大模型免费用! IDEA 2026.1 EAP 4 发布:新特性太丝滑了! IDEA 官宣:终于可以爽用Cursor了! IDEA 这个骚操作,连 VS Code 都跟不上! IDEA 这个测试接口的好工具,效率 提升 10x 这些 IDEA 技巧没用上,你可能少了一大半摸…...
PyTorch 3.0静态图分布式训练全链路解析(含NCCL拓扑感知、Graph Partitioning与梯度同步优化)
第一章:PyTorch 3.0静态图分布式训练概览与演进脉络PyTorch 3.0标志着框架在可扩展性与编译优化方向的重大跃迁——其核心变化之一是将TorchDynamo Inductor后端深度整合为默认的静态图编译通道,并原生支持跨设备、跨节点的分布式静态图训练。这一演进并…...
Qwen3-14B镜像深度解析:内置权重+FlashAttention-2+PyTorch 2.4优化
Qwen3-14B镜像深度解析:内置权重FlashAttention-2PyTorch 2.4优化 1. 镜像概述与核心优势 Qwen3-14B私有部署镜像是专为RTX 4090D 24GB显存环境优化的开箱即用解决方案。这个镜像最大的特点是将模型权重、运行环境和优化组件全部预装完成,用户无需处理…...
