Update zh-cn translations
This commit is contained in:
parent
5e2b739ee1
commit
a939c23559
168 changed files with 36955 additions and 1406 deletions
34
content/zh-cn/admin/optional/captcha.md
Normal file
34
content/zh-cn/admin/optional/captcha.md
Normal file
|
@ -0,0 +1,34 @@
|
|||
---
|
||||
title: 验证码
|
||||
description: 缓解自动注册机器人的问题
|
||||
menu:
|
||||
docs:
|
||||
weight: 30
|
||||
parent: admin-optional
|
||||
---
|
||||
|
||||
从 4.2 版本开始, Mastodon 支持使用验证码技术来帮助缓解机器人注册新账户的问题。
|
||||
启用验证码后,新注册用户将需要在电子邮件验证过程中完成一个质询响应。
|
||||
|
||||

|
||||
|
||||
{{< hint style="danger" >}}
|
||||
对于某些人来说,使用中心化的验证码服务可能会引起安全和隐私方面的担忧。
|
||||
此外,验证码可能会使注册过程的可访问性大大降低,尤其是对于视力障碍人士,如盲人或视力低下的人而言。
|
||||
{{</ hint >}}
|
||||
|
||||
目前, hCaptcha 是 Mastodon 唯一支持的验证码提供商。
|
||||
未来可能会添加其他提供商。
|
||||
|
||||
## hCaptcha
|
||||
|
||||
- 在 [hcaptcha.com](https://www.hcaptcha.com) 创建一个免费的 hCaptcha 账户
|
||||
- 完成注册后,使用 hCaptcha 仪表板添加新站点,输入你的 Mastodon 站点域名并获取站点密钥(Site Key)
|
||||
- 从 hCaptcha 的账户设置菜单中获取你的密钥(Secret Key)
|
||||
- 将这些值添加到你的 Mastodon 环境配置中,分别添加 `HCAPTCHA_SITE_KEY` 和 `HCAPTCHA_SECRET_KEY`
|
||||
- 重启服务器上运行的 Mastodon 服务
|
||||
- 从 Mastodon 网页界面导航至**管理**>**服务器设置**>**注册**,并勾选标有"要求新用户解决验证码以确认其账户"的选项
|
||||
|
||||

|
||||
|
||||
{{< translation-status-zh-cn raw_title="Captcha" raw_link="/admin/optional/captcha/" last_translation_time="2025-04-06" raw_commit="5e2b739ee193896bea937addc2843146ea0bc870">}}
|
|
@ -1,164 +0,0 @@
|
|||
---
|
||||
title: 全文搜索
|
||||
description: 设置Elasticsearch来搜索自己发出的嘟文、自己喜欢的嘟文、自己的书签和自己被提及的嘟文。
|
||||
menu:
|
||||
docs:
|
||||
weight: 10
|
||||
parent: admin-optional
|
||||
---
|
||||
|
||||
当有可用Elasticsearch时,Mastodon支持全文搜索。Mastodon的全文搜索允许登录用户从他们自己的嘟文、他们喜欢的嘟文、他们的书签和他们被提及的嘟文中查找相应结果。Mastodon有意禁用了在全数据库搜索任意关键词的功能。
|
||||
|
||||
## 安装 Elasticsearch {#install}
|
||||
|
||||
Elasticsearch 需要 Java runtime。如果你还没有安装 Java,请立刻安装上它。以下操均假定你已经登录为`root`用户:
|
||||
|
||||
```bash
|
||||
apt install openjdk-8-jre-headless
|
||||
```
|
||||
|
||||
添加Elasticsearch官方软件仓库至apt:
|
||||
|
||||
```bash
|
||||
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
|
||||
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-6.x.list
|
||||
apt update
|
||||
```
|
||||
|
||||
现在,你可以安装 Elasticsearch:
|
||||
|
||||
```bash
|
||||
apt install elasticsearch
|
||||
```
|
||||
|
||||
{{< hint style="warning" >}}
|
||||
**安全警告:** 默认情况下,Elasticsearch仅绑定于localhost,即无法从外部网络访问。你可以通过查看 `/etc/elasticsearch/elasticsearch.yml` 中的 `network.host` 来检查 Elasticsearch 绑定了哪些地址。考虑到由于缺乏认证层,任何能访问 Elasticsearch 的人都可以读取或修改里面的数据。因此,确保访问安全非常重要。如[主要安装说明](../../prerequisites/#install-a-firewall-and-only-whitelist-ssh-http-and-https-ports)中所述,防火墙建议仅暴露了22、80、443端口。如果你是一个多主机配置,你必须知道如何保证内部流量安全。
|
||||
{{< /hint >}}
|
||||
{{< hint style="danger" >}}
|
||||
**安全警告:** 由于近期Elasticsearch所使用的`log4j`库被披露出[安全漏洞](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228),使用了旧版本`log4j`(`2.0`到`2.14.1`)的ES可能会受到影响。如果使用了这些版本的`log4j`,请参阅 [此 issue](https://github.com/elastic/elasticsearch/issues/81618#issuecomment-991000240) 来暂时缓解此问题。
|
||||
{{< /hint >}}
|
||||
|
||||
启动 Elasticsearch:
|
||||
|
||||
```bash
|
||||
systemctl enable elasticsearch
|
||||
systemctl start elasticsearch
|
||||
```
|
||||
|
||||
## 配置 Mastodon {#config}
|
||||
|
||||
编辑 `.env.production`,添加如下变量:
|
||||
|
||||
```bash
|
||||
ES_ENABLED=true
|
||||
ES_HOST=localhost
|
||||
ES_PORT=9200
|
||||
```
|
||||
|
||||
如果你同一台机器上运行多个Mastodon服务器,你计划让它们使用同一个Elasticsearch,请确保他们都配置了互不重复的 `REDIS_NAMESPACE` 以分别他们的索引。如果你需要覆盖Elasticsearch索引前缀,你可以直接设置 `ES_PREFIX`。
|
||||
|
||||
|
||||
保存新设置之后,使用如下命令创建Elasticsearch索引:
|
||||
|
||||
```bash
|
||||
RAILS_ENV=production bundle exec rake chewy:upgrade
|
||||
```
|
||||
|
||||
重启Mastodon进程以使新配置生效:
|
||||
|
||||
```bash
|
||||
systemctl restart mastodon-sidekiq
|
||||
systemctl reload mastodon-web
|
||||
```
|
||||
|
||||
现在,新的嘟文将会被写入Elasticsearch索引。最后一步是导入所有旧有数据。这将花费很长一段时间:
|
||||
|
||||
```bash
|
||||
RAILS_ENV=production bundle exec rake chewy:sync
|
||||
```
|
||||
|
||||
{{< hint style="warning" >}}
|
||||
**兼容性提示:** Ruby 2.6.0 由于已知Bug,无法进行上述操作。其它Ruby版本,例如:2.6.1,并不存在这个问题。
|
||||
{{< /hint >}}
|
||||
|
||||
## 其它语言的搜索优化
|
||||
|
||||
### 中文搜索优化 {#chinese-search-optimize}
|
||||
|
||||
Elasticsearch默认使用标准分析器,这对于中文来说可能并不太适合。为了提高搜索体验,你可以安装特定语言的专用分析器。在创建Elasticsearch索引之前执行:
|
||||
|
||||
|
||||
安装 [elasticsearch-analysis-ik](https://github.com/medcl/elasticsearch-analysis-ik)、[elasticsearch-analysis-stconvert](https://github.com/medcl/elasticsearch-analysis-stconvert) 插件至 Elasticsearch。
|
||||
|
||||
并对源码做出如下修改:
|
||||
|
||||
```diff
|
||||
diff --git a/app/chewy/accounts_index.rb b/app/chewy/accounts_index.rb
|
||||
--- a/app/chewy/accounts_index.rb
|
||||
+++ b/app/chewy/accounts_index.rb
|
||||
@@ -4,7 +4,7 @@ class AccountsIndex < Chewy::Index
|
||||
settings index: { refresh_interval: '5m' }, analysis: {
|
||||
analyzer: {
|
||||
content: {
|
||||
- tokenizer: 'whitespace',
|
||||
+ tokenizer: 'ik_max_word',
|
||||
filter: %w(lowercase asciifolding cjk_width),
|
||||
},
|
||||
|
||||
diff --git a/app/chewy/statuses_index.rb b/app/chewy/statuses_index.rb
|
||||
--- a/app/chewy/statuses_index.rb
|
||||
+++ b/app/chewy/statuses_index.rb
|
||||
@@ -16,9 +16,17 @@ class StatusesIndex < Chewy::Index
|
||||
language: 'possessive_english',
|
||||
},
|
||||
},
|
||||
+ char_filter: {
|
||||
+ tsconvert: {
|
||||
+ type: 'stconvert',
|
||||
+ keep_both: false,
|
||||
+ delimiter: '#',
|
||||
+ convert_type: 't2s',
|
||||
+ },
|
||||
+ },
|
||||
analyzer: {
|
||||
content: {
|
||||
- tokenizer: 'uax_url_email',
|
||||
+ tokenizer: 'ik_max_word',
|
||||
filter: %w(
|
||||
english_possessive_stemmer
|
||||
lowercase
|
||||
@@ -27,6 +35,7 @@ class StatusesIndex < Chewy::Index
|
||||
english_stop
|
||||
english_stemmer
|
||||
),
|
||||
+ char_filter: %w(tsconvert),
|
||||
},
|
||||
},
|
||||
}
|
||||
diff --git a/app/chewy/tags_index.rb b/app/chewy/tags_index.rb
|
||||
--- a/app/chewy/tags_index.rb
|
||||
+++ b/app/chewy/tags_index.rb
|
||||
@@ -2,10 +2,19 @@
|
||||
|
||||
class TagsIndex < Chewy::Index
|
||||
settings index: { refresh_interval: '15m' }, analysis: {
|
||||
+ char_filter: {
|
||||
+ tsconvert: {
|
||||
+ type: 'stconvert',
|
||||
+ keep_both: false,
|
||||
+ delimiter: '#',
|
||||
+ convert_type: 't2s',
|
||||
+ },
|
||||
+ },
|
||||
analyzer: {
|
||||
content: {
|
||||
- tokenizer: 'keyword',
|
||||
+ tokenizer: 'ik_max_word',
|
||||
filter: %w(lowercase asciifolding cjk_width),
|
||||
+ char_filter: %w(tsconvert),
|
||||
},
|
||||
|
||||
edge_ngram: {
|
||||
```
|
||||
|
||||
{{< translation-status-zh-cn raw_title="Full-text search" raw_link="/admin/optional/elasticsearch/" last_tranlation_time="2020-05-05" raw_commit="ad1ef20f171c9f61439f32168987b0b4f9abd74b">}}
|
129
content/zh-cn/admin/optional/object-storage-proxy.md
Normal file
129
content/zh-cn/admin/optional/object-storage-proxy.md
Normal file
|
@ -0,0 +1,129 @@
|
|||
---
|
||||
title: 通过 nginx 代理对象存储
|
||||
description: 从自己的域名提供 Mastodon 中用户上传的文件
|
||||
---
|
||||
|
||||
当使用 Amazon S3、Wasabi、Google Cloud 或其他对象存储提供商作为 Mastodon 的对象存储时,默认情况下,文件及其 URL 会通过存储提供商本身提供。这有以下缺点:
|
||||
|
||||
- 带宽通常是按量计费且非常昂贵
|
||||
- 如果你决定稍后更换提供商,URL 将会失效
|
||||
|
||||
你可以选择从自己的域名提供文件,并在此过程中加入缓存机制。在 Mastodon 中,访问模式显示新文件经常被多个客户端同时访问,因为它们出现在通过流式 API 提供的新贴文中或通过联邦与州共享;相比之下,旧内容的访问频率较低。因此,仅依靠缓存并不能显著减少代理到实际对象存储的带宽使用。为了解决这个问题,我们可以实现一个缓存锁定机制,确保一次只进行一个代理请求。
|
||||
|
||||
以下是实现这一目标的nginx配置示例:
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
listen [::]:443 ssl http2;
|
||||
server_name files.example.com;
|
||||
root /var/www/html;
|
||||
|
||||
ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
|
||||
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
|
||||
|
||||
keepalive_timeout 30;
|
||||
|
||||
location = / {
|
||||
index index.html;
|
||||
}
|
||||
|
||||
location / {
|
||||
try_files $uri @s3;
|
||||
}
|
||||
|
||||
set $s3_backend 'https://YOUR_BUCKET_NAME.YOUR_S3_HOSTNAME';
|
||||
|
||||
location @s3 {
|
||||
limit_except GET {
|
||||
deny all;
|
||||
}
|
||||
|
||||
resolver 8.8.8.8;
|
||||
proxy_set_header Host YOUR_BUCKET_NAME.YOUR_S3_HOSTNAME;
|
||||
proxy_set_header Connection '';
|
||||
proxy_set_header Authorization '';
|
||||
proxy_hide_header Set-Cookie;
|
||||
proxy_hide_header 'Access-Control-Allow-Origin';
|
||||
proxy_hide_header 'Access-Control-Allow-Methods';
|
||||
proxy_hide_header 'Access-Control-Allow-Headers';
|
||||
proxy_hide_header x-amz-id-2;
|
||||
proxy_hide_header x-amz-request-id;
|
||||
proxy_hide_header x-amz-meta-server-side-encryption;
|
||||
proxy_hide_header x-amz-server-side-encryption;
|
||||
proxy_hide_header x-amz-bucket-region;
|
||||
proxy_hide_header x-amzn-requestid;
|
||||
proxy_ignore_headers Set-Cookie;
|
||||
proxy_pass $s3_backend$uri;
|
||||
proxy_intercept_errors off;
|
||||
|
||||
proxy_cache CACHE;
|
||||
proxy_cache_valid 200 48h;
|
||||
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
|
||||
proxy_cache_lock on;
|
||||
|
||||
expires 1y;
|
||||
add_header Cache-Control public;
|
||||
add_header 'Access-Control-Allow-Origin' '*';
|
||||
add_header X-Cache-Status $upstream_cache_status;
|
||||
add_header X-Content-Type-Options nosniff;
|
||||
add_header Content-Security-Policy "default-src 'none'; form-action 'none'";
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
{{< hint style="info" >}}
|
||||
我们使用 `$s3_backend` 作为变量来强制 nginx 对其值执行 DNS 解析,因为对象存储提供商的 IP 地址可能不会始终保持不变。
|
||||
{{</ hint >}}
|
||||
|
||||
上述配置实现了以下效果:
|
||||
|
||||
- 阻止针对对象存储提供商的除 GET 请求之外的请求
|
||||
- 阻止任何经过身份验证的请求到达对象存储提供商
|
||||
- 阻止对象存储提供商设置cookie
|
||||
- 移除对象存储提供商返回的不必要的标头信息
|
||||
- 缓存有效文件最多 48 小时
|
||||
- 如果对象存储不可用,允许使用旧缓存
|
||||
- 使用缓存锁防止同时向对象存储发出请求
|
||||
- 使返回的所有文件可被浏览器缓存长达一年
|
||||
- 添加 Mastodon 网页界面所需的 CORS 头信息
|
||||
- 添加一个特殊的头信息,告诉用户请求是否命中缓存
|
||||
|
||||
确保替换以下内容:
|
||||
|
||||
- `files.example.com`
|
||||
- `YOUR_BUCKET_NAME`
|
||||
- `YOUR_S3_HOSTNAME`
|
||||
|
||||
使用你的实际值,将配置保存到 `/etc/nginx/sites-available/files.example.com`,然后通过以下命令启用它:
|
||||
|
||||
```bash
|
||||
ln -s /etc/nginx/sites-available/files.example.com /etc/nginx/sites-enabled/
|
||||
systemctl reload nginx
|
||||
```
|
||||
|
||||
你还需要为其获取SSL证书:
|
||||
|
||||
```bash
|
||||
certbot --nginx -d files.example.com
|
||||
systemctl reload nginx
|
||||
```
|
||||
|
||||
最后,你需要确保 Mastodon 使用你的新代理生成文件 URL。编辑 Mastodon 的 `.env.production` 添加:
|
||||
|
||||
```bash
|
||||
S3_ALIAS_HOST=files.example.com
|
||||
```
|
||||
|
||||
然后重启 Mastodon:
|
||||
|
||||
```bash
|
||||
systemctl restart mastodon-sidekiq
|
||||
systemctl reload mastodon-web
|
||||
```
|
||||
|
||||
{{< hint style="success" >}}
|
||||
**现在你可以在浏览器中访问你的 Mastodon 以确认一切正常加载**
|
||||
{{< /hint >}}
|
||||
|
||||
{{< translation-status-zh-cn raw_title="Proxying object storage through nginx" raw_link="/admin/optional/object-storage-proxy/" last_translation_time="2025-04-06" raw_commit="5e2b739ee193896bea937addc2843146ea0bc870">}}
|
320
content/zh-cn/admin/optional/object-storage.md
Normal file
320
content/zh-cn/admin/optional/object-storage.md
Normal file
|
@ -0,0 +1,320 @@
|
|||
---
|
||||
title: 对象存储
|
||||
description: 使用外部对象存储来存储 Mastodon 中用户上传的文件
|
||||
menu:
|
||||
docs:
|
||||
weight: 15
|
||||
parent: admin-optional
|
||||
---
|
||||
|
||||
用户上传的文件可以存储在主服务器的文件系统中,或者使用外部对象存储服务器。使用外部对象存储对于扩展 Mastodon 实例来说可能是必需的。
|
||||
|
||||
## 使用文件系统 {#FS}
|
||||
|
||||
最简单的存储用户上传文件的方式是使用服务器的文件系统。这是默认的工作方式,适用于小型服务器。
|
||||
|
||||
默认情况下, Mastodon 会将文件上传存储在安装目录下的 `public/system` 文件夹中,但可以通过使用 `PAPERCLIP_ROOT_PATH` 环境变量来覆盖此设置。
|
||||
|
||||
默认情况下,这些文件可以通过 `https://your-domain/system` 访问,可以使用 `PAPERCLIP_ROOT_URL` 和 `CDN_HOST` 来覆盖此访问路径。
|
||||
|
||||
{{< hint style="info" >}}
|
||||
虽然使用服务器的文件系统对小型服务器来说完全可用,但使用外部对象存储更具可扩展性。
|
||||
{{</ hint >}}
|
||||
|
||||
{{< hint style="danger" >}}
|
||||
必须配置 Web 服务器,使其能够提供这些文件,但不允许列出它们(也就是说 `https://your-domain/system/` 不应返回文件列表)。如果你使用与 Mastodon 一起分发的配置文件,情况应该就是这样,但最好再次检查一下。
|
||||
{{</ hint >}}
|
||||
|
||||
## 兼容 S3 的对象存储后端 {#S3}
|
||||
|
||||
Mastodon 可以使用兼容 S3 的对象存储后端。 建议支持 ACL,因为 ACL 允许 Mastodon 快速地让被封禁用户的媒体附件不可用,或略微提高私有数据的安全性。
|
||||
|
||||
Mastodon 使用 S3 API (`S3_REGION`, `S3_ENDPOINT`, `S3_BUCKET`,
|
||||
`AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `S3_SIGNATURE_VERSION`,
|
||||
`S3_OVERRIDE_PATH_STYLE`) 进行所有的写入、删除和权限修改操作。这包括媒体上传(来自 Web 界面、 Mastodon API 客户端和 ActivityPub 服务器)、媒体删除(贴文被编辑或删除时)以及阻止对媒体的访问(当帐户被暂停时)。
|
||||
|
||||
Mastodon 会向 Web 界面、Mastodon API 客户端和 ActivityPub 服务器发送 URL,用于所有“读取”操作。因此,这些操作是匿名的(不需要身份验证或授权),并使用纯 HTTP GET 方法,这意味着它们可以通过反向代理和 CDN 路由并被缓存。 这也意味着这些 URL 可以包含与 S3 存储提供商本身使用的主机/域名完全不同的主机/域名(根据需要)。 请查看下面的详细文档,其中描述了如何构造这些 URL 以及涉及哪些环境变量。
|
||||
|
||||
要启用 S3 存储,请将 `S3_ENABLED` 环境变量设置为 `true`。
|
||||
|
||||
### 用于 S3 API 访问的环境变量
|
||||
|
||||
- `S3_REGION` (默认为 'us-east-1',如果使用 AWS S3 则必需提供,使用其他存储提供商可能不需要)
|
||||
- `S3_ENDPOINT` (默认为 'https://s3.<S3_REGION>.amazonaws.com', 如果不使用 AWS S3 则必需提供)
|
||||
- `S3_BUCKET=mastodata` (将 `mastodata` 替换为你的存储桶名称)
|
||||
- `AWS_ACCESS_KEY_ID` 和 `AWS_SECRET_ACCESS_KEY` 需要设置为你的凭据
|
||||
- `S3_SIGNATURE_VERSION` (默认为 'v4',应该与大多数存储提供商兼容)
|
||||
- `S3_OVERRIDE_PATH_STYLE` (仅当配置了 `S3_ENDPOINT` 时使用, 如果存储提供商要求将 API 操作发送到 '<S3_BUCKET>.<S3_ENDPOINT>`(域名样式),请将其设置为 `true`)
|
||||
|
||||
### 用于客户端访问媒体对象的环境变量
|
||||
|
||||
- `S3_PROTOCOL` (默认为 `https`)
|
||||
- `S3_HOSTNAME` (默认为 's3-<S3_REGION>.amazonaws.com', 如果不使用 AWS S3 且未设置 `S3_ALIAS_HOST`,则为必需)
|
||||
- `S3_ALIAS_HOST` (如果你不希望 `S3_BUCKET` 包含在媒体 URL 中,可以使用 `S3_ALIAS_HOST` 代替 `S3_HOSTNAME`, 这需要你在存储提供商前面配置一个反向代理或 CDN)
|
||||
|
||||
如上所述,当客户端需要从存储提供商访问媒体对象时,Mastodon 将向客户端发送 URL。 这些 URL 构造如下:
|
||||
|
||||
- 如果未设置 `S3_ALIAS_HOST`,则 URL 将为 '<S3_PROTOCOL>://<S3_HOSTNAME>/<S3_BUCKET>/\<对象路径\>'
|
||||
|
||||
- 如果设置了 `S3_ALIAS_HOST`,则 URL 将为 '<S3_PROTOCOL>://<S3_ALIAS_HOST>/\<对象路径\>'
|
||||
|
||||
注意,当设置了 `S3_ALIAS_HOST` 时,存储桶名称 **不** 包含在生成的 URL 中; 这意味着存储桶名称必须包含在 `S3_ALIAS_HOST` 中(称为“域名样式”对象访问),或者 `S3_ALIAS_HOST` 必须指向一个反向代理或 CDN,它可以将存储桶名称包含在用于将请求发送到存储提供商的 URL 中。 这种类型的配置允许你从实例的客户端“隐藏”存储提供商,这意味着你可以更改存储提供商,而无需更改生成的 URL。
|
||||
|
||||
除隐藏存储提供商之外,这还可以让你在从存储提供商拉取媒体后缓存媒体,从而降低存储提供商的出口带宽成本。 这可以在你自己的反向代理中完成,也可以通过使用 CDN 来完成。
|
||||
|
||||
{{< page-ref page="admin/optional/object-storage-proxy.md" >}}
|
||||
|
||||
{{< hint style="info" >}}
|
||||
你必须使用 CORS 标头来提供文件,否则 Mastodon Web UI 的某些功能将无法正常工作。 例如,`Access-Control-Allow-Origin: *`
|
||||
{{</ hint >}}
|
||||
|
||||
### 可选环境变量
|
||||
|
||||
#### `S3_OPEN_TIMEOUT`
|
||||
|
||||
默认值:5 (秒)
|
||||
|
||||
HTTP 处理程序在尝试打开新的 HTTP 会话时应超时的秒数。
|
||||
|
||||
#### `S3_READ_TIMEOUT`
|
||||
|
||||
默认值:5 (秒)
|
||||
|
||||
HTTP 处理程序在等待 HTTP 响应时应超时的秒数。
|
||||
|
||||
#### `S3_FORCE_SINGLE_REQUEST`
|
||||
|
||||
默认值:false
|
||||
|
||||
如果你在处理大型文件时遇到问题,请将其设置为 `true`。
|
||||
|
||||
#### `S3_ENABLE_CHECKSUM_MODE`
|
||||
|
||||
默认值:false
|
||||
|
||||
使在 Mastodon 从存储提供商检索对象时验证对象校验和。 此功能在 AWS S3 中可用,但在其他兼容 S3 的实现中可能不可用。
|
||||
|
||||
#### `S3_STORAGE_CLASS`
|
||||
|
||||
默认值:none
|
||||
|
||||
当使用 AWS S3 时,此变量可以设置为 [存储类](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html) 的其中一个选项,这些选项会影响所选的用于上传对象的存储(以及它们的访问时间和成本)。 如果未指定存储类,则 AWS S3 将使用 `STANDARD` 类,但选项包括 `REDUCED_REDUNDANCY`、`GLACIER` 等。
|
||||
|
||||
#### `S3_MULTIPART_THRESHOLD`
|
||||
|
||||
默认值:15 (兆字节)
|
||||
|
||||
此大小及以下的对象将以单个操作上传,但更大的对象将使用多部分分块机制上传,这可以提高传输速度和可靠性。
|
||||
|
||||
#### `S3_PERMISSION`
|
||||
|
||||
默认值:`public-read`
|
||||
|
||||
定义上传新文件时的 S3 对象 ACL。 使用 [S3 阻止公共访问](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html) 并启用 `BlockPublicAcls` 选项时请谨慎,因为使用 ACL `public-read` 上传对象将失败 (403)。 在这种情况下,需将 `S3_PERMISSION` 设置为 `private`。
|
||||
|
||||
{{< hint style="danger" >}}
|
||||
无论 ACL 配置如何,你的 S3 存储桶都必须设置为确保所有对象都是公共可读,但不可写或可列出。 同时,Mastodon 本身应该对存储桶具有写入权限。 此配置通常在所有 S3 提供商中保持一致,常用提供商在本指南后面会重点介绍。
|
||||
{{</ hint >}}
|
||||
|
||||
#### `S3_BATCH_DELETE_LIMIT`
|
||||
|
||||
默认值: `1000`
|
||||
|
||||
官方的 [Amazon S3 API](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html) 可以处理在一个批处理作业中删除 1,000 个对象,但一些提供商可能在处理一个请求中的这么多对象时遇到问题,或者提供更低的限制。
|
||||
|
||||
#### `S3_BATCH_DELETE_RETRY`
|
||||
|
||||
默认值: 3
|
||||
|
||||
在批处理删除操作期间,S3 提供商可能会在处理删除请求时周期性地失败或超时。 Mastodon 会退避并重试该请求,直到达到最大重试次数。
|
||||
|
||||
### MinIO
|
||||
|
||||
MinIO 是 S3 对象提供程序的开源实现。 本节不介绍如何安装它,而是介绍如何配置存储桶以在 Mastodon 中使用。
|
||||
|
||||
你需要为匿名访问设置一个策略,该策略允许对存储桶包含的对象进行只读访问,而不允许列出它们。
|
||||
|
||||
为此,你需要设置一个自定义策略(将 `mastodata` 替换为你的 S3 存储桶的实际名称):
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Principal": {
|
||||
"AWS": [
|
||||
"*"
|
||||
]
|
||||
},
|
||||
"Action": [
|
||||
"s3:GetObject"
|
||||
],
|
||||
"Resource": [
|
||||
"arn:aws:s3:::mastodata/*"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Mastodon 本身需要能够写入存储桶,因此请使用你的 MinIO 管理员帐户(不建议)或附加以下策略的 Mastodon 专用帐户(建议)(将 `mastodata` 替换为你的 S3 存储桶的实际名称):
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Action": "s3:*",
|
||||
"Resource": "arn:aws:s3:::mastodata/*"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
你可以通过 MinIO 控制台(基于 Web 的用户界面)或命令行客户端 (`mcli` / `mc`) 设置这些策略。
|
||||
|
||||
#### 使用 MinIO 控制台
|
||||
|
||||
连接到 MinIO 控制台 Web 界面并创建一个新存储桶(或导航到你现有的存储桶):
|
||||

|
||||
|
||||
然后,将“访问策略”配置为允许读取访问 (`s3:GetObject`) 而未写入访问或列出对象的能力的自定义策略(见上文):
|
||||

|
||||
|
||||
{{< hint style="info" >}}
|
||||
如果 MinIO 控制台不允许你设置“自定义”策略,则可能需要更新 MinIO。 如果你在 *独立* 或 *文件系统* 模式下使用 MinIO,则 [`RELEASE.2022-10-24T18-35-07Z`](https://github.com/minio/minio/releases/tag/RELEASE.2022-10-24T18-35-07Z) 应该是一个安全的更新版本,不需要 [涉及迁移过程](https://min.io/docs/minio/linux/operations/install-deploy-manage/migrate-fs-gateway.html#migrate-from-gateway-or-filesystem-mode)。
|
||||
{{< /hint >}}
|
||||
|
||||
新建一个 `mastodon-readwrite` 策略(见上文):
|
||||

|
||||
|
||||
最后,使用 `mastodon-readwrite` 策略创建一个新的 `mastodon` 用户:
|
||||

|
||||
|
||||
#### 使用命令行实用程序
|
||||
|
||||
使用 [MinIO 客户端](https://min.io/docs/minio/linux/reference/minio-mc.html) 命令行实用程序(可以根据安装位置调用 `mc` 或 `mcli`)也可以实现相同的目的。
|
||||
|
||||
创建一个新存储桶:
|
||||
`mc mb myminio/mastodata`
|
||||
|
||||
将上面的匿名访问策略保存为 `anonymous-readonly-policy.json`,并将 Mastodon 用户访问策略保存为 `mastodon-readwrite.json`(确保将 `mastodata` 替换为你新创建的存储桶的名称)。
|
||||
|
||||
设置存储桶的匿名访问策略:
|
||||
`mc anonymous set-json anonymous-readonly-policy.json myminio/mastodata`
|
||||
|
||||
添加 `mastodon-readwrite` 策略:
|
||||
`mc admin policy add myminio mastodon-readwrite mastodon-readwrite.json`
|
||||
|
||||
添加 `mastodon` 用户(替换密码):
|
||||
`mc admin user add myminio mastodon SECRET_PASSWORD`
|
||||
|
||||
将 `mastodon-readwrite` 策略应用到 `mastodon` 用户:
|
||||
`mc admin policy set myminio mastodon-readwrite user=mastodon`
|
||||
|
||||
### Wasabi 对象存储
|
||||
|
||||
创建一个新存储桶并定义其策略,允许对象进行匿名读取但不可列出:
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Principal": {
|
||||
"AWS": "*"
|
||||
},
|
||||
"Action": "s3:GetObject",
|
||||
"Resource": "arn:aws:s3:::mastodata/*"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||

|
||||
|
||||
{{< hint style="info" >}}
|
||||
如果你使用旧存储桶,请确保你没有通过 Wasabi 的旧版访问控制设置授予“所有人”读取对象的权限,因为该设置允许列出对象并优先于上面定义的 IAM 策略。
|
||||
|
||||

|
||||
{{< /hint >}}
|
||||
|
||||
然后,创建一个 `mastodon-readwrite` 策略以授予对你的存储桶的读写访问权限:
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Action": "s3:*",
|
||||
"Resource": "arn:aws:s3:::mastodata/*"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||

|
||||
|
||||
最后,创建一个新的 `mastodon` 用户,并且不要忘记启用 `mastodon-readwrite` 策略:
|
||||

|
||||
|
||||
在 Mastodon 端,你需要设置`S3_FORCE_SINGLE_REQUEST=true`来正确处理大型上传。
|
||||
|
||||
### DigitalOcean Spaces
|
||||
|
||||
在你的 DigitalOcean Spaces 存储桶中,确保“文件列表”对于拥有访问密钥的用户是“受限制的”。
|
||||
|
||||

|
||||
|
||||
### Scaleway
|
||||
|
||||
如果你想使用 Scaleway 对象存储,我们强烈建议你创建一个专用于 Mastodon 实例资产的 Scaleway 项目,并使用自定义 IAM 策略。
|
||||
|
||||
首先,创建一个新的 Scaleway 项目,在其中创建对象存储桶。 你需要将存储桶的可见性设置为“私有”,以不允许列出对象。
|
||||
|
||||

|
||||
|
||||
现在你的存储桶已创建,你需要创建 API 密钥,以便在你的 Mastodon 实例配置中使用。
|
||||
|
||||
前往 IAM 设置(在你的组织菜单中,屏幕的右上角),然后创建一个新的 IAM 策略(例如 `mastodon-media-access`)
|
||||
|
||||

|
||||
|
||||
此策略需要有一个规则,允许它在你上面创建的 Scaleway 项目(作用域)中读取、写入和删除对象。
|
||||
|
||||

|
||||
|
||||
然后前往 IAM 应用程序页面,创建一个新的应用程序(例如 `my-mastodon-instance`),并选择你上面创建的策略。
|
||||
|
||||
最后,单击你创建的应用程序,然后单击“API 密钥”,并创建一个新的 API 密钥,以便在你的实例配置中使用。 你应该使用“是,设置首选项目”选项,并选择你上面创建的项目作为此密钥的默认项目。
|
||||
|
||||

|
||||
|
||||
复制 Access Key ID 和 Secret,并将它们用于你的 `AWS_ACCESS_KEY_ID` 和 `AWS_SECRET_ACCESS_KEY` 这两个 Mastodon 配置变量。
|
||||
|
||||
### Exoscale
|
||||
|
||||
在 Exoscale 中,你的存储桶不应有任何读取 ACL(Mastodon 将根据需要在对象本身上设置 ACL)。
|
||||
|
||||
你需要为 Mastodon 应用程序创建一个 API 密钥,该密钥限于对象存储 (`sos`) 服务,限于你的存储桶,并且操作不受限制。
|
||||
|
||||

|
||||
|
||||
在 Mastodon 端,你需要设置`S3_FORCE_SINGLE_REQUEST=true`才能正确处理大型上传。
|
||||
|
||||
### Cloudflare R2
|
||||
|
||||
Cloudflare R2 不支持 ACL,因此需要指示 Mastodon 不尝试设置他们。 为此,需要将 `S3_PERMISSION` 环境变量设置为空字符串。
|
||||
|
||||
{{< hint style="warning" >}}
|
||||
如果不支持 ACL,被封禁的用户的媒体文件仍然可以访问。
|
||||
{{< /hint >}}
|
||||
|
||||
要获取在 Mastodon 中使用的凭据,请选择“管理 R2 API 令牌”并创建一个新的 API 令牌,具有“编辑”权限。
|
||||
|
||||
{{< hint style="warning" >}}
|
||||
本节正在建设中。
|
||||
{{< /hint >}}
|
||||
|
||||
|
||||
{{< translation-status-zh-cn raw_title="Object storage" raw_link="/admin/optional/object-storage/" last_translation_time="2025-04-06" raw_commit="5e2b739ee193896bea937addc2843146ea0bc870">}}
|
|
@ -1,13 +1,15 @@
|
|||
---
|
||||
title: 单点登录(SSO)
|
||||
title: 单点登录
|
||||
menu:
|
||||
docs:
|
||||
weight: 30
|
||||
weight: 40
|
||||
parent: admin-optional
|
||||
---
|
||||
|
||||
{{< hint style="danger" >}}
|
||||
本页面仍在建设中。
|
||||
此页面正在建设中。
|
||||
|
||||
目前,请参考[这个拉取请求](https://github.com/mastodon/mastodon/pull/16221)
|
||||
{{< /hint >}}
|
||||
|
||||
{{< translation-status-zh-cn raw_title="Single Sign On" raw_link="/admin/optional/sso/" last_tranlation_time="2020-05-04" raw_commit="ad1ef20f171c9f61439f32168987b0b4f9abd74b">}}
|
||||
{{< translation-status-zh-cn raw_title="Single Sign On" raw_link="/admin/optional/sso/" last_translation_time="2025-04-06" raw_commit="5e2b739ee193896bea937addc2843146ea0bc870">}}
|
||||
|
|
|
@ -1,31 +1,31 @@
|
|||
---
|
||||
title: 匿名服务
|
||||
description: 通过Tor的匿名服务来访问Mastodon。
|
||||
title: 洋葱服务
|
||||
description: 通过 Tor 洋葱服务提供 Mastodon 服务。
|
||||
menu:
|
||||
docs:
|
||||
weight: 20
|
||||
parent: admin-optional
|
||||
---
|
||||
|
||||
可以通过Tor的匿名服务来访问Mastodon。这将给你一个只能通过 Tor 网络连接的 \*.onion 地址。
|
||||
Mastodon 可以通过 Tor 作为洋葱服务提供服务。这将为你提供一个 `*.onion` 地址,该地址只能在连接到 Tor 网络时使用。
|
||||
|
||||
## 安装 Tor {#install}
|
||||
|
||||
首先,Tor的Debian软件仓库需要被添加至apt中。
|
||||
首先需要将 Tor 的 Debian 存储库添加到 apt 中。
|
||||
|
||||
```text
|
||||
deb https://deb.torproject.org/torproject.org stretch main
|
||||
deb-src https://deb.torproject.org/torproject.org stretch main
|
||||
```
|
||||
|
||||
接下来,添加相应gpg密钥。
|
||||
接下来添加 gpg 密钥。
|
||||
|
||||
```bash
|
||||
curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --import
|
||||
gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -
|
||||
```
|
||||
|
||||
最后,安装所需软件包。
|
||||
最后安装所需的软件包。
|
||||
|
||||
```bash
|
||||
apt install tor deb.torproject.org-keyring
|
||||
|
@ -33,10 +33,10 @@ apt install tor deb.torproject.org-keyring
|
|||
|
||||
## 配置 Tor {#configure}
|
||||
|
||||
编辑 `/etc/tor/torrc` 并添加如下设置。
|
||||
编辑 `/etc/tor/torrc` 文件并添加以下配置。
|
||||
|
||||
```text
|
||||
HiddenServiceDir /var/lib/tor/hidden_service/
|
||||
HiddenServiceDir /var/lib/tor/onion_service/
|
||||
HiddenServiceVersion 3
|
||||
HiddenServicePort 80 127.0.0.1:80
|
||||
```
|
||||
|
@ -47,34 +47,37 @@ HiddenServicePort 80 127.0.0.1:80
|
|||
sudo service tor restart
|
||||
```
|
||||
|
||||
现在,你的Tor域名可以在 `/var/lib/tor/hidden_service/hostname` 找到。
|
||||
现在你可以在 `/var/lib/tor/hidden_service/hostname` 中找到你的 Tor 主机名。
|
||||
|
||||
## 移动你的Mastodon配置 {#nginx}
|
||||
## 移动你的 Mastodon 配置 {#nginx}
|
||||
|
||||
我们将需要将你的Mastodon配置告诉Nginx两次。为了不自我重复([DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself)),我们需要将Mastodon配置移动到一个可被引用的独立文件。
|
||||
我们需要在 Nginx 中配置两次 Mastodon。为了保持["DRY"](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself)原则,我们需要将 Mastodon 配置移到自己的文件中,以便之后可以引用。
|
||||
|
||||
在 `/etc/nginx/snippets/mastodon.conf` 创建一个新文件。放入除`listen`、`server_name`、`include`及所有SSL相关选项之外的所有配置参数至新文件中。你的新文件看起来可能像这样。
|
||||
创建一个新文件 `/etc/nginx/snippets/mastodon.conf`。复制所有 Mastodon 配置参数,除了 `listen`、`server_name`、`include` 指令以及所有 SSL 选项。包含一个 `Onion-Location` 头,让支持的浏览器知道该服务也可以通过 Tor 访问。你的新文件应该看起来像这样:
|
||||
|
||||
```text
|
||||
```nginx
|
||||
add_header Referrer-Policy "same-origin";
|
||||
add_header Onion-Location mastodon.qKnFwnNH2oH4QhQ7CoRf7HYj8wCwpDwsa8ohJmcPG9JodMZvVA6psKq7qKnFwnNH2oH4QhQ7CoRf7HYj8wCwpDwsa8ohJmcPG9JodMZvVA6psKq7.onion$request_uri;
|
||||
|
||||
keepalive_timeout 70;
|
||||
sendfile on;
|
||||
client_max_body_size 80m;
|
||||
|
||||
root /home/mastodon/live/public;
|
||||
…
|
||||
|
||||
# …
|
||||
|
||||
error_page 500 501 502 503 504 /500.html;
|
||||
|
||||
access_log /var/log/nginx/mastodon_access.log;
|
||||
error_log /var/log/nginx/mastodon_error.log warn;
|
||||
```
|
||||
|
||||
替换你的旧Mastodon配置文件,在新配置文件中添加一个include指令。
|
||||
在新的配置文件中,在原来 Mastodon 配置的位置添加 `include` 指令。
|
||||
|
||||
你的Nginx配置文件将看起来像这样。
|
||||
你的 Nginx 配置文件现在应该看起来像这样:
|
||||
|
||||
```text
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name mastodon.example.com;
|
||||
|
@ -97,13 +100,15 @@ server {
|
|||
}
|
||||
```
|
||||
|
||||
## 通过http提供Tor服务 {#http}
|
||||
## 通过 HTTP 提供 Tor 服务 {#http}
|
||||
|
||||
尽管通过https提供你的Tor版Mastodon可能很诱人,但对大多数人来说这不是一个好主意。请参阅Tor Project上的[这篇](https://blog.torproject.org/facebook-hidden-services-and-https-certs)博文,了解为什么https证书无法增加价值。由于你无法获得onion域名的SSL证书,当你尝试使用你的Mastodon时还会被证书错误所困扰。最近,一位Tor开发者在[这里](https://matt.traudt.xyz/p/o44SnkW2.html)阐述了为什么通过https提供Tor服务对大多数用例都没有好处的原因。
|
||||
本节假设你希望同时在 Tor 和公共互联网上公开你的实例。
|
||||
|
||||
解决方法是通过http提供你的Mastodon服务,但仅供Tor使用。这可以通过在Nginx配置文件中添加额外的设置来完成。
|
||||
虽然通过 HTTPS 提供 Mastodon 的 Tor 版本看起来很诱人,但这并不总是理想的选择。HTTPS 证书主要对能够使用自己的公司信息生成证书的大公司有用。没有证书颁发机构(CA)能[免费](https://community.torproject.org/onion-services/advanced/https/)提供它们,Tor 项目的[一篇博客文章](https://blog.torproject.org/facebook-hidden-services-and-https-certs)也解释了为什么 HTTPS 证书对安全性并没有真正的好处。但另一方面,Mastodon 使用了大量使用到 HTTPS 的重定向,有经过验证的证书可能会使你的用户更容易在 Tor 上使用你的实例,而无需手动删除 URL 中的 `https://` 前缀。
|
||||
|
||||
```text
|
||||
在本节中,我们将介绍如何通过 HTTP 提供 Mastodon 实例,但仅限于 Tor。这可以通过在现有 Nginx 配置前添加额外配置来实现。
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name mastodon.qKnFwnNH2oH4QhQ7CoRf7HYj8wCwpDwsa8ohJmcPG9JodMZvVA6psKq7qKnFwnNH2oH4QhQ7CoRf7HYj8wCwpDwsa8ohJmcPG9JodMZvVA6psKq7.onion;
|
||||
|
@ -132,11 +137,11 @@ server {
|
|||
}
|
||||
```
|
||||
|
||||
用你位于 `/var/lib/tor/hidden_service/hostname` 文件中的长hash替换上文中提供的。
|
||||
用 `/var/lib/tor/hidden_service/hostname` 文件中的 Tor 域名替换这里提供的长哈希值。这也应该反映在 snippets 文件中的 `Onion-Location` 头中。
|
||||
|
||||
请注意,onion域名已经被附加了“mastodon.”前缀。你的Tor地址充当通配符域名。所有的子域名都将被路由,你可以配置你的Nginx来响应你想要的任何子域名。如果你不想在你的tor域名上托管任何其他服务,你可以省略子域名,或者选择一个不同的子域名。
|
||||
注意洋葱主机名前面加了 "mastodon."。你的 Tor 地址充当通配符域名。所有子域名都会被路由,你可以配置 Nginx 响应你想要的任何子域名。如果你不希望在 Tor 地址上托管任何其他服务,可以省略子域名,或选择不同的子域名。
|
||||
|
||||
这里,你就可以看出移动你的mastodon配置到不同文件的好处了。如果不移动的话,你的所有配置都必须粘贴至两个地方,任何对你配置的改动你都必须同时修改两个地方。
|
||||
现在你可以看到将 mastodon 配置移动到不同文件的好处。如果不这样做,所有配置都必须复制到两个地方。对配置的任何更改都必须在两个地方进行。
|
||||
|
||||
重启你的Web服务器。
|
||||
|
||||
|
@ -144,10 +149,11 @@ server {
|
|||
service nginx restart
|
||||
```
|
||||
|
||||
## 陷阱 {#gotchas}
|
||||
## 注意事项 {#gotchas}
|
||||
|
||||
你需要注意一些事情。某些重定向会将你的用户跳转至https。他们必须手动把URL替换成http才能继续。
|
||||
你需要注意几点事项:
|
||||
|
||||
许多的资源,诸如图片,将仍然从常规非Tor域名加载。问题的严重性很大程度上取决于用户的谨慎程度。
|
||||
- 如前所述,Mastodon前端的某些URL会强制用户使用HTTPS URL。他们必须手动将URL替换为HTTP才能继续。
|
||||
- 各种资源,如图像,仍将通过你常规的明网域名提供。这可能会成为问题,具体取决于你的用户希望、尝试或需要多高的隐私程度。
|
||||
|
||||
{{< translation-status-zh-cn raw_title="Hidden services" raw_link="/admin/optional/tor/" last_tranlation_time="2020-05-04" raw_commit="ad1ef20f171c9f61439f32168987b0b4f9abd74b">}}
|
||||
{{< translation-status-zh-cn raw_title="Onion services" raw_link="/admin/optional/tor/" last_translation_time="2025-04-06" raw_commit="5e2b739ee193896bea937addc2843146ea0bc870">}}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue