搬瓦工搭建 Mastodon 去中心化社交平台完整教程

Mastodon 是一款去中心化的开源社交网络平台,类似于 Twitter/X 但采用联邦式架构。每个 Mastodon 实例都是独立运营的,但通过 ActivityPub 协议可以与其他实例及 Fediverse 生态中的应用互通。部署自己的 Mastodon 实例,你可以完全掌控社交数据和内容审核规则。本文将介绍如何在搬瓦工 VPS 上通过 Docker 部署 Mastodon。

一、准备工作

1.1 系统要求

  • 操作系统:Ubuntu 20.04+(推荐 Ubuntu 22.04)。
  • 内存:至少 2GB,推荐 4GB 以上。
  • 磁盘空间:至少 20GB,媒体文件会持续增长。
  • 域名:必须使用域名,且一旦设定不可更改。
  • SMTP 邮箱:用于发送注册确认和通知邮件。
  • Docker:需提前安装,参考 Docker 安装教程

1.2 创建目录

mkdir -p /opt/mastodon
cd /opt/mastodon

二、Docker Compose 部署

2.1 创建环境变量文件

首先生成所需的密钥:

# 生成 SECRET_KEY_BASE
docker run --rm tootsuite/mastodon:latest bundle exec rake secret

# 生成 OTP_SECRET
docker run --rm tootsuite/mastodon:latest bundle exec rake secret

# 生成 VAPID 密钥
docker run --rm tootsuite/mastodon:latest bundle exec rake mastodon:webpush:generate_vapid_key

创建 .env.production 文件:

cat > .env.production <<'EOF'
LOCAL_DOMAIN=social.example.com
SINGLE_USER_MODE=false
SECRET_KEY_BASE=生成的密钥1
OTP_SECRET=生成的密钥2

VAPID_PRIVATE_KEY=生成的VAPID私钥
VAPID_PUBLIC_KEY=生成的VAPID公钥

DB_HOST=db
DB_PORT=5432
DB_NAME=mastodon
DB_USER=mastodon
DB_PASS=your_db_password

REDIS_HOST=redis
REDIS_PORT=6379

SMTP_SERVER=smtp.example.com
SMTP_PORT=587
SMTP_LOGIN=noreply@example.com
SMTP_PASSWORD=smtp_password
SMTP_FROM_ADDRESS=noreply@example.com

S3_ENABLED=false
IP_RETENTION_PERIOD=31556952
SESSION_RETENTION_PERIOD=31556952
EOF

2.2 创建 Docker Compose 文件

cat > docker-compose.yml <<'EOF'
version: '3.8'

services:
  db:
    image: postgres:16-alpine
    container_name: mastodon-db
    restart: unless-stopped
    shm_size: 256mb
    environment:
      POSTGRES_USER: mastodon
      POSTGRES_PASSWORD: your_db_password
      POSTGRES_DB: mastodon
    volumes:
      - ./postgres:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    container_name: mastodon-redis
    restart: unless-stopped
    volumes:
      - ./redis:/data

  web:
    image: tootsuite/mastodon:latest
    container_name: mastodon-web
    restart: unless-stopped
    env_file: .env.production
    command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000"
    depends_on:
      - db
      - redis
    ports:
      - "127.0.0.1:3000:3000"
    volumes:
      - ./public/system:/mastodon/public/system

  streaming:
    image: tootsuite/mastodon:latest
    container_name: mastodon-streaming
    restart: unless-stopped
    env_file: .env.production
    command: node ./streaming
    depends_on:
      - db
      - redis
    ports:
      - "127.0.0.1:4000:4000"

  sidekiq:
    image: tootsuite/mastodon:latest
    container_name: mastodon-sidekiq
    restart: unless-stopped
    env_file: .env.production
    command: bundle exec sidekiq
    depends_on:
      - db
      - redis
    volumes:
      - ./public/system:/mastodon/public/system
EOF

2.3 初始化数据库

docker compose run --rm web bundle exec rails db:setup

2.4 创建管理员账户

docker compose run --rm web tootctl accounts create admin \
  --email admin@example.com --confirmed --role Owner

2.5 启动服务

docker compose up -d

三、Nginx 反向代理

server {
    listen 443 ssl http2;
    server_name social.example.com;

    ssl_certificate /etc/letsencrypt/live/social.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/social.example.com/privkey.pem;

    client_max_body_size 80M;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /api/v1/streaming {
        proxy_pass http://127.0.0.1:4000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /system/ {
        alias /opt/mastodon/public/system/;
        expires 30d;
        add_header Cache-Control "public";
    }
}

四、实例管理

4.1 管理面板

以管理员身份登录后,点击「偏好设置」→「管理」进入管理面板。可以配置实例信息(名称、描述、规则)、注册策略(开放/需审核/关闭)和内容审核规则。

4.2 使用 tootctl 管理

# 查看用户列表
docker compose exec web tootctl accounts list

# 修改用户角色
docker compose exec web tootctl accounts modify username --role Admin

# 清理远程媒体缓存
docker compose exec web tootctl media remove --days 7

# 查看实例统计
docker compose exec web tootctl instance stats

五、联邦与互通

Mastodon 实例启动后会自动参与 Fediverse 联邦网络。你的用户可以关注任何其他实例的用户,也可以被其他实例的用户关注。联邦时间线会显示你的实例所知道的所有远程内容。

六、维护与更新

6.1 更新 Mastodon

cd /opt/mastodon
docker compose pull
docker compose run --rm web bundle exec rails db:migrate
docker compose run --rm web bundle exec rails assets:precompile
docker compose up -d

6.2 备份数据

# 备份数据库
docker exec mastodon-db pg_dump -U mastodon mastodon > mastodon-db.sql

# 备份媒体文件
tar -czf mastodon-media.tar.gz -C /opt/mastodon public/system/

6.3 定期清理

# 清理远程媒体缓存(保留 7 天)
docker compose exec web tootctl media remove --days 7

# 清理预览卡片缓存
docker compose exec web tootctl preview_cards remove --days 14

总结

Mastodon 是构建自己社交平台的优秀选择,去中心化的联邦架构让你既能独立运营又能与全球用户互通。在搬瓦工 VPS 上部署后,建议选择至少 2GB 内存的方案。如果你需要更轻量的即时通讯方案,可以参考 Matrix SynapseMattermost 教程。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的循环折扣。如遇问题,可前往 搬瓦工官网 提交工单。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。