When I decided to rent a VPS for personal projects, I spent some time thinking about location. I ended up choosing a data center in Amsterdam. Here is how I arrived at that decision and what the setup looks like.
Why Amsterdam
A few factors made Amsterdam a good fit.
Network connectivity. Amsterdam is one of the most interconnected cities in Europe. AMS-IX is one of the largest internet exchange points in the world. In practice this means good peering, low latency to most of Western Europe, and solid routing to the rest of the world.
Infrastructure maturity. The Netherlands has a long history of hosting. The data center ecosystem is well-established, the power grid is reliable, and the legal framework around data hosting is clear and predictable.
Geographic convenience. For my use case, having the server in Western Europe made sense. Latency to where I usually connect from is consistently under 20 ms.
Picking a provider
I looked at several providers and compared them on a few criteria: price, network quality, support responsiveness, and whether they offer unmanaged plans. I prefer unmanaged because I want full control over the OS and do not need a control panel.
The specifics of which provider I chose matter less than the criteria. What I looked for:
- KVM virtualization (not OpenVZ) for full kernel access
- At least 1 GB of RAM
- SSD storage
- Unmetered bandwidth or a generous monthly allowance
- IPv4 and IPv6 support
- A clean IP reputation
I ended up with a small plan: 1 vCPU, 2 GB RAM, 40 GB SSD, running Debian 12. The monthly cost is in the range of 5 to 10 euros.
Initial setup
After provisioning, the first SSH connection:
ssh root@203.0.113.10
The first thing I do on a fresh server is update everything:
apt update && apt upgrade -y
Then create a non-root user:
adduser deploy
usermod -aG sudo deploy
Copy the SSH key to the new user:
mkdir -p /home/deploy/.ssh
cp /root/.ssh/authorized_keys /home/deploy/.ssh/
chown -R deploy:deploy /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
chmod 600 /home/deploy/.ssh/authorized_keys
At this point I switch to the new user and disable root login. But that is a topic for a separate post about security hardening.
Checking the network
A few quick checks I run on a new VPS to verify things are working as expected:
# Check the public IP
curl -4 ifconfig.me
# Test DNS resolution
dig +short example.com
# Check available bandwidth roughly
apt install -y iperf3
I also check the route to a few well-known endpoints to get a sense of how the network is peered:
traceroute -n 1.1.1.1
On this server, the route to Cloudflare’s DNS is three hops. That tells me the data center has good peering.
Resource baseline
After the initial setup and before installing anything else, I note the resource baseline:
free -h
df -h
On a fresh Debian 12 install with 2 GB of RAM, roughly 100 MB is used after boot. The base system uses about 1.5 GB of disk space. That leaves plenty of room for services.
What I run on it
Right now the server handles a few things:
- This blog (static files served by Nginx)
- A couple of small personal tools
- Automated backups to an external storage endpoint
Nothing resource-intensive. The server sits at about 5% CPU and 300 MB of RAM usage on an average day. For a small personal server, that is more than enough headroom.
Was it worth it
Compared to shared hosting or a managed platform, a VPS gives you full control at the cost of doing your own maintenance. For me that is a good trade. I learn more about how things work, I have root access when I need it, and the monthly cost is predictable.
Amsterdam specifically has been a good choice. The network quality is excellent, and I have not had any downtime issues in the time I have been running this server.