mm-wiki超好用的开源文档系统

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: mm-wiki超好用的开源文档系统

前言


当前市场上众多的优秀的文档系统百家争鸣,但是能够完全开源支持私有化部署的却屈指可数。目前个人了解到的体验较好的有MrDoc和mm-wiki。


今天我们就一起来了解下mm-wiki的部署和使用。


更多开发工具参考:开发工具大全


依赖


mm-wiki的安装是需要mysql数据的,我们需要首先安装mysql-server。我们可以将mysql和mm-wiki安装在同一台服务器上(也可以分布在两台服务器)。


记得安装完修改root的密码。


mysqladmin password 123456
复制代码


部署mm-wiki


mm-wiki支持windows、Linux、Docker等多种部署方式,本次我们选择Linux虚拟机进行部署。


下载mm-wiki安装包


mm-wiki官方地址:Gitee | Github


我们在mm-wiki的Gitee项目首页,选择最新的发行版v0.2.1下载即可。


网络异常,图片无法展示
|


下载后我们将得到mm-wiki的安装包。


上传mm-wiki安装包到服务器


首先我们在服务器的/home路径下创建一个名为mmwk的目录。


然后使用SFTP工具(Xshell、MobaXterm等SSH工具)将mm-wiki的安装包上传到服务器上。


网络异常,图片无法展示
|


启动mm-wiki安装服务


首先我们解压mm-wiki的安装包。


tar -zxvf mm-wiki-v0.2.1-linux-amd64.tar.gz
复制代码


然后进入install目录,执行./install命令,启动安装程序。


网络异常,图片无法展示
|


最后我们在浏览器访问服务器ip+8090端口即可访问安装页面。


网络异常,图片无法展示
|


安装mm-wiki


我们点击运行安装向导开始安装mm-wiki。


  1. 勾选同意协议,下一步
  2. 下一步
  3. 修改服务监听地址和端口,输入文档保存目录,下一步
  4. 配置数据库的连接信息(密码就是前面重置的)和超级管理员,下一步
  5. 点击开始安装,下一步
  6. 耐心等待,安装完成


启动mm-wiki


安装完成后,系统会提示我们启动命令,我们在/home/mmwk路径下执行启动命令即可。


网络异常,图片无法展示
|


启动mm-wiki,让其后台运行。


网络异常,图片无法展示
|


我们在浏览器访问服务器ip+8080端口即可打开mm-wiki登录页面。


网络异常,图片无法展示
|


我们使用安装时候配置的超级管理员进行登录。


网络异常,图片无法展示
|


配置mm-wiki


更改mm-wiki的系统信息


我们在系统-配置管理-全局配置中可以对系统的名称、标题、描述等进行修改。


网络异常,图片无法展示
|


创建空间&页面


我们在系统-空间管理-添加空间即可添加一个新的空间。


网络异常,图片无法展示
|


然后我们点击空间-测试空间,即可开始在测试空间进行文档写作了。


网络异常,图片无法展示
|


更多功能请自行探索。比如用户,权限等。


完善


通过简单的体验,我发现一个问题,就是mm-wiki的编辑器不支持从粘贴板上传图片,这就很麻烦了,我们需要将图片保存到本地后才能使用编辑器中的上传图片按钮进行选择上传。那有什么办法可以解决呢?通过查看mm-wiki的issue,我发现已经有同学解决了这个问题,我们就直接拿来使用。


1、创建image-handle-paste.js文件


我们需要在项目的static/plugins/editor.md/plugins/image-handle-paste/路径下创建image-handle-paste.js文件,然后向其中输入以下代码:


/*!
 * editormd图片粘贴上传插件
 *
 * @file   image-handle-paste.js
 * @author codehui
 * @date   2018-11-07
 * @link   https://www.codehui.net
 */
(function() {
    var factory = function (exports) {
        var $            = jQuery;           // if using module loader(Require.js/Sea.js).
        var pluginName   = "image-handle-paste";  // 定义插件名称
        //图片粘贴上传方法
        exports.fn.imagePaste = function() {
            var _this       = this;
            var cm          = _this.cm;
            var settings    = _this.settings;
            var editor      = _this.editor;
            var classPrefix = _this.classPrefix;
            var id       = _this.id;
            if(!settings.imageUpload || !settings.imageUploadURL){
                console.log('你还未开启图片上传或者没有配置上传地址');
                return false;
            }
            //监听粘贴板事件
            $('#' + id).on('paste', function (e) {
                var items = (e.clipboardData || e.originalEvent.clipboardData).items;
                //判断图片类型
                if (items && items[0].type.indexOf('image') > -1) {
                    var file = items[0].getAsFile();
                    /*生成blob
                    var blobImg = URL.createObjectURL(file);
                    */
                    /*base64
                    var reader = new FileReader();
                    reader.readAsDataURL(file);
                    reader.onload = function (e) {
                        var base64Img = e.target.result //图片的base64
                    }
                    */
                    // 创建FormData对象进行ajax上传
                    var forms = new FormData(document.forms[0]); //Filename
                    forms.append(classPrefix + "image-file", file, "file_"+Date.parse(new Date())+".png"); // 文件
                    _this.executePlugin("imageDialog", "image-dialog/image-dialog");
                    _ajax(settings.imageUploadURL, forms, function(ret){
                        if(ret.success == 1){
                            $("." + classPrefix + "image-dialog").find("input[data-url]").val(ret.url);
                            //cm.replaceSelection("![](" + ret.url  + ")");
                        }
                        console.log(ret.message);
                    })
                }
            })
        };
        // ajax上传图片 可自行处理
        var _ajax = function(url, data, callback) {
            $.ajax({
                "type": 'post',
                "cache": false,
                "url": url,
                "data": data,
                "dateType": "json",
                "processData": false,
                "contentType": false,
                "mimeType": "multipart/form-data",
                success: function(ret){
                    callback(JSON.parse(ret));
                },
                error: function (err){
                    console.log('请求失败')
                }
            })
        }
    };
    // CommonJS/Node.js
    if (typeof require === "function" && typeof exports === "object" && typeof module === "object")
    { 
        module.exports = factory;
    }
    else if (typeof define === "function")  // AMD/CMD/Sea.js
    {
        if (define.amd) { // for Require.js
            define(["editormd"], function(editormd) {
                factory(editormd);
            });
        } else { // for Sea.js
            define(function(require) {
                var editormd = require("./../../editormd");
                factory(editormd);
            });
        }
    } 
    else
    {
        factory(window.editormd);
    }
})();
复制代码


2、修改document_page.html文件


我们需要向views/layouts/document_page.html文件中的第47行添加如下内容:


<script type="text/javascript" src="/static/plugins/editor.md/plugins/image-handle-paste/image-handle-paste.js"></script>
复制代码


3、修改views/page/edit.html文件


在views/page/edit.html文件的第116行添加如下内容:


editor.imagePaste();
复制代码


4、重启mm-wiki服务


我们停止mm-wiki服务,重新启动即可。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
自然语言处理 安全 数据挖掘
大语言模型在假新闻的检测
大语言模型在假新闻检测应用中发挥重要作用。通过学习大量语言数据和模式,模型可以理解文本的语义和上下文信息,判断其真实性。模型通过监督学习训练,提取特征并预测新闻真实性。结合其他技术手段和人工审核,可以提高准确性和可信度。假新闻检测的过程包括数据准备、特征提取、模型训练和实际应用。模型在谣言检测中也有类似应用。
652 0
|
安全 大数据 Linux
总结下 fs.file-max,ulimit -n 和 lsof的异同
总结下 fs.file-max,ulimit -n 和 lsof的异同
|
3月前
|
人工智能 资源调度 算法
2025魔搭开发者大会 · 全景回顾
6月30日,2025魔搭开发者大会(ModelScope DevCon 2025)在北京海淀 · 香格里拉饭店圆满收官!
311 0
|
12月前
|
Ubuntu Linux 测试技术
Linux系统之部署轻量级Markdown文本编辑器
【10月更文挑战第6天】Linux系统之部署轻量级Markdown文本编辑器
528 1
Linux系统之部署轻量级Markdown文本编辑器
|
5月前
数据传输的基本概念
本内容介绍了带宽、数据传输速率和吞吐量的概念及三者关系。带宽是通信链路的最大传输能力,决定理论上限;数据传输速率表示实际传输速度,受多种因素影响可能低于带宽;吞吐量则是实际测量的传输速率,反映网络真实性能。用公路类比:带宽是宽度(容量)、数据传输速率是速度、吞吐量是实际通行量。
687 7
|
11月前
|
存储 缓存 固态存储
优化Elasticsearch 硬件配置
优化Elasticsearch 硬件配置
465 5
|
Docker 容器
Docker安装及镜像源修改
本文介绍了Docker的安装过程和如何修改Docker镜像源以加速下载。包括更新系统包、安装所需软件包、设置yum源、安装Docker以及验证安装是否成功。接着,提供了修改Docker镜像源的步骤,包括创建配置文件、编辑配置文件以设置镜像加速地址,并提供了几个常用的国内镜像源地址。最后,通过重启Docker服务和检查配置是否生效来完成镜像源的修改。
Docker安装及镜像源修改
|
9月前
|
机器学习/深度学习 存储 人工智能
【科普向】我们所说的AI模型训练到底在训练什么?
人工智能(AI)模型训练类似于厨师通过反复实践来掌握烹饪技巧。它通过大量数据输入,自动优化内部参数(如神经网络中的权重和偏置),以最小化预测误差或损失函数,使模型在面对新数据时更加准确。训练过程包括前向传播、计算损失、反向传播和更新权重等步骤,最终生成权重文件保存模型参数,用于后续的应用和部署。理解生物神经网络的工作原理为人工神经网络的设计提供了灵感,后者广泛应用于图像识别、自然语言处理等领域。
|
6月前
|
人工智能 Serverless 调度
突破地域限制,实现算力无限供给 —阿里云ACK One注册集群开启多地域Serverless算力调度
本文介绍了阿里云ACK One注册集群多地域Serverless算力调度解决方案,解决传统数据中心在AI时代面临的算力不足问题。方案通过分钟级接入、100%兼容Kubernetes操作及云上Serverless弹性,实现跨地域弹性算力供给,支持高并发请求与模型快速迭代。文中详细描述了快速接入步骤、指定地域调度及动态调度方法,并提供了相关代码示例。该方案助力企业实现AI推理服务的规模化部署,提升商业落地效率。
|
11月前
|
存储 NoSQL 关系型数据库
微服务Zipkin链路追踪原理,图解版,一文吃透!
本文重点讲解Zipkin链路追踪的原理与使用,帮助解决微服务架构下的服务响应延迟等问题,提升系统性能与稳定性。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
微服务Zipkin链路追踪原理,图解版,一文吃透!