MM-Wiki 一个轻量级的企业知识分享与团队协同软件,可用于快速构建企业 Wiki 和团队知识分享平台。部署方便,使用简单,帮助团队构建一个信息共享、文档管理的协作环境。
这个仓库 mm-wiki
是一个轻量级的企业知识分享与团队协同软件,旨在帮助企业快速构建 Wiki 和团队知识分享平台,为团队提供一个信息共享和文档管理的协作环境。以下是对该仓库的详细介绍:
特点
- 部署方便:基于 Go 语言编写,只需下载对应平台的二进制文件即可执行。
- 快速安装程序:提供方便的安装界面,无需手动操作。
- 独立的空间:空间是文档的集合,可按公司部门或团队划分,空间内文档相互独立,还可设置访问级别。
- 支持 Markdown 语法:方便用户写作,同时支持附件上传。
- 完善的权限管理:系统可自定义角色,并为不同角色授予不同权限。
- 集成统一登录:支持通过外部系统认证用户,如与公司的 LDAP 登录融合。
- 邮件通知功能:开启后,文档更改会通知所有关注该文档的用户。
- 文档分享和:支持下载文档分享和下载 Markdown 源文件。
- 全文搜索:支持对文档进行全文搜索。
代码结构
app
目录:包含应用程序的主要逻辑,如控制器(controllers
)、模型(models
)等。例如,app/controllers/collection.go
包含收藏功能的控制器逻辑,app/models/collection.go
包含收藏相关的模型操作。install
目录:包含安装程序的相关代码,如install/controllers/install.go
处理安装过程中的各种配置,install/storage/data.go
管理安装过程中的数据和状态。static
目录:存放静态资源,如 CSS、JavaScript 等。例如,static/js/common/storage.js
提供了本地存储的操作方法。conf
目录:包含配置文件,如default.conf
和template.conf
。docs
目录:包含文档和数据库脚本,如docs/databases/table.sql
和docs/databases/data.sql
。
主要功能代码示例
安装功能
在 install/storage/data.go
中,ListenInstall
函数监听安装事件,当收到事件后,会依次执行以下步骤:
func ListenInstall() {
go func() {
defer func() {
err := recover()
if err != nil {
log.Println(fmt.Sprintf("install crash: %v", err))
}
}()
for {
select {
case <-installChan:
Data.Status = Install_Start
log.Println("mm-wiki start install")
// 检查数据库连接
err := checkDB()
if err != nil {
installFailed("连接数据库出错:" + err.Error())
continue
}
log.Println("database connect success")
// 创建数据库
err = createDB()
if err != nil {
installFailed("创建数据库出错:" + err.Error())
continue
}
log.Println("create database success")
// 创建表
err = createTable()
if err != nil {
installFailed("创建表出错:" + err.Error())
continue
}
log.Println("create table success")
// 创建超级管理员
err = createAdmin()
if err != nil {
installFailed("创建管理员账号出错:" + err.Error())
continue
}
log.Println("create admin user success")
// 写入安装数据
err = writeInstallData()
if err != nil {
installFailed("导入安装数据出错:" + err.Error())
continue
}
log.Println("write install data success")
// 写入配置文件
err = makeConf()
if err != nil {
installFailed("生成配置文件出错:" + err.Error())
continue
}
log.Println("make conf file success")
installSuccess()
return
}
}
}()
}
收藏功能
在 app/models/collection.go
中,定义了收藏相关的模型操作,如 GetCollectionByUserIdTypeAndResourceId
用于根据用户 ID、收藏类型和资源 ID 获取收藏信息:
func (c *Collection) GetCollectionByUserIdTypeAndResourceId(userId string, typeS int, resId string) (collection map[string]string, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From(Table_Collection_Name).Where(map[string]interface{}{
"user_id": userId,
"type": typeS,
"resource_id": resId,
}).Limit(0, 1))
if err != nil {
return
}
collection = rs.Row()
return
}
安装方式
- 自助安装
- Linux 平台:下载压缩包,解压后执行安装程序,配置完成后启动系统。
- Windows 平台:下载压缩包,手动解压,运行安装程序,配置完成后启动系统。
- Docker 部署:准备数据库,可从 DockerHub 下载镜像或本地构建镜像,挂载配置文件和数据目录后启动容器。
- 反向代理:如果需要,可使用 Nginx 配置反向代理。
在线体验
可以访问 mm-wiki企业知识分享与团队协同软件 进行在线体验,用户名是 admin
,密码是 mmwiki
。