开启 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
,修改以下行的 Xms
和 Xmx
为同一数值:
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
的移到最上面,因为 公共主机名 是有顺序的。