Everyone dreams of having their own website. This guide shows you how to set up a dynamic WordPress blog without breaking the bank—covering everything from VPS selection to SSL configuration, with costs starting around $10/year.
Unlike static site generators that complicate content updates and user interactions, this method delivers a fully functional dynamic blog. You'll need just two things: a domain name and a reliable VPS server.
First things first—you need somewhere to host your site and a name for it.
For VPS hosting, you want something affordable but dependable. A basic 1-core, 1GB RAM server runs about $10 annually and handles a personal blog just fine. Look for providers that support your preferred payment method and offer straightforward setup.
For domains, pick a registrar with transparent pricing. Don't stress too much about the domain extension—search engines don't really care if you're .com, .net, or .blog. If budget's tight, go with whatever's cheapest.
When setting up your server, stick with Debian or Ubuntu. They're stable, well-documented, and beginner-friendly. The registration process is pretty standard across providers—create an account, pick your specs, complete payment. You'll receive login credentials via email shortly after.
Download and install Xshell 8 (it's free for personal use). This terminal client lets you control your server from your computer.
When you open Xshell, create a new session. Enter your VPS IP address, set port to 22, and input the username and password your provider sent you. Hit connect.
If everything's configured correctly, you'll see a command prompt. That black screen with white text? That's your server, ready for commands.
Time to get WordPress running. Copy and paste these commands into Xshell one at a time.
Install the necessary components:
sudo apt install nginx mysql-server php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip unzip curl -y
Secure your MySQL installation:
sudo mysql_secure_installation
Follow the prompts—they're pretty self-explanatory.
Access MySQL:
sudo mysql -u root -p
Create a database for WordPress. Replace "yourpassword" with something secure—at least 8 characters mixing uppercase, lowercase, numbers, and symbols:
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'yourpassword';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Download WordPress:
cd /var/www/
sudo curl -O https://wordpress.org/latest.tar.gz
sudo tar -xzvf latest.tar.gz
sudo mv wordpress myblog
cd myblog
sudo cp wp-config-sample.php wp-config.php
Edit the config file:
sudo nano wp-config.php
Use arrow keys to navigate. Find these lines and update them with your database password:
define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'wpuser' );
define( 'DB_PASSWORD', 'yourpassword' );
Press Ctrl+X to exit, Y to save, then Enter.
Set proper permissions:
sudo chown -R www-data:www-data /var/www/myblog
Configure Nginx:
sudo nano /etc/nginx/sites-available/myblog
Paste this configuration:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
root /var/www/myblog;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Save and exit (Ctrl+X, Y, Enter).
Enable the site:
sudo ln -s /etc/nginx/sites-available/myblog /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Your domain needs to point to your server. A CDN speeds up your site and shields your server's real IP from potential attacks.
Head to Cloudflare and create a free account. Add your domain and select the free plan.
In the DNS settings, keep only two A records: one for your root domain and one for www. Both should point to your server's IP address.
Cloudflare will provide two nameserver addresses. Go to your domain registrar, find the nameserver settings, and replace the existing ones with Cloudflare's.
Now wait. DNS propagation takes anywhere from five minutes to a few hours. Keep checking your domain until you see something load—even if it's just Nginx's default page.
Once that's working, temporarily disable Cloudflare's proxy for both DNS records. Switch SSL/TLS to "Flexible" mode in Cloudflare's settings.
Back in Xshell, install SSL certificates:
sudo apt install certbot
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
Replace "yourdomain.com" with your actual domain.
Reload Nginx:
sudo systemctl reload nginx
Return to Cloudflare, re-enable the proxy, and switch SSL/TLS back to "Full" mode.
That's it—your backend is configured.
Visit your domain. WordPress will guide you through creating an admin account. Choose your language, site title, and user details. After that, you can log in anytime to manage posts and settings directly from the frontend.
Now you can start writing.
Don't skip backups. In your WordPress dashboard, go to Plugins and search for UpdraftPlus. Install and activate it.
When configuring, connect it to Google Drive (assuming you have a Google account). This way you can schedule automatic backups and restore your site with a few clicks if anything goes wrong.
This guide walked you through building a fully functional WordPress blog from scratch—from purchasing hosting to configuring SSL. The setup is straightforward, costs stay low, and you get a site that's easy to maintain and scale. With the right foundation in place, like choosing 👉 reliable VPS hosting that won't drain your wallet, you're ready to focus on what matters: creating content your readers will love.