在线统计

在线会员
0
在线游客
23
会员总计
23
  • 游客:您有一个20余烬兑换码:202506015318有效期7天.请尽快兑换.

什么是 Mastodon?

Mastodon 网站可以单独运行。就像传统网站一样,人们在上面注册、发布消息、上传图片并相互交谈

什么是Mastodon?​


与博客向网站发布更新的行为类似, 微博是将小更新发布到您个人资料上的更新流的行为。您可以发布文本帖子,并选择性地附加媒体,例如图片、音频、视频或投票。Mastodon 可让您关注朋友并发现新朋友。

什么是联合身份验证?​


Federation 是去中心化的一种形式。不是所有人都使用的单个中央服务,而是任意数量的人都可以使用的多个服务。

集中化等级例子
集中推特、脸书、Instagram
联邦电子邮件、XMPP、电话网络、物理邮件
分散式BitTorrent、IPFS、Scuttlebutt

Mastodon 网站可以单独运行。就像传统网站一样,人们在上面注册、发布消息、上传图片并相互交谈。 与传统网站不同 ,Mastodon 网站可以互作,让用户相互交流;就像您可以从您的 Gmail 帐户向 Outlook、Fastmail、Protonmail 或任何其他电子邮件提供商的某人发送电子邮件一样,只要您知道他们的电子邮件地址, 您就可以使用他们的地址在任何网站上提及或向任何人发送消息
1750649129844.webp

什么是 ActivityPub?​


Mastodon 使用标准化的开放协议来实现联合。它称为 ActivityPub。任何同样通过 ActivityPub 实现联合的软件都可以与 Mastodon 无缝通信,就像 Mastodon 网站相互通信一样。

  • fediverse (“联合宇宙”) 是可以通过 ActivityPub 和万维网相互通信的所有网站的名称。这包括所有 Mastodon 服务器,但也包括其他实现:
  • Pleroma,一个模块化的微博引擎
  • Pixelfed,联合图像共享平台,可让您共享和使用媒体帖子
  • Misskey,其中包括微博和可定制的仪表板
  • PeerTube,可让您将视频上传到频道
  • Plume,允许您发布较长格式的文章还有更多,包括个人和个人网站!
  • fediverse 没有自己的品牌,所以你可能更经常听到 “follow me on the Mastodon” 而不是 “follow me on the fediverse”,但从技术上讲,后者更正确。

实际意义​


因为 Mastodon 只是一个可以用来驱动任何网站的软件,所以 Mastodon 的潜在用户可以选择从现有的 Mastodon 网站中选择服务提供商,或者如果他们愿意,可以创建自己的 Mastodon 网站。Mastodon 项目在 joinmastodon.org 上维护着一个推荐的服务提供商列表,可以按类别和/或语言排序。一些网站可能有超出此范围的审核政策,例如要求在潜在的敏感内容上使用某些标签,有些网站可能有更宽松的审核政策,但选择器中列出的网站都同意采用 Mastodon 服务器契约 ,这意味着他们承诺积极审核仇恨言论,每天进行备份, 至少有一名紧急管理员,并在关闭时至少提前 3 个月提供通知。

维护所有成员都感到安全的社区并不容易。Mastodon 提供了许多基础框架和工具来实现这一点,并将影响变革的权力从一个商业实体转移到社区本身。

准备您的机器

如果要设置新计算机,建议您先保护它。假设您运行的是 Ubuntu 22.04:

禁止密码登录SSH(仅允许密钥登录)

首先,确保您实际上是使用密钥而不是密码登录服务器,否则,这将锁定您。许多托管服务提供商支持上传公钥,并在新计算机上自动为您设置基于密钥的 root 登录。

编辑 /etc/ssh/sshd_config 并找到 PasswordAuthentication。确保它未注释并设置为 no。如果您进行了任何更改,请重新启动 sshd:
XML:
systemctl restart ssh.service

更新系统软件包​

XML:
apt update && apt upgrade -y

安装 fail2ban 以阻止重复的登录尝试

首先,安装 fail2ban:
Bash:
apt install fail2ban

编辑 /etc/fail2ban/jail.local 并放入以下内容:

Bash:
[DEFAULT]

destemail = [email protected]

sendername = Fail2Ban

[sshd]

enabled = true

port = 22

mode = aggressive

最后,重新启动 fail2ban:
Bash:
systemctl restart fail2ban

安装防火墙,仅允许 SSH、HTTP 和 HTTPS 端口

首先,安装 iptables-persistent。在安装过程中,它会询问您是否要保留当前规则 – decline。

代码:
apt install -y iptables-persistent

编辑 /etc/iptables/rules.v4 并放入以下内容:

代码:
*filter



#  Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0

-A INPUT -i lo -j ACCEPT

-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT



#  Accept all established inbound connections

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT



#  Allow all outbound traffic - you can modify this to only allow certain traffic

-A OUTPUT -j ACCEPT



#  Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).

-A INPUT -p tcp --dport 80 -j ACCEPT

-A INPUT -p tcp --dport 443 -j ACCEPT

#  (optional) Allow HTTP/3 connections from anywhere.

-A INPUT -p udp --dport 443 -j ACCEPT



#  Allow SSH connections

#  The -dport number should be the same port number you set in sshd_config

-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT



#  Allow ping

-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT



# Allow destination unreachable messages, especially code 4 (fragmentation required) is required or PMTUD breaks

-A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT



#  Log iptables denied calls

-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7



#  Reject all other inbound - default deny unless explicitly allowed policy

-A INPUT -j REJECT

-A FORWARD -j REJECT



COMMIT

使用 iptables-persistent,该配置将在启动时加载。但是由于我们现在没有重启,因此我们需要第一次手动加载它:

代码:
iptables-restore < /etc/iptables/rules.v4

如果您的服务器也可以通过 IPv6 访问,请编辑 /etc/iptables/rules.v6 并在其中添加以下内容:

代码:
*filter



#  Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0

-A INPUT -i lo -j ACCEPT

-A INPUT ! -i lo -d ::1/128 -j REJECT



#  Accept all established inbound connections

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT



#  Allow all outbound traffic - you can modify this to only allow certain traffic

-A OUTPUT -j ACCEPT



#  Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).

-A INPUT -p tcp --dport 80 -j ACCEPT

-A INPUT -p tcp --dport 443 -j ACCEPT

#  (optional) Allow HTTP/3 connections from anywhere.

-A INPUT -p udp --dport 443 -j ACCEPT



#  Allow SSH connections

#  The -dport number should be the same port number you set in sshd_config

-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT



#  Allow ping

-A INPUT -p icmpv6 -j ACCEPT



#  Log iptables denied calls

-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7



#  Reject all other inbound - default deny unless explicitly allowed policy

-A INPUT -j REJECT

-A FORWARD -j REJECT



COMMIT

iptables-persistent 将在机器启动时自动加载配置。但是由于我们现在不会立刻重启,我们需要第一次手动加载它:

代码:
iptables-restore < /etc/iptables/rules.v4

从源中安装

前提条件​

  • 一台你有root访问权限的运行 Ubuntu 18.04 的机器
  • 一个用于Mastodon站点的域名(或一个子域名),例如:example.com
  • 一个电子邮件发送服务提供商,或其他SMTP服务器
你需要使用root用户运行命令。如果你现在不是root用户,请切换至root用户:

软件仓库​


首先确保已经安装curl:

Node.js​

代码:
curl -sL https://deb.nodesource.com/setup_12.x | bash -

yam​


代码:
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list

软件包​

代码:
apt update

apt install -y \

  imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git-core \

  g++ libprotobuf-dev protobuf-compiler pkg-config nodejs gcc autoconf \

  bison build-essential libssl-dev libyaml-dev libreadline6-dev \

  zlib1g-dev libncurses5-dev libffi-dev libgdbm5 libgdbm-dev \

  nginx redis-server redis-tools postgresql postgresql-contrib \

  certbot python-certbot-nginx yarn libidn11-dev libicu-dev libjemalloc-dev

安装 Ruby

因为使用 rbenv 可以更容易的获得正确的版本并在新版本发布后进行更新,我们将使用 rbenv 来管理Ruby版本。rbenv 必须安装在单个Linux用户中,因此,我们首先需要使用以下命令创建一个Mastodon用户:

代码:
adduser --disabled-login mastodon

切换到mastodon用户:

代码:
su - mastodon

执行以下步骤安装 rbenv 和 rbenv-build:

代码:
git clone https://github.com/rbenv/rbenv.git ~/.rbenv

cd ~/.rbenv && src/configure && make -C src

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc

echo 'eval "$(rbenv init -)"' >> ~/.bashrc

exec bash

git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

上述操作完成,我们便可以安装正确的 Ruby 版本:

代码:
RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 2.6.6
rbenv global 2.6.6

我们同样需要安装 bundler:

代码:
gem install bundler --no-document

返回root用户:

代码:
exit

配置​


配置 PostgreSQL​

性能调优(可选)​

为了优化性能,你可以使用 pgTune 生成一个合适的配置文件。编辑 /etc/postgresql/9.6/main/postgresql.conf 中的相应数值并使用 systemctl restart postgresql 命令重启 PostgreSQL。

创建帐户​

你需创建一个供Mastodon使用的PostgreSQL帐户。创建一个使用“ident”认证方式的帐户是最容易的配置方法,即PostgreSQL帐户不需要独立的密码并由同名Linux用户使用。

打开控制台:

代码:
sudo -u postgres psql

在控制台中执行:

代码:
CREATE USER mastodon CREATEDB;
\q

完成!

配置 Mastodon​

现在该下载Mastodon代码了。切换至mastodon用户:su - mastodon

检出代码​

使用git下载最新稳定版Mastodon:

代码:
git clone https://github.com/mastodon/mastodon.git live && cd live
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)

安装依赖​

现在,安装Ruby和JavaScript依赖:

代码:
bundle config deployment 'true'

bundle config without 'development test'

bundle install -j$(getconf _NPROCESSORS_ONLN)

yarn install --pure-lockfile

两个bundle config命令仅仅第一次安装依赖时需要。如果你之后进行升级或重安装依赖,只需要bundle install就够了。

生成配置文件​

运行交互式安装向导:RAILS_ENV=production bundle exec rake mastodon:setup

它将:

  • 创建一个配置文件
  • 预编译静态文件
  • 创建数据库schema
配置文件被保存在.env.production。如果你愿意的话,你可以查看并编辑这个文件。请参阅配置文件的文档

你已经完成需使用mastodon用户进行的操作,请切换回root用户:exit

配置 nginx​

从Mastodon目录复制配置文件模版到nginx:

代码:
cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon
ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon

编辑 /etc/nginx/sites-available/mastodon

  1. 替换 example.com 为你自己的域名
  2. 启用 ssl_certificate 和 ssl_certificate_key 这两行,并把它们替换成如下两行(如果你使用自己的证书的话则可以忽略这一步)
代码:
ssl_certificate     /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;

  1. 你还可以根据自己的需求做出其它的一些调整。
重载 nginx 以使变更生效:

获取SSL证书​

我们将使用 Let’s Encrypt 获取一个免费的SSL证书:certbot --nginx -d example.com

这个命令将获取一个证书,自动更新 /etc/nginx/sites-available/mastodon 以使用新证书并重载nginx以使变更生效。

现在你应该能够通过浏览器访问你的域名,然后看到一只大象锤击电脑屏幕的错误页面。这是因为我们还没有启动Mastodon进程。

配置 systemd 服务​

从Mastodon目录复制systemd服务模版:cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/

然后修改以下文件,以保证用户名与路径是正确的:

  • /etc/systemd/system/mastodon-web.service
  • /etc/systemd/system/mastodon-sidekiq.service
  • /etc/systemd/system/mastodon-streaming.service
最后,启动新systemd服务并将该服务设为开机自动激活:

代码:
systemctl daemon-reload
systemctl start mastodon-web mastodon-sidekiq mastodon-streaming
systemctl enable mastodon-*

他们将在开机启动时自动开始运行。

设置你的环境

Mastodon使用环境变量作为其的配置。

为了方便起见,Mastodon从Mastodon目录中的 .env.production 文件读取环境变量,但是始终可以用特定方式覆盖它们。例如:在 systemd service 文件中可以使用 EnvironmentFile 从特定文件中读取环境变量或使用 Environment 定义环境变量,因此你可以为不同服务指定不同的环境变量。也可以在从命令行调用运行Mastodon时指定环境变量。

基本参数​


站点互联​

  • LOCAL_DOMAIN
  • WEB_DOMAIN
  • ALTERNATE_DOMAINS

AUTHORIZED_FETCH​

当设置为 true 时,Mastodon将停止内联签名活动,并要求远程服务器在拉取公开(public)和不公开(unlisted)的嘟文时进行身份验证。

这可以阻止被屏蔽的域名拉取你的公开嘟文,但代价是可能增加计算量,并与不支持附带签名的拉取请求的软件不兼容(如低于3.0版本的Mastodon)。

请注意:这个模式并不能保证你的公开嘟文(public、unlisted)不被恶意操作者获取,这仅仅是增加了一点难度。

WHITELIST_MODE​

当设置为 true 时,Mastodon将仅与白名单内的服务器互联,同时关闭公开页面和一些客户端API。 白名单模式会启用 authorized fetch 模式。

当一个现存实例站点切换至白名单模式,以下命令可以被用来移除非白名单站点的数据:tootctl domain purge --whitelist-mode

请注意:虽然Mastodon 3.0 版本便引入了白名单模式 WHITELIST_MODE,但在Mastodon 3.0和3.0.1版中并没有正确实现。

密钥​

  • SECRET_KEY_BASE
  • OTP_SECRET
  • VAPID_PRIVATE_KEY
  • VAPID_PUBLIC_KEY

部署​

  • RAILS_ENV
  • RAILS_SERVE_STATIC_FILES
  • RAILS_LOG_LEVEL
  • TRUSTED_PROXY_IP
  • SOCKET
  • PORT
  • NODE_ENV
  • BIND

缩放选项​

  • WEB_CONCURRENCY
  • MAX_THREADS
  • PREPARED_STATEMENTS
  • STREAMING_API_BASE_URL
  • STREAMING_CLUSTER_NUM

数据库连接​


PostgreSQL​

  • DB_HOST
  • DB_USER
  • DB_NAME
  • DB_PASS
  • DB_PORT
  • DB_SSLMODE
  • DATABASE_URL

Redis​

  • REDIS_HOST
  • REDIS_PORT
  • REDIS_URL
  • REDIS_NAMESPACE
  • CACHE_REDIS_HOST
  • CACHE_REDIS_PORT
  • CACHE_REDIS_URL
  • CACHE_REDIS_NAMESPACE

Elasticsearch​

  • ES_ENABLED
  • ES_HOST
  • ES_PORT
  • ES_PREFIX

StatsD​

  • STATSD_ADDR
  • STATSD_NAMESPACE

限制​

  • SINGLE_USER_MODE
  • EMAIL_DOMAIN_WHITELIST
  • DEFAULT_LOCALE
  • MAX_SESSION_ACTIVATIONS
  • USER_ACTIVE_DAYS

电子邮件​

  • SMTP_SERVER
  • SMTP_PORT
  • SMTP_LOGIN
  • SMTP_PASSWORD
  • SMTP_FROM_ADDRESS
  • SMTP_DOMAIN
  • SMTP_DELIVERY_METHOD
  • SMTP_AUTH_METHOD
  • SMTP_CA_FILE
  • SMTP_OPENSSL_VERIFY_MODE
  • SMTP_ENABLE_STARTTLS_AUTO
  • SMTP_TLS

文件存储​

  • CDN_HOST
  • S3_ALIAS_HOST

本地文件存储​

  • PAPERCLIP_ROOT_PATH
  • PAPERCLIP_ROOT_URL

Amazon S3 及其兼容存储​

  • S3_ENABLED
  • S3_BUCKET
  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • S3_REGION
  • S3_PROTOCOL
  • S3_HOSTNAME
  • S3_ENDPOINT
  • S3_SIGNATURE_VERSION
  • S3_BATCH_DELETE_LIMIT
  • S3_BATCH_DELETE_RETRY

Swift​

  • SWIFT_ENABLED
  • SWIFT_USERNAME
  • SWIFT_TENANT
  • SWIFT_PASSWORD
  • SWIFT_PROJECT_ID
  • SWIFT_AUTH_URL
  • SWIFT_CONTAINER
  • SWIFT_OBJECT_URL
  • SWIFT_REGION
  • SWIFT_DOMAIN_NAME
  • SWIFT_CACHE_TTL

外部认证​

  • OAUTH_REDIRECT_AT_SIGN_IN

LDAP​

  • LDAP_ENABLED
  • LDAP_HOST
  • LDAP_PORT
  • LDAP_METHOD
  • LDAP_BASE
  • LDAP_BIND_DN
  • LDAP_PASSWORD
  • LDAP_UID
  • LDAP_SEARCH_FILTER

PAM​

  • PAM_ENABLED
  • PAM_EMAIL_DOMAIN
  • PAM_DEFAULT_SERVICE
  • PAM_CONTROLLED_SERVICE

CAS​

  • CAS_ENABLED
  • CAS_URL
  • CAS_HOST
  • CAS_PORT
  • CAS_SSL
  • CAS_VALIDATE_URL
  • CAS_CALLBACK_URL
  • CAS_LOGOUT_URL
  • CAS_LOGIN_URL
  • CAS_UID_FIELD
  • CAS_CA_PATH
  • CAS_DISABLE_SSL_VERIFICATION
  • CAS_UID_KEY
  • CAS_NAME_KEY
  • CAS_EMAIL_KEY
  • CAS_NICKNAME_KEY
  • CAS_FIRST_NAME_KEY
  • CAS_LAST_NAME_KEY
  • CAS_LOCATION_KEY
  • CAS_IMAGE_KEY
  • CAS_PHONE_KEY

SAML​

  • SAML_ENABLED
  • SAML_ACS_URL
  • SAML_ISSUER
  • SAML_IDP_SSO_TARGET_URL
  • SAML_IDP_CERT
  • SAML_IDP_CERT_FINGERPRINT
  • SAML_NAME_IDENTIFIER_FORMAT
  • SAML_CERT
  • SAML_PRIVATE_KEY
  • SAML_SECURITY_WANT_ASSERTION_SIGNED
  • SAML_SECURITY_WANT_ASSERTION_ENCRYPTED
  • SAML_SECURITY_ASSUME_EMAIL_IS_VERIFIED
  • SAML_ATTRIBUTES_STATEMENTS_UID
  • SAML_ATTRIBUTES_STATEMENTS_EMAIL
  • SAML_ATTRIBUTES_STATEMENTS_FULL_NAME
  • SAML_ATTRIBUTES_STATEMENTS_FIRST_NAME
  • SAML_ATTRIBUTES_STATEMENTS_LAST_NAME
  • SAML_UID_ATTRIBUTE
  • SAML_ATTRIBUTES_STATEMENTS_VERIFIED
  • SAML_ATTRIBUTES_STATEMENTS_VERIFIED_EMAIL

隐藏服务​

  • http_proxy
  • ALLOW_ACCESS_TO_HIDDEN_SERVICE

其它​

  • SKIP_POST_DEPLOYMENT_MIGRATIONS

配置全文搜索

设置 Elasticsearch 以搜索状态(authored、favorites 或 mentioned)、公有可索引状态和帐户

当 Elasticsearch 可用时,Mastodon 支持全文搜索。强烈建议配置此功能。

Mastodon 的全文搜索允许登录用户从以下位置查找结果:

  • 选择显示在搜索结果中的账户的公开状态
  • 他们自己的状态
  • 他们的提及
  • 他们的最爱
  • 他们的书签
  • 帐户(显示名称、用户名和 BIOS)
它故意不允许在整个数据库中搜索任意字符串。

安装 Elasticsearch​

Mastodon 使用 Elasticsearch 版本 7 进行了测试。它应该支持 OpenSearch 以及 Elasticsearch 版本 6 和 8,但这些设置不受官方支持。

将官方 Elasticsearch 仓库添加到 apt:

代码:
wget -O /usr/share/keyrings/elasticsearch.asc https://artifacts.elastic.co/GPG-KEY-elasticsearch
echo "deb [signed-by=/usr/share/keyrings/elasticsearch.asc] https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7.x.list

现在您可以安装 Elasticsearch:

代码:
apt update
apt install elasticsearch

安全警告:默认情况下,Elasticsearch 应该只绑定到 localhost,即无法从外部网络访问。您可以通过查看 /etc/elasticsearch/elasticsearch.yml 中的 network.host 来检查 Elasticsearch 绑定到哪个地址。考虑到任何可以访问 Elasticsearch 的人都可以访问和修改其中的任何数据,因为没有身份验证层。因此,确保访问的安全性非常重要。建议使用仅暴露 22、80 和 443 端口的防火墙,如主要安装说明中所述。如果您有多主机设置,则必须知道如何保护内部流量。

启动Elasticsearch:

代码:
systemctl daemon-reload
systemctl enable --now elasticsearch

配置 Mastodon​


编辑.env.production添加以下变量:

代码:
ES_ENABLED=true
ES_HOST=localhost
ES_PORT=9200
ES_PRESET= # single_node_cluster, small_cluster or large_cluster
# ES_USER=
# ES_PASS=

Note :如果使用TLS,请使用https://预留主机名。例如:https://elastic.example.com。

选择正确的预设​

ES_PRESET取决于您的elasticsearch的大小,并将用于设置索引的碎片和副本的数量,以使您的设置为最佳值:

  • single_node_cluster如果您的elasticsearch群集中只有一个节点。索引将被配置而没有任何副本
  • small_cluster如果群集中的节点少于6个节点。索引将配置为1个复制品
  • large_cluster如果群集中有6个或更多节点。与small_cluster设置相比,索引将配置更多的碎片,以允许它们通过更多节点分布
如果您在同一台计算机上有多个MASTODON服务器,并且计划为所有机器使用相同的ElasticSearch安装,请确保所有这些服务器都具有唯一的REDIS_NAMESPACE,以区分工具。如果您需要覆盖Elasticsearch Indices的前缀,则可以直接设置ES_PREFIX。

安全​

默认情况下,Elasticsearch不处理任何身份验证,并且每个请求均通过完整的管理权制定。我们强烈建议您在群集上配置Elasticsearch安全功能。

要配置它,请参考<SD1>官方文档。它将指导您:

  • 启用安全功能(xpack.security.enabled: true)
  • 为内置用户创建密码
完成后,您可以为Mastodon创建一个自定义角色。

例如(请调整此片段以使用弹性管理密码):

代码:
curl -X POST -u elastic:admin_password "localhost:9200/_security/role/mastodon_full_access?pretty" -H 'Content-Type: application/json' -d'
{
  "cluster": ["monitor"],
  "indices": [{
    "names": ["*"],
    "privileges": ["read", "monitor", "write", "manage"]
  }]
}
'

用于创建角色的 Elasticsearch 文档

创建角色后,你可以创建一个用户供 Mastodon 服务器使用,并为其分配角色。

例如(请调整此代码段以使用您的 Elastic 管理员密码,并自定义您的新用户 mastodon 用户密码):

代码:
curl -X POST -u elastic:admin_password "localhost:9200/_security/user/mastodon?pretty" -H 'Content-Type: application/json' -d'
{
  "password" : "l0ng-r4nd0m-p@ssw0rd",
  "roles" : ["mastodon_full_access"]
}
'

用于创建用户的 Elasticsearch 文档

完成此作后,你需要配置 Mastodon 以使用新创建的用户的凭据。

在 .env.production 中,调整您的配置

代码:
ES_USER=mastodon
ES_PASS=l0ng-r4nd0m-p@ssw0rd

一切就绪,您的 Elasticsearch 服务器应该会更加安全!

填充索引​


保存新配置后,重新启动 Mastodon 进程以使其生效:

代码:
su - mastodon
cd live
RAILS_ENV=production bin/tootctl search deploy

创建Elasticsearch指出,可能需要比JVM(Java Virtual Machine)更多的内存。如果Elasticsearch在创建指示时崩溃,请尝试分配更多内存。

  1. 在目录中创建并打开一个文件/etc/elasticsearch/jvm.options.d/(例如:nano /etc/elasticsearch/jvm.options.d/ram.options)
  2. 添加以下文本并为您的需求编辑分配的内存。根据经验,Elasticsearch应使用约25%-50%的可用内存。不要分配比可用的更多的内存。
代码:
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
# Both values should be the same
-Xms2048m
-Xmx2048m

  1. 保存文件。
  2. 使用systemctl restart elasticsearch。
  3. 重试创建Elasticsearch指示。如果Elasticsearch仍在崩溃,请尝试设置更高的数字。

其他语言的搜索优化​


中文搜索优化​


标准分析仪是Elasticsearch的默认设备,但是对于某些语言,例如中文可能不是最佳选择。为了增强搜索体验,请考虑安装特定语言的分析仪。在Elasticsearch创建索引之前,请确保安装以下扩展名:

然后修改Mastodon的索引定义如下:
Git:
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: {

评论

目前没有任何评论.

笔记文章信息

作者
波坤太叔
查看
177
最后更新

More entries in 经验折腾

More entries from 波坤太叔

分享此笔记

社区
规则 帮助 用户
  • 目前没有人在聊天。
  • 波坤太叔 @ 波坤太叔:
    @dindacantik2 有安装说明文档
  • 波坤太叔 @ 波坤太叔:
    (AI 提示) 如何部署 cloudflare 与 xenforo 的 Workers
  • DeepSeek @ DeepSeek:
    @波坤太叔, # 部署 Cloudflare Workers 与 XenForo 的集成指南

    要将 Cloudflare Workers 与 XenForo 论坛软件集成,您可以按照以下步骤操作:

    ## 基本设置步骤

    1. **准备工作**
    - 确保您拥有 Cloudflare 账户且您的域名已通过 Cloudflare 管理
    - 拥有 XenForo 管理员权限

    2. **创建 Cloudflare Worker**
    - 登录 Cloudflare 仪表板
    - 导航
  • W @ William:
    这是deepseek吗
  • 波坤太叔 @ 波坤太叔:
    William 说:
    这是deepseek吗
    是的
  • 狼哥 狼哥:
    William 已离开房间。
      狼哥 狼哥: William 已离开房间。
      Cart