mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-10-29 06:42:25 -05:00
[docs] add zh docs (#3507)
* [docs] add zh docs * [docs] add lang dropdown * [docs] update mkdocs zh config * [docs] migrate assets * [docs] update overrides dir in mkdocs zh config * [docs] exclude locales director in main mkdocs config * [docs] rename assets to public to avoid conflicting with template * [docs] extra_css change followup * [docs] add theme.palette.toggle.icon back into mkdocs zh config * [docs] fix zh readme reference + migrate language-specific repo markdown to docs * [docs] translate remaining repo docs + update reference * [docs] update zh index.md reference * [docs/zh] wording alignment
This commit is contained in:
parent
e953d80dff
commit
38a08cd25a
139 changed files with 20407 additions and 24 deletions
11
docs/locales/zh/repo/CODE_OF_CONDUCT.md
Normal file
11
docs/locales/zh/repo/CODE_OF_CONDUCT.md
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
# 行为准则
|
||||
|
||||
此文档当前为草稿版本。
|
||||
|
||||
在写出更完整的行为准则之前,此处声明一些基本准则:
|
||||
|
||||
1. 我们对右翼分子、纳粹分子、法西斯分子、跨性别恐惧者、同性恋恐惧者、种族主义者、骚扰者、施虐者、白人至上主义者、厌女症者或资本主义支持者的意见不感兴趣。上述名单并不详尽。意见是指包括 PR(Pull Request)、问题(issues)及任何其他形式的交流。请你走开!
|
||||
2. 我们不会接受使用"人工智能"工具生成的修改(无论是代码还是其他内容)。"人工智能"模型的训练是建立在低薪工人过滤不良内容的基础上,并且对输入内容的所有者不尊重。在伦理上,这是不可接受的。
|
||||
3. 我们不会接受任何使 GoToSocial 转向企业化、监视、或其他有害资本主义行为的修改(包括代码或其他内容)。
|
||||
4. 我们不会接受促进社交媒体上有害行为的任何修改(代码或其他内容)。显然,这一条还存有争议,因为整个人类尚在探索如何安全地参与社交媒体活动。
|
||||
5. 禁止发送骚扰与垃圾信息!
|
||||
546
docs/locales/zh/repo/CONTRIBUTING.md
Normal file
546
docs/locales/zh/repo/CONTRIBUTING.md
Normal file
|
|
@ -0,0 +1,546 @@
|
|||
# 贡献指引 <!-- omit in toc -->
|
||||
|
||||
你好!欢迎阅读 GoToSocial 的 CONTRIBUTING.md :) 感谢你的关注,为你点赞。
|
||||
|
||||
这些贡献指引借鉴并受到了 Gitea 的启发 (https://github.com/go-gitea/gitea/blob/main/CONTRIBUTING.md)。感谢 Gitea!
|
||||
|
||||
## 目录 <!-- omit in toc -->
|
||||
|
||||
- [介绍](#介绍)
|
||||
- [错误报告与功能请求](#错误报告与功能请求)
|
||||
- [合并请求](#合并请求)
|
||||
- [代码](#代码)
|
||||
- [文档](#文档)
|
||||
- [开发](#开发)
|
||||
- [Golang 的分支特点](#golang-的分支特点)
|
||||
- [构建 GoToSocial](#构建-gotosocial)
|
||||
- [二进制文件](#二进制文件)
|
||||
- [Docker](#docker)
|
||||
- [使用 GoReleaser](#使用-goreleaser)
|
||||
- [手动构建](#手动构建)
|
||||
- [样式表 / Web开发](#样式表--web开发)
|
||||
- [实时加载](#实时加载)
|
||||
- [项目结构](#项目结构)
|
||||
- [浏览代码结构](#浏览代码结构)
|
||||
- [风格/代码检查/格式化](#风格代码检查格式化)
|
||||
- [测试](#测试)
|
||||
- [独立测试环境与 Semaphore](#独立测试环境与-semaphore)
|
||||
- [运行自动化测试](#运行自动化测试)
|
||||
- [SQLite](#sqlite)
|
||||
- [Postgres](#postgres)
|
||||
- [CLI 测试](#cli-测试)
|
||||
- [联合](#联合)
|
||||
- [更新 Swagger 文档](#更新-swagger-文档)
|
||||
- [CI/CD 配置](#cicd-配置)
|
||||
- [发布检查清单](#发布检查清单)
|
||||
- [如果出问题了怎么办?](#如果出问题了怎么办)
|
||||
|
||||
## 介绍
|
||||
|
||||
本文件包含一些重要信息,帮助你成功向 GoToSocial 提交的贡献。请在开启合并请求前仔细阅读!
|
||||
|
||||
## 错误报告与功能请求
|
||||
|
||||
目前,我们使用 Github 的问题追踪系统来管理错误报告与功能请求。
|
||||
|
||||
你可以在[此处](https://github.com/superseriousbusiness/gotosocial/issues "GoToSocial 的 Github 问题页")查看所有开放的问题。
|
||||
|
||||
在创建新问题之前,不论是错误还是功能请求,**请现仔细搜索所有仍处于打开状态和已被关闭的问题,以确保它尚未被解决过**。你可以使用 Github 的关键字搜索来进行此操作。如果你的问题与已有问题重复,它将被关闭。
|
||||
|
||||
在打开功能请求之前,请考虑以下几点:
|
||||
|
||||
- 这个功能是否符合 GoToSocial 的范围?由于我们是小团队,我们对维护可能导致问题的[功能蔓延](https://en.wikipedia.org/wiki/Feature_creep "关于功能蔓延的维基百科文章")保持警惕。
|
||||
- 这个功能是否对软件的许多用户普遍有用,还是仅适合非常具体的用例?
|
||||
- 这个功能是否会对软件性能产生负面影响?如果是,这种权衡是否值得?
|
||||
- 这个功能是否需要放宽 API 的安全限制?如果是,需要合理的理由。
|
||||
- 这个功能是否属于 GoToSocial 的服务器后端,还是应该由客户端实现?
|
||||
|
||||
我们倾向于优先考虑与无障碍性、联合互通性和客户端兼容性相关的功能请求。
|
||||
|
||||
## 合并请求
|
||||
|
||||
我们欢迎新老贡献者的合并请求,但需注意以下几点:
|
||||
|
||||
- 你已阅读并同意我们的[行为准则](./CODE_OF_CONDUCT.md)。
|
||||
- 合并请求应解决现有问题或错误(请在请求中链接相关问题),或者与文档有关。
|
||||
- 如果你的合并请求引入了大量的代码或架构变更,你会愿意对这些变更的代码与架构进行一些维护工作,并解决错误。我们不欢迎引入大量维护负担的一次性合并请求!
|
||||
- 合并请求质量合格。我们是小团队,时间有限,无法帮助指导合并请求或解决基本编程问题。如果你不确定,不要承担太多任务:从一个小功能或错误修复开始,将其作为你的第一个合并请求,然后逐步提高。
|
||||
|
||||
如果在合并请求过程中有小问题或评论,你可以[加入我们的 Matrix 空间](https://matrix.to/#/#gotosocial-space:superseriousbusiness.org "GoToSocial Matrix 空间"),地址为 `#gotosocial-space:superseriousbusiness.org`。
|
||||
|
||||
请阅读下面适合你计划开启的合并请求类型的相应部分。
|
||||
|
||||
### 代码
|
||||
|
||||
为了方便维护者管理,针对 GoToSocial 库的合并请求流程大致如下:
|
||||
|
||||
1. 为你将要解决的功能、错误或问题打开一个问题,或者在现有问题上发表评论,让大家知道你想处理它。
|
||||
2. 利用开放的问题与我们讨论你的设计,收集反馈,并解决关于实现的任何问题。
|
||||
3. 编写代码!确保所有现有测试通过。适当添加测试。运行代码格式化工具并更新文档。
|
||||
4. 打开合并请求。如果希望对正在实现中的代码收集更多反馈,可以作为草稿提交。
|
||||
5. 当你的合并请求已准备好接受审核时通知我们。
|
||||
6. 等待审核。
|
||||
7. 处理审核反馈,适当修改代码。如果你有合理的理由,可以对审核评论提出异议——我们都是在学习,毕竟——但请务必耐心和有礼貌。
|
||||
|
||||
为方便审核,请尝试将你的合并请求拆分为合理大小的提交,但不要过于追求完美:我们总是进行合并压缩。
|
||||
|
||||
如果你的合并请求过大,请考虑将其拆分为更小的独立合并请求以便于审核和理解。
|
||||
|
||||
确保你的合并请求仅包含与你尝试实现的功能或解决的错误相关的代码。不要在请求中包含对无关代码的重构:请为其创建单独的合并请求!
|
||||
|
||||
如果你在未遵循上述流程的情况下开启了代码合并请求,我们可能会关闭它,并要求你遵循流程。
|
||||
|
||||
### 文档
|
||||
|
||||
文档合并请求的流程比代码的稍微宽松一些。
|
||||
|
||||
如果你发现文档中有遗漏、错误或不明确的地方,可以自由开启合并请求进行更正;你不必先开启问题,但请在合并请求评论中解释你开启请求的原因。
|
||||
|
||||
我们支持基于 [Conda](https://docs.conda.io/en/latest/) 的工作流程,用于修改、构建和发布文档。以下是你可以在本地开始编辑的步骤:
|
||||
|
||||
* 安装 [`miniconda`](https://docs.conda.io/en/latest/miniconda.html)
|
||||
* 创建你的 conda 环境:`conda env create -f ./docs/environment.yml`
|
||||
* 激活环境:`conda activate gotosocial-docs`
|
||||
* 在本地运行:`mkdocs serve`
|
||||
|
||||
然后你可以在浏览器中访问 [localhost:8000](http://127.0.0.1:8000/) 查看。
|
||||
|
||||
添加新页面时,需要在 [`mkdocs.yml`](mkdocs.yml) 中添加,以便它显示在侧栏的正确部分。
|
||||
|
||||
如果你不使用 Conda,可以阅读 `docs/environment.yml` 查看需要哪些依赖,并手动通过 `pip install` 安装这些依赖。建议在虚拟环境中进行此操作,你可以通过类似 `python3 -m venv /path-to/store-the-venv` 创建虚拟环境。之后可以调用 `/path-to/store-the-venv/bin/pip`、`/path-to/store-the-venv/bin/mkdocs` 等。
|
||||
|
||||
要更新依赖,在已激活的环境中使用 `conda update --update-all`。然后你可以使用以下命令更新 `environment.yml`:
|
||||
|
||||
```sh
|
||||
conda env export -n gotosocial-docs --from-history --override-channels -c conda-forge -c nodefaults -f ./docs/environment.yml
|
||||
```
|
||||
|
||||
注意 `conda env export` 会在 environment.yml 文件中添加 `prefix` 条目,并删除 `pip` 依赖,因此请确保移除 prefix,并重新添加 `pip` 依赖。
|
||||
|
||||
## 开发
|
||||
|
||||
### Golang 的分支特点
|
||||
|
||||
Golang 的一个特点是,它所依赖的源代码管理路径与 `go.mod` 中使用的路径以及各 Go 文件中的包导入路径相同。这使得使用分支有些棘手。
|
||||
|
||||
假设你要将 GoToSocial 分支到 `github.com/yourgithubname/gotosocial`,然后将存储库克隆到 `~/go/src/github.com/yourgithubname/gotosocial`。你可能会在尝试运行测试或构建时遇到错误,因此你可能会更改 `go.mod` 文件,使模块名称为 `github.com/yourgithubname/gotosocial` 而不是 `github.com/superseriousbusiness/gotosocial`。但这样做会破坏项目中的所有导入路径。这简直是噩梦!于是,你不得不逐一在源代码文件中将 `github.com/superseriousbusiness/gotosocial` 替换为 `github.com/yourgithubname/gotosocial`。这样确实能行得通,但一旦你决定对原始存储库发起合并请求,所有路径变更都会被包含在内!哦不!
|
||||
|
||||
正确的解决方案是先派生存储库,然后克隆上游存储库,并将上游存储库的 `origin` 设置为你分支的源。
|
||||
|
||||
有关更多细节,请参阅[这篇博客](https://blog.sgmansfield.com/2016/06/working-with-forks-in-go/)。
|
||||
|
||||
为防此文章消失,此处是步骤(有轻微修改):
|
||||
|
||||
>
|
||||
> 在 GitHub 上派生存储库或设置任何其他远程 git 存储库。在这种情况下,我会转到 GitHub 并分支存储库。
|
||||
>
|
||||
> 现在克隆上游存储库(而非派生的存储库):
|
||||
>
|
||||
> `mkdir -p ~/go/src/github.com/superseriousbusiness && git clone git@github.com:superseriousbusiness/gotosocial ~/go/src/github.com/superseriousbusiness/gotosocial`
|
||||
>
|
||||
> 转到你的计算机上上游存储库的顶级目录:
|
||||
>
|
||||
> `cd ~/go/src/github.com/superseriousbusiness/gotosocial`
|
||||
>
|
||||
> 将当前的 origin 远程源重命名为 upstream:
|
||||
>
|
||||
> `git remote rename origin upstream`
|
||||
>
|
||||
> 把你的派生分支添加为 origin:
|
||||
>
|
||||
> `git remote add origin git@github.com/yourgithubname/gotosocial`
|
||||
>
|
||||
|
||||
在第一次构建项目之前,一定要运行 `git fetch`。
|
||||
|
||||
### 构建 GoToSocial
|
||||
|
||||
#### 二进制文件
|
||||
|
||||
要开始构建,你需要先安装 Go。GtS 目前使用 Go 1.21,因此你也应该使用这个版本。安装指南见[此处](https://golang.org/doc/install)。
|
||||
|
||||
安装 go 后,将此存储库克隆到你的 Go 路径中。通常,此路径为 `~/go/src/github.com/superseriousbusiness/gotosocial`。
|
||||
|
||||
安装完上述环境与依赖后,可以尝试构建项目:`./scripts/build.sh`。此命令将构建 `gotosocial` 二进制文件。
|
||||
|
||||
如果没有错误,太好了,你准备好了!
|
||||
|
||||
如果看到错误 `fatal: No names found, cannot describe anything.`,需要运行 `git fetch`。
|
||||
|
||||
在开发过程中,为了自动重新编译,可以使用 [nodemon](https://www.npmjs.com/package/nodemon):
|
||||
|
||||
```bash
|
||||
nodemon -e go --signal SIGTERM --exec "go run ./cmd/gotosocial --host localhost testrig start || exit 1"
|
||||
```
|
||||
|
||||
#### Docker
|
||||
|
||||
对于以下两种方法,你需要安装 [Docker buildx](https://docs.docker.com/buildx/working-with-buildx/)。
|
||||
|
||||
##### 使用 GoReleaser
|
||||
|
||||
GoToSocial 使用发布工具 [GoReleaser](https://goreleaser.com/intro/) 使多架构 + Docker 构建变得简单。
|
||||
|
||||
GoReleaser 还被 GoToSocial 用于构建和推送 Docker 镜像。
|
||||
|
||||
通常,这些过程由 Drone (参见 CI/CD 部分) 处理。不过,你也可以手动调用 GoReleaser 来构建快照版。
|
||||
|
||||
为此,首先[安装 GoReleaser](https://goreleaser.com/install/)。
|
||||
|
||||
然后按照[Swagger 部分](#更新-swagger-文档)的说明安装 GoSwagger。
|
||||
|
||||
接着按[样式表 / Web开发](#样式表--web开发)的说明安装 Node 和 Yarn。
|
||||
|
||||
最后,创建快照构建,执行:
|
||||
|
||||
```bash
|
||||
goreleaser release --clean --snapshot
|
||||
```
|
||||
|
||||
如果一切按计划进行,现在你应该会在 `./dist` 文件夹中找到多个架构的二进制文件和 tar,终端输出中应显示构建的快照 Docker 镜像的版本。
|
||||
|
||||
##### 手动构建
|
||||
|
||||
如果你更喜欢以简单方法构建 Docker 容器,使用更少的依赖(go-swagger, Node, Yarn),也可以这样构建:
|
||||
|
||||
```bash
|
||||
./scripts/build.sh && docker buildx build -t superseriousbusiness/gotosocial:latest .
|
||||
```
|
||||
|
||||
上述命令首先构建 `gotosocial` 二进制文件,然后调用 Docker buildx 构建容器镜像。
|
||||
|
||||
如果想为不同 CPU 架构构建 docker 镜像而不设置 buildx(例如 ARMv7 aka 32-bit ARM),首先需要通过添加以下几行到 Dockerfile 顶部来修改 Dockerfile(但不要提交此更改!):
|
||||
|
||||
```dockerfile
|
||||
# 使用 buildx 时,这些变量将由工具设定:
|
||||
# https://docs.docker.com/engine/reference/builder/#automatic-platform-args-in-the-global-scope
|
||||
# 但是,将它们声明为全局构建参数,允许手动使用 `--build-arg` 设置它们。
|
||||
ARG BUILDPLATFORM
|
||||
ARG TARGETPLATFORM
|
||||
```
|
||||
|
||||
然后,可以使用以下命令:
|
||||
|
||||
```bash
|
||||
GOOS=linux GOARCH=arm ./scripts/build.sh && docker build --build-arg BUILDPLATFORM=linux/amd64 --build-arg TARGETPLATFORM=linux/arm/v7 -t superseriousbusiness/gotosocial:latest .
|
||||
```
|
||||
|
||||
另请参阅:[GOOS 和 GOARCH 值的详尽列表](https://gist.github.com/lizkes/975ab2d1b5f9d5fdee5d3fa665bcfde6)
|
||||
|
||||
以及:[docker 的 `--platform` 可能值的详尽列表](https://github.com/tonistiigi/binfmt/#build-test-image)
|
||||
|
||||
### 样式表 / Web开发
|
||||
|
||||
GoToSocial 使用存放于 `web/template` 文件夹下的 Gin 模板。静态资源存储于 `web/assets`。样式表和 JS 包(用于前端增强和设置界面)的源文件存储于 `web/source`,并从那里捆绑到 git 忽略的 `web/assets/dist` 文件夹。
|
||||
|
||||
要捆绑更改,需要 [Node.js](https://nodejs.org/en/download/) 和 [Yarn](https://classic.yarnpkg.com/en/docs/install)。
|
||||
|
||||
使用 [NVM](https://github.com/nvm-sh/nvm) 是安装它们的一种方便方式,还支持管理不同的 Node 版本。
|
||||
|
||||
安装前端依赖:
|
||||
|
||||
```bash
|
||||
yarn --cwd ./web/source install && yarn --cwd ./web/source ts-patch install
|
||||
```
|
||||
|
||||
`ts-patch` 步骤是必要的,因为我们使用 Typia 进行一些类型验证:参见 [Typia 安装文档](https://typia.io/docs/setup/#manual-setup)。
|
||||
|
||||
重新编译前端包到 `web/assets/dist`:
|
||||
|
||||
```bash
|
||||
yarn --cwd ./web/source build
|
||||
```
|
||||
|
||||
#### 实时加载
|
||||
|
||||
为了更方便的开发环境,可以在 [testrig](#测试) 中运行一个实时加载的捆绑器(bundler)。
|
||||
|
||||
首先用 DEBUG=1 构建 GtS 二进制文件以启用 testrig:
|
||||
|
||||
``` bash
|
||||
DEBUG=1 ./scripts/build.sh
|
||||
```
|
||||
|
||||
现在打开两个终端。
|
||||
|
||||
在第一个终端中,使用你刚构建的二进制文件在端口 8081 上运行 testrig:
|
||||
|
||||
```bash
|
||||
DEBUG=1 GTS_PORT=8081 ./gotosocial testrig start
|
||||
```
|
||||
|
||||
然后启动捆绑器(bundler),它将在端口 8080 上运行,并在需要时将请求代理到 testrig 实例。
|
||||
|
||||
``` bash
|
||||
NODE_ENV=development yarn --cwd ./web/source dev
|
||||
```
|
||||
|
||||
然后你可以在 `http://localhost:8080/settings` 登录 GoToSocial 设置面板,并查看实时更新反映的更改。
|
||||
|
||||
实时加载捆绑器(bundler)*不会*更改 `dist/` 中的捆绑资源,因此完成更改并想在某处部署时,必须运行 `node web/source` 生成准备就绪的生产环境包。
|
||||
|
||||
### 项目结构
|
||||
|
||||
对于项目结构,GoToSocial 遵循 [在此处定义的标准且被广泛接受的项目布局](https://github.com/golang-standards/project-layout)。正如作者所写:
|
||||
|
||||
> 这是 Go 应用项目的基本布局。它不是核心 Go 开发团队定义的正式标准;然而,它是在 Go 生态系统中常见的历史和新兴项目布局模式。
|
||||
|
||||
在可能的情况下,我们更倾向于更短和更多的文件和包,对应用逻辑的可定义模块进行更明显的划分,而不是更少但更长的文件:如果一个 `.go` 文件接近 1000 行代码,可能就太长了。
|
||||
|
||||
#### 浏览代码结构
|
||||
|
||||
应用程序的大部分核心业务逻辑位于 `internal` 目录的各个包和子包中。以下是每个包的简要说明:
|
||||
|
||||
`internal/ap` - ActivityPub 工具函数和接口。
|
||||
|
||||
`internal/api` - 客户端与联合 (ActivityPub) API 的模型、路由和工具。在此处可以为路由器添加路由。
|
||||
|
||||
`internal/concurrency` - 处理器和其他队列使用的工作模式。
|
||||
|
||||
`internal/config` - 配置标志、CLI 标志解析及配置获取/设置的代码。
|
||||
|
||||
`internal/db` - 用于与 sqlite/postgres 数据库交互的数据库接口。数据库迁移代码在 `internal/db/bundb/migrations`。
|
||||
|
||||
`internal/email` - 通过 SMTP 发送电子邮件的功能。
|
||||
|
||||
`internal/federation` - ActivityPub 联合代码;实现 `go-fed` 接口。
|
||||
|
||||
`internal/federation/federatingdb` - 实现 `go-fed` 的数据库接口。
|
||||
|
||||
`internal/federation/dereferencing` - 用于从外站实例获取资源的 HTTP 调用代码。
|
||||
|
||||
`internal/gotosocial` - GoToSocial 服务器启动/关闭逻辑。
|
||||
|
||||
`internal/gtserror` - 错误模型。
|
||||
|
||||
`internal/gtsmodel` - 数据库和内部模型。此处包含 `bundb` 注解。
|
||||
|
||||
`internal/httpclient` - GoToSocial 用于发请求到外站资源的 HTTP 客户端。
|
||||
|
||||
`internal/id` - 生成数据库模型 ID (ULIDs) 的代码。
|
||||
|
||||
`internal/log` - 日志实现。
|
||||
|
||||
`internal/media` - 管理和处理媒体附件的代码:图像、视频、表情等。
|
||||
|
||||
`internal/messages` - 用于封装工作消息的模型。
|
||||
|
||||
`internal/middleware` - Gin Gonic 路由中间件:HTTP 签名检查、缓存控制、令牌检查等。
|
||||
|
||||
`internal/netutil` - HTTP/网络请求验证代码。
|
||||
|
||||
`internal/oauth` - OAuth 服务器实现的封装代码/接口。
|
||||
|
||||
`internal/oidc` - OIDC 声明和回调的封装代码/接口。
|
||||
|
||||
`internal/processing` - 处理联合或客户端 API 产生的消息的逻辑。GoToSocial 的核心业务逻辑大多在此处。
|
||||
|
||||
`internal/regexes` - 用于解析文本和匹配 URL、标签、提及的正则表达式。
|
||||
|
||||
`internal/router` - Gin HTTP 路由器的封装。此处包含核心 HTTP 逻辑。此路由器暴露用于附加路由的函数,由 `internal/api` 中的处理程序代码使用。
|
||||
|
||||
`internal/storage` - `codeberg.org/gruf/go-store` 实现的封装。此处包含本地文件存储和 S3 逻辑。
|
||||
|
||||
`internal/stream` - Websocket 流逻辑。
|
||||
|
||||
`internal/text` - 文本解析与转换。包含贴文解析逻辑——支持纯文本和 markdown。
|
||||
|
||||
`internal/timeline` - 贴文时间线管理代码。
|
||||
|
||||
`internal/trans` - 将模型导出到数据库的 JSON 备份文件,并从备份 JSON 文件导入到数据库的代码。
|
||||
|
||||
`internal/transport` - HTTP 传输代码和工具。
|
||||
|
||||
`internal/typeutils` - 在内部数据库模型和 JSON 之间进行转换,从 ActivityPub 格式到内部数据库模型格式及其反向转换的代码。基本上是序列化与反序列化。
|
||||
|
||||
`internal/uris` - 用于生成 GoToSocial 中使用的 URI 的工具。
|
||||
|
||||
`internal/util` - 零碎的工具函数,用于多个包。
|
||||
|
||||
`internal/validate` - 模型验证代码——目前并未真正使用。
|
||||
|
||||
`internal/visibility` - 贴文可见性检查和过滤。
|
||||
|
||||
`internal/web` - Web UI 处理程序,专门用于提供网页、登录页面、设置面板。
|
||||
|
||||
### 风格/代码检查/格式化
|
||||
|
||||
在提交代码前,建议阅读官方的简短文档 [Effective Go](https://golang.org/doc/effective_go):这份文档是许多风格指南的基础,GoToSocial 基本遵循其建议。
|
||||
|
||||
我们还试图遵循的另一个风格指南是:[这个](https://github.com/bahlo/go-styleguide)。
|
||||
|
||||
此外,此处列举有一些符合 GtS 风格的 Uber 的 Go 风格指南亮点:
|
||||
|
||||
- [分组相似的声明](https://github.com/uber-go/guide/blob/master/style.md#group-similar-declarations)。
|
||||
- [减少嵌套](https://github.com/uber-go/guide/blob/master/style.md#reduce-nesting)。
|
||||
- [不必要的 Else](https://github.com/uber-go/guide/blob/master/style.md#unnecessary-else)。
|
||||
- [局部变量声明](https://github.com/uber-go/guide/blob/master/style.md#local-variable-declarations)。
|
||||
- [减少变量作用域](https://github.com/uber-go/guide/blob/master/style.md#reduce-scope-of-variables)。
|
||||
- [初始化结构体](https://github.com/uber-go/guide/blob/master/style.md#initializing-structs)。
|
||||
|
||||
在提交代码之前,请确保执行 `go fmt ./...` 以更新空格和其他格式设置。
|
||||
|
||||
我们使用 [golangci-lint](https://golangci-lint.run/) 进行代码检查,通过静态代码分析捕获风格不一致和潜在的错误或安全问题。
|
||||
|
||||
如果你提交的 PR 未通过代码检查,将会被拒绝。因此,最好在推送或打开 PR 之前本地运行代码检查。
|
||||
|
||||
要做到这一点,请首先按照 [此处](https://golangci-lint.run/welcome/install/) 的说明安装代码检查工具。
|
||||
|
||||
然后,可以用以下命令运行代码检查:
|
||||
|
||||
```bash
|
||||
golangci-lint run
|
||||
```
|
||||
|
||||
如果没有输出,太好了!这说明检查通过了 :)
|
||||
|
||||
### 测试
|
||||
|
||||
GoToSocial 提供了一个 [testrig](https://github.com/superseriousbusiness/gotosocial/tree/main/testrig),包含一些可以用于集成测试的模拟包。
|
||||
|
||||
没有模拟的一个东西是数据库接口,因为使用内存中的 SQLite 数据库比模拟所有东西要简单得多。
|
||||
|
||||
#### 独立测试环境与 Semaphore
|
||||
|
||||
你可以启动一个在本地主机运行的独立测试服务器 testrig,可以通过 [Semaphore](https://github.com/NickColley/semaphore/) 连接。
|
||||
|
||||
要做到这一点,首先用 `DEBUG=1 ./scripts/build.sh` 构建 gotosocial 二进制文件。
|
||||
|
||||
然后,通过设置 `DEBUG` 环境变量启动 testrig,如下调用二进制文件:
|
||||
|
||||
```bash
|
||||
DEBUG=1 ./gotosocial testrig start
|
||||
```
|
||||
|
||||
要在本地开发模式下运行 Semaphore,首先克隆 [Semaphore](https://github.com/NickColley/semaphore/) 存储库,然后在克隆的目录中运行以下命令:
|
||||
|
||||
```bash
|
||||
yarn # 安装依赖
|
||||
yarn run dev
|
||||
```
|
||||
|
||||
Semaphore 实例将在 `localhost:4002` 上启动。
|
||||
|
||||
要连接到 testrig,导航至 `http://localhost:4002`,并将在实例域名栏输入 `localhost:8080`。
|
||||
|
||||
在登录界面,输入电子邮件地址 `zork@example.org` 和密码 `password`。你会看到一个确认提示。接受后,你将以 Zork 身份登录。
|
||||
|
||||
请注意以下限制:
|
||||
|
||||
- 由于 testrig 使用内存数据库,因此当 testrig 停止时,数据库将被销毁。
|
||||
- 如果你停止 testrig 并重新启动,则在测试期间创建的任何令牌或应用程序也会被删除。因此,你需要每次停止/启动 rig 时重新登录。
|
||||
- testrig 不会进行任何实际的外部 HTTP 调用,因此联合功能无法在 testrig 工作。
|
||||
|
||||
#### 运行自动化测试
|
||||
|
||||
测试可以在 SQLite 和 Postgres 上运行。
|
||||
|
||||
##### SQLite
|
||||
|
||||
如果你想尽快运行测试,使用内存中的 SQLite 数据库,请使用:
|
||||
|
||||
```bash
|
||||
go test ./...
|
||||
```
|
||||
|
||||
##### Postgres
|
||||
|
||||
如果你想在本地运行针对 Postgres 数据库的测试,请运行:
|
||||
|
||||
```bash
|
||||
GTS_DB_TYPE="postgres" GTS_DB_ADDRESS="localhost" go test -p 1 ./...
|
||||
```
|
||||
|
||||
在上面的命令中,假设你使用的是默认的 Postgres 密码 `postgres`。
|
||||
|
||||
在 Postgres 上运行时,我们设置 `-p 1` 因为它需要串行而不是并行运行测试。
|
||||
|
||||
#### CLI 测试
|
||||
|
||||
在 [./test/envparsing.sh](./test/envparsing.sh) 中有一个测试,用于确保 CLI 标志、配置和环境变量按预期解析。
|
||||
|
||||
虽然此测试是 CI/CD 测试过程的一部分,但除非你在修改 `cmd/gotosocial` 中的 `main` 包或者 `internal/config` 中的 `config` 包内的代码,否则你可能不需要过多担心自行运行它。
|
||||
|
||||
#### 联合
|
||||
|
||||
通过使用从磁盘加载 TLS 文件的支持,可以启动两个或多个本地实例,其 TLS 允许(手动)测试联合。
|
||||
|
||||
你需要设置以下配置选项:
|
||||
|
||||
- `GTS_TLS_CERTIFICATE_CHAIN`:指向包含公钥证书的 PEM 编码证书链。
|
||||
- `GTS_TLS_CERTIFICATE_KEY`:指向 PEM 编码的私钥。
|
||||
|
||||
此外,为了让 Go HTTP 客户端认可自定义 CA 签发的证书为有效,你需要设置下列变量之一:
|
||||
|
||||
- `SSL_CERT_FILE`:指向你的自定义 CA 的公钥。
|
||||
- `SSL_CERT_DIR`:一个以 `:` 分隔的目录列表,用于加载 CA 证书。
|
||||
|
||||
上述 `SSL_CERT` 变量仅适用于类 Unix 系统,不包括 Mac。请参阅 https://pkg.go.dev/crypto/x509#SystemCertPool。如果你在不支持设置上述变量的架构上运行测试,可以在 `config.yaml` 文件中将 `http-client.tls-insecure-skip-verify` 设置为 `true`,以完全禁用 HTTP 客户端的 TLS 证书验证。
|
||||
|
||||
你还需要为两个实例名称提供功能正常的 DNS,可以通过在 `/etc/hosts` 中添加条目或运行像 [dnsmasq](https://thekelleys.org.uk/dnsmasq/doc.html) 这样的本地 DNS 服务器来实现。
|
||||
|
||||
### 更新 Swagger 文档
|
||||
|
||||
GoToSocial 使用 [go-swagger](https://goswagger.io) 根据代码注释生成 Swagger API 文档。
|
||||
|
||||
你可以遵循 [此处](https://goswagger.io/install.html) 的说明安装 go-swagger。
|
||||
|
||||
如果你更改了任何 API 路径上的 Swagger 注释,可以通过运行以下命令在 `./docs/api/swagger.yaml` 生成一个新的 Swagger 文件:
|
||||
|
||||
```bash
|
||||
swagger generate spec --scan-models --exclude-deps -o docs/api/swagger.yaml
|
||||
```
|
||||
|
||||
### CI/CD 配置
|
||||
|
||||
GoToSocial 使用 [Drone](https://www.drone.io/) 进行 CI/CD 任务,如运行测试、代码检查和构建 Docker 容器。
|
||||
|
||||
这些运行与 GitHub 集成,在打开拉取请求或合并到主干时执行。
|
||||
|
||||
GoToSocial 的 Drone 实例在 [此处](https://drone.superseriousbusiness.org/superseriousbusiness/gotosocial)。
|
||||
|
||||
`drone.yml` 文件在 [此处](../../../../.drone.yml) —— 它定义了 Drone 如何运行及何时运行。Drone 的文档在 [此处](https://docs.drone.io/)。
|
||||
|
||||
值得注意的是,`drone.yml` 文件必须由 Drone 管理员帐户签名后才被视为有效。每次修改该文件时都必须这样做。这是为了防止篡改和劫持 Drone 实例。请参阅 [此处](https://docs.drone.io/signature/)。
|
||||
|
||||
要签署文件,请首先安装并设置 [drone cli 工具](https://docs.drone.io/cli/install/)。然后,运行:
|
||||
|
||||
```bash
|
||||
drone -t PUT_YOUR_DRONE_ADMIN_TOKEN_HERE -s https://drone.superseriousbusiness.org sign superseriousbusiness/gotosocial --save
|
||||
```
|
||||
|
||||
### 发布检查清单
|
||||
|
||||
首先:如果这是一个安全修复,我们可能会加急处理此清单,并在几天后发布包含此修复的版本。
|
||||
|
||||
现在,解决完安全问题后,此处是我们的清单。
|
||||
|
||||
GoToSocial 遵循 [语义化版本控制](https://semver.org/)。
|
||||
因此,清单上的首要问题是:
|
||||
|
||||
- 我们正在发布哪个版本?
|
||||
|
||||
接下来我们需要检查:
|
||||
|
||||
- 这些资源是否需要重新构建并提交到存储库。
|
||||
- Swagger 文档是否需要重新生成?
|
||||
|
||||
在项目管理方面:
|
||||
|
||||
- 是否有需要移动到其他里程碑的问题?
|
||||
- [路线图](./ROADMAP.md) 上是否有可以勾掉的事情?
|
||||
|
||||
一旦我们对清单满意,我们就可以创建标签并推送它。
|
||||
剩下的事情 [是自动化](../../../../.drone.yml)。
|
||||
|
||||
然后我们可以前往 GitHub,为发布说明增添个性。
|
||||
最后,我们在所有渠道上发布公告,宣布发布已完成!
|
||||
|
||||
#### 如果出问题了怎么办?
|
||||
|
||||
有时事情会出错。
|
||||
我们发布了有 Bug 的版本,或者忘记了什么重要的东西。
|
||||
|
||||
如果该版本不可用,甚至对很大一部分用户而言是危险的,我们可以删除标签。
|
||||
|
||||
无论怎样,一旦我们解决了问题,我们就重新开始这个清单。版本号并不昂贵,可以随意更改。
|
||||
520
docs/locales/zh/repo/README.md
Normal file
520
docs/locales/zh/repo/README.md
Normal file
|
|
@ -0,0 +1,520 @@
|
|||
<!--overview-start-->
|
||||
# GoToSocial <!-- omit in toc -->
|
||||
|
||||
**有关企业赞助的更新:我们欢迎与符合我们价值观的组织建立赞助关系;请查看下述条件**
|
||||
|
||||
GoToSocial 是一个用 Golang 编写的 [ActivityPub](https://activitypub.rocks/) 社交网络服务端。
|
||||
|
||||
通过 GoToSocial,你可以与朋友保持联系,发帖、阅读和分享图片及文章,且不会被追踪或广告打扰!
|
||||
|
||||
<p align="middle">
|
||||
<img src="https://raw.githubusercontent.com/superseriousbusiness/gotosocial/main/docs/assets/sloth.webp" width="300"/>
|
||||
</p>
|
||||
|
||||
**GoToSocial 仍然是 [BETA 软件](https://en.wikipedia.org/wiki/Software_release_life_cycle#Beta)**。它已经可被部署和使用,并能与许多其他 Fediverse 服务端顺利联合(但还不是与所有服务端)。然而,许多功能尚未实现,而且还有不少漏洞!我们在 2024 年 9 月/10 月离开了 Alpha 阶段,并计划于 2026 年结束 Beta。
|
||||
|
||||
文档位于 [docs.gotosocial.org](https://docs.gotosocial.org/zh-cn/)。你可以直接跳至 [API 文档](https://docs.gotosocial.org/zh-cn/latest/api/swagger/)。
|
||||
|
||||
要从源代码构建,请查看 [CONTRIBUTING.md](https://github.com/superseriousbusiness/gotosocial/blob/main/docs/locales/zh/repo/CONTRIBUTING.md) 文件。
|
||||
|
||||
这是实例首页的截图!
|
||||
|
||||

|
||||
<!--overview-end-->
|
||||
|
||||
## 目录 <!-- omit in toc -->
|
||||
|
||||
- [什么是 GoToSocial?](#什么是-gotosocial)
|
||||
- [联合](#联合)
|
||||
- [历史与现状](#历史与现状)
|
||||
- [功能](#功能)
|
||||
- [兼容 Mastodon API](#兼容-mastodon-api)
|
||||
- [精细的贴文可见性设置](#精细的贴文可见性设置)
|
||||
- [回复控制](#回复控制)
|
||||
- [仅本站贴文](#仅本站贴文)
|
||||
- [RSS 源](#rss-源)
|
||||
- [富文本格式化](#富文本格式化)
|
||||
- [主题与自定义 CSS](#主题与自定义-css)
|
||||
- [易于运行](#易于运行)
|
||||
- [隐私+安全功能](#隐私安全功能)
|
||||
- [多种联合模式](#多种联合模式)
|
||||
- [OIDC 集成](#oidc-集成)
|
||||
- [后端优先设计](#后端优先设计)
|
||||
- [已知问题](#已知问题)
|
||||
- [安装 GoToSocial](#安装-gotosocial)
|
||||
- [支持的平台](#支持的平台)
|
||||
- [FreeBSD](#freebsd)
|
||||
- [32位](#32位)
|
||||
- [OpenBSD](#openbsd)
|
||||
- [稳定版本](#稳定版本)
|
||||
- [快照版本](#快照版本)
|
||||
- [Docker](#docker)
|
||||
- [二进制发布 .tar.gz](#二进制发布-targz)
|
||||
- [从源代码构建](#从源代码构建)
|
||||
- [第三方打包](#第三方打包)
|
||||
- [参与贡献](#参与贡献)
|
||||
- [联系我们](#联系我们)
|
||||
- [致谢](#致谢)
|
||||
- [库](#库)
|
||||
- [图像归属与许可](#图像归属与许可)
|
||||
- [团队成员](#团队成员)
|
||||
- [特别鸣谢](#特别鸣谢)
|
||||
- [赞助与资金支持](#赞助与资金支持)
|
||||
- [众筹](#众筹)
|
||||
- [企业赞助](#企业赞助)
|
||||
- [NLnet](#nlnet)
|
||||
- [许可](#许可)
|
||||
|
||||
<!--body-1-start-->
|
||||
## 什么是 GoToSocial?
|
||||
|
||||
GoToSocial 提供了一个轻量级、可定制且注重安全的进入 [联邦宇宙](https://en.wikipedia.org/wiki/Fediverse) 的入口,它类似但不同于像 [Mastodon](https://joinmastodon.org/)、[Pleroma](https://pleroma.social/)、[Friendica](https://friendi.ca) 和 [PixelFed](https://pixelfed.org/) 这样的现有项目。
|
||||
|
||||
如果你曾使用过 Twitter 或 Tumblr(甚至是 Myspace)等服务,GoToSocial 可能会让你感到熟悉:你可以关注他人并拥有粉丝,发布贴文,点赞、回复和分享他人的帖子,并通过时间线浏览你关注的人的贴文。你可以撰写长篇或短篇贴文,或者仅发布图片,一切随你选择。当然,你也可以屏蔽他人,或通过选择仅向朋友发布来限制不想要的互动。
|
||||
|
||||

|
||||
|
||||
**GoToSocial 不使用推荐算法,也不收集你的数据来推荐内容或“改善你的体验”**。时间线是按时间顺序排列的:你在时间线顶部看到的内容是*刚刚发布的*,而不是根据你的个人资料选择的“有趣”或“有争议”的内容。
|
||||
|
||||
GoToSocial 并不是为拥有成千上万粉丝的“必追”网红设计的,也不是设计被用来让人上瘾的。你的时间线和体验由你关注的人和你与他人的互动方式决定,而不是你的参与度的相关指标!
|
||||
|
||||
GoToSocial 不会宣称比其他应用更“好”,但它提供了一些可能特别*适合你*的东西。
|
||||
|
||||
### 联合
|
||||
|
||||
因为 GoToSocial 使用 [ActivityPub](https://activitypub.rocks/),你不仅可以与本站上的人交流,还可以无缝与 [联邦宇宙](https://en.wikipedia.org/wiki/Fediverse) 上的人交流。
|
||||
|
||||

|
||||
|
||||
联合意味着你的实例是一个遍布世界的、使用相同协议通信的服务器网络的一部分。你的数据不再集中在一家公司服务器上,而是在你自己的服务器上,根据你的意愿,跨越由其他人运行的服务器组成的弹性网络实现共享。
|
||||
|
||||
这种联合方式也意味着你不必受制于可能远在千里之外的庞大公司设定的任意规则。你的实例有自己的规则和文化;你的实例的居民是你的网上邻居;你很可能会认识你的服务器管理员和站务,或者自己成为管理员。
|
||||
|
||||
GoToSocial 的愿景是让许多小而特别的实例遍布联邦宇宙,让人们感到宾至如归,而不是让联邦宇宙被少数大的通用的实例占据,在那里一个人的声音可能会在大量其它账号的声音中迷失。
|
||||
|
||||
### 历史与现状
|
||||
|
||||
该项目于 2021 年 2/3 月因对其他联合式微博/社交媒体应用的安全和隐私功能的不满而起步,并希望实现一些不同的东西。
|
||||
|
||||
它最初是一个个人项目,然后随着更多开发者的兴趣和加入而加速发展。
|
||||
|
||||
我们在 2021 年 11 月进行了首次 Alpha 发布。我们于 2024 年 9 月/10 月离开 Alpha,进入 Beta 阶段。
|
||||
|
||||
要详细了解已实现和未实现的内容,以及 [稳定发布](https://en.wikipedia.org/wiki/Software_release_life_cycle#Stable_release) 的进展,请查看 [路线图](https://github.com/superseriousbusiness/gotosocial/blob/main/docs/locales/zh/repo/ROADMAP.md)。
|
||||
|
||||
---
|
||||
|
||||
## 功能
|
||||
|
||||
### 兼容 Mastodon API
|
||||
|
||||
Mastodon API 已成为客户端与联邦宇宙服务端通信的事实标准,因此 GoToSocial 实现并在自定义功能上扩展了该 API。
|
||||
|
||||
大多数实现 Mastodon API 的应用程序都应该可以使用 GoToSocial,但以下这些优秀的应用程序已经过测试,可与 GoToSocial 可靠地配合使用:
|
||||
|
||||
* [Tusky](https://tusky.app/) 适用于 Android
|
||||
* [Semaphore](https://semaphore.social/) 适用于浏览器
|
||||
* [Feditext](https://github.com/feditext/feditext) (beta) 适用于 iOS, iPadOS 和 macOS
|
||||
|
||||
如果你之前通过第三方应用来使用 Mastodon,使用 GoToSocial 将是轻而易举的。
|
||||
|
||||
### 精细的贴文可见性设置
|
||||
|
||||
发布内容时,选择谁能看到很重要。
|
||||
|
||||
GoToSocial 提供公开、不列出/悄悄公开、仅粉丝和私信(最好让对方事先同意)的贴文选项。
|
||||
|
||||
### 回复控制
|
||||
|
||||
GoToSocial 允许你通过 [互动规则](https://docs.gotosocial.org/zh-cn/latest/user_guide/settings/#default-interaction-policies) 选择谁可以回复你的贴文。你可以选择允许任何人回复贴文,仅允许朋友回复,等等。
|
||||
|
||||

|
||||
|
||||
### 仅本站贴文
|
||||
|
||||
有时你只想与同一实例中的人们交流。GoToSocial 通过仅本站可见贴文支持这一点,确保贴文仅保留在你的实例中。(当前,仅本站可见贴文能否使用取决于客户端支持。)
|
||||
|
||||
### RSS 源
|
||||
|
||||
GoToSocial 允许你选择将个人资料暴露为 RSS 订阅源,这样人们可以订阅你的公开源而不会错过任何贴文。
|
||||
|
||||
### 富文本格式化
|
||||
|
||||
使用 GoToSocial,你可以使用流行且易用的 Markdown 标记语言来撰写帖子,从而生成丰富的 HTML 贴文,支持引用段落、语法高亮代码块、列表、内嵌链接等。
|
||||
|
||||

|
||||
|
||||
### 主题与自定义 CSS
|
||||
|
||||
用户可以为他们的账户页 [选择多种有趣的主题](https://docs.gotosocial.org/zh-cn/latest/user_guide/settings/#select-theme),或甚至编写自己的 [自定义 CSS](https://docs.gotosocial.org/zh-cn/latest/user_guide/settings/#custom-css)。
|
||||
|
||||
管理员也可以轻松地为用户 [添加自定义主题](https://docs.gotosocial.org/zh-cn/latest/admin/themes/) 供用户选择。
|
||||
|
||||
<details>
|
||||
<summary>显示主题示例</summary>
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/superseriousbusiness/gotosocial/main/docs/assets/theme-blurple-dark.png"/>
|
||||
<figcaption>Blurple dark</figcaption>
|
||||
</figure>
|
||||
<hr/>
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/superseriousbusiness/gotosocial/main/docs/assets/theme-blurple-light.png"/>
|
||||
<figcaption>Blurple light</figcaption>
|
||||
</figure>
|
||||
<hr/>
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/superseriousbusiness/gotosocial/main/docs/assets/theme-brutalist-light.png"/>
|
||||
<figcaption>Brutalist light</figcaption>
|
||||
</figure>
|
||||
<hr/>
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/superseriousbusiness/gotosocial/main/docs/assets/theme-brutalist-dark.png"/>
|
||||
<figcaption>Brutalist dark</figcaption>
|
||||
</figure>
|
||||
<hr/>
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/superseriousbusiness/gotosocial/main/docs/assets/theme-ecks-pee.png"/>
|
||||
<figcaption>Ecks pee</figcaption>
|
||||
</figure>
|
||||
<hr/>
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/superseriousbusiness/gotosocial/main/docs/assets/theme-midnight-trip.png"/>
|
||||
<figcaption>Midnight trip</figcaption>
|
||||
</figure>
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/superseriousbusiness/gotosocial/main/docs/assets/theme-moonlight-hunt.png"/>
|
||||
<figcaption>Moonlight hunt</figcaption>
|
||||
</figure>
|
||||
<hr/>
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/superseriousbusiness/gotosocial/main/docs/assets/theme-rainforest.png"/>
|
||||
<figcaption>Rainforest</figcaption>
|
||||
</figure>
|
||||
<hr/>
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/superseriousbusiness/gotosocial/main/docs/assets/theme-soft.png"/>
|
||||
<figcaption>Soft</figcaption>
|
||||
</figure>
|
||||
<hr/>
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/superseriousbusiness/gotosocial/main/docs/assets/theme-solarized-dark.png"/>
|
||||
<figcaption>Solarized dark</figcaption>
|
||||
</figure>
|
||||
<hr/>
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/superseriousbusiness/gotosocial/main/docs/assets/theme-solarized-light.png"/>
|
||||
<figcaption>Solarized light</figcaption>
|
||||
</figure>
|
||||
<hr/>
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/superseriousbusiness/gotosocial/main/docs/assets/theme-sunset.png"/>
|
||||
<figcaption>Sunset</figcaption>
|
||||
</figure>
|
||||
<hr/>
|
||||
</details>
|
||||
|
||||
### 易于运行
|
||||
|
||||
GoToSocial 仅需约 250-350MiB 的 RAM,并且只要求极少的 CPU 频率,因此非常适合单板计算机、旧笔记本和每月 5 美元的小 VPS。
|
||||
|
||||

|
||||
|
||||
除数据库外无需其他依赖(也可以仅使用 SQLite!)。
|
||||
|
||||
只需下载二进制文件和对应资源(或 Docker 镜像),调整配置并运行。
|
||||
|
||||
### 隐私+安全功能
|
||||
|
||||
- 内置 [Let's Encrypt](https://letsencrypt.org/) 的自动使用 HTTPS 支持。
|
||||
- 严格执行贴文可见性和屏蔽逻辑。
|
||||
- 导入与导出允许联合实例列表和拒绝联合实例列表。订阅社区创建的屏蔽列表(类似于用于实例间联合的广告拦截器!)(功能仍在进行中)。
|
||||
- HTTP 签名认证:GoToSocial 在发送和接收消息时要求 [HTTP 签名](https://datatracker.ietf.org/doc/html/draft-cavage-http-signatures-12),以确保消息不能被篡改,身份不能被伪造。
|
||||
|
||||
### 多种联合模式
|
||||
|
||||
GoToSocial 对联合并不采取一刀切的方法。你的实例应该与谁联合应由你决定。
|
||||
|
||||
- “屏蔽列表”模式(默认):发现新实例;屏蔽你不喜欢的实例。
|
||||
- “允许列表”模式(实验性);只选择与信任的实例联合。
|
||||
- “零”联合模式;保持你的服务器私密(尚未实现)。
|
||||
|
||||
[查看文档了解更多信息](https://docs.gotosocial.org/zh-cn/latest/admin/federation_modes)。
|
||||
|
||||
### OIDC 集成
|
||||
|
||||
GoToSocial 支持 [OpenID Connect (OIDC)](https://openid.net/connect/) 身份提供商,这意味着你可以将其与现有的用户管理服务(如 [Auth0](https://auth0.com/)、[Gitlab](https://docs.gitlab.com/ee/integration/openid_connect_provider.html) 等)集成,或者部署你自己的 OIDC 服务并与之相连(我们推荐使用 [Dex](https://dexidp.io/))。
|
||||
|
||||
### 后端优先设计
|
||||
|
||||
与其他联邦宇宙服务端项目不同,GoToSocial 不附带集成的客户端前端(例如,网页端应用)。
|
||||
|
||||
相反,与 Matrix.org 的 [Synapse](https://github.com/matrix-org/synapse) 项目类似,它提供了一个相对通用的后端服务器实现,一些用于展示账户和贴文的美观的页面,以及一个[具有完善文档的 API](https://docs.gotosocial.org/zh-cn/latest/api/swagger/)。
|
||||
|
||||
在该 API 基础上,GoToSocial 鼓励开发者构建任何他们想要的前端实现或移动应用,无论它们是类似于 Tumblr、Facebook、Twitter,还是完全不同的东西。
|
||||
|
||||
---
|
||||
|
||||
## 已知问题
|
||||
|
||||
由于 GoToSocial 仍处于测试阶段,存在很多错误。我们使用 [GitHub issues](https://github.com/superseriousbusiness/gotosocial/issues?q=is%3Aissue+is%3Aopen+label%3Abug) 跟踪这些问题。
|
||||
|
||||
由于每个 ActivityPub 服务端实现对协议的解释略有不同,有些服务端尚未与 GoToSocial 正常联合。我们在 [这个项目](https://github.com/superseriousbusiness/gotosocial/projects/4) 中跟踪这些问题。最终,我们希望确保任何可以与 Mastodon 正确联合的 ActivityPub 实现也能够与 GoToSocial 联合。
|
||||
|
||||
---
|
||||
|
||||
## 安装 GoToSocial
|
||||
|
||||
查看我们的 [入门文档](https://docs.gotosocial.org/zh-cn/latest/getting_started/),并浏览我们的 [发布页面](https://github.com/superseriousbusiness/gotosocial/releases)。
|
||||
|
||||
<!--releases-start-->
|
||||
### 支持的平台
|
||||
|
||||
虽然我们尽力支持合理数量的架构和操作系统,但由于库的限制或性能问题,对特定平台的支持有时是不可能实现的。
|
||||
|
||||
某些平台不被我们正式支持,但仍*可能*工作,我们无法测试或保证其性能或稳定性。
|
||||
|
||||
以下是 GoToSocial 当前针对不同平台的支持状态(如果某个平台未列出,则表示我们尚未检查,因此我们不清楚):
|
||||
|
||||
| 操作系统 | 架构 | 支持程度 | 二进制文件 | Docker 容器 |
|
||||
| ------- | --------------------- | ---------------------------------- | ---------- | --------------- |
|
||||
| Linux | x86-64/AMD64 (64位) | 🟢 完全支持 | 是 | 是 |
|
||||
| Linux | Armv8/ARM64 (64位) | 🟢 完全支持 | 是 | 是 |
|
||||
| FreeBSD | x86-64/AMD64 (64位) | 🟢 完全支持<sup>[1](#freebsd)</sup> | 是 | 否 |
|
||||
| Linux | x86-32/i386 (32位) | 🟡 部分支持<sup>[2](#32-bit)</sup> | 是 | 是 |
|
||||
| Linux | Armv7/ARM32 (32位) | 🟡 部分支持<sup>[2](#32-bit)</sup> | 是 | 是 |
|
||||
| Linux | Armv6/ARM32 (32位) | 🟡 部分支持<sup>[2](#32-bit)</sup> | 是 | 是 |
|
||||
| OpenBSD | 任何架构 | 🔴 不支持<sup>[3](#openbsd)</sup> | 否 | 否 |
|
||||
|
||||
#### FreeBSD
|
||||
|
||||
大多数情况下可用,只是在 WASM SQLite 上有一些问题;在 FreeBSD 上安装时请仔细查看发行说明。如果使用 Postgres,则不应出现问题。
|
||||
|
||||
#### 32位
|
||||
|
||||
GtS 在像 i386 或 Armv6/v7 这样的 32 位系统上表现不佳,这主要是媒体解码性能的问题。
|
||||
|
||||
我们不建议在 32 位系统上运行 GtS,但你可以尝试关闭外站媒体处理功能,或使用完全**不受支持、实验性**的 [nowasm](https://docs.gotosocial.org/zh-cn/latest/advanced/builds/nowasm/) 标签自行构建二进制文件。
|
||||
|
||||
有关更多指导,请在尝试在 32 位系统上安装时检查发行说明。
|
||||
|
||||
#### OpenBSD
|
||||
|
||||
由于性能问题(空闲时的高内存占用,在处理媒体时崩溃),此系统被标记为不支持。
|
||||
|
||||
虽然我们不支持在 OpenBSD 上运行 GtS,但你可以尝试使用完全**不受支持、实验性**的 [nowasm](https://docs.gotosocial.org/zh-cn/latest/advanced/builds/nowasm/) 标签自行构建二进制文件。
|
||||
|
||||
### 稳定版本
|
||||
|
||||
我们为二进制构建和 Docker 容器打包稳定版本,这样你就不需要自己从源代码构建。
|
||||
|
||||
Docker 镜像 `superseriousbusiness/gotosocial:latest` 始终对应于最新稳定版本。由于此标签经常被覆盖,你可能希望使用 Docker CLI 标志 `--pull always` 确保每次运行此标签时都有最新的镜像,或者也可在使用前手动运行 `docker pull superseriousbusiness/gotosocial:latest`。
|
||||
|
||||
### 快照版本
|
||||
|
||||
我们还会在每次将代码合并到主分支时进行快照版的构建,因此如果你愿意,可以从主分支的代码运行。
|
||||
|
||||
请注意,风险自负!我们会尝试确保主分支正常工作,但不能做出任何保证。如果不确定,请选择稳定版。
|
||||
|
||||
#### Docker
|
||||
|
||||
要使用 Docker 从主分支运行,请使用 `snapshot` Docker 标签。Docker 镜像 `superseriousbusiness/gotosocial:snapshot` 始终对应主分支上的最新提交。由于此标签经常被覆盖,你可能希望使用 Docker CLI 标志 `--pull always` 确保每次运行此标签时都有最新的镜像,或者也可在使用前手动运行 `docker pull superseriousbusiness/gotosocial:snapshot`。
|
||||
|
||||
#### 二进制发布 .tar.gz
|
||||
|
||||
要使用二进制发布从主分支运行,请从我们的 [自托管 Minio S3 仓库](https://minio.s3.superseriousbusiness.org/browser/gotosocial-snapshots)下载适合你架构的 .tar.gz 文件。
|
||||
|
||||
S3 存储桶中的快照版二进制发布由 Github 提交哈希控制。要获取最新的,请按上次修改时间排序,或者查看 [这里的提交列表](https://github.com/superseriousbusiness/gotosocial/commits/main),复制最新的 SHA,并在 Minio 控制台过滤器中粘贴。快照二进制发布会在 28 天后过期,以降低我们的托管成本。
|
||||
|
||||
### 从源代码构建
|
||||
|
||||
有关从源代码构建 GoToSocial 的说明,请参见 [CONTRIBUTING.md](https://github.com/superseriousbusiness/gotosocial/blob/main/docs/locales/zh/repo/CONTRIBUTING.md) 文件。
|
||||
|
||||
### 第三方打包
|
||||
|
||||
非常感谢那些将时间和精力投入到打包 GoToSocial 的人!
|
||||
|
||||
这些包不是由 GoToSocial 维护的,因此请将问题和反馈发往对应的存储库维护者(并考虑向他们捐款!)。
|
||||
|
||||
[](https://repology.org/project/gotosocial/versions)
|
||||
|
||||
你还可以通过以下方式部署自己的 GoToSocial 实例:
|
||||
|
||||
- [YunoHost 上的 GoToSocial 打包](https://github.com/YunoHost-Apps/gotosocial_ynh):作者 [OniriCorpe](https://github.com/OniriCorpe)。
|
||||
- [Ansible Playbook (MASH)](https://github.com/mother-of-all-self-hosting/mash-playbook):该 Playbook 支持包括 GoToSocial 在内的多项服务。[文档](https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/services/gotosocial.md)
|
||||
- [GoToSocial Helm Chart](https://github.com/fSocietySocial/charts/tree/main/charts/gotosocial):作者 [0hlov3](https://github.com/0hlov3)。
|
||||
|
||||
<!--releases-end-->
|
||||
---
|
||||
|
||||
## 参与贡献
|
||||
|
||||
你想为 GtS 作出贡献吗?太好了!❤️❤️❤️ 请查看问题页面,看看是否有你想参与的内容,并阅读 [CONTRIBUTING.md](https://github.com/superseriousbusiness/gotosocial/blob/main/docs/locales/zh/repo/CONTRIBUTING.md) 文件以获取指南并配置开发环境。
|
||||
|
||||
---
|
||||
|
||||
## 联系我们
|
||||
|
||||
如果你有问题或反馈,可以[加入我们的 Matrix 空间](https://matrix.to/#/#gotosocial-space:superseriousbusiness.org),地址是 `#gotosocial-space:superseriousbusiness.org`。这是联系开发人员的最快方式。你也可以发送邮件至 [admin@gotosocial.org](mailto:admin@gotosocial.org)。
|
||||
|
||||
对于错误和功能请求,请先查看是否[已有相应问题](https://github.com/superseriousbusiness/gotosocial/issues),如果没有,可以开一个新问题工单(issue),或者使用上述渠道提出请求(如果你没有 Github 账户的话)。
|
||||
|
||||
---
|
||||
|
||||
## 致谢
|
||||
<!--body-1-end-->
|
||||
|
||||
### 库
|
||||
|
||||
GoToSocial 使用以下开源库、框架和工具,在此声明并致谢 💕
|
||||
|
||||
- [buckket/go-blurhash](https://github.com/buckket/go-blurhash); 用于生成图像模糊哈希。 [GPL-3.0 许可证](https://spdx.org/licenses/GPL-3.0-only.html)。
|
||||
- [coreos/go-oidc](https://github.com/coreos/go-oidc); OIDC 客户端库。 [Apache-2.0 许可证](https://spdx.org/licenses/Apache-2.0.html)。
|
||||
- [DmitriyVTitov/size](https://github.com/DmitriyVTitov/size); 运行时模型内存大小计算。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- Gin:
|
||||
- [gin-contrib/cors](https://github.com/gin-contrib/cors); Gin CORS 中间件。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [gin-contrib/gzip](https://github.com/gin-contrib/gzip); Gin gzip 中间件。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [gin-contrib/sessions](https://github.com/gin-contrib/sessions); Gin 会话中间件。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [gin-gonic/gin](https://github.com/gin-gonic/gin); 高速路由引擎。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [google/uuid](https://github.com/google/uuid); UUID 生成。 [BSD-3-Clause 许可证](https://spdx.org/licenses/BSD-3-Clause.html)。
|
||||
- Go-Playground:
|
||||
- [go-playground/form](https://github.com/go-playground/form); 表单映射支持。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [go-playground/validator](https://github.com/go-playground/validator); 结构验证。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- Gorilla:
|
||||
- [gorilla/feeds](https://github.com/gorilla/feeds); RSS + Atom 提要生成。 [BSD-2-Clause 许可证](https://spdx.org/licenses/BSD-2-Clause.html)。
|
||||
- [gorilla/websocket](https://github.com/gorilla/websocket); WebSocket 连接。 [BSD-2-Clause 许可证](https://spdx.org/licenses/BSD-2-Clause.html)。
|
||||
- [go-swagger/go-swagger](https://github.com/go-swagger/go-swagger); Swagger OpenAPI 规范生成。 [Apache-2.0 许可证](https://spdx.org/licenses/Apache-2.0.html)。
|
||||
- gruf:
|
||||
- [gruf/go-bytesize](https://codeberg.org/gruf/go-bytesize); 字节大小解析/格式化。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [gruf/go-cache](https://codeberg.org/gruf/go-cache); LRU 和 TTL 缓存。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [gruf/go-debug](https://codeberg.org/gruf/go-debug); 调试构建标记。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [gruf/go-errors](https://codeberg.org/gruf/go-errors); 类似上下文的错误与值包装。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [gruf/go-fastcopy](https://codeberg.org/gruf/go-fastcopy); 高性能 I/O 复制(缓冲池)。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [gruf/go-ffmpreg](https://codeberg.org/gruf/go-ffmpreg); 嵌入式 ffmpeg / ffprobe WASM 二进制文件。 [GPL-3.0 许可证](https://spdx.org/licenses/GPL-3.0-only.html)。
|
||||
- [gruf/go-kv](https://codeberg.org/gruf/go-kv); 日志字段格式化。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [gruf/go-list](https://codeberg.org/gruf/go-list); 通用双向链表。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [gruf/go-mutexes](https://codeberg.org/gruf/go-mutexes); 安全互斥锁和互斥图。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [gruf/go-runners](https://codeberg.org/gruf/go-runners); 同步工具。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [gruf/go-sched](https://codeberg.org/gruf/go-sched); 任务调度器。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [gruf/go-storage](https://codeberg.org/gruf/go-storage); 文件存储后端(本地及 s3)。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [gruf/go-structr](https://codeberg.org/gruf/go-structr); 结构缓存+队列及按字段索引。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- jackc:
|
||||
- [jackc/pgconn](https://github.com/jackc/pgconn); Postgres 驱动程序。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [jackc/pgx](https://github.com/jackc/pgx); Postgres 驱动程序及工具包。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [KimMachineGun/automemlimit](https://github.com/KimMachineGun/automemlimit); cgroups 内存限制检查。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [k3a/html2text](https://github.com/k3a/html2text); HTML 转文本转换。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [mcuadros/go-syslog](https://github.com/mcuadros/go-syslog); Syslog 服务器库。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [microcosm-cc/bluemonday](https://github.com/microcosm-cc/bluemonday); HTML 用户输入清理。 [BSD-3-Clause 许可证](https://spdx.org/licenses/BSD-3-Clause.html)。
|
||||
- [miekg/dns](https://github.com/miekg/dns); DNS 工具。 [Go 许可证](https://go.dev/LICENSE)。
|
||||
- [minio/minio-go](https://github.com/minio/minio-go); S3 客户端 SDK。 [Apache-2.0 许可证](https://spdx.org/licenses/Apache-2.0.html)。
|
||||
- [mitchellh/mapstructure](https://github.com/mitchellh/mapstructure); Go 接口 => 结构解析。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [modernc.org/sqlite](https://gitlab.com/cznic/sqlite); 简明的 SQLite。 [其他许可证](https://gitlab.com/cznic/sqlite/-/blob/master/LICENSE)。
|
||||
- [mvdan.cc/xurls](https://github.com/mvdan/xurls); URL 解析正则表达式。 [BSD-3-Clause 许可证](https://spdx.org/licenses/BSD-3-Clause.html)。
|
||||
- [oklog/ulid](https://github.com/oklog/ulid); 顺序友好的数据库 ID 生成。 [Apache-2.0 许可证](https://spdx.org/licenses/Apache-2.0.html)。
|
||||
- [open-telemetry/opentelemetry-go](https://github.com/open-telemetry/opentelemetry-go); OpenTelemetry API + SDK。 [Apache-2.0 许可证](https://spdx.org/licenses/Apache-2.0.html)。
|
||||
- spf13:
|
||||
- [spf13/cobra](https://github.com/spf13/cobra); 命令行工具。 [Apache-2.0 许可证](https://spdx.org/licenses/Apache-2.0.html)。
|
||||
- [spf13/viper](https://github.com/spf13/viper); 配置管理。 [Apache-2.0 许可证](https://spdx.org/licenses/Apache-2.0.html)。
|
||||
- [stretchr/testify](https://github.com/stretchr/testify); 测试框架。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- superseriousbusiness:
|
||||
- [superseriousbusiness/activity](https://github.com/superseriousbusiness/activity) 从 [go-fed/activity](https://github.com/go-fed/activity) 派生; Golang ActivityPub/ActivityStreams 库。 [BSD-3-Clause 许可证](https://spdx.org/licenses/BSD-3-Clause.html)。
|
||||
- [superseriousbusiness/exif-terminator](https://codeberg.org/superseriousbusiness/exif-terminator); EXIF 数据擦除。 [GNU AGPL v3 许可证](https://spdx.org/licenses/AGPL-3.0-or-later.html)。
|
||||
- [superseriousbusiness/httpsig](https://github.com/superseriousbusiness/httpsig) 从 [go-fed/httpsig](https://github.com/go-fed/httpsig) 派生; 安全 HTTP 签名库。 [BSD-3-Clause 许可证](https://spdx.org/licenses/BSD-3-Clause.html)。
|
||||
- [superseriousbusiness/oauth2](https://github.com/superseriousbusiness/oauth2) 从 [go-oauth2/oauth2](https://github.com/go-oauth2/oauth2) 派生; OAuth 服务器框架和令牌处理。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [tdewolff/minify](https://github.com/tdewolff/minify); Markdown 帖文的 HTML 压缩。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [uber-go/automaxprocs](https://github.com/uber-go/automaxprocs); GOMAXPROCS 自动化。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [ulule/limiter](https://github.com/ulule/limiter); http 流量限制中间件。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [uptrace/bun](https://github.com/uptrace/bun); 数据库 ORM。 [BSD-2-Clause 许可证](https://spdx.org/licenses/BSD-2-Clause.html)。
|
||||
- [wagslane/go-password-validator](https://github.com/wagslane/go-password-validator); 密码强度验证。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
- [yuin/goldmark](https://github.com/yuin/goldmark); Markdown 解析器。 [MIT 许可证](https://spdx.org/licenses/MIT.html)。
|
||||
|
||||
<!--body-2-start-->
|
||||
### 图像归属与许可
|
||||
|
||||
树懒标志由 [Anna Abramek](https://abramek.art/) 设计。
|
||||
|
||||
<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />GoToSocial 的树懒吉祥物采用 <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">知识共享署名-相同方式共享 4.0 国际许可协议</a>。
|
||||
|
||||
该许可具体适用于以下存储库内的文件和子目录:
|
||||
|
||||
- [树懒标志 png](https://github.com/superseriousbusiness/gotosocial/blob/main/web/assets/logo.png)
|
||||
- [树懒标志 webp](https://github.com/superseriousbusiness/gotosocial/blob/main/web/assets/logo.webp)
|
||||
- [树懒标志 svg](https://github.com/superseriousbusiness/gotosocial/blob/main/web/assets/logo.svg)
|
||||
- [所有默认头像](https://github.com/superseriousbusiness/gotosocial/blob/main/web/assets/default_avatars)
|
||||
|
||||
根据许可证条款,你可以:
|
||||
|
||||
- 分享 — 在任何媒介或格式中复制、传播上述材料。
|
||||
- 演绎 — 混合、转换与再创作上述材料,并用于任何目的,包括商业用途。
|
||||
|
||||
### 团队成员
|
||||
|
||||
按字母顺序(... 和气味顺序)排列:
|
||||
|
||||
- daenney
|
||||
- f0x \[[通过 liberapay 捐赠](https://liberapay.com/f0x)\]
|
||||
- kim \[在 @ [codeberg](https://codeberg.org/gruf) 查看我的代码, 或在 @ [@kim](https://k.iim.gay/@kim) 找到我\]
|
||||
- tobi \[[通过 liberapay 捐赠](https://liberapay.com/GoToSocial/)\]
|
||||
- vyr
|
||||
|
||||
### 特别鸣谢
|
||||
|
||||
特别感谢来自 [go-fed](https://github.com/go-fed/activity) 的 CJ:没有你的工作,GoToSocial 不可能实现。
|
||||
|
||||
感谢所有使用 GtS 的人,包括提交问题的,提出改进建议的,提供资金支持的,以及以其他方式支持或鼓励该项目的人!
|
||||
|
||||
---
|
||||
|
||||
## 赞助与资金支持
|
||||
|
||||
**有关企业赞助的更新:我们欢迎与符合我们价值观的组织进行赞助合作;请参阅以下条件**
|
||||
|
||||
### 众筹
|
||||
|
||||
   
|
||||
|
||||
如果你希望为 GoToSocial 捐款以支持开发,[你可以通过我们的 OpenCollective 捐助](https://opencollective.com/gotosocial#support)!
|
||||
|
||||
 
|
||||
|
||||
如果你喜欢通过 LiberaPay 赞助,我们也有一个 LiberaPay 帐户!你可以在[这里找到我们](https://liberapay.com/GoToSocial/)。
|
||||
|
||||
通过我们 OpenCollective 和 Liberapay 账户的众筹捐款将用于支付核心团队的工资、服务器成本以及 GtS 的艺术、设计等其他开支。
|
||||
|
||||
💕 🦥 💕 谢谢你们!
|
||||
|
||||
### 企业赞助
|
||||
|
||||
GoToSocial 欢迎与符合我们价值观的组织进行合作。在此对您的支持表示感谢,我们将在存储库和文档中展示你的 Logo、网站及简短的标语。赞助有以下限制:
|
||||
|
||||
1. GoToSocial 的项目方向始终由核心团队完全掌控,永远不会受到企业赞助的支配或影响。这是不可商量的。当然,企业同样可以像任何其他用户一样建议/请求功能,但不会获得特殊待遇。
|
||||
|
||||
2. 企业赞助取决于你的组织是否符合我们团队的伦理准则。这不是一套具体的规则,而是“你的公司是否造成了伤害?”的问题。例如,国防行业的不需要申请,因为答案显然是肯定的!
|
||||
|
||||
如果在阅读后您仍有兴趣赞助我们,那太好了!请通过 admin@gotosocial.org 与我们联系以进一步讨论 :)
|
||||
|
||||
### NLnet
|
||||
|
||||
<img src="https://nlnet.nl/logo/NGI/NGIZero-green.hex.svg" width="75" alt="NGIZero logo"/>
|
||||
|
||||
结合以上众筹来源,2023 年 GoToSocial Alpha 阶段的开发得到了 [NGI0 Entrust Fund](https://nlnet.nl/entrust/) 旗下的 [NLnet](https://nlnet.nl/) 提供的 50,000 欧元资助。详情请见[此处](https://nlnet.nl/project/GoToSocial/#ack)。成功的资助申请存档在[此处](https://github.com/superseriousbusiness/gotosocial/blob/main/archive/nlnet/2022-next-generation-internet-zero.md)。
|
||||
|
||||
2024 年 GoToSocial Beta 阶段的开发将从 [NGI0 Entrust Fund](https://nlnet.nl/entrust/) 旗下的 [NLnet](https://nlnet.nl/) 那里再获得 50,000 欧元的资助。
|
||||
|
||||
---
|
||||
|
||||
## 许可
|
||||
|
||||

|
||||
|
||||
GoToSocial 是自由软件,采用 [GNU AGPL v3 许可](https://github.com/superseriousbusiness/gotosocial/blob/main/LICENSE)。我们鼓励你对代码进行派生和修改,进行各种实验。
|
||||
|
||||
有关 AGPL 和 GPL 许可之间的区别,请参阅[这里](https://www.gnu.org/licenses/why-affero-gpl.html),关于 GPL 许可(包括 AGPL)的常见问题解答,请参阅[这里](https://www.gnu.org/licenses/gpl-faq.html)。
|
||||
|
||||
如果你修改了 GoToSocial 的源码,并以网络可访问的方式运行修改后的代码,你*必须*根据许可的指引提供你对源码的修改副本:
|
||||
|
||||
> 如果你修改了程序,并且你的修改版本支持通过计算机网络与用户进行远程交互,你的版本必须显著地向所有这些用户提供获得你的版本对应源码的机会,方式需为通过网络服务器以不收费的方式,或通过某种标准或习惯方式提供以便于复制软件。
|
||||
|
||||
版权所有 (C) 全体 GoToSocial 开发者
|
||||
|
||||
<!--I'm adding this here to take the crown of having the 1000th commit ~ kim-->
|
||||
<!--body-2-end-->
|
||||
99
docs/locales/zh/repo/ROADMAP.md
Normal file
99
docs/locales/zh/repo/ROADMAP.md
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
# Beta 版路线图
|
||||
|
||||
本文档包含了 GoToSocial 为其首个正式稳定版本发布而制定的路线图。
|
||||
|
||||
文档中的所有信息仅为预测。这为参与开发的人提供了粗略的时间表,但过程中难免会有变动;请不要对文档中的任何事项抱有太强烈的期望!
|
||||
|
||||
感谢 [NLnet](https://nlnet.nl) 对 GoToSocial alpha 与 beta 阶段开发的资助!
|
||||
|
||||
非常感谢我们所有的 [Open Collective](https://opencollective.com/gotosocial) 和 [Liberapay](https://liberapay.com/gotosocial) 赞助者们,他们的赞助使 GoToSocial 项目能够持续前行! 💕
|
||||
|
||||
## 目录
|
||||
|
||||
- [Beta 目标](#beta-目标)
|
||||
- [时间节点](#时间节点)
|
||||
- [2023 年中](#2023-年中)
|
||||
- [2023 年中到年底](#2023-年中到年底)
|
||||
- [2024 年初](#2024-年初)
|
||||
- [BETA 里程碑](#beta-里程碑)
|
||||
- [2024 年余下时间至 2025 年初](#2024-年余下时间至-2025-年初)
|
||||
- [BETA 发布到稳定版发布期间](#beta-发布到稳定版发布期间)
|
||||
- [愿望单](#愿望单)
|
||||
|
||||
## Beta 目标
|
||||
|
||||
每个软件项目对“beta”都有不同的理解。对于我们来说,GoToSocial 的 beta 版本应提供一套与现有流行的 ActivityPub 服务端实现大致相当的功能集。
|
||||
|
||||
换句话说,你应该能使用 GoToSocial 的 beta 版本作为你的主要社交实例,关注他人、发布动态,而不会遇到功能缺失或工作不正常的情况。
|
||||
|
||||
我们的 beta 目标还包括一些我们认为对用户安全与健康至关重要的功能,如关闭评论区、黑名单订阅、白名单模式支持等。
|
||||
|
||||
一旦我们实现了足以使 GoToSocial 进入 “beta” 的功能,我们将利用 beta 阶段来修复漏洞、调整性能,并新增一些需要在稳定基础上实现的额外功能。
|
||||
|
||||
我们希望在进入 beta 阶段后,客户端 API 能保持相对稳定,以便开发者能自信地基于 GoToSocial 构建应用,而无需担心 API 发生重大变化。
|
||||
|
||||
我们预计在 2024 年初进入 beta 阶段,但这个时间点只是预计,可能会更改。
|
||||
|
||||
## 时间节点
|
||||
|
||||
以下是我们迈向 beta 的功能开发大致时间表。时间表的推演基于以下假设:
|
||||
|
||||
- 我们的开发速度将与过去两年类似。
|
||||
- 我们的总工作量大致相当于一个人全职参与该项目。
|
||||
- 一个独立的“功能”需要一个人 2-4 周的时间来开发和测试,具体取决于功能的复杂度。
|
||||
- 在实现各种功能的过程中还需要修复其他 bug,因此不应安排过于密集的功能计划。
|
||||
|
||||
**这只是预估的时间节点,具体功能发布的顺序并未固定。根据我们遇到的挑战和社区贡献的代码数量,开发速度可能会更快或更慢。此时间线也未包含实现新功能之外的任务,如管理、完善现有功能、重构代码、版本管理及确保与其他 AP 实现的兼容性。**
|
||||
|
||||
### 2023 年中
|
||||
|
||||
- [x] **话题标签** -- 实现话题标签的联合与查看,让用户发现他们可能感兴趣的帖文。(完成! https://github.com/superseriousbusiness/gotosocial/pull/2032)。
|
||||
|
||||
### 2023 年中到年底
|
||||
|
||||
- [x] **投票** -- 实现对投票的解析、创建和参与功能。(完成! https://github.com/superseriousbusiness/gotosocial/pull/2330)
|
||||
- [x] **静音帖文/贴文串** -- 取消订阅贴文串的回复通知;不在时间线上显示特定帖文。(完成! https://github.com/superseriousbusiness/gotosocial/pull/2278)
|
||||
- [x] **有限联合/白名单** -- 允许实例管理员默认阻止与其他实例的联合。(完成! https://github.com/superseriousbusiness/gotosocial/pull/2200)
|
||||
|
||||
### 2024 年初
|
||||
|
||||
- [x] **账户迁移** -- 使用 ActivityPub 的 `Move` 活动支持用户账户在服务器之间的迁移。
|
||||
- [x] **注册流** -- 允许用户提交注册申请;允许管理员审核注册请求。
|
||||
|
||||
### BETA 里程碑
|
||||
|
||||
完成以上所有功能即表明我们进入了 GoToSocial 的 BETA 阶段。我们预计在 2024 年 2 月到 3 月之间实现这一阶段。编辑:最终在 2024 年 9 月到 10 月之间实现,抱歉!
|
||||
|
||||
### 2024 年余下时间至 2025 年初
|
||||
|
||||
这些功能按无特定顺序提供。
|
||||
|
||||
- [x] **v2 过滤规则** -- 实现过滤器 API 的第二版。
|
||||
- [x] **静音账户** -- 静音账户以防止其帖文出现在主页时间线上(可选:限制时间段)。
|
||||
- [x] **无评论区的帖文** -- 设计无评论区帖文的相关逻辑,让用户创建无评论区的帖文。
|
||||
- [ ] **屏蔽/允许列表订阅** -- 允许实例管理员订阅纯文本的示例屏蔽/允许列表。(大部分工作已经完成)
|
||||
- [x] **私信对话视图** -- 让用户能够轻松浏览他们参与的所有私信对话。
|
||||
- [ ] **Oauth 令牌管理** -- 通过设置面板创建/查看/吊销 OAuth 令牌。
|
||||
- [ ] **贴文编辑支持** -- 编辑已创建的贴文,而无需删除并重新编辑。并正确地将编辑传播出去。
|
||||
- [ ] **Fediverse 中继支持** -- 与中继通信,发布和接收帖文。
|
||||
- [ ] **两步验证 (2fa)** -- 允许用户通过设置面板为其账户启用 2FA,并在登录时实施 2FA。
|
||||
- [ ] **管理:附加内容警告/将所有内容标记为敏感内容**。
|
||||
|
||||
更多内容待定!
|
||||
|
||||
### BETA 发布到稳定版发布期间
|
||||
|
||||
待定。
|
||||
|
||||
## 愿望单
|
||||
|
||||
如果时间允许,我们将实现以下这些很酷的功能(因为我们真的很想要):
|
||||
|
||||
- **群组** 与群组发帖!
|
||||
- 基于声誉的“慢速”联合。
|
||||
- 联合及管理操作的社区决策。
|
||||
- 用户可选择自定义模板来渲染公开帖文:
|
||||
- 推特风格
|
||||
- 博客帖文
|
||||
- 图库
|
||||
- 等其它风格
|
||||
Loading…
Add table
Add a link
Reference in a new issue