重新部署 Anytype 自建服务是一个“重置环境 + 保持身份”的过程。既然你决定重新部署,为了避开之前遇到的各种权限、Redis 模块和副本集初始化坑,我为你制定了一个标准化的一键重置流程。

重新部署前的“清理与准备”

如果你要在当前 VPS 或新 VPS 上重置:

  1. 备份(可选):如果你还有任何数据想保留,请务必备份 /data 目录(尤其是 bundle-config.yml,这是你的私有网络身份)。如果你不在乎之前的笔记(因为客户端可以重新同步),可以直接删掉重来。
  2. 彻底清理:

    # 进入目录
    cd /opt/anytype
    # 停止并删除所有容器与卷
    docker compose down -v
    # 彻底清空数据目录,确保没有脏数据(注意:若要保留网络身份,请先备份 bundle-config.yml)
    rm -rf ./data/* ./mongo-data/* ./redis-data/*
    

标准化部署文件 (docker-compose.yml)

这是一个优化过、完全兼容 MongoDB 副本集自动初始化、包含 RedisBloom 模块的最新配置文件。

services:
  anytype-bundle:
    image: ghcr.io/grishy/any-sync-bundle:minimal
    container_name: anytype-bundle
    restart: always
    ports:
      - "33010:33010"
      - "33020:33020/udp"
    environment:
      # 这里填入你最终决定的域名
      - ANY_SYNC_BUNDLE_INIT_EXTERNAL_ADDRS=gate.yourdomain.com
      - ANY_SYNC_BUNDLE_INIT_MONGO_URI=mongodb://anytype-mongodb:27017/
      - ANY_SYNC_BUNDLE_INIT_REDIS_URI=redis://anytype-redis:6379/
      - ANY_SYNC_BUNDLE_LOG_LEVEL=info
    volumes:
      - ./data:/data
    depends_on:
      anytype-mongodb:
        condition: service_healthy
      anytype-redis:
        condition: service_started
    networks:
      - anytype-net

  anytype-mongodb:
    image: mongo:6.0
    container_name: anytype-mongodb
    restart: always
    # 自动开启副本集,并确保节点绑定所有接口
    command: ["mongod", "--replSet", "rs0", "--wiredTigerCacheSizeGB", "0.5", "--bind_ip_all"]
    volumes:
      - ./mongo-data:/data/db
    healthcheck:
      # 优化后的初始化逻辑,直接尝试初始化,忽略重复错误
      test: ["CMD", "mongosh", "--quiet", "--eval", "try { rs.initiate() } catch(e) {}; db.adminCommand('ping')"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 20s
    networks:
      - anytype-net

  anytype-redis:
    image: redis/redis-stack-server:latest
    container_name: anytype-redis
    restart: always
    networks:
      - anytype-net

networks:
  anytype-net:
    driver: bridge

部署与激活步骤

  1. 创建目录与设置权限(防止权限拒绝):

    mkdir -p /opt/anytype/data /opt/anytype/mongo-data /opt/anytype/redis-data
    # 将目录归属权设为容器内常用的 UID 999
    chown -R 999:999 /opt/anytype/mongo-data
    
  2. 启动服务:

    docker compose up -d
    
  3. 验证启动状态:
    查看日志,确保没有 panic,且 MongoDB 显示为 healthy:

    docker logs -f anytype-bundle
    
  4. 获取新的连接配置:
    服务启动后,它会在 ./data/ 目录下生成 client-config.yml。

    cat /opt/anytype/data/client-config.yml
    

注意:此时生成的 client-config.yml 是完全“出厂”状态的,请确保里面的 addresses 已经正确填入了你的域名。

  1. 客户端操作:
  2. 彻底清空旧客户端数据(删除 Application Support/anytype)。
  3. 打开客户端,先导入这个新的 client-config.yml。
  4. 再输入你的助记词登录。