Install Syncthing
curl -s https://syncthing.net/release-key.txt | sudo apt-key add
echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.listAdd HTTPS suport layer for apt
sudo apt-get install apt-transport-httpsContinue installation,
sudo apt-get update
sudo apt-get install syncthingSetting it up with Systemd
The official deb package ships with the required systemd file. The file syncthing@.service is located at /lib/systemd/system/. Enable syncthing to autoboot by replacing username with your username in the command below.
sudo systemctl enable syncthing@username.serviceStart the syncthing service
sudo systemctl start syncthing@username.serviceCheck its status
systemctl status syncthing@username.serviceFirewall Config
It uses port 22000 to communicate with peers, and the web UI is served on port 8384.
sudo ufw allow 22000/tcp
sudo ufw allow 8384Setup Nginx Config
Add the following to your nginx config. Replace syncthing.sahej.io with your domain name everywhere.
server {
listen 80;
server_name syncthing.sahej.io www.syncthing.sahej.io;
access_log /var/log/nginx/syncthing.access.log;
error_log /var/log/nginx/syncthing.error.log;
location / {
proxy_pass http://127.0.0.1:8384;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Generate certificates only using certbot. Change the config as shown below.
server {
listen 80;
server_name syncthing.sahej.io www.syncthing.sahej.io;
return 301 https://syncthing.sahej.io$request_uri;
}
upstream syncthing_upstream {
server 127.0.0.1:8384;
keepalive 64;
}
server {
listen 443 ssl http2;
server_name www.syncthing.sahej.io;
return 301 https://syncthing.sahej.io$request_uri;
}
server {
listen 443 ssl http2;
server_name syncthing.sahej.io;
ssl_certificate /etc/letsencrypt/live/syncthing.sahej.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/syncthing.sahej.io/privkey.pem;
access_log /var/log/nginx/syncthing.access.log;
error_log /var/log/nginx/syncthing.error.log;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://syncthing_upstream/;
proxy_redirect off;
proxy_read_timeout 240s;
}
}Setup cron Job
Setup syncthing to use certbot certs by making cron job by running crontab -e. Replace syncthing.sahej.io with your domain, and /root/.config/syncthing with path to your syncthing installation
@daily cp /etc/letsencrypt/live/syncthing.sahej.io/privkey.pem /root/.config/syncthing/https-key.pem
@daily cp /etc/letsencrypt/live/syncthing.sahej.io/fullchain.pem /root/.config/syncthing/https-cert.pemSyncthing Web UI Settings
Syncthing web UI is only accessible from localhost hostnames by default, to disable that behaviour add the following in the syncthing config.xml file, or you would get a Host check error.
<gui>
<insecureSkipHostcheck>true</insecureSkipHostcheck>
</gui>Finally, restart syncthing and reload nginx, replace username with your username
sudo systemctl restart syncthing@username.service
sudo systemctl reload nginxVisit the domain and syncthing web UI should be visible. Make sure that you setup username and password for the UI.