开源协作开发者内容平台Vrite

在这里插入图片描述

什么是 Vrite ?

Vrite 是一个开源协作空间,用于创建、管理和部署产品文档、技术博客和知识库。它旨在提供高质量、集成的用户和开发人员体验。

Vrite 具有以下功能:

  • 内置管理仪表板,用于使用看板或列表视图管理内容生产和交付;
  • 现代所见即所得编辑体验,支持 Markdown、集成代码编辑器、代码格式化和实时协作;
  • 人工智能驱动的语义搜索,用于组织和搜索您的内容库;
  • 多功能 API扩展系统,用于定制您的体验并向任何前端交付内容;
  • 开源,可选择自托管和使用Vrite Cloud。

如果不想自己安装,可以在官方站点 :app.vrite.io上进行体验

安装

在群晖上以 Docker 方式安装。

Vrite 用到 4 个自己官方的镜像,但 tags 最新版本不是常用的 latest,而是 main

还是那句话,如果镜像拉不动,去docker 代理网站试试 :https://dockerproxy.com/

其中:

  • ghcr.io/vriteio/vrite/api:mainAPI
  • ghcr.io/vriteio/vrite/assets:main :资源
  • ghcr.io/vriteio/vrite/collaboration:main :协作
  • ghcr.io/vriteio/vrite/app:main :主程序
  • gmongo :数据库
  • minio/minio :存储
  • redis :缓存
  • semitechnologies/weaviate:1.21.2 :低延迟矢量搜索引擎

Weaviate 是一个低延迟矢量搜索引擎,开箱即用地支持不同的媒体类型(文本、图像等)。它提供语义搜索、问答提取、分类、可定制模型(PyTorch/TensorFlow/Keras)等。WeaviateGo 中从头开始构建,同时存储对象和向量,允许将向量搜索与结构化过滤和容错相结合云原生数据库,所有这些都可以通过 GraphQLREST 和各种编程语言客户端访问。【墨天轮百科】

docker-compose.yml

将下面的内容保存为 docker-compose.yml 文件

version: "3.9"services:mongodb:image: mongocontainer_name: vrite-mongovolumes:- ./mdata:/data/db#ports:#  - 27017:27017minio:image: minio/miniocontainer_name: vrite-minioenvironment:- MINIO_ROOT_USER=user- MINIO_ROOT_PASSWORD=password#ports:#  - "9000:9000"#  - "9001:9001"command: server --console-address ":9001" /datavolumes:- ./minio:/dataredis:image: rediscontainer_name: vrite-redisvolumes:- ./rdata:/data#ports:#  - "6379:6379"weaviate:image: semitechnologies/weaviate:1.21.2container_name: vrite-weaviate#ports:#  - 8080:8080volumes:- ./weaviate:/var/lib/weaviateenvironment:- PORT=8080- QUERY_DEFAULTS_LIMIT=25- PERSISTENCE_DATA_PATH=/var/lib/weaviate- DEFAULT_VECTORIZER_MODULE=text2vec-openai- ENABLE_MODULES=text2vec-openai- AUTHENTICATION_APIKEY_ENABLED=true- AUTHENTICATION_APIKEY_ALLOWED_KEYS=password- AUTHENTICATION_APIKEY_USERS=vriteapi:image: ghcr.io/vriteio/vrite/api:maincontainer_name: vrite-apienv_file: ./env.txtdepends_on:- mongodb- redisenvironment:- PORT=4444ports:- "4444:4444"assets:image: ghcr.io/vriteio/vrite/assets:maincontainer_name: vrite-assetsenv_file: ./env.txtdepends_on:- mongodb- minio- redisenvironment:- PORT=8888ports:- "8888:8888"collab:image: ghcr.io/vriteio/vrite/collaboration:maincontainer_name: vrite-collabenv_file: ./env.txtdepends_on:- mongodb- redisenvironment:- PORT=5555ports:- "5555:5555"app:image: ghcr.io/vriteio/vrite/app:maincontainer_name: vrite-appenv_file: ./env.txtenvironment:- PORT=3333ports:- "3333:3333"depends_on:- api- assets- collab- mongodb- minio- redis

env.txt

将下面的内容保存为 env.txt,该文件包含其中的服务 docker-compose.yml 将读取的所有配置选项。

# Basic (required)
HOST=0.0.0.0
NODE_ENV=production# Cookies (optional - multi-domain setup)
COOKIE_DOMAIN=192.168.0.197# Security (required - JWT)
SECRET=a5nWSvHrQrql3pCkdA6bEWMcpvyaQQEr6# MongoDB (required)
MONGO_URL=mongodb://mongodb:27017/vrite# Redis (required)
REDIS_URL=redis://redis:6379# Email (required)
SENDER_EMAIL=wbsu2003@88.com
SENDER_NAME=laosu# One of following required:# Email (SMTP)
SMTP_HOST=smtp.88.com
SMTP_PORT=465
SMTP_USERNAME=wbsu2003@88.com
SMTP_PASSWORD=<邮件的第三方客户端密码>
SMTP_SECURE=false# Email (SendGrid)
SENDGRID_API_KEY=# S3 (required - file storage)
S3_BUCKET=vrite-images
S3_ENDPOINT=http://minio:9000
S3_REGION=us-east-1
S3_ACCESS_KEY=user
S3_SECRET_KEY=password
S3_FORCE_PATH_STYLE=true# Service URLs (required)
PUBLIC_COLLAB_URL=http://192.168.0.197:5555
PUBLIC_APP_URL=http://192.168.0.197:3333
PUBLIC_API_URL=http://192.168.0.197:4444
PUBLIC_ASSETS_URL=http://192.168.0.197:8888# GitHub OAuth2 (optional - GitHub sign in)
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=# GitHub App (optional - GitHub Git sync)
GITHUB_APP_ID=
GITHUB_APP_PRIVATE_KEY=
GITHUB_APP_CLIENT_ID=
GITHUB_APP_CLIENT_SECRET=# Search (optional - Search)
WEAVIATE_API_KEY=password
WEAVIATE_URL=http://weaviate:8080# AI (optional - AI "Q&A" search)
# OPENAI_API_KEY=
# OPENAI_ORGANIZATION=

下面这些内容是必须设置的:

  • COOKIE_DOMAIN:因为用在局域网使用,所以这里用了 IP 而不是域名;
  • SECRET:可以用 openssl rand -base64 32 来生成;
  • SMTP_:老苏还是用的 88 邮箱,如果不设置或者设置错误,会不能登录;
  • PUBLIC_:是服务的对外地址,所以在局域网使用,所以用的是 IP + 端口的模式;
  • 其他的根据需要设置,请参考官方文档:https://docs.vrite.io/self-hosting/configuration/

然后执行下面的命令

# 新建文件夹 vrite 和 子目录
mkdir -p /volume1/docker/vrite/{mdata,minio,rdata,weaviate}# 进入 vrite 目录
cd /volume1/docker/vrite# 将 docker-compose.yml 和 env.txt 放入当前目录# 一键启动
docker-compose up -d

第一次可能出现这样的情况

在容器 vrite-app 的日志中会看到下面的错误

vrite-app   | 
vrite-app   | /app/index.js:196956
vrite-app   |           const err = new AVV_ERR_READY_TIMEOUT(name2);
vrite-app   |                       ^
vrite-app   | AvvioError [Error]: Plugin did not start in time: 'async (fastify) => { -- const db = fastify.mongo.db;'. You may have forgotten to call 'done' function or to resolve a Promise
vrite-app   |     at Timeout._onTimeout (/app/index.js:196956:23)
vrite-app   |     at listOnTimeout (node:internal/timers:569:17)
vrite-app   |     at process.processTimers (node:internal/timers:512:7) {
vrite-app   |   code: 'AVV_ERR_READY_TIMEOUT',
vrite-app   |   fn: [AsyncFunction (anonymous)] { [Symbol(skip-override)]: true }
vrite-app   | }
vrite-app   | 
vrite-app   | Node.js v18.17.1
vrite-app exited with code 1

似乎是表示某个插件在规定的时间内没有启动完成,因此可以稍等下点后面的开关启动

在这里插入图片描述

当然也可以再次执行

# 再次一键启动
docker-compose up -d

如果能启动成功,就可以开始访问了

【官方提示】:目前,自托管时,Vrite 扩展不可用,因为 Vrite 扩展系统尚未准备好。我们稍后会启用。

运行

在浏览器中输入 http://群晖IP:3333 就能看到登录界面

第一次需要点最下面的 I don't have an account 注册

注册成功后,需要验证邮件

在这里插入图片描述

打开邮件

点邮件中的链接

在这里插入图片描述

Go to dashboard,默认是 Kanban 模式,分为 IdeasDraftsPublished,这个标题是可以修改的

可以切换为 List 模式

在这里插入图片描述

3 个区域的说明

看板区域的说明

在这里插入图片描述

左下角可以切换和新建不同的 workspace

打开示例的 Hello World ,可以修改或者删了重建

Vrite Editor 提供了一种极简主义、所见即所得的编辑体验,并支持 Markdown

老苏重新写了两篇

返回 Dashboard

将完成完成的文档,拖动到 Publish,并且 Lock ,防止被修改,点卡片上的 眼睛就可以预览了,还可以发布到 Dev.to 等平台

更多使用说明,请参考官方的使用指南:https://docs.vrite.io/usage-guide/getting-started/

参考文档

vriteio/vrite: Open-source developer content platform | Now in Public Beta
地址:https://github.com/vriteio/vrite

Vrite - developer content platform
地址:https://vrite.io/

Vrite - developer content platform
地址:https://docs.vrite.io/self-hosting/docker/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/95311.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud(二)Docker、Spring AMQP、ElasticSearch

文章目录 DockerDocker与虚拟机Docker架构镜像、容器、镜像托管平台Docker架构Docker实践 Spring AMQP简单使用案例工作队列- WorkQueue发布订阅服务FanoutExchangeDirectExchangeTopicExchange 消息转换器 ElasticSearch倒排索引IK分词器IK分词拓展与停用字典 操作索引库mappi…

Dubbo 融合 Nacos 成为注册中心

Nacos 作为 Dubbo 生态系统中重要的注册中心实现&#xff0c;本文将会介绍如何进行 Dubbo 对接 Nacos 注册中心的工作。 预备工作 请确保后台已经启动 Nacos 服务 快速上手 Dubbo 融合 Nacos 成为注册中心的操作步骤非常简单&#xff0c;大致步骤可分为“增加 Maven 依赖”…

与值域有关的问题(非权值线段树)——运用分块:1004T1

区间小于等于某值区间加 显然同时涉及区间和值域&#xff0c;不能用log级ds来做&#xff0c;常见套路就是上分块 这题是个复合题&#xff0c;后面就是个组合数 #include<bits/stdc.h> using namespace std; #define int long long inline int read(){int x0,f1;char c…

创建vue3工程

一、新建工程目录E:\vue\projectCode\npm-demo用Visual Studio Code 打开目录 二、点击新建文件夹按钮&#xff0c;新建vue3-01-core文件夹 三、右键vue3-01-core文件夹点击在集成终端中打开 四、初始化项目&#xff0c;输入npm init 一直敲回车直到创建成功如下图 npm init 五…

国庆加速度!新增功能点锁定功能,敏捷开发新增估算功能,助力项目快速突破!

大家好&#xff0c;CoCode开发云旗下Co-Project V3.6智能项目管理平台正式发布&#xff0c;平台新增功能点锁定功能、敏捷开发模式新增估算板块和两种估算方式。 功能点锁定功能进一步提高了项目估算的灵活性和准确性&#xff0c;有利于提高项目估算效率&#xff1b;而敏捷开发…

JAVA面经整理(8)

一)为什么要有区&#xff0c;段&#xff0c;页&#xff1f; 1)页是内存和磁盘之间交互的基本单位内存中的值修改之后刷到磁盘的时候还是以页为单位的索引结构给程序员提供了高效的索引实现方式&#xff0c;不过索引信息以及数据记录都是记录在文件上面的&#xff0c;确切来说是…

六、互联网技术——数据存储

文章目录 一、存储系统层次结构二、按照重要性分类三、磁盘阵列RAID三、RAID基础四、磁盘阵列分级五、数据备份与恢复六、容灾与灾难恢复 一、存储系统层次结构 常见的三层存储体系结构如下图所示&#xff0c;分为高速缓冲存储器、主存储器和外存储器。 二、按照重要性分类 …

Android自定义Drawable---灵活多变的矩形背景

Android自定义Drawable—灵活多变的矩形背景 在安卓开发中&#xff0c;我们通常需要为不同的按钮设置不同的背景以实现不同的效果&#xff0c;有时还需要这些按钮根据实际情况进行变化。如果采用编写resource中xml文件的形式&#xff0c;就需要重复定义许多只有微小变动的资源…

CSDN Q: “这段代码算是在STC89C52RC51单片机上完成PWM呼吸灯了吗?“

这是 CSDN上的一个问题 这段代码算是在STC89C52RC51单片机上完成PWM呼吸灯了吗&#xff0c;还是说得用上定时器和中断函数#include <regx52.h> 我个人认为: 效果上来说, 是的! 码以 以Time / 100-Time 调 Duty, 而 for i loop成 Period, 加上延时, 实现了 PWM周期, 虽然…

【LeetCode热题100】--34.在排序数组中查找元素的第一个和最后一个位置

34.在排序数组中查找元素的第一个和最后一个位置 二分查找中&#xff0c;寻找 leftIdx 即为在数组中寻找第一个大于等于 target 的下标&#xff0c;寻找 rightIdx 即为在数组中寻找第一个大于 target 的下标&#xff0c;然后将下标减一。进行两次查找 class Solution {public …

43 验证二叉搜索树

验证二叉搜索树 理解题意&#xff1a;验证搜索二叉树&#xff1a;中序遍历是升序题解1 递归&#xff08;学习学习&#xff01;&#xff09;题解2 中序遍历&#xff08;保持升序&#xff09; 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个 有效的二叉搜索树。 有…

Flutter项目安装到Android手机一直显示在assembledebug

问题 Flutter项目安装到Android手机一直显示在assembledebug 原因 网络不好&#xff0c;gradle依赖下载不下来 解决方案 修改如下的文件 gradle-wrapper.properties 使用腾讯提供的gradle镜像下载 distributionUrlhttps://mirrors.cloud.tencent.com/gradle/gradle-7.5…

mac openssl 版本到底怎么回事 已解决

在mac 安装node多版本的时候&#xff0c;有可能把原有的 openssl1.1 版本 直接要再一次升级了&#xff0c;无奈的 php环境 编译器是 openssl 1.1 还是 3.0 &#xff0c;今天来个底朝天的找问题。 brew search openssl 有安装 三个版本。 但是错误提示 是第二个版本。 brew …

十月四日作业

1、服务器 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器头文件 #include <QTcpSocket> //客户端头文件 #include <QList> //链表容器 #include <…

git 提交代码,解决分支冲突,合并分支

克隆代码 git clone 仓库地址 克隆指定分支 git clone -b 分支名称 仓库地址 上传到分支上 1.克隆代码&#xff1a;git clone 仓库地址 注意&#xff1a;克隆仓库&#xff0c;会自动连接远程仓库的 2.修改代码完毕 3.git init 4.创建分支&#xff1a;git branch 分支名称 5…

Spring — 三级缓存和 循环依赖

置顶 学习专栏&#xff1a;【Java后端面试题】 1.Java面试题—基础知识、面向对象、【容器】、IO & 【设计模式】、泛型 & 异常 & 反射 & 注解、快速排序2.Java面试题—并发基础、【同步 & 互斥】、JUC & 并发容器、【线程池】、异步编程、【Lambda表达…

传输层协议—TCP协议

传输层协议—TCP协议 文章目录 传输层协议—TCP协议TCP协议段格式四位首部长度TCP协议如何根据目的端口号将数据传输给指定进程&#xff1f;32位序列号和32位确认序列号可靠性问题 TCP报头标志位16位紧急指针16位检验和确认应答机制超时重传机制再谈三次握手四次挥手 连接管理机…

什么是数学建模(mooc笔记)

什么是数学建模 前提&#xff1a;我们数学建模国赛计划选择C题&#xff0c;故希望老师的教学中侧重与C题相关性大的模型及其思想进行培训。之后的学习内容中希望涉及以下知识点&#xff1a; logistic回归相关知识点。如&#xff1a;用法、适用、限制范围等。精学数学建模中常…

常见的锁策略

目录 一.乐观锁 vs 悲观锁 二.轻量级锁 vs 重量级锁 三.自旋锁 vs 挂起等待锁 四.互斥锁 vs 读写锁 五.可重入锁 vs不可重入锁 一.乐观锁 vs 悲观锁 悲观锁 : 总是假设最坏的情况&#xff0c;每次去拿数据的时候都认为别人会修改&#xff0c;所以每次在拿数据的时候都会上锁…

448. 找到所有数组中消失的数字

题目描述 给你一个含 n 个整数的数组 nums &#xff0c;其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字&#xff0c;并以数组的形式返回结果。 示例 1&#xff1a; 输入&#xff1a;nums [4,3,2,7,8,2,3,1] 输出&#xff1a;[5,6…