diff --git a/playbooks/roles/letsencrypt-create-certs/handlers/main.yaml b/playbooks/roles/letsencrypt-create-certs/handlers/main.yaml
index 06fe99d9c1..5a231d8fd4 100644
--- a/playbooks/roles/letsencrypt-create-certs/handlers/main.yaml
+++ b/playbooks/roles/letsencrypt-create-certs/handlers/main.yaml
@@ -240,6 +240,9 @@
 - name: letsencrypt updated mirror03-openafs-provider-opendev-org-main
   include_tasks: roles/letsencrypt-create-certs/handlers/restart_apache.yaml
 
+- name: letsencrypt updated mirror04-openafs-provider-opendev-org-main
+  include_tasks: roles/letsencrypt-create-certs/handlers/restart_apache.yaml
+
 - name: letsencrypt updated gitea99-main
   include_tasks: roles/letsencrypt-create-certs/handlers/restart_gitea.yaml
 
diff --git a/playbooks/zuul/run-base.yaml b/playbooks/zuul/run-base.yaml
index 05b2544f85..cde4585646 100644
--- a/playbooks/zuul/run-base.yaml
+++ b/playbooks/zuul/run-base.yaml
@@ -148,6 +148,7 @@
         - host_vars/mirror01.openafs.provider.opendev.org.yaml
         - host_vars/mirror02.openafs.provider.opendev.org.yaml
         - host_vars/mirror03.openafs.provider.opendev.org.yaml
+        - host_vars/mirror04.openafs.provider.opendev.org.yaml
         - host_vars/mirror-update99.opendev.org.yaml
         - host_vars/paste99.opendev.org.yaml
         - host_vars/refstack01.openstack.org.yaml
diff --git a/playbooks/zuul/templates/gate-groups.yaml.j2 b/playbooks/zuul/templates/gate-groups.yaml.j2
index ab3ab231ec..77a33da0a9 100644
--- a/playbooks/zuul/templates/gate-groups.yaml.j2
+++ b/playbooks/zuul/templates/gate-groups.yaml.j2
@@ -14,6 +14,7 @@ groups:
     - mirror01.openafs.provider.opendev.org
     - mirror02.openafs.provider.opendev.org
     - mirror03.openafs.provider.opendev.org
+    - mirror04.openafs.provider.opendev.org
 
   borg-backup-server:
     - borg-backup01.region.provider.opendev.org
diff --git a/playbooks/zuul/templates/host_vars/mirror04.openafs.provider.opendev.org.yaml.j2 b/playbooks/zuul/templates/host_vars/mirror04.openafs.provider.opendev.org.yaml.j2
new file mode 100644
index 0000000000..e13fa19bb1
--- /dev/null
+++ b/playbooks/zuul/templates/host_vars/mirror04.openafs.provider.opendev.org.yaml.j2
@@ -0,0 +1,4 @@
+letsencrypt_certs:
+  mirror04-openafs-provider-opendev-org-main:
+    - mirror04.openafs.provider.opendev.org
+    - mirror.openafs.provider.opendev.org
diff --git a/testinfra/test_mirror.py b/testinfra/test_mirror.py
index 565120e329..e44b3e28a2 100644
--- a/testinfra/test_mirror.py
+++ b/testinfra/test_mirror.py
@@ -18,7 +18,8 @@ import json
 
 testinfra_hosts = ['mirror01.openafs.provider.opendev.org',
                    'mirror02.openafs.provider.opendev.org',
-                   'mirror03.openafs.provider.opendev.org']
+                   'mirror03.openafs.provider.opendev.org',
+                   'mirror04.openafs.provider.opendev.org']
 
 def test_apache(host):
     apache = host.service('apache2')
diff --git a/zuul.d/system-config-run.yaml b/zuul.d/system-config-run.yaml
index d39b75cd96..e1c8b212aa 100644
--- a/zuul.d/system-config-run.yaml
+++ b/zuul.d/system-config-run.yaml
@@ -503,6 +503,8 @@
           label: ubuntu-focal
         - name: mirror03.openafs.provider.opendev.org
           label: ubuntu-jammy
+        - name: mirror04.openafs.provider.opendev.org
+          label: ubuntu-noble
       groups:
         - <<: *bastion_group