mindoc简介
MinDoc 是一款针对IT团队开发的简单好用的文档管理系统。
MinDoc 的前身是 SmartWiki 文档系统。SmartWiki 是基于 PHP 框架 laravel 开发的一款文档管理系统。因 PHP 的部署对普通用户来说太复杂,所以改用 Golang 开发。可以方便用户部署和实用。
开发缘起是公司IT部门需要一款简单实用的项目接口文档管理和分享的系统。其功能和界面源于 kancloud 。
可以用来储存日常接口文档,数据库字典,手册说明等文档。内置项目管理,用户管理,权限管理等功能,能够满足大部分中小团队的文档管理需求。
linux安装
1.下载可执行文件
Releases · mindoc-org/mindoc · GitHub
2.解压压缩包
使用sftp传输到linux服务器上
unzip mindoc_linux_amd64.zip
3.安装数据库
[sherlock@localhost ~]$ yum install mysql-server
Error: This command has to be run under the root user.
[sherlock@localhost ~]$ su
Password:
su: Authentication failure
[sherlock@localhost ~]$ sudo passwd#设置root密码
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for sherlock:
Changing password for user root.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[sherlock@localhost ~]$
[root@localhost sherlock]# yum install -y mysql-server.x86_64 mysql-devel.x86_64
[root@localhost sherlock]# service mysqld start#安装完成后一定要用这条命令执行,否则进不去mysql
Redirecting to /bin/systemctl start mysqld.service
4.创关键数据库
[root@localhost sherlock]# mysql#进入mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.26 Source distribution
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE DATABASE mindoc_db DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;#执行命令创建语句,把字符定义为utf8mb4
Query OK, 1 row affected (0.01 sec)
mysql>
exit
退出
5.配置数据库
[root@localhost sherlock]# cp conf/app.conf.example conf/app.conf
cp: overwrite 'conf/app.conf'? y
[root@localhost sherlock]#
配置文件都已经配置好了,感兴趣可以看看
[root@localhost sherlock]# more conf/app.conf
appname = mindoc
#默认监听的网卡,为空则监听所有
httpaddr="${MINDOC_ADDR}"
httpport = "${MINDOC_PORT||8181}"
runmode = "${MINDOC_RUN_MODE||dev}"
sessionon = true
sessionname = mindoc_id
copyrequestbody = true
#系统完整URL(http://doc.iminho.me),如果该项不设置,会从请求头中获取地址。
baseurl="${MINDOC_BASE_URL}"
#########代码高亮样式################
#样式演示地址:https://highlightjs.org/static/demo/
highlight_style="${MINDOC_HIGHLIGHT_STYLE||github}"
########配置文件自动加载##################
#大于0时系统会自动检测配置文件是否变动,变动后自动加载并生效,单位是秒。监听端口和数据
库配置无效
config_auto_delay="${MINDOC_CONFIG_AUTO_DELAY||20}"
########Session储存方式##############
#默认Session生成Key的秘钥
beegoserversessionkey=NY1B$28pms12JM&c
sessionprovider="${MINDOC_SESSION_PROVIDER||file}"
sessionproviderconfig="${MINDOC_SESSION_PROVIDER_CONFIG||./runtime/session}"
#默认的过期时间
sessiongcmaxlifetime="${MINDOC_SESSION_MAX_LIFETIME||3600}"
#以文件方式储存
#sessionprovider=file
#sessionproviderconfig=./runtime/session
#以redis方式储存
#sessionprovider=redis
#sessionproviderconfig=127.0.0.1:6379
#以memcache方式储存
#sessionprovider=memcache
#sessionproviderconfig=127.0.0.1:11211
#以内存方式托管Session
#sessionprovider=memory
#时区设置
timezone = Asia/Shanghai
6.使用脚本初始化数据库
[root@localhost sherlock]# ./mindoc_linux_amd64 install
2021/11/25 06:25:32.768 [I] [command.go:34] 正在初始化数据库配置.
2021/11/25 06:25:32.769 [I] [command.go:86] 数据库初始化完成.
Initializing...
create table `md_members`
-- --------------------------------------------------
-- Table Structure for `github.com/lifei6671/mindoc/models.Member`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `md_members` (
`member_id` integer NOT NULL PRIMARY KEY AUTOINCREMENT,
`account` varchar(100) NOT NULL DEFAULT '' UNIQUE,
`real_name` varchar(255) NOT NULL DEFAULT '' ,
`password` varchar(1000) NOT NULL DEFAULT '' ,
`auth_method` varchar(50) NOT NULL DEFAULT 'local' ,
`description` varchar(2000) NOT NULL DEFAULT '' ,
`email` varchar(100) NOT NULL DEFAULT '' UNIQUE,
`phone` varchar(255) DEFAULT 'null' ,
`avatar` varchar(1000) NOT NULL DEFAULT '' ,
`role` integer NOT NULL DEFAULT 1 ,
`status` integer NOT NULL DEFAULT 0 ,
`create_time` datetime NOT NULL,
`create_at` integer NOT NULL DEFAULT 0 ,
`last_login_time` datetime
);
CREATE INDEX `md_members_role` ON `md_members` (`role`);
create table `md_books`
-- --------------------------------------------------
-- Table Structure for `github.com/lifei6671/mindoc/models.Book`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `md_books` (
`book_id` integer NOT NULL PRIMARY KEY AUTOINCREMENT,
`book_name` varchar(500) NOT NULL DEFAULT '' ,
`item_id` integer NOT NULL DEFAULT 1 ,
`identify` varchar(100) NOT NULL DEFAULT '' UNIQUE,
`auto_release` integer NOT NULL DEFAULT 0 ,
`is_download` integer NOT NULL DEFAULT 0 ,
`order_index` integer NOT NULL DEFAULT 0 ,
`description` varchar(2000) NOT NULL DEFAULT '' ,
`publisher` varchar(500) NOT NULL DEFAULT '' ,
`label` varchar(500) NOT NULL DEFAULT '' ,
`privately_owned` integer NOT NULL DEFAULT 0 ,
`private_token` varchar(500),
`book_password` varchar(500),
`status` integer NOT NULL DEFAULT 0 ,
`editor` varchar(50) NOT NULL DEFAULT '' ,
`doc_count` integer NOT NULL DEFAULT 0 ,
`comment_status` varchar(20) NOT NULL DEFAULT 'open' ,
`comment_count` integer NOT NULL DEFAULT 0 ,
`cover` varchar(1000) NOT NULL DEFAULT '' ,
`theme` varchar(255) NOT NULL DEFAULT 'default' ,
`create_time` datetime NOT NULL,
`history_count` integer NOT NULL DEFAULT 0 ,
`is_enable_share` integer NOT NULL DEFAULT 0 ,
`member_id` integer NOT NULL DEFAULT 0 ,
`modify_time` datetime,
`version` integer NOT NULL DEFAULT 0 ,
`is_use_first_document` integer NOT NULL DEFAULT 0 ,
`auto_save` integer NOT NULL DEFAULT 0
);
create table `md_relationship`
-- --------------------------------------------------
-- Table Structure for `github.com/lifei6671/mindoc/models.Relationship`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `md_relationship` (
`relationship_id` integer NOT NULL PRIMARY KEY AUTOINCREMENT,
`member_id` integer NOT NULL DEFAULT 0 ,
`book_id` integer NOT NULL DEFAULT 0 ,
`role_id` integer NOT NULL DEFAULT 0 ,
UNIQUE (`member_id`, `book_id`)
);
create table `md_options`
-- --------------------------------------------------
-- Table Structure for `github.com/lifei6671/mindoc/models.Option`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `md_options` (
`option_id` integer NOT NULL PRIMARY KEY AUTOINCREMENT,
`option_title` varchar(500) NOT NULL DEFAULT '' ,
`option_name` varchar(80) NOT NULL DEFAULT '' UNIQUE,
`option_value` text,
`remark` text
);
create table `md_documents`
-- --------------------------------------------------
-- Table Structure for `github.com/lifei6671/mindoc/models.Document`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `md_documents` (
`document_id` integer NOT NULL PRIMARY KEY AUTOINCREMENT,
`document_name` varchar(500) NOT NULL DEFAULT '' ,
`identify` varchar(100) DEFAULT 'null' ,
`book_id` integer NOT NULL DEFAULT 0 ,
`parent_id` integer NOT NULL DEFAULT 0 ,
`order_sort` integer NOT NULL DEFAULT 0 ,
`markdown` text,
`release` text,
`content` text,
`create_time` datetime NOT NULL,
`member_id` integer NOT NULL DEFAULT 0 ,
`modify_time` datetime NOT NULL,
`modify_at` integer NOT NULL DEFAULT 0 ,
`version` integer NOT NULL DEFAULT 0 ,
`is_open` integer NOT NULL DEFAULT 0 ,
UNIQUE (`book_id`, `identify`)
);
CREATE INDEX `md_documents_identify` ON `md_documents` (`identify`);
CREATE INDEX `md_documents_book_id` ON `md_documents` (`book_id`);
CREATE INDEX `md_documents_parent_id` ON `md_documents` (`parent_id`);
CREATE INDEX `md_documents_order_sort` ON `md_documents` (`order_sort`);
create table `md_attachment`
-- --------------------------------------------------
-- Table Structure for `github.com/lifei6671/mindoc/models.Attachment`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `md_attachment` (
`attachment_id` integer NOT NULL PRIMARY KEY AUTOINCREMENT,
`book_id` integer NOT NULL DEFAULT 0 ,
`document_id` integer,
`file_name` varchar(255) NOT NULL DEFAULT '' ,
`file_path` varchar(2000) NOT NULL DEFAULT '' ,
`file_size` real NOT NULL DEFAULT 0 ,
`http_path` varchar(2000) NOT NULL DEFAULT '' ,
`file_ext` varchar(50) NOT NULL DEFAULT '' ,
`create_time` datetime NOT NULL,
`create_at` integer NOT NULL DEFAULT 0
);
create table `md_logs`
-- --------------------------------------------------
-- Table Structure for `github.com/lifei6671/mindoc/models.Logger`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `md_logs` (
`log_id` integer NOT NULL PRIMARY KEY AUTOINCREMENT,
`member_id` integer NOT NULL DEFAULT 0 ,
`category` varchar(255) NOT NULL DEFAULT 'operate' ,
`content` text NOT NULL,
`original_data` text NOT NULL,
`present_data` text NOT NULL,
`create_time` datetime NOT NULL,
`user_agent` varchar(500) NOT NULL DEFAULT '' ,
`ip_address` varchar(255) NOT NULL DEFAULT ''
);
create table `md_member_token`
-- --------------------------------------------------
-- Table Structure for `github.com/lifei6671/mindoc/models.MemberToken`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `md_member_token` (
`token_id` integer NOT NULL PRIMARY KEY AUTOINCREMENT,
`member_id` integer NOT NULL DEFAULT 0 ,
`token` varchar(150) NOT NULL DEFAULT '' ,
`email` varchar(255) NOT NULL DEFAULT '' ,
`is_valid` bool NOT NULL DEFAULT FALSE ,
`valid_time` datetime,
`send_time` datetime NOT NULL
);
CREATE INDEX `md_member_token_token` ON `md_member_token` (`token`);
create table `md_document_history`
-- --------------------------------------------------
-- Table Structure for `github.com/lifei6671/mindoc/models.DocumentHistory`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `md_document_history` (
`history_id` integer NOT NULL PRIMARY KEY AUTOINCREMENT,
`action` varchar(255) NOT NULL DEFAULT '' ,
`action_name` varchar(255) NOT NULL DEFAULT '' ,
`document_id` integer NOT NULL DEFAULT 0 ,
`document_name` varchar(500) NOT NULL DEFAULT '' ,
`parent_id` integer NOT NULL DEFAULT 0 ,
`markdown` text,
`content` text,
`member_id` integer NOT NULL DEFAULT 0 ,
`modify_time` datetime NOT NULL,
`modify_at` integer NOT NULL DEFAULT 0 ,
`version` integer NOT NULL DEFAULT 0 ,
`is_open` integer NOT NULL DEFAULT 0
);
CREATE INDEX `md_document_history_document_id` ON `md_document_history` (`document_id`);
CREATE INDEX `md_document_history_parent_id` ON `md_document_history` (`parent_id`);
create table `md_migrations`
-- --------------------------------------------------
-- Table Structure for `github.com/lifei6671/mindoc/models.Migration`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `md_migrations` (
`migration_id` integer NOT NULL PRIMARY KEY AUTOINCREMENT,
`name` varchar(500) NOT NULL DEFAULT '' ,
`statements` text,
`status` varchar(255) NOT NULL DEFAULT 'update' ,
`create_time` datetime NOT NULL,
`version` integer NOT NULL DEFAULT 0 UNIQUE
);
create table `md_label`
-- --------------------------------------------------
-- Table Structure for `github.com/lifei6671/mindoc/models.Label`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `md_label` (
`label_id` integer NOT NULL PRIMARY KEY AUTOINCREMENT,
`label_name` varchar(50) NOT NULL DEFAULT '' UNIQUE,
`book_number` integer NOT NULL DEFAULT 0
);
create table `md_blogs`
-- --------------------------------------------------
-- Table Structure for `github.com/lifei6671/mindoc/models.Blog`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `md_blogs` (
`blog_id` integer NOT NULL PRIMARY KEY AUTOINCREMENT,
`blog_title` varchar(500) NOT NULL DEFAULT '' ,
`blog_identify` varchar(100) NOT NULL DEFAULT '' UNIQUE,
`order_index` integer NOT NULL DEFAULT 0 ,
`member_id` integer NOT NULL DEFAULT 0 ,
`blog_type` integer NOT NULL DEFAULT 0 ,
`document_id` integer NOT NULL DEFAULT 0 ,
`blog_excerpt` varchar(1500) NOT NULL DEFAULT '' ,
`blog_content` text,
`blog_release` text,
`blog_status` varchar(100) NOT NULL DEFAULT 'publish' ,
`password` varchar(100) NOT NULL DEFAULT '' ,
`modify_time` datetime NOT NULL,
`modify_at` integer NOT NULL DEFAULT 0 ,
`create_time` datetime NOT NULL,
`version` integer NOT NULL DEFAULT 0 ,
UNIQUE (`blog_id`, `blog_identify`)
);
CREATE INDEX `md_blogs_member_id` ON `md_blogs` (`member_id`);
create table `md_templates`
-- --------------------------------------------------
-- Table Structure for `github.com/lifei6671/mindoc/models.Template`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `md_templates` (
`template_id` integer NOT NULL PRIMARY KEY AUTOINCREMENT,
`template_name` varchar(500) NOT NULL DEFAULT '' ,
`member_id` integer NOT NULL DEFAULT 0 ,
`book_id` integer NOT NULL DEFAULT 0 ,
`is_global` integer NOT NULL DEFAULT 0 ,
`template_content` text,
`create_time` datetime NOT NULL,
`modify_time` datetime NOT NULL,
`modify_at` integer NOT NULL DEFAULT 0 ,
`version` integer NOT NULL DEFAULT 0
);
CREATE INDEX `md_templates_member_id` ON `md_templates` (`member_id`);
CREATE INDEX `md_templates_book_id` ON `md_templates` (`book_id`);
create table `md_teams`
-- --------------------------------------------------
-- Table Structure for `github.com/lifei6671/mindoc/models.Team`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `md_teams` (
`team_id` integer NOT NULL PRIMARY KEY AUTOINCREMENT,
`team_name` varchar(255) NOT NULL DEFAULT '' ,
`member_id` integer NOT NULL DEFAULT 0 ,
`is_delete` bool NOT NULL DEFAULT 0 ,
`create_time` datetime NOT NULL
);
create table `md_team_member`
-- --------------------------------------------------
-- Table Structure for `github.com/lifei6671/mindoc/models.TeamMember`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `md_team_member` (
`team_member_id` integer NOT NULL PRIMARY KEY AUTOINCREMENT,
`team_id` integer NOT NULL DEFAULT 0 ,
`member_id` integer NOT NULL DEFAULT 0 ,
`role_id` integer NOT NULL DEFAULT 0 ,
UNIQUE (`team_id`, `member_id`)
);
create table `md_team_relationship`
-- --------------------------------------------------
-- Table Structure for `github.com/lifei6671/mindoc/models.TeamRelationship`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `md_team_relationship` (
`team_relationship_id` integer NOT NULL PRIMARY KEY AUTOINCREMENT,
`book_id` integer NOT NULL DEFAULT 0 ,
`team_id` integer NOT NULL DEFAULT 0 ,
`create_time` datetime NOT NULL,
UNIQUE (`team_id`, `book_id`)
);
create table `md_itemsets`
-- --------------------------------------------------
-- Table Structure for `github.com/lifei6671/mindoc/models.Itemsets`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `md_itemsets` (
`item_id` integer NOT NULL PRIMARY KEY AUTOINCREMENT,
`item_name` varchar(500) NOT NULL DEFAULT '' ,
`item_key` varchar(100) NOT NULL DEFAULT '' UNIQUE,
`description` text,
`member_id` integer NOT NULL DEFAULT 0 ,
`create_time` datetime NOT NULL,
`modify_time` datetime,
`modify_at` integer NOT NULL DEFAULT 0
);
Install Successfully!
[root@localhost sherlock]#
7.修改权限并启动程序
[root@localhost sherlock]# chmod +x mindoc_linux_amd64
[root@localhost sherlock]# ./mindoc_linux_amd64
2021/11/25 06:27:19.630 [I] [command.go:34] 正在初始化数据库配置.
2021/11/25 06:27:19.631 [I] [command.go:86] 数据库初始化完成.
MinDoc version => v2.0
build time => Mon Mar 11 08:38:41 UTC 2019
start directory => /home/sherlock/mindoc_linux_amd64
2021/11/25 06:27:19.704 [I] [asm_amd64.s:1337] http server Running on http://:8181
本地登录
初始化密码为amdin/123456
本地效果
小型团队使用绰绰有余。
外网访问
[root@localhost sherlock]# systemctl stop firewalld.service
[root@localhost sherlock]# systemctl disable firewalld.service
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost sherlock]#
关闭防火墙后
可正常访问地址