I could have finished in five minutes with Notion. Instead I spent a hours learning what an IP address really is.
Here is how it went.
What I wanted
A fast place to dump my thoughts. Not a wiki. Not a project tool. Just a text box that saves things and lets me find them later.
Memos fit. It is a small self-hosted note app. One Docker command and it runs.
Step 1: Running Memos on my Mac
First I installed Docker Desktop from docker.com and opened it.
Then I ran one command in Terminal:
docker run -d --name memos -p 5230:5230 \
-v ~/.memos:/var/opt/memos \
neosmemo/memos:stable
What each part means:
-d— run in background--name memos— give the container a name so I can stop or restart it easily-p 5230:5230— connect port 5230 on my Mac to port 5230 inside the container-v ~/.memos:/var/opt/memos— save the notes in a folder on my Mac, so they are not lost if the container is deletedneosmemo/memos:stable— the image to download and run
Then I opened http://localhost:5230 in my browser. It worked. I made an account and wrote my first note.
For a moment I felt like a systems engineer.
Step 2: The problem
Then I asked the obvious question. What if I am not near my Mac? What if I am somewhere with only my phone?
So I tried it.
I found my Mac's IP address:
ipconfig getifaddr en0
It gave me something like 192.168.1.12.
On my phone, on the same Wi-Fi, I opened http://192.168.1.12:5230. It worked.
Then I turned off Wi-Fi and used mobile data. Nothing. Blank page.
This is where I learned my first real lesson.
192.168.x.x is a private address. It only means something inside my own home network. The moment my phone leaves the Wi-Fi, that address points nowhere.
My notes were not really "on the internet". They were on a machine in a room, reachable only by other machines in that same room.
Notion never made me think about this. That is exactly what you pay Notion for.
Step 3: More problems
Once I looked closer, more issues appeared.
The Mac sleeps. A closed laptop is an offline server. My whole setup depended on a lid staying open.
Opening it to the internet is risky. I could forward a port on my router, but that means putting a plain HTTP app on the open internet from my home connection. Bad trade for a notes app.
No official mobile app. There is Moe Memos, a good third-party app, but it still needs to reach the server. Same problem in a nicer wrapper.
At this point, the sensible move was obvious.
Step 4: I almost switched to Notion
I really thought about it.
Notion solves all of the above by simply not having those problems. Always online. Phone app works everywhere. Offline drafts sync when signal returns.
If my goal was "save notes reliably", Notion wins. Not close.
But I stopped and asked why I started this. It was not really about notes.
With Notion, there is nothing to learn. That is its best feature. For me it was the problem.
Step 5: Fixing the Mac sleep issue
First I made the Mac stay awake.
Open System Settings
Go to Battery (laptop) or Energy Saver (desktop)
Click Options
Turn on Prevent automatic sleeping when the display is off
For a MacBook, a closed lid still sleeps unless it is plugged in with an external display. So I kept a Terminal command running instead:
caffeinate -s
This stops the Mac from sleeping while it runs.
I also set Docker Desktop to start at login, and changed the container so it restarts by itself:
docker update --restart unless-stopped memos
Step 6: Reaching it from anywhere with Tailscale
Tailscale creates a small private network between my own devices. No ports opened to the internet.
On the Mac:
Install it:
brew install --cask tailscaleOr download from tailscale.com
Open the app and sign in with Google or GitHub
Once connected, it shows an IP like
100.x.y.z. That is the Mac's Tailscale address.
On the phone:
Install the Tailscale app from the App Store or Play Store
Sign in with the same account
Turn the toggle on
Then:
Open http://100.x.y.z:5230 on the phone. It works on mobile data, on hotel Wi-Fi, anywhere.
To make it nicer, I turned on MagicDNS in the Tailscale admin panel. Then I could just use http://my-mac:5230 instead of remembering numbers.
To install it like an app: open the page in Safari, tap Share, tap Add to Home Screen. Memos is a PWA, so it opens full screen like a real app.
This was the moment it clicked. My phone and Mac now had addresses on a private network built on top of the internet. That idea shows up everywhere later.
Step 7: Moving to a VPS
Tailscale fixed access. It did not fix the fact that everything still depended on my laptop being awake at home.
So I moved Memos to a small server. About $5 per month on Hetzner or DigitalOcean.
What I did:
Created the server, choosing Ubuntu
Added my SSH key during setup, so I log in with a key instead of a password
Logged in:
ssh root@my-server-ipInstalled Docker:
curl -fsSL https://get.docker.com | shTurned on the firewall and allowed only what I need:
ufw allow 22ufw allow 80ufw allow 443ufw enablePort 5230 stays closed. Only the reverse proxy talks to it.
Ran Memos, listening only on the server itself:
docker run -d --name memos --restart unless-stopped \ -p 127.0.0.1:5230:5230 \ -v ~/.memos:/var/opt/memos \ neosmemo/memos:stablePointed a domain at the server IP with an A record
Installed Caddy, which handles HTTPS certificates automatically:
apt install caddyEdited
/etc/caddy/Caddyfile:notes.mydomain.com { reverse_proxy localhost:5230}Restarted it:
systemctl restart caddy
Now https://notes.mydomain.com works from any device, with a real certificate, and no laptop involved.
Step 8: Backups
This is the part nobody writes about, and the part that actually matters.
All my notes live in one folder. So I back it up daily:
crontab -e
And added this line:
0 3 * * * tar -czf /root/memos-$(date +\%F).tar.gz /root/.memos
That makes a compressed copy every night at 3am. I also copy those files off the server, because a backup on the same machine is not really a backup.
What the friction taught me
Every wall I hit turned out to be worth hitting:
Private vs public IPs — why home devices can reach out but nothing can reach in
Why port forwarding is risky — and what you need before it is safe
What a VPN mesh does — and why it is the easy answer for personal access
Why every guide ends with "get a VPS" — a machine meant to stay on removes many problems at once
SSH keys, firewalls, reverse proxies, HTTPS, backups — the base for hosting anything else later
None of this is advanced. All of it stays invisible if you just use a hosted app.
One thing I would tell anyone doing this
Keep using Notion while you learn.
This is not a contradiction. Learning goes badly when the thing you are experimenting on is also the thing you depend on. Break the self-hosted one freely. Keep the boring one for real notes until you trust your setup.
Honest verdict
If you want a note app, use Notion. It is better at being a note app than my setup is, and it will stay that way.
I chose Memos because I wanted the problems. The notes were just the excuse.
One warning before you copy this: self-hosting something you rely on means you now own backups and updates. Set up backups on day one, not after you need them.