docker部署syncthing
环境配置
新建用户组和用户 backup
groupadd backup
useradd -r -g backup backup
编排
查询用户backup的PUID和PGID
id backup
syncthing加入nextcloud网络或自定义网络
映射路径:/var/syncthing
version: '3.8'
networks:
default:
name: center
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
gateway: 172.20.0.1
#external: true开启加入已经存在网络
#external: true
services:
syncthing:
image: syncthing/syncthing
restart: unless-stopped
volumes:
- /vmw/syncthing:/var/syncthing/config
- /vmw/data:/var/syncthing/data
environment:
- PUID=34
- PGID=34
ports:
#- 8384:8384
- 22000:22000/tcp
- 22000:22000/udp
- 21027:21027/udp
expose:
- 8384
networks:
- default
healthcheck:
test: curl -fkLsS -m 2 127.0.0.1:8384/rest/noauth/health | grep -o --color=never OK || exit 1
interval: 1m
timeout: 10s
retries: 3
container_name: syncthing
hostname: syncthing
请注意,Docker 的默认网络模式会阻止本地 IP 地址 被发现,因为 Syncthing 只能看到 容器。这将导致传输速率不佳 如果未手动配置本地设备地址。172.20.0.0/16
因此,建议使用 host 网络模式:
version: "3.8"
services:
syncthing:
image: syncthing/syncthing
container_name: syncthing
hostname: syncthing
environment:
- PUID=34
- PGID=34
volumes:
- /vmw/syncthing:/var/syncthing/config
- /vmw/data:/var/syncthing/data
network_mode: host
restart: unless-stopped
healthcheck:
test: curl -fkLsS -m 2 127.0.0.1:8384/rest/noauth/health | grep -o --color=never OK || exit 1
interval: 1m
timeout: 10s
retries: 3
指定路径编排
docker-compose -f /xxx/syncthing.yml up -d
反向代理
使用nginx进行反向代理,并限制访问ip
server {
listen 8080;
server_name localhost;
location / {
proxy_pass http://syncthing:8384;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
allow 10.2.1.15;
deny all;
}
}
中继和发现服务器部署
github下载最新版本
#discosrv发现服务器
https://github.com/syncthing/discosrv/releases/
#relaysrv中继服务器
https://github.com/syncthing/relaysrv/releases/
解压
tar -zxvf strelaysrv-linux-amd64-v1.29.0-rc.1.tar.gz
tar -zxvf stdiscosrv-linux-amd64-v1.29.0-rc.1.tar.gz
拷贝放到可执行目录下
cp stdiscosrv-linux-amd64-v1.29.0-rc.1/stdiscosrv /usr/bin/
cp strelaysrv-linux-amd64-v1.29.0-rc.1/strelaysrv /usr/bin/
创建log日志文件
touch stdiscosrv.log strelaysrv.log
使用 nohup 启动
nohup stdiscosrv > stdiscosrv.log 2>&1 &
nohup strelaysrv > strelaysrv.log -pools="" 2>&1 &
随后看对应的日志文件中,有打印 ID,自行找到即可
注意,一定要去看日志,比如启动中继服务时候,要加上 -pools="",不然的话会去注册到公共的池子,加上这个之后就不会了,单单是自己私有的
放开相关端口
发现服务器:8443
中继服务器:22067 22070
dokcer部署中继和发现服务器
docker-compose编排如下
version: '3.8'
networks:
default:
name: syncthing
driver: bridge
services:
# 自建syncthing的发现服务器 discovery-servier
syncthing_discovery_server:
image: syncthing/discosrv
container_name: syncthing-discovery-server
environment:
- PUID=1000
- PGID=1000
volumes:
- /data/syncthing/discosrv:/var/stdiscosrv
ports:
- 8443:8443
restart: always
networks:
- default
# 自建syncthing的中继服务器 syncthing-relay-server
syncthing_relay_server:
image: syncthing/relaysrv:latest
container_name: syncthing-relay-server
command: -debug -pools="" -listen=":22067"
environment:
- PUID=1000
- PGID=1000
volumes:
- /data/syncthing/strelaysrv:/var/strelaysrv
ports:
- 22067:22067 # 中继服务器的数据连接端口(必须开启)
#- 22070:22070 # 用于公用的中继服务器池,显示数据传输、客户端数量等状态,可不开启
restart: always
networks:
- default
-debug:表示启动debug输出(建议开启)
-listen:表示数据监听的端口
-pools:加入的中继服务器池,若为空,则表示该为个人私有,不允许其他人使用该中继服务(建议为空)
查看ID
#查看发现服务器ID
docker logs syncthing-discovery-server
#查看中继服务器ID
docker logs syncthing-relay-server
客户端使用地址
发现服务器:discosrv
https://ip_address:port/?id=your_idc
中继服务器地址:relaysrv
relay://ip_address:port/?id=your_id
客户端配置
上面的“协议监听地址”填的是中继服务器的地址:
tcp4://0.0.0.0:22000, relay://xxx.xxx.xxx.xxx:22067/?id=your_id
也可以加上 default,中间用英文逗号分割,代表两个都用,哪个能用用哪个
下面的全局发现服务器填的是发现服务器的地址:
https://xxx.xxx.xxx.xxx:8443/?id=your_id
同样也可以加上 default,如:
https://xxx.xxx.xxx.xxx:8443/?id=your_id,default