From 8e4933d6c9215d76011ac938abe6ecddf39239a2 Mon Sep 17 00:00:00 2001 From: truthhun <1272881215@qq.com> Date: Tue, 7 Feb 2023 22:27:08 +0800 Subject: [PATCH] README --- .gitignore | 1 + Makefile | 16 ++-- README.md | 170 ++++++++++++++++++++++++++++++++++--- app.example.toml | 2 +- docs/wx-qrcode.jpeg | Bin 0 -> 40742 bytes web/pages/document/_id.vue | 3 + 6 files changed, 170 insertions(+), 22 deletions(-) create mode 100644 docs/wx-qrcode.jpeg diff --git a/.gitignore b/.gitignore index 4ebbb6f..8af22a3 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ ginrpc* dist output +release cache uploads documents diff --git a/Makefile b/Makefile index 4b4816d..bc310c6 100644 --- a/Makefile +++ b/Makefile @@ -43,16 +43,16 @@ clean-api-go: rm -rf api/*/*.go buildlinux: - CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -v -o output/${VERSION}/linux/moredoc -ldflags ${LDFLAGS} - cp -r dist output/${VERSION}/linux - cp -r dict output/${VERSION}/linux - cp -r app.example.toml output/${VERSION}/linux + CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -v -o release/${VERSION}/linux/moredoc -ldflags ${LDFLAGS} + cp -r dist release/${VERSION}/linux + cp -r dict release/${VERSION}/linux + cp -r app.example.toml release/${VERSION}/linux buildwin: - CGO_ENABLED=1 GOOS=windows GOARCH=amd64 go build -v -o output/${VERSION}/windows/moredoc.exe -ldflags ${LDFLAGS} - cp -r dist output/${VERSION}/windows - cp -r dict output/${VERSION}/windows - cp -r app.example.toml output/${VERSION}/windows + CGO_ENABLED=1 GOOS=windows GOARCH=amd64 go build -v -o release/${VERSION}/windows/moredoc.exe -ldflags ${LDFLAGS} + cp -r dist release/${VERSION}/windows + cp -r dict release/${VERSION}/windows + cp -r app.example.toml release/${VERSION}/windows # show help help: diff --git a/README.md b/README.md index 287e873..fdc8164 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,15 @@ -# moredoc - 魔豆文库 +![魔豆文库](web/static/static/images/logo.png) -moredoc - 魔豆文库,由 深圳市摩枫网络科技(https://mnt.ltd) 基于golang开发的类似百度文库的开源文库系统,支持TXT、PDF、EPUB、office等格式文档的在线预览与管理,为 `dochub文库`( [github](https://github.com/truthhun/dochub), [gitee](https://gitee.com/truthhun/DocHub) )的重构版本。 +# MOREDOC - 魔豆文库 -## 特性 +`moredoc` - 魔豆文库,由 深圳市摩枫网络科技(**M**orefun **N**etwork **T**echnology Co., **Ltd**,https://mnt.ltd ) 使用 Golang 开发的类似[百度文库](https://wenku.baidu.com/)、[新浪爱问文库](http://ishare.iask.sina.com.cn/)的开源文库系统,支持 `TXT`、`PDF`、`EPUB`、`MOBI`、`Office` 等格式文档的在线预览与管理,为 `dochub文库`( [github](https://github.com/truthhun/dochub), [gitee](https://gitee.com/truthhun/DocHub) )的重构版本。 -- 支持多种格式文档的在线预览,包括:TXT、PDF、EPUB、office等格式文档。 -- 前后端分离,前端基于vue.js,后端基于golang,支持多平台部署 -- 基于apache2.0开源协议,源码开放,可自由修改、二次开发 +## 文库介绍 ## 技术栈 -- Golang :gin + gRPC -- Vue.js : nuxt2 + element-ui +- Golang :gin + gRPC + GORM +- Vue.js : nuxt2 + element-ui - Database : MySQL 5.7 ## 开源地址 @@ -20,7 +18,84 @@ moredoc - 魔豆文库,由 深圳市摩枫网络科技(https://mnt.ltd) 基于 - Gitee - https://gitee.com/mnt-ltd/moredoc - MNT.Ltd - https://git.mnt.ltd/mnt/moredoc -## 初始化 +## 使用手册 + +关于魔豆文库安装部署以及使用和二次开发等更详细的教程,详见书栈网[《魔豆文库使用手册》](https://www.bookstack.cn/books/moredoc) + +## 二次开发 + +除了文件上传相关的接口,其他接口统一使用 proto 进行定义。 + +### 环境要求 + +- Golang 1.18+ +- Node.js 14.16.0 (可用 nvm 管理) +- MySQL 5.7+ + +**请自行配置相应环境。如在此过程中遇到错误,请根据错误提示自行通过 Google 或者百度解决。** + +### 目录结构 + +> 部分目录,在程序运行时自动生成,不需要手动创建 + +```bash +. +├── LICENSE # 开源协议 +├── Makefile # 编译脚本 +├── README.md # 项目说明 +├── api # proto api, API协议定义 +├── app.example.toml # 配置文件示例,需要复制为 app.toml +├── biz # 业务逻辑层,主要处理业务逻辑,实现api接口 +├── cmd # 命令行工具 +├── cache # 缓存相关 +├── conf # 配置定义 +├── dict # 结巴分词字典,用于给文档自动进行分词 +├── dist # 前端打包后的文件 +├── docs # API文档等 +├── documents # 用户上传的文档存储目录 +├── go.mod # go依赖管理 +├── go.sum # go依赖管理 +├── main.go # 项目入口 +├── middleware # 中间件 +├── model # 数据库模型,使用gorm对数据库进行操作 +├── release # 版本发布生成的版本会放到这里 +├── service # 服务层,衔接cmd与biz +├── sitemap # 站点地图 +├── third_party # 第三方依赖,主要是proto文件 +├── uploads # 文档文件之外的其他文件存储目录 +├── util # 工具函数 +└── web # 前端Web +``` + +### app.toml + +``` +# 程序运行级别:debug、info、warn、error +level="debug" + +# 日志编码方式,支持:json、console +logEncoding="console" + +# 后端监听端口 +port="8880" + +# 数据库配置 +[database] + driver="mysql" + dsn="root:root@tcp(localhost:3306)/moredoc?charset=utf8mb4&loc=Local&parseTime=true" + showSQL=true + maxOpen=10 + maxIdle=10 + +# jwt 配置 +[jwt] + secret="moredoc" + expireDays=365 +``` + +### 初始化 + +**后端初始化** ``` # 安装go依赖 @@ -31,15 +106,84 @@ make init # 编译proto api make api + +# 修改 app.toml 文件配置 +cp app.example.toml app.toml + +# 编译后端 +go build -o moredoc main.go + +# 初始化数据库结构 +./moredoc syncdb + +# 运行后端(可用其他热编译工具),监听8880端口 +go run main.go serve ``` -## 开发说明 +**前端初始化** -- 除了文件上传相关的接口,其他接口一律使用proto进行定义。 +```bash +# 切换到web目录 +cd web -## 管理员初始账号密码 +# 安装依赖 +npm install + +# 运行前端,监听3000端口,浏览器访问 http://localhost:3000 +npm run dev +``` + +### 管理员初始账号密码 + +``` +admin +mnt.ltd +``` + +### 发布版本 + +以下为示例 + +``` +# 打标签 +git tag -a v1.0.0 -m "release v1.0.0" + +# 推送标签 +git push origin v1.0.0 + +# 编译前端 +cd web && npm run generate + +# 编译后端,编译好了的版本会放到release目录下 +# 编译linux版本(Windows版本用 make buildwin) +make buildlinux +``` + +## 演示站点 + +**网址** + +- https://moredoc.mnt.ltd + +**账号密码** ``` 账号:admin 密码:mnt.ltd -``` \ No newline at end of file +``` + +## 微信交流群 + +魔豆文库微信交流群,请添加`进击的皇虫`的微信,备注`魔豆文库加群`,以便进群。 + +**微信二维码** + +![魔豆文库微信交流群](docs/wx-qrcode.jpeg) + +## License + +开源版本基于 [Apache License 2.0](./LICENSE) 协议发布。 + +## 鸣谢 + +感谢各开源项目为魔豆文库的开发奠定了基础。相关开源项目,后端依赖,详见 [go.mod](./go.mod);前端依赖,详见 [web/package.json](./web/package.json)。 diff --git a/app.example.toml b/app.example.toml index 4fc445f..09b8c6d 100644 --- a/app.example.toml +++ b/app.example.toml @@ -2,7 +2,7 @@ level="debug" # 日志编码方式,支持:json、console logEncoding="console" -port="8080" +port="8880" [database] driver="mysql" dsn="root:root@tcp(localhost:3306)/moredoc?charset=utf8mb4&loc=Local&parseTime=true" diff --git a/docs/wx-qrcode.jpeg b/docs/wx-qrcode.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..50941d5e3abaac5a4ac15c21c4b7423a0fadd7d8 GIT binary patch literal 40742 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 kU;e|t9@olzV!Z literal 0 HcmV?d00001 diff --git a/web/pages/document/_id.vue b/web/pages/document/_id.vue index 01533d7..38d42b7 100644 --- a/web/pages/document/_id.vue +++ b/web/pages/document/_id.vue @@ -99,6 +99,9 @@ >继续阅读 +
+ - 可预览页数已预览完 - +