{"id":348,"date":"2026-04-09T13:21:19","date_gmt":"2026-04-09T03:21:19","guid":{"rendered":"https:\/\/www.the-bach.kiwi\/?page_id=348"},"modified":"2026-05-16T14:10:41","modified_gmt":"2026-05-16T04:10:41","slug":"site-setup-process-guide","status":"publish","type":"page","link":"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/","title":{"rendered":"Site Setup Process Guide"},"content":{"rendered":"\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_83 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title ez-toc-toggle\" style=\"cursor:pointer\">Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#A-repeatable-framework-for-launching-WordPress-sites-on-my-infrastructure\" >A repeatable framework for launching WordPress sites on my infrastructure<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#%F0%9F%A7%AD-Overview\" >\ud83e\udded Overview<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#%F0%9F%A7%B1-High-Level-Flow\" >\ud83e\uddf1 High-Level Flow<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#%E2%9A%A1-Quick-Start\" >\u26a1 Quick Start<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#%F0%9F%A7%A0-Site-Definition\" >\ud83e\udde0 Site Definition<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Purpose-Positioning\" >Purpose &amp; Positioning<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Monetisation-Strategy\" >Monetisation Strategy<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Platform-Decision\" >Platform Decision<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Identity-Secrets\" >Identity &amp; Secrets<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Environment-Model-Optional-but-recommended\" >Environment Model (Optional but recommended)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Ecosystem-Integration\" >Ecosystem Integration<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#%F0%9F%8C%90-Domain-DNS\" >\ud83c\udf10 Domain &amp; DNS<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Domain-Allocation\" >Domain Allocation<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#DNS-Setup\" >DNS Setup<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#%F0%9F%8C%8D-Edge-Layer-Reverse-Proxy\" >\ud83c\udf0d Edge Layer (Reverse Proxy)<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Host-Selection\" >Host Selection<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#AWS\" >AWS<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Reverse-Proxy-Config\" >Reverse Proxy Config<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#WIP-Site\" >WIP Site<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#SSL-Enablement\" >SSL Enablement<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#%E2%9A%99%EF%B8%8F-Application-Layer-WordPress\" >\u2699\ufe0f Application Layer (WordPress)<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Database-Setup\" >Database Setup<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#DB-Host\" >DB Host<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Naming-Convention\" >Naming Convention<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Create-DB-User\" >Create DB + User<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Store-in-KeePass\" >Store in KeePass<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#WordPress-Deployment-guide-%E2%80%A6\" >WordPress Deployment (guide &#8230;)<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Obtain-WordPress\" >Obtain WordPress<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Deploy-Files\" >Deploy Files<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Configure-wp-configphp\" >Configure wp-config.php<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Connect-to-Reverse-Proxy\" >Connect to Reverse Proxy<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Run-Installer\" >Run Installer<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Baseline-Setup\" >Baseline Setup<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#%E2%98%81%EF%B8%8F-Cloudflare-Setup\" >\u2601\ufe0f Cloudflare Setup<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#DNS-Integration\" >DNS Integration<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-36\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#SSL-Mode\" >SSL Mode<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-37\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Caching-Rules\" >Caching Rules<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-38\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Basic-WAF\" >Basic WAF<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-39\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#%F0%9F%96%BC%EF%B8%8F-Media-Asset-Pipeline\" >\ud83d\uddbc\ufe0f Media \/ Asset Pipeline<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-40\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#R2-Bucket-Setup\" >R2 Bucket Setup<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-41\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#URL-Strategy\" >URL Strategy<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-42\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Sync-Process\" >Sync Process<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-43\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Test-Delivery\" >Test Delivery<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-44\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#%F0%9F%8E%A8-Site-Build\" >\ud83c\udfa8 Site Build<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-45\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Theme-Selection\" >Theme Selection<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-46\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Structure\" >Structure<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-47\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Content\" >Content<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-48\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#SEO-AI-Readiness\" >SEO &amp; AI Readiness<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-49\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#%F0%9F%94%90-Security-Hardening\" >\ud83d\udd10 Security Hardening<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-50\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#%F0%9F%92%BE-Backup-Recovery\" >\ud83d\udcbe Backup &amp; Recovery<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-51\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Database-Backup\" >Database Backup<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-52\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#File-Backup\" >File Backup<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-53\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Offsite-Storage\" >Offsite Storage<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-54\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Restore-Test\" >Restore Test<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-55\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#%F0%9F%93%8A-Monitoring-Ops\" >\ud83d\udcca Monitoring &amp; Ops<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-56\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#%E2%9C%85-Refrence-Runbooks-and-Completion-Checklist\" >\u2705 Refrence Runbooks and Completion Checklist<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-57\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Site-Setup-%E2%80%93-WordPress-Deployment\" >Site Setup &#8211; WordPress Deployment<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-58\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Site-Setup-%E2%80%93-WooCommerce-Runbook\" >Site Setup &#8211; WooCommerce Runbook<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-59\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#%F0%9F%9A%80-Automation-Readiness\" >\ud83d\ude80 Automation Readiness<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-60\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Standardisation\" >Standardisation<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-61\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Script-Opportunities\" >Script Opportunities<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-62\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/#Future-State\" >Future State<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"A-repeatable-framework-for-launching-WordPress-sites-on-my-infrastructure\"><\/span>A repeatable framework for launching WordPress sites on my infrastructure<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%F0%9F%A7%AD-Overview\"><\/span>\ud83e\udded Overview<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Setting up a new site should not feel like starting from scratch every time.<\/p>\n\n\n\n<p>This guide defines a <strong>repeatable, structured process<\/strong> for launching new websites across the ecosystem \u2014 from idea \u2192 domain \u2192 infrastructure \u2192 live site.<\/p>\n\n\n\n<p>The goal is simple:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Reduce friction<\/li>\n\n\n\n<li>Capture decisions<\/li>\n\n\n\n<li>Enable reuse<\/li>\n\n\n\n<li>Prepare for future automation<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%F0%9F%A7%B1-High-Level-Flow\"><\/span>\ud83e\uddf1 High-Level Flow<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>0. Site Definition\n1. Domain &amp; DNS\n2. Edge (Reverse Proxy)\n3. Application (WordPress)\n4. Cloudflare\n5. Media Pipeline\n6. Site Build\n7. Security\n8. Backup &amp; Recovery\n9. Monitoring\n10. Automation Readiness\n<\/code><\/pre>\n\n\n\n<p>Each step builds on the previous.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E2%9A%A1-Quick-Start\"><\/span>\u26a1 Quick Start<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>For experienced setup:<\/p>\n\n\n\n<p>1. Define site (name, purpose, WP vs Woo)<br>2. Allocate domain + DNS<br>3. Create reverse proxy + SSL<br>4. Deploy WordPress + DB<br>5. Enable Cloudflare<br>6. Configure media pipeline<br>7. Build site<\/p>\n\n\n\n<p>Then return to sections below for detail.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%F0%9F%A7%A0-Site-Definition\"><\/span>\ud83e\udde0 Site Definition<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Before touching infrastructure \u2014 define the site.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Purpose-Positioning\"><\/span>Purpose &amp; Positioning<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>What is the site for?<\/li>\n\n\n\n<li>Who is it for?<\/li>\n\n\n\n<li>Content type:\n<ul class=\"wp-block-list\">\n<li>Blog<\/li>\n\n\n\n<li>Store<\/li>\n\n\n\n<li>Hybrid<\/li>\n\n\n\n<li>Project hub<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Monetisation-Strategy\"><\/span>Monetisation Strategy<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Affiliate links<\/li>\n\n\n\n<li>Ads<\/li>\n\n\n\n<li>Products (WooCommerce?)<\/li>\n\n\n\n<li>Lead generation<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Platform-Decision\"><\/span>Platform Decision<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>WordPress only \u2192 content-first<\/li>\n\n\n\n<li>WordPress + WooCommerce \u2192 commerce-enabled<\/li>\n<\/ul>\n\n\n\n<p>\ud83d\udc49 Default to <strong>WordPress only<\/strong>, add Woo later.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Identity-Secrets\"><\/span>Identity &amp; Secrets<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Record and store securely (KeePass):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Domain registrar access<\/li>\n\n\n\n<li>Cloudflare credentials \/ API tokens<\/li>\n\n\n\n<li>DB credentials<\/li>\n\n\n\n<li>WordPress admin bootstrap<\/li>\n\n\n\n<li>SSH access<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Environment-Model-Optional-but-recommended\"><\/span>Environment Model (Optional but recommended)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>dev.site.com<\/code><\/li>\n\n\n\n<li><code>test.site.com<\/code><\/li>\n\n\n\n<li><code>www.site.com<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Ecosystem-Integration\"><\/span>Ecosystem Integration<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>How does this site connect to:\n<ul class=\"wp-block-list\">\n<li>at-the-bach<\/li>\n\n\n\n<li>a-way<\/li>\n\n\n\n<li>evalue-it<\/li>\n\n\n\n<li>at-the-mall<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Think in terms of:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>content reuse<\/li>\n\n\n\n<li>cross-linking<\/li>\n\n\n\n<li>funnels<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%F0%9F%8C%90-Domain-DNS\"><\/span>\ud83c\udf10 Domain &amp; DNS<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Domain-Allocation\"><\/span>Domain Allocation<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Register or assign domain<\/li>\n\n\n\n<li>Decide canonical URL:\n<ul class=\"wp-block-list\">\n<li><code>www<\/code> vs root<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"DNS-Setup\"><\/span>DNS Setup<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Route53 (or equivalent)<\/li>\n\n\n\n<li>Create records:\n<ul class=\"wp-block-list\">\n<li>A \/ CNAME \u2192 reverse proxy<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Optional:\n<ul class=\"wp-block-list\">\n<li>Delegate subdomain to Cloudflare<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%F0%9F%8C%8D-Edge-Layer-Reverse-Proxy\"><\/span>\ud83c\udf0d Edge Layer (Reverse Proxy)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Host-Selection\"><\/span>Host Selection<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Choose target hosting infrastructure (AWS, Cloudflare, Azure, Home)<\/li>\n\n\n\n<li>Choose target host (e.g. wordpress-01)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"AWS\"><\/span>AWS<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Reverse-Proxy-Config\"><\/span>Reverse Proxy Config<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Apache or &#8230;<\/li>\n\n\n\n<li>Define:\n<ul class=\"wp-block-list\">\n<li>server_name<\/li>\n\n\n\n<li>upstream target<\/li>\n\n\n\n<li>logging<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"WIP-Site\"><\/span>WIP Site<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Basic placeholder page<\/li>\n<\/ul>\n\n\n\n<p>\/<code>etc\/apache2\/sites-available# cp 001-default.conf me.ensite.FOO<\/code>.conf<\/p>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Update configuration<\/summary>\n<pre class=\"wp-block-code\"><code>&lt;VirtualHost *:80&gt;\n    ServerName FOO.ensite.me\n    DocumentRoot \/var\/www\/in-the-making\n\n    &lt;Directory \"\/var\/www\/in-the-making\"&gt;\n        allow from all\n        Options None\n        Require all granted\n    &lt;\/Directory&gt;\n&lt;\/VirtualHost&gt;<\/code><\/pre>\n<\/details>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Confirm routing works before proceeding<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"SSL-Enablement\"><\/span>SSL Enablement<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Certbot<\/li>\n<\/ul>\n\n\n\n<p><code># sudo certbot --apache -d foo.ensite.me<\/code><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Validate HTTPS access<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E2%9A%99%EF%B8%8F-Application-Layer-WordPress\"><\/span>\u2699\ufe0f Application Layer (WordPress)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Database-Setup\"><\/span>Database Setup<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"DB-Host\"><\/span>DB Host<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Current: <code>test-mariadb-01<\/code><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Naming-Convention\"><\/span>Naming Convention<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p><code>[p|t|d]_{4 chars}<\/code><\/p>\n\n\n\n<p>Example:<\/p>\n\n\n\n<p><code>p_foob<\/code> \u2192 Foo Bah production<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Create-DB-User\"><\/span>Create DB + User<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary> Create database with least priveledge<\/summary>\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MariaDB &#91;(none)]&gt;\n\ncreate database p_foob;\n<strong>Query OK, 1 row affected (0.002 sec)\n<\/strong>\ncreate user 'p_foob'@'%' identified by 'strongpassword';\n<strong>Query OK, 0 rows affected (0.010 sec)\n<\/strong>\ngrant all privileges on p_foob.* to 'p_foob'@'%';\n<strong>Query OK, 0 rows affected (0.005 sec)\n<\/strong>\nflush privileges;\n<strong>Query OK, 0 rows affected (0.001 sec)\n<\/strong><\/code><\/pre>\n<\/details>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Store-in-KeePass\"><\/span>Store in KeePass<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Host<\/li>\n\n\n\n<li>DB name<\/li>\n\n\n\n<li>Username<\/li>\n\n\n\n<li>Password<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"WordPress-Deployment-guide-%E2%80%A6\"><\/span><a href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/site-setup-wordpress-deployment\/\" data-type=\"page\" data-id=\"357\">WordPress Deployment<\/a> (guide &#8230;)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Obtain-WordPress\"><\/span>Obtain WordPress<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Download latest OR reuse stable version<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Deploy-Files\"><\/span>Deploy Files<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Copy into:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/var\/www\/me.ensite.foo\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Configure-wp-configphp\"><\/span>Configure <code>wp-config.php<\/code><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>DB connection<\/li>\n\n\n\n<li>Keys \/ salts<\/li>\n\n\n\n<li>Debug settings (off for prod)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Connect-to-Reverse-Proxy\"><\/span>Connect to Reverse Proxy<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Within the site configuration file for that site, eg. <kbd>\/etc\/apache2\/sites-available\/com.evalue-it.www-le-ssl.conf <\/kbd>replace:<\/p>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>old sites-available conf file<\/summary>\n<pre class=\"wp-block-code\"><code>&lt;IfModule mod_ssl.c>\n&lt;VirtualHost *:443>\n    ServerName <strong>foo.ensite.me\n<\/strong>    DocumentRoot \/var\/www\/in-the-making\n\n    &lt;Directory \"\/var\/www\/in-the-making\">\n        allow from all\n        Options None\n        Require all granted\n    &lt;\/Directory>\n\nSSLCertificateFile \/etc\/letsencrypt\/live\/<strong>foo.ensite.me<\/strong>\/fullchain.pem\nSSLCertificateKeyFile \/etc\/letsencrypt\/live\/<strong>foo.ensite.me<\/strong>\/privkey.pem\nInclude \/etc\/letsencrypt\/options-ssl-apache.conf\n&lt;\/VirtualHost>\n&lt;\/IfModule><\/code><\/pre>\n<\/details>\n\n\n\n<p>&#8230; with:<\/p>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>new sites-available conf file<\/summary>\n<pre class=\"wp-block-code\"><code>&lt;IfModule mod_ssl.c>\n&lt;VirtualHost *:443>\n    ServerName <strong>foo.ensite.me\n<\/strong>\n    SSLEngine on\n    SSLCertificateFile \/etc\/letsencrypt\/live\/<strong>foo.ensite.me<\/strong>\/fullchain.pem\n    SSLCertificateKeyFile \/etc\/letsencrypt\/live\/<strong>foo.ensite.me<\/strong>\/privkey.pem\n    Include \/etc\/letsencrypt\/options-ssl-apache.conf\n\n    ProxyRequests Off\n    ProxyPreserveHost On\n\n    RequestHeader set X-Forwarded-Proto \"https\"\n    RequestHeader set X-Forwarded-Port \"443\"\n\n    ProxyPass        \/ http:\/\/10.3.6.210\/\n    ProxyPassReverse \/ http:\/\/10.3.6.210\/\n\n    ErrorLog ${APACHE_LOG_DIR}\/<strong>me.ensite.foo<\/strong>-error.log\n    CustomLog ${APACHE_LOG_DIR}\/<strong>me.ensite.foo<\/strong>-access.log combined\n\n\n&lt;\/VirtualHost>\n&lt;\/IfModule><\/code><\/pre>\n<\/details>\n\n\n\n<p>Restart apache2: <kbd># systemctl restart apache2.service<\/kbd><\/p>\n\n\n\n<p>(Future)<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ensure PHP handler works<\/li>\n\n\n\n<li>Validate routing<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Run-Installer\"><\/span>Run Installer<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>\/wp-admin\/install.php<\/code><\/li>\n<\/ul>\n\n\n\n<p>Set:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Site name<\/li>\n\n\n\n<li>Admin user<\/li>\n\n\n\n<li>Password<\/li>\n\n\n\n<li>Email<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Baseline-Setup\"><\/span>Baseline Setup<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Permalinks \u2192 \u201cPost name\u201d<\/li>\n\n\n\n<li>Remove default plugins\/themes<\/li>\n\n\n\n<li>Install essentials (minimal)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E2%98%81%EF%B8%8F-Cloudflare-Setup\"><\/span>\u2601\ufe0f Cloudflare Setup<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"DNS-Integration\"><\/span>DNS Integration<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Proxy traffic via Cloudflare<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"SSL-Mode\"><\/span>SSL Mode<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Full (strict preferred)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Caching-Rules\"><\/span>Caching Rules<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cache static assets<\/li>\n\n\n\n<li>Bypass admin paths<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Basic-WAF\"><\/span>Basic WAF<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enable protections<\/li>\n\n\n\n<li>Rate limiting (optional)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%F0%9F%96%BC%EF%B8%8F-Media-Asset-Pipeline\"><\/span>\ud83d\uddbc\ufe0f Media \/ Asset Pipeline<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"R2-Bucket-Setup\"><\/span>R2 Bucket Setup<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Example: <code>media-public<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"URL-Strategy\"><\/span>URL Strategy<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Avoid tight coupling to:<code>\/wp-content\/uploads<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Sync-Process\"><\/span>Sync Process<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use <code>rclone<\/code> \/ <code>wget<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Test-Delivery\"><\/span>Test Delivery<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Confirm assets served via:<code>media.ensite.me<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%F0%9F%8E%A8-Site-Build\"><\/span>\ud83c\udfa8 Site Build<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Theme-Selection\"><\/span>Theme Selection<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Lightweight (e.g. GeneratePress)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Structure\"><\/span>Structure<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pages<\/li>\n\n\n\n<li>Categories<\/li>\n\n\n\n<li>Navigation<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Content\"><\/span>Content<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Initial posts<\/li>\n\n\n\n<li>Images via pipeline<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"SEO-AI-Readiness\"><\/span>SEO &amp; AI Readiness<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sitemap<\/li>\n\n\n\n<li>OpenGraph<\/li>\n\n\n\n<li>Schema (where relevant)<\/li>\n\n\n\n<li>Internal linking<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%F0%9F%94%90-Security-Hardening\"><\/span>\ud83d\udd10 Security Hardening<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Disable XML-RPC (if unused)<\/li>\n\n\n\n<li>Strong admin credentials<\/li>\n\n\n\n<li>Limit login attempts<\/li>\n\n\n\n<li>File permissions<\/li>\n\n\n\n<li>Hide unnecessary endpoints<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%F0%9F%92%BE-Backup-Recovery\"><\/span>\ud83d\udcbe Backup &amp; Recovery<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Database-Backup\"><\/span>Database Backup<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Daily dump<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"File-Backup\"><\/span>File Backup<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>WP files + uploads<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Offsite-Storage\"><\/span>Offsite Storage<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Prefer R2 or external disk<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Restore-Test\"><\/span>Restore Test<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Verify recovery works<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%F0%9F%93%8A-Monitoring-Ops\"><\/span>\ud83d\udcca Monitoring &amp; Ops<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>HTTP uptime checks<\/li>\n\n\n\n<li>Log review:\n<ul class=\"wp-block-list\">\n<li>nginx<\/li>\n\n\n\n<li>php<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Error tracking<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E2%9C%85-Refrence-Runbooks-and-Completion-Checklist\"><\/span>\u2705 Refrence Runbooks and Completion Checklist<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<ul class=\"wp-block-list\">\n<li>[ ] Domain live<\/li>\n\n\n\n<li>[ ] SSL working<\/li>\n\n\n\n<li>[ ] WordPress installed<\/li>\n\n\n\n<li>[ ] Admin access secured<\/li>\n\n\n\n<li>[ ] Cloudflare active<\/li>\n\n\n\n<li>[ ] Media pipeline tested<\/li>\n\n\n\n<li>[ ] First post published<\/li>\n\n\n\n<li>[ ] Backup configured<\/li>\n<\/ul>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<div class=\"wp-block-query is-layout-flow wp-block-query-is-layout-flow\"><ul class=\"wp-block-post-template is-layout-flow wp-block-post-template-is-layout-flow\"><li class=\"wp-block-post post-357 page type-page status-publish\">\n<h6 class=\"wp-block-post-title\"><span class=\"ez-toc-section\" id=\"Site-Setup-%E2%80%93-WordPress-Deployment\"><\/span>Site Setup &#8211; WordPress Deployment<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<\/li><li class=\"wp-block-post post-477 page type-page status-publish\">\n<h6 class=\"wp-block-post-title\"><span class=\"ez-toc-section\" id=\"Site-Setup-%E2%80%93-WooCommerce-Runbook\"><\/span>Site Setup &#8211; WooCommerce Runbook<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<\/li><\/ul>\n\n\n\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%F0%9F%9A%80-Automation-Readiness\"><\/span>\ud83d\ude80 Automation Readiness<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>This is where the system evolves.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Standardisation\"><\/span>Standardisation<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Naming conventions<\/li>\n\n\n\n<li>Directory structures<\/li>\n\n\n\n<li>Config templates<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Script-Opportunities\"><\/span>Script Opportunities<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>DB creation<\/li>\n\n\n\n<li>WP deployment<\/li>\n\n\n\n<li>Apache config generation<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Future-State\"><\/span>Future State<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>One-command site creation<\/li>\n\n\n\n<li>Internal hosting platform<\/li>\n\n\n\n<li>Potential external service<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","protected":false},"excerpt":{"rendered":"<p>A repeatable framework for launching WordPress sites on my infrastructure \ud83e\udded Overview Setting up a new site should not feel like starting from scratch every time. This guide defines a repeatable, structured process for launching new websites across the ecosystem \u2014 from idea \u2192 domain \u2192 infrastructure \u2192 live site. The goal is simple: \ud83e\uddf1 &#8230; <a title=\"Site Setup Process Guide\" class=\"read-more\" href=\"https:\/\/www.the-bach.kiwi\/index.php\/skunkworks\/site-setup-process-guide\/\" aria-label=\"Read more about Site Setup Process Guide\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":359,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-348","page","type-page","status-publish"],"_links":{"self":[{"href":"https:\/\/www.the-bach.kiwi\/index.php\/wp-json\/wp\/v2\/pages\/348","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.the-bach.kiwi\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.the-bach.kiwi\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.the-bach.kiwi\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.the-bach.kiwi\/index.php\/wp-json\/wp\/v2\/comments?post=348"}],"version-history":[{"count":21,"href":"https:\/\/www.the-bach.kiwi\/index.php\/wp-json\/wp\/v2\/pages\/348\/revisions"}],"predecessor-version":[{"id":538,"href":"https:\/\/www.the-bach.kiwi\/index.php\/wp-json\/wp\/v2\/pages\/348\/revisions\/538"}],"up":[{"embeddable":true,"href":"https:\/\/www.the-bach.kiwi\/index.php\/wp-json\/wp\/v2\/pages\/359"}],"wp:attachment":[{"href":"https:\/\/www.the-bach.kiwi\/index.php\/wp-json\/wp\/v2\/media?parent=348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}