Adding WordPress alongside your Node.js apps on the same VPS is completely straightforward, especially since you already have Nginx handling reverse proxy duties. Nginx will cleanly route domain requests: sending your Node.js traffic to its respective internal ports and serving WordPress directly via PHP-FPM.
Here is the cleanest way to set up WordPress alongside Node.js.
1. Install PHP & MySQL (If not already present)
WordPress requires PHP and a MySQL database to function.
A. Install PHP-FPM and Required Modules
Run this on your server:
Bash
sudo apt update
sudo apt install php-fpm php-mysql php-cli php-curl php-gd php-mbstring php-xml php-xmlrpc php-zip -y
Check your installed PHP version (e.g., PHP 8.1 or 8.3) to confirm the socket path:
Bash
systemctl status php*-fpm
(Take note of the PHP version, e.g., php8.1-fpm or php8.3-fpm)
B. Create a WordPress Database & User in MySQL
Log into MySQL as root or an admin user:
Bash
sudo mysql -u root -p
Run the following SQL statements to create the database and dedicated user:
SQL
CREATE DATABASE wordpress_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'YourStrongWPPassword123!';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
2. Download WordPress
Place WordPress files in /var/www/wordpress:
Bash
cd /tmp
curl -O https://wordpress.org/latest.tar.gz
tar xzvf latest.tar.gz
sudo mv wordpress /var/www/wordpress
# Set correct permissions so Nginx/PHP can write to wp-content (plugins/themes)
sudo chown -R www-data:www-data /var/www/wordpress
sudo chmod -R 755 /var/www/wordpress
3. Configure Nginx for WordPress
Create a new server block configuration for your WordPress domain/subdomain (e.g., blog.yourdomain.com or yourdomain.com).
Bash
sudo nano /etc/nginx/sites-available/wordpress
Paste the following configuration (adjust server_name and PHP version if needed):
Nginx
server {
listen 80;
server_name blog.yourdomain.com; # Or your main domain
root /var/www/wordpress;
index index.php index.html index.htm;
# Universal WordPress Permalinks support
location / {
try_files $uri $uri/ /index.php?$args;
}
# Pass PHP scripts to PHP-FPM
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock; # Ensure this matches your installed PHP version
}
# Deny access to sensitive hidden files
location ~ /\.ht {
deny all;
}
# Optimize media caching
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires max;
log_not_found off;
}
}
Enable the configuration and reload Nginx:
Bash
sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
sudo nginx -t # Tests for syntax errors
sudo systemctl reload nginx
4. Secure WordPress with SSL
Generate a free SSL certificate using Certbot:
Bash
sudo certbot --nginx -d blog.yourdomain.com
5. Complete Setup via Browser
Navigate to [https://blog.yourdomain.com](https://blog.yourdomain.com) in your browser. You will see the standard WordPress setup screen:
- Database Name:
wordpress_db - Username:
wp_user - Password:
YourStrongWPPassword123! - Database Host:
localhost - Table Prefix:
wp_(or change for added security, e.g.,wp_alphanetix_)
How This Integrates with Your System
Because Nginx manages all incoming web traffic on ports 80 and 443:
| Request Domain | Nginx Action | Target Engine |
api.yourdomain.com | proxy_pass http://localhost:3000 | Node.js (PM2) |
blog.yourdomain.com | Direct file service + FastCGI | PHP-FPM / WordPress |
Both systems operate independently without performance bottlenecks or port conflicts!