Mastodon 进阶搭建教程(二):全文搜索与 Cloudflare Tunnel

开启 Mastodon 的搜索功能,以及结合 Cloudflare CDN 与 Tunnel 保护源服务器。

开启搜索功能

修改 docker-compose.yml,修改以下被注释的地方:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
es:
restart: always
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.4
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m -Des.enforce.bootstrap.checks=true"
- "xpack.license.self_generated.type=basic"
- "xpack.security.enabled=false"
- "xpack.watcher.enabled=false"
- "xpack.graph.enabled=false"
- "xpack.ml.enabled=false"
- "bootstrap.memory_lock=true"
- "cluster.name=es-mastodon"
- "discovery.type=single-node"
- "thread_pool.write.queue_size=1000"
networks:
- external_network
- internal_network
healthcheck:
test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"]
volumes:
- ./elasticsearch:/usr/share/elasticsearch/data
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
ports:
- '127.0.0.1:9200:9200'

编辑 .env.production,在最后加上:

1
2
3
ES_ENABLED=true
ES_HOST=es
ES_PORT=9200

重启 Docker 实例:

1
2
docker-compose down
docker-compose up -d

出现 elasticsearch 文件夹后,赋权:

1
chown 1000:1000 -R elasticsearch

再次重启:

1
2
docker-compose down
docker-compose up -d

建立搜索索引:

1
docker-compose run --rm web bin/tootctl search deploy

可能遇到的问题

虚拟内存问题

部分错误信息:

1
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

查询资料后发现是由于虚拟内存导致的,参见文档

解决方法是在宿主机执行以下指令:

1
2
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -w vm.max_map_count=262144

Java 内存分配问题

示例错误信息:

1
initial heap size [134217728] not equal to maximum heap size [536870912]; this can cause resize pauses and prevents mlockall from locking the entire heap

打开 docker-compose.yml,修改以下行的 XmsXmx 为同一数值:

1
2
3
4
5
6
es:
restart: always
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.4
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m -Des.enforce.bootstrap.checks=true"
......

设置 Cloudflare 防护

基本:使用 Cloudflare CDN 保护原站

很简单,把 Cloudflare 的小云朵打开就行。

进阶:使用 Cloudflare Tunnel 保护原站

修改 docker-compose.yml,在 service 项最下面加上:

1
2
3
4
5
6
7
8
9
10
11
services:
......
tunnel:
image: cloudflare/cloudflared
restart: always
command: tunnel --no-autoupdate run --token <token>
depends_on:
- mastodon-web
networks:
- mastodon-network
......

打开 Cloudflare One 面板,找到你的 Tunnel,添加以下两个公共主机名

  • 域为你部署 Mastodon 的域,类型选择 HTTP,URL 填写 mastodon-web:3000,HTTP 设置中设置 HTTP 主机头为你的域。
  • 域为你部署 Mastodon 的域,路径填写 api/v1/streaming,类型选择 HTTP,URL 填写 mastodon-streaming:4000,HTTP 设置中设置 HTTP 主机头为你的域。

然后将服务为 http://mastodon-streaming:4000 的移到最上面,因为 公共主机名 是有顺序的。


Mastodon 进阶搭建教程(二):全文搜索与 Cloudflare Tunnel
https://blog.byteloid.one/2024/12/27/mastodon第二部分/
作者
bingxin666
发布于
2024年12月28日
许可协议