云策文档是一款开源知识管理工具。通过独立的知识库空间,结构化地组织在线协作文档,实现知识的积累与沉淀,促进知识的复用与流通。
Go to file
fantasticit 37c310363d client: use image-uploader in wiki setting 2022-06-02 17:54:47 +08:00
.husky refator: fix pre-commit hook 2022-05-01 20:28:21 +08:00
config chore: update comment 2022-05-26 13:21:59 +08:00
docker Delete docker-compose.yml 2022-05-22 18:01:59 +08:00
packages client: use image-uploader in wiki setting 2022-06-02 17:54:47 +08:00
scripts Update README in scripts 2022-04-24 22:52:57 +08:00
.eslintignore update .eslintignore 2022-05-22 10:56:58 +08:00
.gitattributes chore: add gitattributes 2022-05-25 23:20:16 +08:00
.gitignore chore: add build-output.sh 2022-05-21 23:36:10 +08:00
.npmrc chore: add npmrc 2022-05-20 17:54:12 +08:00
.prettierignore chore: fix prettier, eslint 2022-05-20 23:11:48 +08:00
.prettierrc feat: improve tiptap 2022-03-21 16:46:27 +08:00
.stylelintrc.js tiptap: refactor mind 2022-04-26 14:05:16 +08:00
Dockerfile Create Dockerfile 2022-05-22 18:04:58 +08:00
LICENSE Create LICENSE 2022-05-28 19:23:07 +08:00
README.md Update README.md 2022-05-22 18:55:03 +08:00
build-output.sh chore: add build-output.sh 2022-05-21 23:36:10 +08:00
docker-compose.yml Update docker-compose.yml 2022-05-22 19:00:25 +08:00
nginx.conf.bak feat: add doc for flow 2022-05-21 12:57:11 +08:00
package.json chore: fix prettier, eslint 2022-05-20 23:11:48 +08:00
pnpm-lock.yaml client: upgrade 2022-05-28 15:13:25 +08:00
pnpm-workspace.yaml root: upload source code 2022-02-20 19:51:55 +08:00

README.md

think

简介

Think 是一款开源知识管理工具。通过独立的知识库空间,结构化地组织在线协作文档,实现知识的积累与沉淀,促进知识的复用与流通。同时支持多人协作文档。使用的技术如下:

  • MySQL:数据存储
  • next.js:前端页面框架
  • nest.js:服务端框架
  • AliyunOSS:对象存储
  • tiptap:编辑器及文档协作

可访问云策文档帮助中心,查看更多功能文档。

链接

云策文档已经部署上线,可前往注册使用。

预览

首页 知识库 新建文档 编辑器 协作 收藏

项目结构

本项目依赖 pnpm 使用 monorepo 形式进行代码组织,分包如下:

  • @think/config: 客户端、服务端、OSS、MYSQL、Redis 等配置管理
  • @think/domains:领域模型数据定义
  • @think/constants:常量配置
  • @think/server:服务端
  • @think/client:客户端

项目依赖

  • nodejs ≥ 16.5
  • pnpm
  • pm2
  • mysql ≥ 5.7
  • redis (可选)

依赖安装命令: npm i -g pm2 @nestjs/cli pnpm

数据库

首先安装 MySQL,推荐使用 docker 进行安装。

docker image pull mysql:5.7
# m1 的 mac 可以用docker image pull --platform linux/x86_64 mysql:5.7
docker run -d --restart=always --name think -p 3306:3306 -e MYSQL_DATABASE=think -e MYSQL_ROOT_PASSWORD=root mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

可选Redis

如果需要文档版本服务,请在根目录 yaml 配置中进行 db.redis 的配置。

docker pull redis:latest
docker run --name think-redis -p 6379:6379 -d redis --appendonly yes --requirepass "root"

Docker-compose 一键构建安装

  • 实测腾讯轻量云 2C4G 机器构建需 8 分钟左右

请注意修改 docker-compose.yml 中的 EIP 参数,否则无法正常使用!!!

# 首次安装
git clone  https://github.com/fantasticit/think.git
cd think
docker-compose up -d

#二次更新升级
cd think
git pull
docker-compose build
docker-compose up -d

然后访问 http://ip:5001 即可.

手动安装教程

  • 前台页面地址:http://localhost:5001
  • 服务接口地址:http://localhost:5002
  • 协作接口地址:http://localhost:5003

如需修改配置,开发环境编辑 config/dev.yaml。生产环境编辑 config/prod.yaml (如没有,可复制开发环境的配置修改即可.)

本地源代码运行(开发环境)

git clone  https://github.com/fantasticit/think.git
cd think
pnpm install
pnpm run dev

然后访问 http://ip:5001 即可.

本地源代码运行(生产环境)

生产环境部署的脚本如下:

git clone  https://github.com/fantasticit/think.git
cd think
pnpm install
pnpm run build
pnpm run pm2

pm2 startup
pm2 save

nginx 配置参考

采用反向代理进行 nginx 配置,同时设置 proxy_set_header X-Real-IP $remote_addr; 以便服务端获取到真实 ip 地址

upstream wipi_client {
  server 127.0.0.1:3000;
  keepalive 64;
}

# http -> https 重定向
server {
  listen  80;
  server_name 域名;
  rewrite ^(.*)$  https://$host$1 permanent;
}

server {
  listen 443 ssl;
  server_name 域名;
  ssl_certificate      证书存放路径;
  ssl_certificate_key  证书存放路径;

  location / {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Nginx-Proxy true;
    proxy_cache_bypass $http_upgrade;
    proxy_pass http://wipi_client; #反向代理
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

自动化部署

思路:在服务器部署 webhook然后在 github setting 中配置相应钩子,实现自动化部署

参考:webhook

资料