Web知识库应用程序LibreKB

news2024/11/16 16:21:56

在这里插入图片描述

什么是 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-apache
    container_name: librekb
    volumes:
      - ./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

查看了一下代码

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

新建文章时同样也会报错

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.phpupdate.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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1919691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ServiceDesk Plus再次获得国际认可的粉象认证

我们又一次做到了&#xff01;ServiceDesk Plus 现已获得 CMDB 和发布部署过程的 PinkVERIFY™ &#xff08;粉象&#xff09;认证。 通过PinkVerify 认证&#xff0c;我们现在已经获得了七项核心 IT 服务管理实践&#xff1a; 1、事件管理 2、问题管理 3、变更管理 4、资产管…

dev小熊猫,clion设置模版教程

首先点击工具 然后进入设置 &#xff0c;找到代码模版 然后点击c模版&#xff0c;进入之后直接输入模版之后&#xff0c;&#xff08;还没有结束&#xff01;&#xff01;&#xff01;&#xff09;&#xff0c;先点击应用&#xff0c;然后是确定&#xff01;&#xff01;&#…

maven6——生命周期与插件

生命周期 生命周期&#xff1a;指运行的阶段&#xff08;比如几岁&#xff09; maven有三个生命周期如下&#xff0c;每个生命周期大概做的事情如下&#xff1a; 注意&#xff1a;每次执行某个&#xff0c;他会把上面的都执行一遍 插件&#xff1a; 每一个插件&#xf…

【SQL】DML、DDL、ROLLBACK 、COMMIT详解

DML DML&#xff08;Data Manipulation Language&#xff09;数据操作语言&#xff0c;是用于对数据库中的数据进行基本操作的一种编程语言。DML是数据库管理系统&#xff08;DBMS&#xff09;中的一个重要部分&#xff0c;它允许用户或应用程序对数据库中的数据进行增、删、改…

Pytorch张量

在conda的环境中安装Jupyter及其他软件包 Pytorch 建立在张量&#xff08;tensor&#xff09;之上&#xff0c;Pytorch张量是一个 n 维数组&#xff0c;类似于 NumPy 数组。专门针对GPU设计&#xff0c;可以运行在GPU上以加快计算效率。换句话说&#xff0c;Pytorch张量是可以运…

WebGIS基础原理

该部分内容与部分插图、学习框架的主要参考的网站与博主如下&#xff08;也趁机分享给大家&#xff09;&#xff1a; OSGeo开源WebGIS在线教程&#xff1a;http://webgis.cn/ OSGeo《地理信息系统原理》&#xff1a;https://www.osgeo.cn/gis-tutorial/index.html OSGeo《Pyth…

30.ROM-IP核的调用

&#xff08;1&#xff09;ROM IP核简介&#xff1a; ROM是只读存储器&#xff0c;是一种只能读出事先锁存的固态半导体存储器。其特性是一旦存储资料就无法再将之改变或删除&#xff0c;并且资料也不会因为电源关闭而消失。&#xff08;掉电不丢失&#xff09; FPGA使用内部RA…

鸿蒙语言基础类库:【@ohos.util.HashMap (非线性容器HashMap)】

非线性容器HashMap 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 H…

算法 | NOIP1999 Cantor表

算法篇——Cantor的数表 - SteveWang - 博客园 (cnblogs.com) #include <bits/stdc.h> using namespace std; int high(int n) {return n*(n1)/2; } int main() {int k;cin>>k;int n1;while(1){if(high(n)>k){break;}n;} int mhigh(n);int wm-k1;if(n%20){cout…

Autosar诊断实战系列28-2E写DID Pending期间偶发回NRC0x13问题排查

本文框架 前言1.问题描述2.问题复现3.问题分析问题1:为何在2E Pending期间会发送功能寻址的10 01回NRC13?问题2:在ECU Pending期间收到功能寻址10 01,MCU需要如何处理?问题3:DcmDslConnection是如何定义的?问题4:功能寻址于物理寻址是否对应不同的DcmDslConnection?问…

vue 下拉菜单树形结构——vue-treeselect的组件使用

参考&#xff1a; https://www.cnblogs.com/syjtiramisu/p/17672866.htmlhttps://www.cnblogs.com/syjtiramisu/p/17672866.html vue-treeselect的使用 - 简书下载依赖 使用https://www.jianshu.com/p/459550e1477d 实际项目使用&#xff1a;

【087】基于SpringBoot+Vue实现的房租租赁管理系统

系统介绍 视频演示 基于SpringBootVue实现的房租租赁管理系统采用前后端分离架构&#xff0c;系统分为管理员、房东、用户三种角色&#xff0c;实现了登陆与注册、在线聊天、预约看房、房源管理、用户管理、租房、投诉举报、收藏、房主申请等功能 技术选型 开发工具&#x…

Protobuf: 大数据开发中的高效数据传输利器

作为一名大数据开发者&#xff0c;我经常需要处理海量的数据传输和存储。在这个过程中&#xff0c;选择一个高效、可靠的数据序列化工具至关重要。今天&#xff0c;我想和大家分享一下我在项目中使用 Protobuf 的经历。 目录 故事背景Protobuf 简介优点&#xff1a; 实战案例示…

Go-知识测试-示例测试

Go-知识测试-示例测试 1. 定义2. 例子3. 数据结构4. 编译过程5. 执行过程 建议先看&#xff1a;https://blog.csdn.net/a18792721831/article/details/140062769 Go-知识测试-工作机制 1. 定义 示例测试要保证测试文件以_test.go结尾。 测试方法必须以ExampleXxx开头。 测试文…

常见点云处理总结汇总

点云处理是一系列操作和技术&#xff0c;用于分析和处理三维点云数据&#xff0c;以提取有用的信息并生成可视化结果。以下是常见的点云处理方法及其简要说明&#xff1a; 1. 点云预处理 滤波&#xff1a;去除噪声和无效点&#xff0c;如使用统计滤波、半径滤波等。下采样&a…

PostgreSql中的JSON数据类型

PostgreSQL 提供了两种 JSON 数据类型&#xff1a;JSON 以及 JSONB。这两种类型主要的区别在于数据存储格式&#xff0c;JSONB 使用二进制格式存储数据&#xff0c;更易于处理。 PostgreSQL 推荐优先选择 JSONB 数据类型。 两种数据类型之间的区别&#xff1a; 功能JSONJSONB存…

【Linux】日志

日志是记录软件运行过程中发生的事件的一种手段&#xff0c;通常包含以下内容&#xff1a; 时间戳&#xff1a;记录日志条目创建的确切时间。这对于追踪事件发生的时间顺序至关重要。日志级别&#xff1a;表示日志信息的严重性或重要性&#xff0c;常见的级别包括 DEBUG、INFO…

2024年西安铁一中集训DAY1---- 杂题选讲

文章目录 牛客练习赛125 E 联谊活动&#xff08;枚举&#xff0c;分讨&#xff09;牛客练习赛125 F 玻璃弹珠&#xff08;类莫队&#xff0c;离线询问&#xff0c;数据结构&#xff09;2024ccpc长春邀请赛 D Parallel Lines&#xff08;随机化&#xff09;2024ccpc长春邀请赛 E…

Java高级重点知识点-24-函数式接口

文章目录 函数式接口函数式编程常用函数式接口 函数式接口 有且仅有一个抽象方法的接口。 格式&#xff1a; 修饰符 interface 接口名称 {public abstract 返回值类型 方法名称(可选参数信息);// 其他非抽象方法内容 }public interface MyFunctionalInterface {void myMethod…

二进制补码计算

基本知识 原码&#xff08;Sign and Magnitude&#xff09;:原码是一种最简单的表示法&#xff0c;使用符号位和数值位来表示整数。 符号位&#xff1a;最高位是符号位&#xff0c;0表示正数&#xff0c;1表示负数。 数值位&#xff1a;剩下的位表示数值的大小。反码&#xf…