AnyType 个人NAS自托管部署教程

注意:

  1. 本文为非官方教程,在群晖 AnySync 部署指南基础上进行补充。为了保证教程的连续性,部分内容摘自群晖 AnySync 部署指南
  2. 相比群晖 AnySync 部署指南,本教程不需要配合entware套件,无需make命令。

参考教程

  1. 群辉AnySync部署指南:https://anysync.pages.dev/any-sync-deployment-tutorial-for-synology/
  2. 官方教程:https://doc.anytype.io/anytype-docs/data-and-security/self-hosting#switching-between-networks

部署平台

  • 日期:2024-11-03
  • 型号:威联通TS-466C(其它NAS需自测)
  • 系统版本:QTS 5.2.0
  • any-sync-docker-compose 版本:v6.0.0
  • Anytype 版本:Windows 0.43.4

使用效果

  • 局域网:电脑客户端与NAS服务端实现内网连接;电脑客户端与手机客户端实现P2P连接
  • 外网:电脑客户端与NAS服务端通过公网IP连接

前期准备

  • NAS(开启SSH)
  • docker、docker compose环境
  • 与NAS在同一个局域网的电脑A
  • 特殊方式,用于pull镜像。(若NAS端无法pull,可以电脑端pull后导入)
  • 公网IP/域名:仅用于外网访问

部署开始

  1. 电脑端通过SSH连接NAS
  2. 进入安装目录

    1. # 路径根据自己情况修改
      cd /volume1/docker
      
  3. 下载仓库

    1. # 方法1——git
      git clone https://github.com/anyproto/any-sync-dockercompose.git
      
      # 方法2——curl
      curl -SL https://github.com/anyproto/any-sync-dockercompose/archive/refs/heads/main.zip -o any-sync-dockercompose.zip
      7z x any-sync-dockercompose.zip
      mv any-sync-dockercompose-main any-sync-dockercompose
      rm any-sync-dockercompose.zip
      
      # 方法3——电脑直接下载,下载后上传至安装目录
      
  4. 进入仓库目录

    1. cd any-sync-dockercompose
      
  5. 配置地址监听文件

    1. 配置文件默认监听地址为 127.0.0.1​,意味着只接受本机连接。需要通过 override 文件覆盖环境变量,修改为外部可路由的主机地址。
    2. 运行以下命令,然后输入内网IP(多个地址以空格分隔,如 192.168.1.100 192.168.1.101​)或公网IP/域名。输入完成后,按回车键确认。
      1. rm -f .env.override
        read -p "Enter your host addresses (separated by spaces): " && echo EXTERNAL_LISTEN_HOSTS=$REPLY >> .env.override
        
  6. MongoDB兼容性确认

    1. AnySync 依赖的 MongoDB 组件,其 5.0 以上版本要求 CPU 支持 AVX 指令集。确认机器是否兼容,以防运行失败。
    2. 使用该命令检测机器是否支持 AVX 指令集。输出 Yes 为支持,No 为不支持。
      1. grep avx /proc/cpuinfo > /dev/null && echo "Yes, AVX instructions are supported." || echo "No, AVX instructions are not supported."
        
  7. 若上一步检测结果为“No”,按以下步骤操作

    1. 指定MongoDB版本为 4.4 版本(即最后一个不依赖 AVX 指令集的版本。当前最后一个 4.4 版本为 4.4.29,使用 4.4 可重定向到相同版本。)

      1. echo MONGO_VERSION=4.4 >> .env.override
        
    2. 修改部署MongoDB相关命令行

      1. 5.0 以上版本 MongoDB Shell 发生了变动。由于指定了 4.4 版本,需要通过 override 文件覆盖 docker-compose.yml​,将负责初始化并监视副本集状态的 mongosh​ 命令修改为兼容的 mongo​ 命令。
      2. rm -f docker-compose.override.yml
        tee -a docker-compose.override.yml <<'EOF'
        services:
          mongo-1:
            healthcheck:
              test: echo "rs.initiate({_id:'${MONGO_REPLICA_SET}',members:[{_id:0,host:\"mongo-1:${MONGO_1_PORT}\"}]}).ok || rs.status().ok" | mongo --port ${MONGO_1_PORT} --quiet
        EOF
        
  8. 手动创建容器目录

    1. Docker 不会为容器挂载的宿主机路径自动创建目录,此处根据 docker-compose.yml​ 的挂载情况手动创建。其中,etc​ 目录下的各个目录在最终启动后会由容器自动创建,不需要手动创建。
    2. mkdir -p storage storage/minio storage/redis storage/mongo-1 storage/networkStore/any-sync-coordinator storage/any-sync-node-1 storage/any-sync-node-2 storage/any-sync-node-3 storage/networkStore/any-sync-node-1 storage/networkStore/any-sync-node-2 storage/networkStore/any-sync-node-3 storage/networkStore/any-sync-consensusnode storage/networkStore/any-sync-filenode
      
  9. 根据以上配置生成配置文件

    1. docker buildx build --tag generateconfig-env --file Dockerfile-generateconfig-env .
      docker run --rm --volume ${PWD}/:/code/ generateconfig-env
      
    2. 如果出现以下报错,需手动拉取相关镜像docker/dockerfile:1library/python:3.11-alpine

      1. => ERROR resolve image config for docker-image://docker.io/docker/dockerfile:1
        
        => ERROR [internal] load metadata for docker.io/library/python:3.11-alpine
        
  10. 启动服务安装

    1. docker compose up -d
      
    2. 如果出现以下报错,需手动拉取相关镜像golang:1.22-alpine3.19library/alpine:3.18.4

      1. => ERROR [generateconfig-anyconf internal] load metadata for docker.io/library/golang:1.22-alpine3.19 
        
        => ERROR [generateconfig-processing internal] load metadata for docker.io/library/alpine:3.18.4
        
    3. 如果出现以下报错,更换代理可解决

      1. => ERROR [generateconfig-anyconf 3/4] RUN go install github.com/anyproto/any-sync-tools/anyconf@latest                                                                                                                                    33.5s 
        ------                                                                                                                                                                                                                                           
        > [generateconfig-anyconf 3/4] RUN go install github.com/anyproto/any-sync-tools/anyconf@latest:                                                                                                                                                
        32.04 go: github.com/anyproto/any-sync-tools/anyconf@latest: module github.com/anyproto/any-sync-tools/anyconf: Get "https://proxy.golang.org/github.com/anyproto/any-sync-tools/anyconf/@v/list": dial tcp 142.251.211.241:443: i/o timeout     
        ------
        
      2. # 更换代理
        sed -i '/^RUN go/i ENV GOPROXY=https://goproxy.cn' Dockerfile-generateconfig-anyconf
        
    4. 如果出现以下报错,建议修改原占用端口,而不是修改AnyType的。

      1. Error response from daemon: driver failed programming external connectivity on endpoint any-sync-dockercompose-main-any-sync-node-1-1 (986375b1e167a1b6d2eb6d8211ce3e74929d94b086347d7ec1a952f7622e9989): Bind for 0.0.0.0:8081 failed: port is already allocated
        
      2. 如果涉及较多的端口冲突,从以下命令中选择对应的运行(以下显示的端口为AnyType默认端口,按需修改命令后运行)

        1. # 选择需要的命令行运行。命令运行修改后,重复从步骤9开始操作
          echo ANY_SYNC_NODE_1_PORT=1001 >> .env.override
          echo ANY_SYNC_NODE_1_QUIC_PORT=1011 >> .env.override
          echo ANY_SYNC_NODE_2_PORT=1002 >> .env.override
          echo ANY_SYNC_NODE_2_QUIC_PORT=1012 >> .env.override
          echo ANY_SYNC_NODE_3_PORT=1003 >> .env.override
          echo ANY_SYNC_NODE_3_QUIC_PORT=1013 >> .env.override
          echo ANY_SYNC_COORDINATOR_PORT=1004 >> .env.override
          echo ANY_SYNC_COORDINATOR_QUIC_PORT=1014 >> .env.override
          echo ANY_SYNC_FILENODE_PORT=1005 >> .env.override
          echo ANY_SYNC_FILENODE_QUIC_PORT=1015 >> .env.override
          echo ANY_SYNC_CONSENSUSNODE_PORT=1006 >> .env.override
          echo ANY_SYNC_CONSENSUSNODE_QUIC_PORT=1016 >> .env.override
          echo MONGO_1_PORT=27001 >> .env.override
          echo REDIS_PORT=6379 >> .env.override
          
          #选择需要的命令块运行,其中【外端端口:内部端口】中仅修改外部端口,内部端口勿动。命令运行修改后,重复从步骤10开始操作
          
          tee -a docker-compose.override.yml <<'EOF'
          #services:
           any-sync-coordinator:
             ports:
                 - "${ANY_SYNC_COORDINATOR_PORT}:${ANY_SYNC_COORDINATOR_PORT}"
                 - "${ANY_SYNC_COORDINATOR_QUIC_PORT}:${ANY_SYNC_COORDINATOR_QUIC_PORT}/udp"
                 - 8005:8000
          EOF
          --- 这是分隔符 ---
          tee -a docker-compose.override.yml <<'EOF'
          services:
           any-sync-filenode:
             ports:
                 - "${ANY_SYNC_FILENODE_PORT}:${ANY_SYNC_FILENODE_PORT}"
                 - "${ANY_SYNC_FILENODE_QUIC_PORT}:${ANY_SYNC_FILENODE_QUIC_PORT}/udp"
                 - 8004:8000
          EOF
          --- 这是分隔符 ---
          tee -a docker-compose.override.yml <<'EOF'
          #services:
           any-sync-node-1:
             ports:
                 - "${ANY_SYNC_NODE_1_PORT}:${ANY_SYNC_NODE_1_PORT}"
                 - "${ANY_SYNC_NODE_1_QUIC_PORT}:${ANY_SYNC_NODE_1_QUIC_PORT}/udp"
                 - 8081:8080
                 - 8001:8000
          EOF
          --- 这是分隔符 ---
          tee -a docker-compose.override.yml <<'EOF'
          #services:
           any-sync-node-2:
             ports:
                 - "${ANY_SYNC_NODE_1_PORT}:${ANY_SYNC_NODE_1_PORT}"
                 - "${ANY_SYNC_NODE_1_QUIC_PORT}:${ANY_SYNC_NODE_1_QUIC_PORT}/udp"
                 - 8082:8080
                 - 8002:8000
          EOF
          --- 这是分隔符 ---
          tee -a docker-compose.override.yml <<'EOF'
          #services:
           any-sync-node-3:
             ports:
                 - "${ANY_SYNC_NODE_1_PORT}:${ANY_SYNC_NODE_1_PORT}"
                 - "${ANY_SYNC_NODE_1_QUIC_PORT}:${ANY_SYNC_NODE_1_QUIC_PORT}/udp"
                 - 8083:8080
                 - 8003:8000
          EOF
          --- 这是分隔符 ---
          tee -a docker-compose.override.yml <<'EOF'
          #services:
           any-sync-consensusnode:
             ports:
                 - "${ANY_SYNC_CONSENSUSNODE_PORT}:${ANY_SYNC_CONSENSUSNODE_PORT}"
                 - "${ANY_SYNC_CONSENSUSNODE_QUIC_PORT}:${ANY_SYNC_CONSENSUSNODE_QUIC_PORT}/udp"
                 - 8006:8000
          EOF
          

电脑端连接

  1. 以下操作仅限于新用户,老用户由AnyType服务器切换至Self-Host前建议查询官方教程再操作。
  2. any-sync-dockercompose/etc路径下载client.yml配置文件至电脑端
  3. 在客户端初始界面,点击右上角齿轮“⚙”。
  4. 切换语言至中文
  5. 在“网络”选项中选择“自托管(Self-Host)”,定位到之前下载的client.yml文件。
  6. 保存
  7. 点击“新建库”,创建秘钥并复制保存(一定要保存好,其它客户端访问库必须)
  8. 进入初始界面,确认连接状态

手机端连接

  1. 将电脑端下载的client.yml文件发送到手机端。
  2. 步骤1-步骤6与电脑端步骤相同。
  3. 使用“我有一个密钥”(即刚才复制的秘钥)即可登录。
  4. 进入电脑端,确认P2P连接状态。

results matching ""

    No results matching ""