{"id":20393182,"url":"https://github.com/yomea/lx-doc","last_synced_at":"2025-04-07T11:09:58.158Z","repository":{"id":239512475,"uuid":"797061056","full_name":"yomea/lx-doc","owner":"yomea","description":"定位于个人和小团队的云文档（支持流程图，脑图，PDF，Excel，Word，BPMN，markdown文档编辑）","archived":false,"fork":false,"pushed_at":"2025-03-20T06:12:03.000Z","size":596,"stargazers_count":74,"open_issues_count":0,"forks_count":27,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-31T10:05:42.541Z","etag":null,"topics":["bpnm","doc","excel","flowchart","markdown","mind-map","note","ppt","sheet","whiteboard","word"],"latest_commit_sha":null,"homepage":"https://wanglin2.github.io/lx-doc-site/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yomea.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-07T05:58:52.000Z","updated_at":"2025-03-28T02:39:05.000Z","dependencies_parsed_at":"2024-06-28T02:11:41.357Z","dependency_job_id":"71e21e6d-359d-431b-8bcb-47694aeb8cc4","html_url":"https://github.com/yomea/lx-doc","commit_stats":null,"previous_names":["yomea/lx-doc"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yomea%2Flx-doc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yomea%2Flx-doc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yomea%2Flx-doc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yomea%2Flx-doc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yomea","download_url":"https://codeload.github.com/yomea/lx-doc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247640465,"owners_count":20971557,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bpnm","doc","excel","flowchart","markdown","mind-map","note","ppt","sheet","whiteboard","word"],"created_at":"2024-11-15T03:47:49.427Z","updated_at":"2025-04-07T11:09:58.135Z","avatar_url":"https://github.com/yomea.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n## 简介\n\n~~在线体验地址（随时会被释放，请勿正式使用，释放后数据将不存在）：http://47.97.229.115:8089（已释放）~~\n\n完整文档地址：[理想文档](https://wanglin2.github.io/lx-doc-site/)\n\n理想文档定位于个人和小团队的云文档（支持流程图，脑图，PDF，Excel，Word，BPMN，markdown文档编辑）。我们倡导私有化部署，数据掌握在自己手里，不用受制于人。\n\n本仓库为后端仓库，前端代码仓库请移步：[wanglin2/lx-doc](https://github.com/wanglin2/lx-doc/tree/main)。\n\n本项目分为两个版本：\n- 分支 master 用于分布式，支持集群部署\n- 分支 personal 或 back_front_whole（前后端不分离） 用于单机部署，不支持集群。\n\n重要提示！！！：\n\n1.不会支持协同编辑（有能力的可以研究下协同办公框架：[sharedb](https://github.com/share/sharedb) 或者 [shareJS](https://github.com/josephg/ShareJS)）；\n\n2.不会支持手机端、客户端；\n\n3.不会提供在线服务，只做私有化部署；\n\n## 项目简要说明\n\n后端模块目前简单的分为了 lx-common 与 lx-core 模块：\n\n- lx-common：主要放一些通用的类，为后续可能得多模块做准备\n- lx-core：核心的实现类，比如控制层，服务层，数据库操作，启动类都在这个目录\n\n在该仓库的根目录下还有以下文件：\n\n- application-prod.yml：该文件是生产配置文件，主要配置数据库，redis，除系统属性与系统变量之外，该配置文件优先级比 lx-core\n  模块下的 application.yml（该文件配置了一些默认的属性） 优先级更高，所以如果您有需求，您可以在这个文件里配置属性，覆盖\n  application.yml 中的默认属性\n- doc.sql：理想文档的数据库脚本，该脚本是mysql的sql脚本，默认的数据库名为 lx_doc ，您可在自己的数据库中配置该名称，也可以修改成您想要的数据库名\n- docker-build*.sh：提供了一些打包，容器操作的命令示例\n- Dockerfile*：docker镜像打包示例\n- nginx.conf：nginx的配置文件，如果您需要使用nginx做反向代理，可以直接使用该文件，如果你有自己的配置偏好，那么可以进行微调\n- run_*.sh：启动脚本\n\n目前该项目分为两个版本的分支，分别是分布式版本与个人版本：\n\n- 分布式版本：该版本在 master 分支上，目前该版本的上传功能默认实现了 minio和oss。\n- 个人版本：该版本在 personal 或 back_front_whole（前后端不分离） 分支上，仅支持单机部署，附件和文档内容默认都是保存在本地磁盘上\n\n如果你只是给自己或者朋友们平时画画图，导出图片啊之类的操作，也没什么高并发，高可用，性能方面的要求，\n那么直接使用个人版本部署一台机器即可，个人版部署非常简单，只要一台机器，装个mysql就完事了，不用搞那么多的花里胡哨。\n\n\n## 部署\n\n### 使用docker部署\n\n如果您想自己使用docker构建镜像，那么可以参照 docker-build.sh 中的命令构建，但是前提您需要下载[maven](https://maven.apache.org/index)构建工具\n和[OpenJDK](https://jdk.java.net/java-se-ri/11-MR3)开发环境。\n\n### 不使用容器部署\n\n```shell\n# maven 构建工具打包命令，执行该命令之后会在当前目录下生成一个叫target的目录，该目录下会生成一个 lx-doc.jar\nmvn -DskipTests -U clean package\n\n# 生成 lx-doc.jar 之后，可以运行以下脚本执行\nsh run_no_in_docker.sh start 512m\n```\n\n在启动前，您还需要准备以下环境\n\n- 安装mysql，mysql初始化脚本在本项目的doc.sql里，数据库名默认是lx_doc，如果有需要可以修改成自己的库名\n- 安装redis，个人版本，可以忽略(请切换personal分支构建)，自己画画图，根本不需要这么麻烦，安装redis主要是为了解决高可用，分布式集群产生的问题（个人压根不需要集群，也没啥瓶颈）\n\n### 配置说明\n在启动应用之前，您还需要配置好参数才能启动应用，在项目里有一个叫做 application.yml 的配置文件，该配置预设了一些默认的参数，您只\n需要关注以下参数（请仔细阅读注释）：\n```yaml\nlx:\n  doc:\n    docStorage:\n      type: minio # 文档存储类型，目前已实现的有 dataBase，local，minio，oss，接口：com.laxqnsys.core.buz.doc.service.IDocFileContentStorageService\n      path: ${app.name}/doc/content/ # 文档内容存储的位置，如果类型是 dataBase ，此属性无效\n      minio:\n        endpoint: http://localhost:9000\n        bucket: test\n        accessKey: xxx\n        secretKey: yyy\n    whiteUrlList: /api/login,/api/register # 白名单url，配置之后将会被登录拦截器拦截\n    blackUrlList: /api/** # 黑名单url，配置之后将会被登录拦截器拦截\n    fileUpload:\n      type: minio # 文件上传类型，目前已实现local，minio，oss，接口 com.laxqnsys.core.buz.sys.service.ISysFileUploadService\n      path: ${app.name}/attachment/ # 配置文件上传的地址\n      minio:\n        endpoint: http://localhost:9000\n        bucket: test\n        accessKey: xxx\n        secretKey: yyy\n    \n    # 如果您使用 nginx 来反向代理，那么不需要配置以下静态资源的映射，可以直接使用 nginx 来代理\n    # 如果您不使用 nginx 想直接使用当前服务去请求，请将以下静态资源路径修改成自己的路径，然后在 lx.doc.whiteUrlList \n    # 添加 web 请求白名单，另外也要注意，如果您没有将静态资源打入镜像中，那么您需要在容器启动时进行 -v 目录挂载\n    indexHtmlWebPath: /index.html # 配置欢迎页\n    staticResources:\n      - pathPatterns: /static/** # 配置静态资源访问的web uri\n        resourceLocations: file:///${lx.doc.fileUpload.path} # 配置静态资源所在物理磁盘的位置，不过静态资源的访问尽量使用 nginx 反向代理\n      - pathPatterns: /**\n        resourceLocations: classpath:/static/lx-doc/\n\nspring:\n  datasource:\n    druid:\n      maxActive: 20 # 最大连接池大小\n      initialSize: 1 # 初始启动的连接数\n      minIdle: 1 # 空闲时的连接数\n      url: jdbc:mysql://127.0.0.1:3306/database_name?useUnicode=true\u0026characterEncoding=utf8\u0026autoReconnect=true\u0026allowMultiQueries=true\n      username: xxx\n      password: xxx\n  # 个人版，不使用集群登录的，不需要下面这个配置\n  redis:\n    sentinel:\n      master: xxx\n      nodes: redis1.domain:26379,redis2.domain:26379,redis3.domain:26379\n    password: xxx\n    lettuce:\n      pool:\n        max-active: 30\n        min-idle: 8\n        max-idle: 20\n        time-between-eviction-runs: 30000\n```\n如果您不想修改 application.yml 配置文件，以上配置都可以通过启动参数指定，docker 启动时，可以通过 -e ARGS='--lx.doc.whiteUrlList=/,/api/login,/api/register,/static/**,/assets/**,/system/error' 指定,\n也可以写到 application-prod.yml 的配置文件中，避免参数太长，不直观，启动参数配置可参考如下示例：\n本项目提供了三种docker部署方案，分别对应项目根目录下的 Dockerfile，Dockerfile_with_nginx，Dockerfile_whole\n\n- Dockerfile：JDK环境\n- Dockerfile_with_nginx：nginx，JDK环境\n- Dockerfile_whole：带有mysql，nginx，JDK环境，将前端web文件，sql脚本，nginx配置文件，应用配置文件一并打入镜像,可以不修改任何配置，一键启动即可\n\n下面是 Dockerfile_with_nginx 打出来的镜像的容器启动命令说明（每种方案对应的Dockerfile都有一个对应docker-build*.sh，可以\n直接参考该文件里的docker启动命令）：\n\n```shell\n# 你可以拉取github上的代码进行构建\n# 这里的 ARGS 参数可以直接写在 application-prod.yml 配置文件里，避免把密码登参数直接写在命令行中\n# 挂在的宿主目录请先创建\n# /usr/web/html/ 挂在的是前端资源目录\n# /usr/config/lx-doc/ 挂在 lx-doc 启动的配置文件，比如 application-prod.yml 就放在这个目录下面\n# /usr/nginx/config 放置nginx相关的配置\n# /usr/logs/lx-doc 应用的日志\n# /usr/attachment/lx-doc 上传附件的存放路径\ndocker run -d --network host --privileged \\\n -v /usr/web/html/:/usr/web/html/ \\\n -v /usr/config/lx-doc/:/usr/config/lx-doc/ \\\n -v /var/log/nginx/:/var/log/nginx/ \\\n -v /usr/nginx/config:/usr/nginx/config \\\n -v /usr/logs/lx-doc:/usr/logs/lx-doc \\\n -v /usr/attachment/lx-doc:/usr/attachment/lx-doc \\\n -e ARGS=\"--spring.profiles.active=prod --spring.config.location=classpath:/,/usr/config/lx-doc/ --app.name=lx-doc\" \\\n -e MEMORY=1024m \\\n--name lx-doc lx-doc:1.0\n\n```\n\n注意：如果你的 docker 版本较低，可能不支持 --network host，这个命令的意思是容器共享宿主机的网络，如果你的docker版本不支持，\n可以看到的现象就是你在宿主机上看不到容器启动的端口号，或者你直接执行 docker exec -d 容器id ifconfig 得到的ip地址和宿主机\n不一致，那么这个时候你就不要使用 --network host 这个命令，你手动映射端口，除此之外如果使用了域名去连接mysql或者redis的可以改成\nip地址或者修改容器的hosts，修改hosts可以在Dockerfile操作：\n\n```shell\n# 你可以拉取github上的代码进行构建\n# 这里的 ARGS 参数可以直接写在 application-prod.yml 配置文件里，避免把密码登参数直接写在命令行中\n# 挂在的宿主目录请先创建\n# /usr/web/html/ 挂在的是前端资源目录\n# /usr/config/lx-doc/ 挂在 lx-doc 启动的配置文件，比如 application-prod.yml 就放在这个目录下面\n# /usr/nginx/config 放置nginx相关的配置\n# /usr/logs/lx-doc 应用的日志\n# /usr/attachment/lx-doc 上传附件的存放路径\ndocker run -d -p 9222:9222 -p 8089:8089 --privileged \\\n -v /usr/web/html/:/usr/web/html/ \\\n -v /usr/config/lx-doc/:/usr/config/lx-doc/ \\\n -v /var/log/nginx/:/var/log/nginx/ \\\n -v /usr/nginx/config:/usr/nginx/config \\\n -v /usr/logs/lx-doc:/usr/logs/lx-doc \\\n -v /usr/attachment/lx-doc:/usr/attachment/lx-doc \\\n -e ARGS=\"--spring.profiles.active=prod --spring.config.location=classpath:/,/usr/config/lx-doc/ --app.name=lx-doc\" \\\n -e MEMORY=1024m \\\n--name lx-doc lx-doc:1.0\n\n```\n\n## 扩展开发\n\n目前该项目分为两个版本的分支，分别是分布式版本（master）与个人版本（personal或back_front_whole（前后端不分离）），您根据自己的需求选择分支做扩展。\n该项目使用 Maven 做包依赖与管理工具，所以您的开发环境需要配置JDK8和Maven3.0及以上版本。\n\n另外，该项目还有以下需要待优化和扩展的建议：\n- master 分支分布式版本的上传文件的分布式存储默认集成MINIO，如果您不想使用MINIO，想使用其他的分布式存储系统，比如OSS，将对应上传类型改为OSS即可。\n- 文档内容目前实现了数据库存储、本地存储（单机用）、 MINIO和OSS 四种（可通过lx.doc.docStorage.type指定存储方式）方案，但数据库存储的文档在内容比较大的时候，容易受数据库字段长度和 mysql max_allowed_packet 的\n  的制约，另外使用数据库保存大文件数据时性能也比较差，为了提高并发能力和性能可以考虑使用文件系统存储（分布式可以使用OSS和MINIO，\n  单机可以本地存储）。\n- 目前文档搜索只支持文档标题的搜索，不支持文档内容的搜索，如果您需要支持文档内容的搜索，可以考虑引入 ES ，将文档内容同步给它。\n\n## 开源协议\n\n[AGPL-3.0 License](https://github.com/yomea/lx-doc/blob/master/LICENSE)\n\n本项目的开源协议为AGPL-3.0，简要描述就是您可以商用，但必须保留所使用开源项目的版权，并且源码也必须开源。当然，如果您不想开源，可以联系我们。\n\n不过您也需要关注本项目所使用的项目的开源协议。\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyomea%2Flx-doc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyomea%2Flx-doc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyomea%2Flx-doc/lists"}