MM-Wiki -企业知识分享与团队协同软件


MM-Wiki 一个轻量级的企业知识分享与团队协同软件,可用于快速构建企业 Wiki 和团队知识分享平台。部署方便,使用简单,帮助团队构建一个信息共享、文档管理的协作环境。

这个仓库 mm-wiki 是一个轻量级的企业知识分享与团队协同软件,旨在帮助企业快速构建 Wiki 和团队知识分享平台,为团队提供一个信息共享和文档管理的协作环境。以下是对该仓库的详细介绍:

特点

  1. 部署方便:基于 Go 语言编写,只需下载对应平台的二进制文件即可执行。
  2. 快速安装程序:提供方便的安装界面,无需手动操作。
  3. 独立的空间:空间是文档的集合,可按公司部门或团队划分,空间内文档相互独立,还可设置访问级别。
  4. 支持 Markdown 语法:方便用户写作,同时支持附件上传。
  5. 完善的权限管理:系统可自定义角色,并为不同角色授予不同权限。
  6. 集成统一登录:支持通过外部系统认证用户,如与公司的 LDAP 登录融合。
  7. 邮件通知功能:开启后,文档更改会通知所有关注该文档的用户。
  8. 文档分享和:支持下载文档分享和下载 Markdown 源文件。
  9. 全文搜索:支持对文档进行全文搜索。

代码结构

  • 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.conftemplate.conf
  • docs 目录:包含文档和数据库脚本,如 docs/databases/table.sqldocs/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
}

安装方式

  1. 自助安装
    • Linux 平台:下载压缩包,解压后执行安装程序,配置完成后启动系统。
    • Windows 平台:下载压缩包,手动解压,运行安装程序,配置完成后启动系统。
    • Docker 部署:准备数据库,可从 DockerHub 下载镜像或本地构建镜像,挂载配置文件和数据目录后启动容器。
  2. 反向代理:如果需要,可使用 Nginx 配置反向代理。

在线体验

可以访问 mm-wiki企业知识分享与团队协同软件 进行在线体验,用户名是 admin,密码是 mmwiki

github