Prerequisites:
- OpenShift cluster (Local or Cloud)
oc
CLI installed- Basic access (developer/admin rights)
- DockerHub or Red Hat certified WordPress container access
- (Optional) OpenShift Web Console access
Step 1: Login to OpenShift Cluster
oc login --token=<your-token> --server=https://api.<cluster-domain>:6443
Or via the Web Console.
Step 2: Create a New Project (Namespace)
oc new-project wordpress-demo
(You can also create it from Web Console: Projects > Create Project.)
Step 3: Deploy MySQL Database (for WordPress backend)
WordPress needs a database. Letβs deploy a simple MySQL Pod + Service.
a) Create a Secret for MySQL Passwords
oc create secret generic mysql-pass --from-literal=password=Wordpress@123
b) Deploy MySQL using a Template or YAML
Hereβs a sample YAML to create MySQL:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
- name: MYSQL_DATABASE
value: wordpress
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
Apply it:
oc apply -f mysql.yaml
Now you have a MySQL backend running!
Step 4: Deploy WordPress Application
a) Deploy WordPress using YAML
Hereβs a WordPress Deployment YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
spec:
replicas: 1
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: wordpress:latest
env:
- name: WORDPRESS_DB_HOST
value: mysql
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 80
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
spec:
ports:
- port: 80
selector:
app: wordpress
Apply it:
oc apply -f wordpress.yaml
Now WordPress Pod + Service are deployed!
Step 5: Expose WordPress to Public
Expose WordPress Service via Route (URL):
oc expose service wordpress
This will automatically create a Route.
You can get the URL:
oc get route wordpress
Example output:
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
wordpress wordpress-demo.apps.cluster.com wordpress 80 None
Visit the URL in your browser β youβll see the WordPress Installation Page
Full Deployment Map:
Component | Deployed As | Notes |
---|---|---|
MySQL Database | Deployment + Service + Secret | WordPress backend |
WordPress Site | Deployment + Service + Route | Frontend exposed to public |
Final Words:
This is the simplest, fastest OpenShift WordPress demo.
For Production:
- Use Persistent Volumes (PVCs) instead of emptyDir.
- Secure MySQL and WordPress (TLS, strong passwords).
- Set Resource limits (CPU, Memory).
- Scale Replicas.
- Use OpenShift templates or Helm Charts.
Bonus: One-Line Deployment (S2I)
You can also deploy WordPress from Source using OpenShift templates:
oc new-app wordpress
Iβm a DevOps/SRE/DevSecOps/Cloud Expert passionate about sharing knowledge and experiences. I am working at Cotocus. I blog tech insights at DevOps School, travel stories at Holiday Landmark, stock market tips at Stocks Mantra, health and fitness guidance at My Medic Plus, product reviews at I reviewed , and SEO strategies at Wizbrand.
Do you want to learn Quantum Computing?
Please find my social handles as below;
Rajesh Kumar Personal Website
Rajesh Kumar at YOUTUBE
Rajesh Kumar at INSTAGRAM
Rajesh Kumar at X
Rajesh Kumar at FACEBOOK
Rajesh Kumar at LINKEDIN
Rajesh Kumar at PINTEREST
Rajesh Kumar at QUORA
Rajesh Kumar at WIZBRAND