Sitemap
Santhosh

Santhosh

As a skilled DevOps Engineer I have a strong foundation in cloud technologies, including Azure and AWS, and extensive experience in automating deployment.

WordPress + Docker + NGINX (Host) Setup on Ubuntu

2 min readMay 29, 2026

--

Press enter or click to view image in full size

This setup uses:

  • Ubuntu Server
  • NGINX on Host Machine
  • WordPress PHP-FPM in Docker
  • MySQL in Docker
  • SSL using Let’s Encrypt (Optional)

Step 1: Update Ubuntu

sudo apt update && sudo apt upgrade -y

Step 2: Install Docker

sudo apt install docker.io docker-compose-v2 -y

Enable Docker:

sudo systemctl enable docker
sudo systemctl start docker

Verify:

docker --version
docker compose version

Step 3: Install NGINX on Host

sudo apt install nginx -y

Enable NGINX:

sudo systemctl enable nginx
sudo systemctl start nginx

Check status:

sudo systemctl status nginx

Step 4: Create Project Directory

mkdir ~/wordpress
cd ~/wordpress

Step 5: Create Docker Compose File

Create file:

nano docker-compose.yml

Paste:

services:

mysql:
image: mysql:8.0
container_name: wordpress_mysql
restart: always
environment:
MYSQL_DATABASE: wordpress_db
MYSQL_USER: wp_user
MYSQL_PASSWORD: Santhosh@29
MYSQL_ROOT_PASSWORD: Abilajesy@29
volumes:
- mysql_data:/var/lib/mysql
networks:
- wordpress_network

wordpress:
image: wordpress:php8.3-fpm
container_name: wordpress_app
restart: always
depends_on:
- mysql
environment:
WORDPRESS_DB_HOST: mysql:3306
WORDPRESS_DB_NAME: wordpress_db
WORDPRESS_DB_USER: wp_user
WORDPRESS_DB_PASSWORD: Santhosh@29
volumes:
- wordpress_data:/var/www/html
ports:
- "9000:9000"
networks:
- wordpress_network

volumes:
mysql_data:
wordpress_data:

networks:
wordpress_network:

Step 6: Create WordPress Directory

sudo mkdir -p /var/www/wordpress

Permissions:

sudo chown -R $USER:$USER /var/www/wordpress

Step 7: Start Containers

docker compose up -d

Verify:

docker ps

Expected:

wordpress_app
wordpress_mysql

Step 8: Verify WordPress Files

Check:

ls -la /var/www/wordpress

Expected:

index.php
wp-admin
wp-content
wp-includes
...

Step 9: Configure NGINX

Create configuration:

sudo nano /etc/nginx/sites-available/wordpress

Paste:

server {
listen 80;

root /var/www/wordpress;
index index.php index.html;

client_max_body_size 100M;

location / {
try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
include fastcgi_params;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param DOCUMENT_ROOT /var/www/html;
}

location ~ /\.ht {
deny all;
}
}

Important:

Get Santhosh’s stories in your inbox

Join Medium for free to get updates from this writer.

Use:

fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;

Do NOT use:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

because WordPress runs inside Docker at /var/www/html.

Step 10: Enable Site

Enable configuration:

sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/

Remove default site:

sudo rm -f /etc/nginx/sites-enabled/default

Test:

sudo nginx -t

Restart:

sudo systemctl restart nginx

Step 12: Verify Site

Open:

http://SERVER_IP

or

http://yourdomain.com

You should see the WordPress installation page.

--

--

Written by Santhosh

As a skilled DevOps Engineer I have a strong foundation in cloud technologies, including Azure and AWS, and extensive experience in automating deployment.