运营 tootbot.org 的经验分享:从搭建、维护到升级
作为一个 Mastodon 联邦实例的运营者,我想分享一下自己从零搭建 tootbot.org 到日常维护、定期升级、备份策略、安全管理、资源优化以及个人对联邦宇宙的体会。
一、搭建:一切从 Docker Compose 开始
tootbot.org 的部署完全基于 Docker Compose,以下是核心服务的简化配置:
version: "2.1"
services:
db:
image: postgres:14-alpine
volumes:
- ./postgres14:/var/lib/postgresql/data
environment:
- POSTGRES_DB=mastodon
- POSTGRES_PASSWORD=${DB_PASS}
redis:
image: redis:7-alpine
volumes:
- ./redis:/data
mastodon:
image: lscr.io/linuxserver/mastodon:latest
ports:
- 1080:80
- 10443:443
volumes:
- ~/appdata/config:/config
environment:
- LOCAL_DOMAIN=tootbot.org
- REDIS_HOST=redis
- DB_HOST=db
- DB_NAME=mastodon
- DB_USER=postgres
- DB_PASS=${DB_PASS}
- SMTP_SERVER=${SMTP_SERVER}
- S3_ENABLED=${S3_ENABLED}
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
... # 其余配置略
通过 LinuxServer 的 Mastodon 镜像大大简化了配置和版本升级。
二、维护:Makefile + tootctl + gobackup
定期清理媒体文件
Mastodon 会缓存大量远端媒体,通过 tootctl
清理脚本自动化运行:
make clean-media
# 对应 Makefile 内容
clean-media:
docker exec mastodon tootctl media remove
数据库备份
使用 gobackup
工具,配置如下:
models:
mastodon_pg_backup:
schedule:
cron: "00 4 * * *"
storages:
spaces:
type: spaces
bucket: tootbot
region: ${S3_REGION}
path: postgres
databases:
tootbot_db:
type: postgresql
host: 127.0.0.1
database: mastodon
username: postgres
password: ${DB_PASS}
notifiers:
telegram:
type: telegram
chat_id: '@ttnotihub'
token: ${TG_TOKEN}
将备份推送到 DigitalOcean Spaces,保留最近 5 份。
三、升级:简单粗暴的脚本
升级脚本:
#!/bin/bash
sudo docker-compose pull
sudo docker-compose up --force-recreate --build -d
sudo docker image prune -f
执行一次,三步走完成拉取、重建、清理。
四、安全:最小暴露 + 强密码 + 备份 + 资源控制
- 端口只暴露 1080 和 10443
- 所有变量通过
.env
管理,强密码自动生成 - PostgreSQL、Redis 不对外暴露,仅容器内通信
- 所有数据定期离线备份
- 遇上故障可快速恢复,测试过的冷启动恢复时间在 10 分钟以内
五、部署平台:良心云大促买买买
没有用独立数据库服务,而是把所有服务放在一台 VPS 上。我的策略是:
- 利用腾讯云/阿里云/轻量云大促购买 1 年或者 3 年期实例
- 用 Docker Compose 快速部署
- 资源足够:目前活跃用户较少,Postgres 和 Mastodon 占用内存可控
六、联邦宇宙的体会
自己部署一个实例后,最大的感受就是:
自由地选择你想看到的信息源,而不是算法给你推荐的东西。
你可以选择 federate 哪些实例、屏蔽哪些内容,也可以自己手动关注远端用户。这种自由和透明,是中心化社交平台所没有的。
运营一个 Mastodon 实例虽然有点技术门槛,但收获远不止技术本身,而是一种更开放、更去中心的网络生活方式。
欢迎访问我的实例:https://tootbot.org
如果你也想运行一个 Mastodon 实例,欢迎交流,我乐于分享更多实践经验!