Chanel: the Debian box that never sleeps
Every project I host ends up on one machine, and so do my photos, files, films and smart home. This is what it runs and how it's set up.
I have a Debian server that runs 24/7. Its everyday user is called chanel, and that name stuck for the whole machine. I don't sit in front of it. I reach it over SSH from my Mac, and everything I do there happens in a terminal.
mac $ ssh chanel@server chanel@server:~$ ls ~/services # one folder per thing I run
One folder per service
The rule I try to keep is simple: anything the server runs lives in ~/services, each in its own directory. When I want to know what the box is doing, I look in one place. When something breaks, I know where its files are. When I'm done with an experiment, I delete one folder.
Almost everything runs in Docker. Each folder holds a compose file and the app's data, so one service can't break another, and moving or rebuilding one is a single command.
What it actually runs
It started as a place to host my own projects. It turned into the machine that replaces most of the subscriptions and cloud services I used to pay for.
- Movies, shows and music. Plex and Jellyfin serve the library to every screen at home, with a small set of tools that keep it organised and let family request things to watch.
- Photos. Immich backs up every phone in the house automatically and uses machine learning to search by face, place or what's in the picture. It's my Google Photos replacement.
- Files and documents. Seafile syncs files between devices, Paperless-ngx turns scanned paper into searchable PDFs, and the Macs back up to it with Time Machine.
- The smart home. Home Assistant runs the house, with a Matter server so new devices just join.
- The network. Pi-hole blocks ads and trackers for every device on the Wi-Fi, before they load.
- Chat and calls. A Matrix server for messaging with video calls, ntfy for push notifications from my own scripts, and a RustDesk server so I can help family with their computers.
- Passwords. My password manager is self-hosted too, with its own automatic backups.
- The small stuff. Memos for quick notes, Ryot to track what I watch and read, LubeLogger for car maintenance, and a speed test for checking the network.
Keeping it running
A reverse proxy sits in front of the web apps and handles HTTPS certificates through Cloudflare, so each app gets a proper address instead of a port number. Containers update themselves overnight, and Duplicati backs up the important data. The goal is a machine I don't have to think about until I want to add something new.
Where it sits in my setup
My domain, khan-babayev.com, is registered with Namecheap and goes through Cloudflare. This site itself is static and hosted for free on Netlify. The server is for everything that needs to actually run: apps, APIs, background jobs. Static things go to Netlify; things with a process go to chanel.