291 words
1 minute
Server Setup - From Zero to Production
Server Setup - From Zero to Production
Setting up a server for the first time can seem scary, but it’s actually pretty straightforward.
Pick a VPS Provider
| Provider | Starting Price | Why I Like It |
|---|---|---|
| DigitalOcean | $4/month | Easy, great tutorials |
| Vultr | $2.50/month | Cheap, many locations |
| Linode | $5/month | Good performance |
| Hetzner | €3.79/month | Super cheap, EU |
Step 1: First Things First
Connect to Your Server
ssh root@your-server-ipUpdate Everything
apt update && apt upgrade -yCreate a User (Don’t Use Root!)
adduser lukkidusermod -aG sudo lukkidsu - lukkidStep 2: Lock It Down
SSH Keys (Way Safer Than Passwords)
# On your local machinessh-keygen -t ed25519 -C "lukkid@server"ssh-copy-id lukkid@your-server-ipDisable Password Login
sudo nano /etc/ssh/sshd_configPasswordAuthentication noPermitRootLogin nosudo systemctl restart sshdFirewall Setup
sudo ufw allow OpenSSHsudo ufw allow 80sudo ufw allow 443sudo ufw enableStep 3: Install the Good Stuff
Node.js
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bashsource ~/.bashrcnvm install --ltsPython
sudo apt install python3 python3-pip python3-venvNginx
sudo apt install nginxsudo systemctl enable nginxStep 4: Deploy Your App
Get Your Code
git clone https://github.com/0x90Vold/my-project.gitcd my-projectnpm installnpm run buildKeep It Running with PM2
npm install -g pm2pm2 start npm --name "my-app" -- startpm2 savepm2 startupStep 5: Nginx Config
sudo nano /etc/nginx/sites-available/my-appserver { listen 80; server_name example.com;
location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; }}sudo ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/sudo nginx -tsudo systemctl restart nginxStep 6: Free SSL with Certbot
sudo apt install certbot python3-certbot-nginxsudo certbot --nginx -d example.comDone! Free HTTPS forever.
Useful Commands to Remember
Check Logs
sudo tail -f /var/log/nginx/error.logpm2 logsjournalctl -fMonitor Stuff
df -h # disk spacefree -h # memoryhtop # processespm2 monit # your appsUpdate Your App
cd ~/my-projectgit pullnpm installnpm run buildpm2 restart my-appMy Server Checklist
- Create non-root user
- Setup SSH keys
- Disable password auth
- Enable firewall
- Install Node/Python
- Setup Nginx
- Get SSL certificate
- Setup PM2
From Termux on my phone to managing real production servers.
You can do it too!
Server Setup - From Zero to Production
https://blog.lukkid.dev/posts/server-setup/