How I set up my Home Server to Replace Dropbox
Table of Contents
Setting up a home server to replace Dropbox is a project I’ve wanted to tackle for a while. I wanted to learn more about system administration and decouple my setup from platforms like Dropbox. While I don’t have anything against backing up files on someone else’s machine, the payment contract can change over time. If payments increase too much, your data becomes a hostage that can be deleted if you unsubscribe.
So: let’s try Syncthing!
There’s other projects I want to explore (which I’ll document in the coming months), but for now I want to replace Dropbox and use a home server as a dedicated node so that all frequent files can be kept in sync
First, I built a server out of old PC parts I had lying around. Parts list:
- Motherboard: MSI B450-A PRO MAX
- CPU: AMD Ryzen 7 3700X 8-Core
- RAM: 32GB DDR4 (4x8GB, 3200MHz)
- GPU: NVIDIA GeForce RTX 3090
- Boot drive: Kingston SUV400S 120GB SSD
- Storage drives: 2x Synology HAT3300 4TB (RAID1)
- PSU:: Corsair RM750x ATX Power supply
Second, I installed an OS. I chose Ubuntu 24.04 LTS because it’s stable and I wanted to keep the option of using a GUI interface available while learning the ropes
Third: I configured my two scavenged hard drives in a RAID1 setup. This will provide a bit of resilience to a single drive failure (which had happened to me before — it absolutely sucks)
# 1. Partition both drives (repeat for /dev/sdb)
sudo fdisk /dev/sda
# - n (new partition)
# - p (primary)
# - 1 (partition number)
# - accept defaults for first/last sector
# - w (write changes)
# 2. Create RAID1 array
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
# 3. Wait for sync (check with)
cat /proc/mdstat
# 4. Create filesystem
sudo mkfs.ext4 /dev/md0
# 5. Mount
sudo mkdir -p /srv/storage
sudo mount /dev/md0 /srv/storage
# 6. Get UUID
sudo blkid /dev/md0
# 7. Add to fstab (edit /etc/fstab)
UUID=your-uuid-here /srv/storage ext4 defaults,noatime 0 0
# 8. Save RAID config (so it reassembles on boot)
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.confThen it was time to make sure I had a stable ssh method. I first made sure I could communicate with it on my local network by giving the server a reserved address in the DHCP settings on my router.
ifconfig | grep 'inet ' | grep -v 127.0.0.1To enable global access, I used Tailscale for a neat existing solution I had already set up
# Install Tailscale
curl -fsSL https://tailscale.com/install.sh | sh
# Start and authenticate
sudo tailscale upThen finally, time to install syncthing and configure it!
To install Syncthing on the server, use Docker instead of installing directly on the system.
First, install Docker on the server:
# Install Docker Engine
curl -fsSL https://get.docker.com | sh
# Add your user to the docker group (optional)
sudo usermod -aG docker $USERCreate a directory for Syncthing’s configuration and make sure the data folder is accessible:
sudo mkdir -p /var/lib/syncthing
sudo chown -R $USER:$USER /var/lib/syncthingRun the Syncthing container:
docker run -d \
--name=syncthing \
--restart=unless-stopped \
-p 8384:8384 `# GUI` \
-p 22000:22000/tcp `# sync protocol` \
-p 22000:22000/udp `# sync protocol QUIC` \
-p 21027:21027/udp `# discovery` \
-v /srv/storage:/data:rw \
-v /var/lib/syncthing:/config \
syncthing/syncthingNow access the GUI. Since port 8384 is published, you can either open
http://server-ip:8384 directly (if your firewall allows) or use SSH port
forwarding:
ssh -L 8384:localhost:8384 user@serverThen open http://localhost:8384. Continue with adding folders, setting file
versioning (e.g., 30 days), and installing Syncthing on the client.
For the client, install natively as before:
sudo apt-get install syncthingThen share folders as described. And that does it!
Reply to this post by email blZake@proZbableodyssey.blog (remove Z characters) ↪
Comments
Leave a comment
Markdown is supported. Your email is private and only used if you'd like a reply.