WordPress + Docker + NGINX (Host) Setup on Ubuntu
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 -yStep 2: Install Docker
sudo apt install docker.io docker-compose-v2 -yEnable Docker:
sudo systemctl enable docker
sudo systemctl start dockerVerify:
docker --version
docker compose versionStep 3: Install NGINX on Host
sudo apt install nginx -yEnable NGINX:
sudo systemctl enable nginx
sudo systemctl start nginxCheck status:
sudo systemctl status nginxStep 4: Create Project Directory
mkdir ~/wordpress
cd ~/wordpressStep 5: Create Docker Compose File
Create file:
nano docker-compose.ymlPaste:
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/wordpressPermissions:
sudo chown -R $USER:$USER /var/www/wordpressStep 7: Start Containers
docker compose up -dVerify:
docker psExpected:
wordpress_app
wordpress_mysqlStep 8: Verify WordPress Files
Check:
ls -la /var/www/wordpressExpected:
index.php
wp-admin
wp-content
wp-includes
...Step 9: Configure NGINX
Create configuration:
sudo nano /etc/nginx/sites-available/wordpressPaste:
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/defaultTest:
sudo nginx -tRestart:
sudo systemctl restart nginxStep 12: Verify Site
Open:
http://SERVER_IPor
http://yourdomain.comYou should see the WordPress installation page.








