ProbableOdyssey | Blake Cook

How I set up my Home Server to Replace Dropbox

· 3 min read · 610 words

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:

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.conf

Then 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.1

To 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 up

Then 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 $USER

Create 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/syncthing

Run 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/syncthing

Now 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@server

Then 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 syncthing

Then 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.