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

news2024/12/27 12:54:29

在这里插入图片描述

什么是 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: mongo
    container_name: vrite-mongo
    volumes:
      - ./mdata:/data/db
    #ports:
    #  - 27017:27017

  minio:
    image: minio/minio
    container_name: vrite-minio
    environment:
      - MINIO_ROOT_USER=user
      - MINIO_ROOT_PASSWORD=password
    #ports:
    #  - "9000:9000"
    #  - "9001:9001"
    command: server --console-address ":9001" /data
    volumes:
      - ./minio:/data

  redis:
    image: redis
    container_name: vrite-redis
    volumes:
      - ./rdata:/data
    #ports:
    #  - "6379:6379"

  weaviate:
    image: semitechnologies/weaviate:1.21.2
    container_name: vrite-weaviate
    #ports:
    #  - 8080:8080
    volumes:
      - ./weaviate:/var/lib/weaviate
    environment:
      - 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=vrite

  api:
    image: ghcr.io/vriteio/vrite/api:main
    container_name: vrite-api
    env_file: ./env.txt
    depends_on:
      - mongodb
      - redis
    environment:
      - PORT=4444
    ports:
      - "4444:4444"

  assets:
    image: ghcr.io/vriteio/vrite/assets:main
    container_name: vrite-assets
    env_file: ./env.txt
    depends_on:
      - mongodb
      - minio
      - redis
    environment:
      - PORT=8888
    ports:
      - "8888:8888"

  collab:
    image: ghcr.io/vriteio/vrite/collaboration:main
    container_name: vrite-collab
    env_file: ./env.txt
    depends_on:
      - mongodb
      - redis
    environment:
      - PORT=5555
    ports:
      - "5555:5555"

  app:
    image: ghcr.io/vriteio/vrite/app:main
    container_name: vrite-app
    env_file: ./env.txt
    environment:
      - PORT=3333
    ports:
      - "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.coloradmin.cn/o/1050028.html

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

相关文章

亘古难题:前端开发 or 后端开发

目录 一、引言二、两者的对比分析1. 技能要求和专业知识前端开发后端开发 2. 职责和工作内容前端开发后端开发 3. 项目类型和应用领域前端开发后端开发 4. 就业前景和市场需求前端开发后端开发 三、技能转换和跨领域工作四、介绍全栈开发五、结语附、开源项目微服务商城项目前后…

Java获取给定月份的前N个月份和前N个季度

描述&#xff1a; 在项目开发过程中&#xff0c;遇到这样一个需求&#xff0c;即&#xff1a;给定某一月份&#xff0c;得到该月份前面的几个月份以及前面的几个季度。例如&#xff1a;给定2023-09&#xff0c;获取该月份前面的前3个月&#xff0c;即2023-08、2023-07、2023-0…

2023/9/30 -- ARM

今日任务&#xff1a;消息队列实现进程之间通信方式代码&#xff0c;现象 msgW.c: #include <myhead.h> //消息结构体 typedef struct {long msgtype; //消息类型char data[1024]; //消息正文 }Msg_ds;#define SIZE sizeof(Msg_ds)-sizeof(long) //…

cesium源码无法更新的解决方案

一、环境&#xff1a; 中国移动的宽带 win10操作系统 二、问题复现步骤&#xff1a; 1、开了VPN&#xff0c;设置为全局代理 2、在vscode中执行git pull命令 3、结果显示无法更新 三、解决方案&#xff1a; 1、安装Github官方开发的软件Github Desktop 下载地址&#xf…

(二)Python编程环境搭建

本章重点介绍 Python 编程环境的搭建&#xff0c;包括各个平台下 Python 的下载和安装&#xff0c;常见 IDE 的使用&#xff0c;如何运行 Python 程序等。还会亲自带着大家编写并运行第一个 Python 程序&#xff0c;让大家认识一下最简单的 Python 代码。 本章的后半部分还介绍…

【C++】C++多态——实现、重写、抽象类、原理

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C学习 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【C】C继…

百度面试题:为什么使用接口而不是直接使用具体类?

大家好&#xff0c;我是小米&#xff01;今天&#xff0c;我要和大家聊聊一个在 Java 编程中非常重要的话题&#xff1a;“百度面试题&#xff1a;为什么要使用接口而不是直接使用具体类&#xff1f;”这个问题在很多 Java 面试中都会被问到&#xff0c;因为它涉及到了面向对象…

基于Java的学校运动会信息管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

mysql的mvcc详解

一 MVCC的作用 1.1 mvcc的作用 1.MVCC&#xff08;Multiversion Concurrency Control&#xff09;多版本并发控制。即通过数据行的多个版本管理来实现数据库的并发控制&#xff0c;使得在InnoDB事务隔离级别下执行一致性读操作有了保障。 2.mysql中的InnoDB中实现了MVCC主要…

力扣146|LRU缓存淘汰算法

LRU缓存淘汰算法 leet code146: https://leetcode.cn/problems/lru-cache 一、基本思想 1.1 基本思想 LRU全名Last Recently Used&#xff0c;即当缓存空间满时&#xff0c;优先淘汰最不常使用&#xff08;访问&#xff09;的缓存。 1.2 抽象接口 1、 init() 初始化大小为…

ITSM和ITIL有什么区别?

ITIL是最广泛接受的ITSM方法&#xff0c;是用于管理组织IT运营和服务的最佳实践和建议的框架。它是由英国政府的中央计算机和电信局&#xff08;CCTA&#xff09;在1980年代中期委托创建的。基于ITIL框架构建的ITSM流程为更好的IT服务和改善业务铺平了道路。总而言之&#xff0…

【Java】关于我Debug的一些技巧

文章目录 条件断点断点回退表达式的执行直接返回 条件断点 IDEA中右击断点的时候可以看到如下的状态&#xff0c;在这里的Condition中我们可以选择进入当前断点的一个条件&#xff0c;比如我希望只有keyuser2的时候才进入断点&#xff0c;那么我就可以按照如下的方式去编写条件…

前端架构师之01_JQuery

1 jQuery快速入门 1.1 什么是jQuery 它是一个开源的JavaScript类库 。 常见的JavaScript类库&#xff1a;jQuery、Prototype、ExtJS、Mootools和YUI等。 jQuery的核心理念&#xff1a;write less&#xff0c;do more&#xff08;写的更少&#xff0c;做的更多&#xff09;。…

五、回溯(trackback)

文章目录 一、算法定义二、经典例题&#xff08;一&#xff09;排列1.[46.全排列](https://leetcode.cn/problems/permutations/description/)&#xff08;1&#xff09;思路&#xff08;2&#xff09;代码&#xff08;3&#xff09;复杂度分析 2.[LCR 083. 全排列](https://le…

优优嗨聚集团:美团代运营服务,对美团外卖商家有何促进

美团代运营服务一直是美团外卖商家成功的关键因素之一。美团代运营服务是一种专业的营销服务&#xff0c;它可以帮助商家在美团平台上更好地经营和销售&#xff0c;从而提高店铺曝光率、提升用户评价、提高营收等方面的水平。 首先&#xff0c;美团代运营服务可以帮助商家提高店…

4.canvas绘制基本图形——折线

在日常生活中&#xff0c;除了矩形与圆弧外&#xff0c;接触最多的就是折线了。甚至矩形也可以看出是一段折线&#xff0c;所以我们自然也可以使用绘制折线的方式绘制出矩形 moveTo 认识折线之前&#xff0c;我们先认识下moveTo这个方法。形象一点说这个方法就是将我们的画笔…

Leetcode 1239. 串联字符串的最大长度

文章目录 题目代码&#xff08;9.29 首刷部分看解析&#xff09; 题目 Leetcode 1239. 串联字符串的最大长度 代码&#xff08;9.29 首刷部分看解析&#xff09; class Solution { public:unordered_set<int> skip;unordered_set<char> used;int maxLength(vecto…

常见的7种分布式解决方案(2pc,3pc,Tcc,Seta、本地事务....)

一 分布式事务 1.1 分布式事务 在分布式系统中一次操作需要由多个服务协同完成&#xff0c;这种由不同的服务之间通过网络协同完成的事务称为分布式事务。 1.首先满足事务特性&#xff1a;ACID 2.而在分布式环境下&#xff0c;会涉及到多个数据库 总结&#xff1a;分布式事务…

搭建自己的搜索引擎之三

一、前言 接上一篇 搭建自己的搜索引擎之二&#xff0c;本篇主要讲一下我们如何操作ElasticSearch&#xff0c;就是最简单的增删改查命令怎么写。 二、几个概念 搭建自己的搜索引擎之一 这篇文章我们对比搜索引擎在做海量数据实时查询优于关系型数据库的一些原因&#xff0c…

山西电力市场日前价格预测【2023-09-29】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-09-29&#xff09;山西电力市场全天平均日前电价为189.30元/MWh。其中&#xff0c;最高日前电价为338.58元/MWh&#xff0c;预计出现在18: 45。最低日前电价为0.00元/MWh&#xff0c;预计出…