Web知识库应用程序LibreKB

news/2024/8/13 13:29:14/ 标签: 群晖, docker, 在线文档

在这里插入图片描述

什么是 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

查看了一下代码

而在页面中实际上并没有找到 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.ppmy.cn/news/1475399.html

相关文章

Error: EBUSY: resource busy or locked, rmdir...npm install执行报错

Error: EBUSY: resource busy or locked, rmdir...npm install执行报错 你一个文件夹目录开了两个cmd命令行&#xff08;或者powershell)&#xff0c;关掉一个就好了。

java算法day14

java算法day14 222 完全二叉树的节点个数。110 平衡二叉树257 二叉树的所有路径 222 完成二叉树的节点个数 解法1&#xff0c;层序遍历&#xff0c;迭代解法。 就是层序遍历的模板题。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* …

图论基础概念(详细讲解)

今天&#xff0c;我们讲解一下图论的概念&#xff0c;首先我们知道图是一个什么东西。 图你可以理解成一个网络系统&#xff0c;两个节点之间可能会有边&#xff0c;边链接两个节点&#xff0c;可能是有向&#xff08;就比如说a只能往b,或者b只能往c)&#xff0c;可能是无向&a…

windows信息收集和提权

目录 手动收集 工具收集 windows本地内核提权 本地提权 根据windows去找需要的exp进行利用 提权后结合mimikatz使用 msf提权 简单提权 生成后门 上线 BypassUAC绕过UAC提权 msf带的bypassuac模块可以尝试提权 Bypassuac提权命令操作 提权成功 ​local_exploi…

Xcode数据分析全解:洞察应用性能的密钥

标题&#xff1a;Xcode数据分析全解&#xff1a;洞察应用性能的密钥 在应用开发和优化的过程中&#xff0c;数据分析是提升用户体验和应用性能的关键步骤。Xcode作为苹果官方的集成开发环境&#xff0c;提供了多种工具和集成方案来支持应用的数据分析。本文将详细介绍如何在Xc…

WordPress主题底部纯文本文章列表

如果是RiPro主题&#xff0c;请在后台顶部设置添加自定义CSS。其他主题在对应的CSS样式添加。 CSS代码&#xff1a; /*底部纯文本文章列表*/ .sjblog-list {height: 90px;background: #333;border-radius: 4px 4px 0 0;padding: 24px;margin: -20px -20px 22px -20px;positio…

守护服务之门:Eureka中分布式认证与授权的实现策略

守护服务之门&#xff1a;Eureka中分布式认证与授权的实现策略 引言 在微服务架构中&#xff0c;服务间的通信安全至关重要。Eureka作为Netflix开源的服务发现框架&#xff0c;虽然本身提供了服务注册与发现的功能&#xff0c;但并不直接提供认证与授权机制。为了实现服务的分…

Java面试八股之Redis单线程为什么性能高

Redis单线程为什么性能高 1.内存数据库特性 要点&#xff1a;Redis是一个内存数据库&#xff0c;其数据主要存储在内存中&#xff0c;而非磁盘。内存访问的速度远超磁盘&#xff0c;通常可达纳秒级别&#xff0c;这使得Redis在处理数据时几乎不受I/O瓶颈的影响。由于数据操作…

LeetCode(2)-反转链表、删除链表中等于val的节点、返回链表中的中间节点

一、反转链表 . - 力扣&#xff08;LeetCode&#xff09; 解法1&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ typedef struct ListNode ListNode; struct ListNode* reverseList(struct ListN…

“论基于构件的软件开发方法及其应用”精选范文,软考高级论文,系统架构设计师论文

论文真题 基于构作的软件开发 (Component-Based Software Development&#xff0c;CBSD) 是一种基于分布对象技术、强调通过可复用构件设计与构造软件系统的软件复用途径。基于构件的软件系统中的构件可以是COTS &#xff08;Commercial-Off-the-Shelf&#xff09;构件&#x…

C#winfrom窗体开发图书管理系统

一、图书管理系统设计背景 图书馆管理系统是一个关键的信息技术应用&#xff0c;旨在提升图书馆的运营效率和用户的借阅体验。该系统通过数字化手段&#xff0c;实现了图书资源的高效管理和用户服务的便捷化。随着数字化时代的到来&#xff0c;传统的图书馆管理方式已经不能满…

Java实现将图片转换成PDF

1.引入依赖 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version> </dependency>2.工具方法 package com.prescription.transfer.system.utils;import org.apache.p…

flutter 列表下拉框加搜索

1.使用控件搜索加下拉框dropdown_search: ^0.4.9和获取中文拼音lpinyin: ^1.1.1 2.加入中文查询和首字查询 在当中找到相应的packages&#xff0c;再在SelectDialog.dart当中加入引入拼音搜索 import package:lpinyin/lpinyin.dart; 更改匹配方法manageItemsByFilter使其可…

R包: phyloseq扩增子统计分析利器

介绍 phyloseq包对多类型数据的综合软件&#xff0c;并其对这些数据提供统计分析和可视化方法。 微生物数据分析的主要挑战之一是如何整合不同类型的数据&#xff0c;从而对其进行生态学、遗传学、系统发育学、多元统计、可视化和检验等分析。同时&#xff0c;由于同行之间需要…

期货量化交易客户端开源教学第九节——新用户注册

一、新用户注册界面设计&#xff1a; 注册时采用手机号注册&#xff0c;客户端发送新号注册申请由后台做审核&#xff0c;后台审核通过后向注册的手机号发送注册成功的消息。注册过的手机号不能再二次注册。 界面验证代码 private{ Private declarations }FVerf: AnsiString; …

【QT】布局管理器

布局管理器 布局管理器1. 垂直布局2. 水平布局3. 网格布局4. 表单布局5. Spacer 布局管理器 之前使⽤ Qt 在界⾯上创建的控件, 都是通过 “绝对定位” 的⽅式来设定的&#xff1b;也就是每个控件所在的位置, 都需要计算坐标, 最终通过 setGeometry 或者 move ⽅式摆放过去。 …

java 前端上传文件后端解析并转发到第三方存储,Hutool 工具

单个文件上传 PostMapping("/upload")public MyResponse<?> upload(MultipartFile file) {if (multipartFiles null || multipartFiles.length 0) {throw new MessageException("未选择文件");}InputStreamResource inputStreamResource new Inp…

实用教程:用 Go 的 net/textproto 包优化文本协议处理

实用教程&#xff1a;用 Go 的 net/textproto 包优化文本协议处理 介绍准备工作环境设置Go 基础回顾 基础使用创建连接发送请求接收响应 高级特性处理 MIME 头多行响应的管理错误处理与调试 实战案例实现一个简单的邮件客户端实现一个基于 net/textproto 的命令行工具 最佳实践…

从零开始开发视频美颜SDK:实现直播美颜效果

因此&#xff0c;开发一款从零开始的视频美颜SDK&#xff0c;不仅可以节省成本&#xff0c;还能根据具体需求进行个性化调整。本文将介绍从零开始开发视频美颜SDK的关键步骤和实现思路。 一、需求分析与技术选型 在开发一款视频美颜SDK之前&#xff0c;首先需要进行详细的需求…

WPF界面设计-更改按钮样式 自定义字体图标

一、下载图标文件 iconfont-阿里巴巴矢量图标库 二、xaml界面代码编辑 文件结构 &#xe653; 对应的图标代码 Fonts/#iconfont 对应文件位置 <Window.Resources><ControlTemplate TargetType"Button" x:Key"CloseButtonTemplate"…