AnyType 个人NAS自托管部署教程
注意:
- 本文为非官方教程,在群晖 AnySync 部署指南基础上进行补充。为了保证教程的连续性,部分内容摘自群晖 AnySync 部署指南。
- 相比群晖 AnySync 部署指南,本教程不需要配合entware套件,无需
make命令。
参考教程
- 群辉AnySync部署指南:https://anysync.pages.dev/any-sync-deployment-tutorial-for-synology/
- 官方教程: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/域名:仅用于外网访问
部署开始
- 电脑端通过SSH连接NAS
进入安装目录
# 路径根据自己情况修改 cd /volume1/docker
下载仓库
# 方法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——电脑直接下载,下载后上传至安装目录
进入仓库目录
cd any-sync-dockercompose
配置地址监听文件
- 配置文件默认监听地址为
127.0.0.1,意味着只接受本机连接。需要通过 override 文件覆盖环境变量,修改为外部可路由的主机地址。 - 运行以下命令,然后输入内网IP(多个地址以空格分隔,如
192.168.1.100 192.168.1.101)或公网IP/域名。输入完成后,按回车键确认。rm -f .env.override read -p "Enter your host addresses (separated by spaces): " && echo EXTERNAL_LISTEN_HOSTS=$REPLY >> .env.override
- 配置文件默认监听地址为
MongoDB兼容性确认
- AnySync 依赖的 MongoDB 组件,其 5.0 以上版本要求 CPU 支持 AVX 指令集。确认机器是否兼容,以防运行失败。
- 使用该命令检测机器是否支持 AVX 指令集。输出 Yes 为支持,No 为不支持。
grep avx /proc/cpuinfo > /dev/null && echo "Yes, AVX instructions are supported." || echo "No, AVX instructions are not supported."
若上一步检测结果为“No”,按以下步骤操作
指定MongoDB版本为 4.4 版本(即最后一个不依赖 AVX 指令集的版本。当前最后一个 4.4 版本为 4.4.29,使用 4.4 可重定向到相同版本。)
echo MONGO_VERSION=4.4 >> .env.override
修改部署MongoDB相关命令行
- 5.0 以上版本 MongoDB Shell 发生了变动。由于指定了 4.4 版本,需要通过 override 文件覆盖
docker-compose.yml,将负责初始化并监视副本集状态的mongosh 命令修改为兼容的mongo 命令。 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
- 5.0 以上版本 MongoDB Shell 发生了变动。由于指定了 4.4 版本,需要通过 override 文件覆盖
手动创建容器目录
- Docker 不会为容器挂载的宿主机路径自动创建目录,此处根据
docker-compose.yml 的挂载情况手动创建。其中,etc 目录下的各个目录在最终启动后会由容器自动创建,不需要手动创建。 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
- Docker 不会为容器挂载的宿主机路径自动创建目录,此处根据
根据以上配置生成配置文件
docker buildx build --tag generateconfig-env --file Dockerfile-generateconfig-env . docker run --rm --volume ${PWD}/:/code/ generateconfig-env如果出现以下报错,需手动拉取相关镜像
docker/dockerfile:1、library/python:3.11-alpine=> ERROR resolve image config for docker-image://docker.io/docker/dockerfile:1 => ERROR [internal] load metadata for docker.io/library/python:3.11-alpine
启动服务安装
docker compose up -d如果出现以下报错,需手动拉取相关镜像
golang:1.22-alpine3.19、library/alpine:3.18.4=> 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
如果出现以下报错,更换代理可解决
=> 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 ------# 更换代理 sed -i '/^RUN go/i ENV GOPROXY=https://goproxy.cn' Dockerfile-generateconfig-anyconf
如果出现以下报错,建议修改原占用端口,而不是修改AnyType的。
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如果涉及较多的端口冲突,从以下命令中选择对应的运行(以下显示的端口为AnyType默认端口,按需修改命令后运行)
# 选择需要的命令行运行。命令运行修改后,重复从步骤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
电脑端连接
- 以下操作仅限于新用户,老用户由AnyType服务器切换至Self-Host前建议查询官方教程再操作。
- 从
any-sync-dockercompose/etc路径下载client.yml配置文件至电脑端 - 在客户端初始界面,点击右上角齿轮“⚙”。
- 切换语言至中文
- 在“网络”选项中选择“自托管(Self-Host)”,定位到之前下载的
client.yml文件。 - 保存
- 点击“新建库”,创建秘钥并复制保存(一定要保存好,其它客户端访问库必须)
- 进入初始界面,确认连接状态
手机端连接
- 将电脑端下载的
client.yml文件发送到手机端。 步骤1-步骤6与电脑端步骤相同。- 使用“我有一个密钥”(即刚才复制的秘钥)即可登录。
- 进入电脑端,确认P2P连接状态。

