Syncthing
self-hosted file synchronization tool written in go.
one server install can host, and control access to multiple shared folders.
Documentation
official docs https://docs.syncthing.net/ docs: firewall https://docs.syncthing.net/users/firewall.html docs: rest api https://docs.syncthing.net/dev/rest.html docs: cli https://docs.syncthing.net/users/syncthing.html github https://github.com/syncthing/syncthing home https://syncthing.net/
Locations
${syncthing_home}/config.xml
depending on config, maybe user-home, or daemon-home http://127.0.0.1:8384
default web-ui TCP 22000
TCP based sync UDP 22000
QUIC based sync UDP 21027
(optional) discovery broadcasts ipv4, multicast ipv6
Clients
mobius sync ios synchronization client syncthing-gtk UI/systemtray for syncthing
Configuration
Web UI
NOTE:
You don't need to expose the UI to the public facing internet, only the synchronization ports.
<configuration version="37"> <gui enabled="true" tls="true" debugging="false"> <address>127.0.0.1:8384</address> </gui> </configuration>Web API
You shouldn't change the settings files by hand while syncthing is running,
but you can use a REST-API to request that changes are made (and applied dynamically)curl -X GET -H "X-API-KEY: ${API_KEY}" "${API_URL}/${ROUTE}" curl -X GET -H "X-API-KEY: ${API_KEY}" -d @/dev/stdin "${API_URL}/${ROUTE}"
Install
pacaur -S syncthing sudo systemctl --user enable syncthing.service sudo systemctl --user start syncthing.servicepkg install syncthing # rc.conf syncthing_enable="YES" syncthing_home="/usr/local/etc/syncthing" syncthing_user="syncthing" syncthing_group="syncthing"
Usage
Sharing Device IDs
Before computers can share a folder, both must add the other's device ID.
# on one syncthing syncthing-gtk - Settings: Show ID # on the other syncthing UI: - Add Remote Device:When configuring the address, you only need to specify the sync port, not the webui.
You can also use dynamic, which will try to identify the device on your local network.
You can also use a combination of the two, connecting on your local network if available, but falling back on a public host/port.Address: tcp://foo.com:22000,dynamic # combination of sync addressesSharing Folders
After each device has added the other, you can share existing folders.
From the computer with the share, choose to share with the other.Folders: org-mode - Edit: - Tab: Sharing - Unshared Devices: - [x] your-other-device - SaveIgnore Patterns
The
.stignore
file at the root of your file share determines which files will not be synchronized.
It uses the same glob matching syntax as.gitignore
,.ignore
etc.# example: ignore-me **/*.ignore-me