[{"data":1,"prerenderedAt":1107},["ShallowReactive",2],{"navigation_docs":3,"-engineering-database-connection":348,"-engineering-database-connection-surround":1103},[4,8,68,98,216,245,259,280,344],{"title":5,"path":6,"stem":7},"Introduction","\u002Fintroduction","0.introduction",{"title":9,"icon":10,"path":11,"stem":12,"children":13,"page":63},"Company","i-lucide-building-2","\u002Fcompany","1.company",[14,18,22,26,30,34,38,42,46,50,64],{"title":15,"path":16,"stem":17},"About","\u002Fcompany\u002Fabout","1.company\u002F0.about",{"title":19,"path":20,"stem":21},"Values","\u002Fcompany\u002Fvalues","1.company\u002F1.values",{"title":23,"path":24,"stem":25},"Communication","\u002Fcompany\u002Fcommunication","1.company\u002Fcommunication",{"title":27,"path":28,"stem":29},"Competition","\u002Fcompany\u002Fcompetition","1.company\u002Fcompetition",{"title":31,"path":32,"stem":33},"Hybrid Working","\u002Fcompany\u002Fhybrid-working","1.company\u002Fhybrid-working",{"title":35,"path":36,"stem":37},"Manchester Office","\u002Fcompany\u002Foffice","1.company\u002Foffice",{"title":39,"path":40,"stem":41},"Operations","\u002Fcompany\u002Foperations","1.company\u002Foperations",{"title":43,"path":44,"stem":45},"Policies","\u002Fcompany\u002Fpolicies","1.company\u002Fpolicies",{"title":47,"path":48,"stem":49},"Product Strategy","\u002Fcompany\u002Fproduct-strategy","1.company\u002Fproduct-strategy",{"title":51,"path":52,"stem":53,"children":54,"page":63},"Products","\u002Fcompany\u002Fproducts","1.company\u002Fproducts",[55,59],{"title":56,"path":57,"stem":58},"Capability Exchange","\u002Fcompany\u002Fproducts\u002Fcapability-exchange","1.company\u002Fproducts\u002Fcapability-exchange",{"title":60,"path":61,"stem":62},"ESProfiler Platform","\u002Fcompany\u002Fproducts\u002Fesprofiler","1.company\u002Fproducts\u002Fesprofiler",false,{"title":65,"path":66,"stem":67},"Security","\u002Fcompany\u002Fsecurity","1.company\u002Fsecurity",{"title":69,"icon":70,"path":71,"stem":72,"children":73,"page":63},"People Ops","i-lucide-users","\u002Fpeople-ops","2.people-ops",[74,78,82,86,90,94],{"title":75,"path":76,"stem":77},"Compensation","\u002Fpeople-ops\u002Fcompensation","2.people-ops\u002Fcompensation",{"title":79,"path":80,"stem":81},"Education","\u002Fpeople-ops\u002Feducation","2.people-ops\u002Feducation",{"title":83,"path":84,"stem":85},"Expenses","\u002Fpeople-ops\u002Fexpenses","2.people-ops\u002Fexpenses",{"title":87,"path":88,"stem":89},"Holiday & Leave","\u002Fpeople-ops\u002Fleave","2.people-ops\u002Fleave",{"title":91,"path":92,"stem":93},"Onboarding","\u002Fpeople-ops\u002Fonboarding","2.people-ops\u002Fonboarding",{"title":95,"path":96,"stem":97},"Recruitment","\u002Fpeople-ops\u002Frecruitment","2.people-ops\u002Frecruitment",{"title":99,"icon":100,"path":101,"stem":102,"children":103,"page":63},"Engineering","i-lucide-rocket","\u002Fengineering","3.engineering",[104,147,151,171,192,196,204,208,212],{"title":105,"path":106,"stem":107,"children":108,"page":63},"Contributing","\u002Fengineering\u002Fcontributing","3.engineering\u002Fcontributing",[109,113,117,121,125,138],{"title":110,"path":111,"stem":112},"Development Setup","\u002Fengineering\u002Fcontributing\u002Fdevelopment-setup","3.engineering\u002Fcontributing\u002F1.development-setup",{"title":114,"path":115,"stem":116},"Engineering Operations","\u002Fengineering\u002Fcontributing\u002Fengineering-operations","3.engineering\u002Fcontributing\u002F2.engineering-operations",{"title":118,"path":119,"stem":120},"Documentation","\u002Fengineering\u002Fcontributing\u002Fdocumentation","3.engineering\u002Fcontributing\u002F3.documentation",{"title":122,"path":123,"stem":124},"Agentic Coding","\u002Fengineering\u002Fcontributing\u002Fagentic-coding","3.engineering\u002Fcontributing\u002Fagentic-coding",{"title":126,"path":127,"stem":128,"children":129,"page":63},"Back End","\u002Fengineering\u002Fcontributing\u002Fback-end","3.engineering\u002Fcontributing\u002Fback-end",[130,134],{"title":131,"path":132,"stem":133},"API Guidelines","\u002Fengineering\u002Fcontributing\u002Fback-end\u002Fapi-guidelines","3.engineering\u002Fcontributing\u002Fback-end\u002Fapi-guidelines",{"title":135,"path":136,"stem":137},"LLM Prompts & Langfuse Integration","\u002Fengineering\u002Fcontributing\u002Fback-end\u002Fllm-prompts","3.engineering\u002Fcontributing\u002Fback-end\u002Fllm-prompts",{"title":139,"path":140,"stem":141,"children":142,"page":63},"Front End","\u002Fengineering\u002Fcontributing\u002Ffront-end","3.engineering\u002Fcontributing\u002Ffront-end",[143],{"title":144,"path":145,"stem":146},"Testing","\u002Fengineering\u002Fcontributing\u002Ffront-end\u002Ftesting","3.engineering\u002Fcontributing\u002Ffront-end\u002Ftesting",{"title":148,"path":149,"stem":150},"Production Database","\u002Fengineering\u002Fdatabase-connection","3.engineering\u002Fdatabase-connection",{"title":152,"path":153,"stem":154,"children":155},"Deployment","\u002Fengineering\u002Fdeployment","3.engineering\u002Fdeployment",[156,159,163,167],{"title":56,"path":157,"stem":158},"\u002Fengineering\u002Fdeployment\u002Fcapability-exchange","3.engineering\u002Fdeployment\u002Fcapability-exchange",{"title":160,"path":161,"stem":162},"Langfuse Deployment","\u002Fengineering\u002Fdeployment\u002Fecs-langfuse-deployment","3.engineering\u002Fdeployment\u002Fecs-langfuse-deployment",{"title":164,"path":165,"stem":166},"ESP Platform Configuration","\u002Fengineering\u002Fdeployment\u002Fesp-platform-configuration","3.engineering\u002Fdeployment\u002Fesp-platform-configuration",{"title":168,"path":169,"stem":170},"Platform","\u002Fengineering\u002Fdeployment\u002Fplatform","3.engineering\u002Fdeployment\u002Fplatform",{"title":172,"path":173,"stem":174,"children":175,"page":63},"Github","\u002Fengineering\u002Fgithub","3.engineering\u002Fgithub",[176,180,184,188],{"title":177,"path":178,"stem":179},"Packages","\u002Fengineering\u002Fgithub\u002Fpackages","3.engineering\u002Fgithub\u002Fpackages",{"title":181,"path":182,"stem":183},"Personal Access Token","\u002Fengineering\u002Fgithub\u002Fpersonal-access-token","3.engineering\u002Fgithub\u002Fpersonal-access-token",{"title":185,"path":186,"stem":187},"Troubleshooting","\u002Fengineering\u002Fgithub\u002Ftroubleshooting","3.engineering\u002Fgithub\u002Ftroubleshooting",{"title":189,"path":190,"stem":191},"Workflows","\u002Fengineering\u002Fgithub\u002Fworkflows","3.engineering\u002Fgithub\u002Fworkflows",{"title":193,"path":194,"stem":195},"Platform Ops","\u002Fengineering\u002Fplatform-ops","3.engineering\u002Fplatform-ops",{"title":168,"path":197,"stem":198,"children":199,"page":63},"\u002Fengineering\u002Fplatform","3.engineering\u002Fplatform",[200],{"title":201,"path":202,"stem":203},"useAPI","\u002Fengineering\u002Fplatform\u002Fuse-api","3.engineering\u002Fplatform\u002Fuse-api",{"title":205,"path":206,"stem":207},"Project Management","\u002Fengineering\u002Fproject-management","3.engineering\u002Fproject-management",{"title":209,"path":210,"stem":211},"Releases","\u002Fengineering\u002Frelease","3.engineering\u002Frelease",{"title":213,"path":214,"stem":215},"Tools","\u002Fengineering\u002Ftools","3.engineering\u002Ftools",{"title":217,"icon":218,"path":219,"stem":220,"children":221,"page":63},"Design","i-lucide-palette","\u002Fdesign","4.design",[222,226,230,234,238,241],{"title":223,"path":224,"stem":225},"Design Thinking","\u002Fdesign\u002Fdesign-thinking","4.design\u002F1.design-thinking",{"title":227,"path":228,"stem":229},"Figma","\u002Fdesign\u002Ffigma-structure","4.design\u002F2.figma-structure",{"title":231,"path":232,"stem":233},"Design & Development","\u002Fdesign\u002Fdesign-and-development","4.design\u002F3.design-and-development",{"title":235,"path":236,"stem":237},"Branding","\u002Fdesign\u002Fbranding","4.design\u002F4.branding",{"title":213,"path":239,"stem":240},"\u002Fdesign\u002Ftools","4.design\u002F5.tools",{"title":242,"path":243,"stem":244},"Customer Success","\u002Fdesign\u002Fworking-with-customers","4.design\u002F6.working-with-customers",{"title":246,"icon":247,"path":248,"stem":249,"children":250,"page":63},"Sales","i-lucide-dollar-sign","\u002Fsales","4.sales",[251,255],{"title":252,"path":253,"stem":254},"Customer Onboarding","\u002Fsales\u002Fonboarding","4.sales\u002Fonboarding",{"title":256,"path":257,"stem":258},"Sales Tools","\u002Fsales\u002Ftools","4.sales\u002Ftools",{"title":260,"icon":261,"path":262,"stem":263,"children":264,"page":63},"Marketing","i-lucide-book-image","\u002Fmarketing","5.marketing",[265,269,273,276],{"title":266,"path":267,"stem":268},"Content","\u002Fmarketing\u002Fcontent","5.marketing\u002Fcontent",{"title":270,"path":271,"stem":272},"Messaging","\u002Fmarketing\u002Fmessaging","5.marketing\u002Fmessaging",{"title":213,"path":274,"stem":275},"\u002Fmarketing\u002Ftools","5.marketing\u002Ftools",{"title":277,"path":278,"stem":279},"Website","\u002Fmarketing\u002Fwebsite","5.marketing\u002Fwebsite",{"title":281,"icon":282,"path":283,"stem":284,"children":285,"page":63},"AI & Data Ops","i-lucide-database","\u002Fdata-ops","6.data-ops",[286,294,298,323,340],{"title":56,"path":287,"stem":288,"children":289,"page":63},"\u002Fdata-ops\u002Fcapability-exchange","6.data-ops\u002FCapability Exchange",[290],{"title":291,"path":292,"stem":293},"Leaderboard Calculation","\u002Fdata-ops\u002Fcapability-exchange\u002Fleaderboard-calculation","6.data-ops\u002FCapability Exchange\u002Fleaderboard-calculation",{"title":295,"path":296,"stem":297},"Account Portal (CAS)","\u002Fdata-ops\u002Faccount-portal","6.data-ops\u002Faccount-portal",{"title":299,"path":300,"stem":301,"children":302,"page":63},"Data Management","\u002Fdata-ops\u002Fdata-management","6.data-ops\u002Fdata-management",[303,307,311,315,319],{"title":304,"path":305,"stem":306},"Adding Products","\u002Fdata-ops\u002Fdata-management\u002Fadding-products","6.data-ops\u002Fdata-management\u002Fadding-products",{"title":308,"path":309,"stem":310},"Adding Vendors","\u002Fdata-ops\u002Fdata-management\u002Fadding-vendors","6.data-ops\u002Fdata-management\u002Fadding-vendors",{"title":312,"path":313,"stem":314},"Framework Mapping","\u002Fdata-ops\u002Fdata-management\u002Fframework-mapping","6.data-ops\u002Fdata-management\u002Fframework-mapping",{"title":316,"path":317,"stem":318},"Refreshing Vendors","\u002Fdata-ops\u002Fdata-management\u002Frefreshing-vendors","6.data-ops\u002Fdata-management\u002Frefreshing-vendors",{"title":320,"path":321,"stem":322},"Reviewing Draft Vendors","\u002Fdata-ops\u002Fdata-management\u002Freviewing-draft-vendors","6.data-ops\u002Fdata-management\u002Freviewing-draft-vendors",{"title":324,"path":325,"stem":326,"children":327,"page":63},"LLM Ops","\u002Fdata-ops\u002Fllm-ops","6.data-ops\u002Fllm-ops",[328,332,336],{"title":329,"path":330,"stem":331},"Agents","\u002Fdata-ops\u002Fllm-ops\u002Fagents","6.data-ops\u002Fllm-ops\u002F1.agents",{"title":333,"path":334,"stem":335},"ESPi Architecture & Query Flow","\u002Fdata-ops\u002Fllm-ops\u002Fespi-architecture","6.data-ops\u002Fllm-ops\u002F2.espi-architecture",{"title":337,"path":338,"stem":339},"Evaluating Agents","\u002Fdata-ops\u002Fllm-ops\u002Fevaluations","6.data-ops\u002Fllm-ops\u002F3.evaluations",{"title":341,"path":342,"stem":343},"Message Queues","\u002Fdata-ops\u002Fmessage-queues","6.data-ops\u002Fmessage-queues",{"title":345,"path":346,"stem":347},"Glossary","\u002Fglossary","glossary",{"id":349,"title":148,"body":350,"description":1096,"extension":1097,"links":1098,"meta":1099,"navigation":1100,"path":149,"seo":1101,"stem":150,"__hash__":1102},"docs\u002F3.engineering\u002Fdatabase-connection.md",{"type":351,"value":352,"toc":1060},"minimark",[353,358,362,365,368,372,375,391,394,396,400,403,428,430,434,439,481,484,486,490,502,508,510,514,528,531,539,541,545,597,600,602,606,610,624,628,639,642,644,648,651,654,664,672,678,680,684,688,720,724,736,738,742,745,748,752,759,801,805,830,835,837,841,844,861,863,867,885,888,896,902,904,908,911,920,923,937,939,943,956,960,968,972,983,985,989,1008,1010,1014,1026,1028,1032,1035],[354,355,357],"h2",{"id":356},"accessing-production-databases-via-the-aws-jump-box","Accessing Production Databases via the AWS Jump Box",[359,360,361],"p",{},"Use this process when you need temporary direct access to a production database for investigation, emergency fixes, Prisma migrations, or rollback support.",[359,363,364],{},"This method creates an SSH tunnel from your machine to the AWS network through the jump box, so your local tools can connect to a production database as though it were running locally.",[366,367],"hr",{},[354,369,371],{"id":370},"when-to-use-this","When to use this",[359,373,374],{},"Use this only when necessary, for example:",[376,377,378,382,385,388],"ul",{},[379,380,381],"li",{},"connecting local tools to a production database",[379,383,384],{},"running Prisma migrations against production",[379,386,387],{},"inspecting production data in MySQL Workbench or another client",[379,389,390],{},"connecting to a restored snapshot during rollback work",[359,392,393],{},"This is not the preferred long-term workflow. It is a temporary access path for operational needs.",[366,395],{},[354,397,399],{"id":398},"prerequisites","Prerequisites",[359,401,402],{},"You will need:",[376,404,405,413,416,419,422,425],{},[379,406,407,408,412],{},"AWS access to the ",[409,410,411],"code",{},"ESProfiler"," account with Administrator Access",[379,414,415],{},"PuTTY installed",[379,417,418],{},"PuTTYgen installed",[379,420,421],{},"your SSH public key added to the jump box user",[379,423,424],{},"your home or office IP address whitelisted in the jump box security group",[379,426,427],{},"a database client (e.g. MySQL Workbench)",[366,429],{},[354,431,433],{"id":432},"_1-generate-an-ssh-key-if-you-dont-already-have-one","1. Generate an SSH key (if you don’t already have one)",[435,436,438],"h3",{"id":437},"using-puttygen","Using PuTTYgen",[440,441,442,448,454,461,464,467,470],"ol",{},[379,443,444,445],{},"Open Start menu → search ",[409,446,447],{},"PuTTYgen",[379,449,450,451],{},"Set key size to ",[409,452,453],{},"4096",[379,455,456,457],{},"Click ",[458,459,460],"strong",{},"Generate",[379,462,463],{},"Move your mouse to generate entropy",[379,465,466],{},"Add a key comment (your name or username)",[379,468,469],{},"Set a memorable passphrase",[379,471,472,473],{},"Save:\n",[376,474,475,478],{},[379,476,477],{},"Private key",[379,479,480],{},"Public key",[359,482,483],{},"Store securely (e.g. a personal \"Security\" folder in Google Drive).",[366,485],{},[354,487,489],{"id":488},"_2-share-your-public-key","2. Share your public key",[440,491,492,499],{},[379,493,494,495,498],{},"Copy the ",[458,496,497],{},"public key text"," from PuTTYgen",[379,500,501],{},"Send it to whoever manages jump box access",[359,503,504,507],{},[458,505,506],{},"Important:"," send the full key text, not just a file.",[366,509],{},[354,511,513],{"id":512},"_3-get-your-ip-address-whitelisted","3. Get your IP address whitelisted",[440,515,516,522,525],{},[379,517,518,519],{},"Google: ",[409,520,521],{},"what's my IP",[379,523,524],{},"Copy your IPv4 address",[379,526,527],{},"Send it to the AWS admin",[359,529,530],{},"You may need:",[376,532,533,536],{},[379,534,535],{},"office IP",[379,537,538],{},"home IP",[366,540],{},[354,542,544],{"id":543},"_4-add-ip-to-aws-security-group","4. Add IP to AWS security group",[440,546,547,552,558,564,568,574,577],{},[379,548,549,550],{},"Open AWS → ",[409,551,411],{},[379,553,554,555],{},"Go to ",[409,556,557],{},"EC2",[379,559,560,561],{},"Select instance: ",[409,562,563],{},"ESP1 connector",[379,565,554,566],{},[458,567,65],{},[379,569,570,571],{},"Open security group: ",[409,572,573],{},"DHCP ssh",[379,575,576],{},"Edit inbound rules",[379,578,579,580],{},"Add:\n",[376,581,582,588,591],{},[379,583,584,585],{},"Port: ",[409,586,587],{},"22",[379,589,590],{},"Source: your IP",[379,592,593,594],{},"Description: e.g. ",[409,595,596],{},"Joe home",[359,598,599],{},"Save.",[366,601],{},[354,603,605],{"id":604},"_5-configure-putty-connection","5. Configure PuTTY connection",[435,607,609],{"id":608},"session-setup","Session setup",[376,611,612,618],{},[379,613,614,615],{},"Host: ",[409,616,617],{},"your-username@X.X.X.X",[379,619,620,621],{},"Save session as: ",[409,622,623],{},"ESP AWS",[435,625,627],{"id":626},"add-private-key","Add private key",[376,629,630,633,636],{},[379,631,632],{},"Connection → SSH → Credentials",[379,634,635],{},"Load your private key",[379,637,638],{},"Save session again",[359,640,641],{},"Open the session.",[366,643],{},[354,645,647],{"id":646},"_6-log-in-and-change-password","6. Log in and change password",[359,649,650],{},"After login:",[359,652,653],{},"Run:",[655,656,661],"pre",{"className":657,"code":659,"language":660},[658],"language-text","passwd\n","text",[409,662,659],{"__ignoreMap":663},"",[376,665,666,669],{},[379,667,668],{},"Enter your assigned temporary password",[379,670,671],{},"Set your own password",[359,673,674,677],{},[458,675,676],{},"Tip:"," Right-click = paste in PuTTY.",[366,679],{},[354,681,683],{"id":682},"_7-get-database-endpoint-aws-rds","7. Get database endpoint (AWS RDS)",[435,685,687],{"id":686},"mysql-services","MySQL (services)",[440,689,690,693,699,706,712,715],{},[379,691,692],{},"AWS → RDS",[379,694,695,696],{},"Region: ",[409,697,698],{},"eu-west-2",[379,700,701,702,705],{},"DB Instances → select DB (e.g. ",[409,703,704],{},"service8",")",[379,707,708,709],{},"Open ",[458,710,711],{},"Endpoints",[379,713,714],{},"Copy endpoint",[379,716,584,717],{},[409,718,719],{},"3306",[435,721,723],{"id":722},"postgresql-pcx","PostgreSQL (PCX)",[440,725,726,729,731],{},[379,727,728],{},"Open PostgreSQL instance",[379,730,714],{},[379,732,584,733],{},[409,734,735],{},"5432",[366,737],{},[354,739,741],{"id":740},"_8-configure-ssh-tunnels-in-putty","8. Configure SSH tunnels in PuTTY",[359,743,744],{},"Path:",[359,746,747],{},"Connection → SSH → Tunnels",[435,749,751],{"id":750},"recommended-ports","Recommended ports",[359,753,754,755,758],{},"These map a local port on your machine (e.g. ",[409,756,757],{},"13306",") to the remote port\u002Fhost",[760,761,762,778],"table",{},[763,764,765],"thead",{},[766,767,768,772,775],"tr",{},[769,770,771],"th",{},"DB Type",[769,773,774],{},"Local Port",[769,776,777],{},"Remote Port",[779,780,781,791],"tbody",{},[766,782,783,787,789],{},[784,785,786],"td",{},"MySQL",[784,788,757],{},[784,790,719],{},[766,792,793,796,799],{},[784,794,795],{},"PostgreSQL",[784,797,798],{},"15432",[784,800,735],{},[435,802,804],{"id":803},"setup","Setup",[440,806,807,810,816,821,824,827],{},[379,808,809],{},"Enter source port",[379,811,812,813],{},"Enter destination: ",[409,814,815],{},"\u003Cendpoint>:port",[379,817,456,818],{},[458,819,820],{},"Add",[379,822,823],{},"Repeat if needed",[379,825,826],{},"Go to Session → Save",[379,828,829],{},"Open session",[359,831,832,834],{},[458,833,506],{}," tunnel only works while PuTTY is open.",[366,836],{},[354,838,840],{"id":839},"_9-connect-via-local-tools","9. Connect via local tools",[359,842,843],{},"Example for Platform DB (MySQL Workbench):",[376,845,846,851,855],{},[379,847,614,848],{},[409,849,850],{},"127.0.0.1",[379,852,584,853],{},[409,854,757],{},[379,856,857,858],{},"Username: ",[409,859,860],{},"espadministrator",[366,862],{},[354,864,866],{"id":865},"_10-get-database-password-secrets-manager","10. Get database password (Secrets Manager)",[440,868,869,872,877,880],{},[379,870,871],{},"Open DB in AWS",[379,873,554,874],{},[458,875,876],{},"Configuration",[379,878,879],{},"Open linked secret",[379,881,456,882],{},[458,883,884],{},"Retrieve secret value",[359,886,887],{},"Copy:",[376,889,890,893],{},[379,891,892],{},"username",[379,894,895],{},"password",[359,897,898,901],{},[458,899,900],{},"Note:"," password rotates regularly — do not store permanently.",[366,903],{},[354,905,907],{"id":906},"_11-using-with-apps-prisma","11. Using with apps \u002F Prisma",[359,909,910],{},"Use:",[376,912,913,917],{},[379,914,614,915],{},[409,916,850],{},[379,918,919],{},"Port: forwarded port",[359,921,922],{},"Examples:",[376,924,925,931],{},[379,926,927,928],{},"MySQL: ",[409,929,930],{},"127.0.0.1:13306",[379,932,933,934],{},"Postgres: ",[409,935,936],{},"127.0.0.1:15432",[366,938],{},[354,940,942],{"id":941},"_12-rollback-via-snapshots","12. Rollback via snapshots",[440,944,945,948,953],{},[379,946,947],{},"Open snapshot in AWS",[379,949,456,950],{},[458,951,952],{},"Restore",[379,954,955],{},"Give new DB name",[435,957,959],{"id":958},"key-behaviour","Key behaviour",[376,961,962,965],{},[379,963,964],{},"Does NOT overwrite production DB",[379,966,967],{},"Creates a new cluster",[435,969,971],{"id":970},"workflow","Workflow",[440,973,974,977,980],{},[379,975,976],{},"Connect to restored DB",[379,978,979],{},"Extract required data\u002Fschema",[379,981,982],{},"Apply to live DB",[366,984],{},[354,986,988],{"id":987},"operational-notes","Operational notes",[376,990,991,994,997,1000,1005],{},[379,992,993],{},"Keep PuTTY open while connected",[379,995,996],{},"Check IP whitelist if connection fails",[379,998,999],{},"Check SSH key if auth fails",[379,1001,1002,1003],{},"Ensure region is ",[409,1004,698],{},[379,1006,1007],{},"Avoid port clashes with local dev",[366,1009],{},[354,1011,1013],{"id":1012},"standard-ports","Standard ports",[376,1015,1016,1021],{},[379,1017,1018,1019],{},"MySQL production: ",[409,1020,757],{},[379,1022,1023,1024],{},"PostgreSQL production: ",[409,1025,798],{},[366,1027],{},[354,1029,1031],{"id":1030},"new-starter-checklist","New starter checklist",[359,1033,1034],{},"Ensure:",[376,1036,1037,1040,1043,1046,1049,1051,1054,1057],{},[379,1038,1039],{},"AWS access granted",[379,1041,1042],{},"Correct AWS roles assigned",[379,1044,1045],{},"SSH key created + added",[379,1047,1048],{},"IP whitelisted",[379,1050,415],{},[379,1052,1053],{},"Database access tested",[379,1055,1056],{},"Google Cloud access granted (if needed)",[379,1058,1059],{},"Remote support tooling installed",{"title":663,"searchDepth":1061,"depth":1061,"links":1062},2,[1063,1064,1065,1066,1070,1071,1072,1073,1077,1078,1082,1086,1087,1088,1089,1093,1094,1095],{"id":356,"depth":1061,"text":357},{"id":370,"depth":1061,"text":371},{"id":398,"depth":1061,"text":399},{"id":432,"depth":1061,"text":433,"children":1067},[1068],{"id":437,"depth":1069,"text":438},3,{"id":488,"depth":1061,"text":489},{"id":512,"depth":1061,"text":513},{"id":543,"depth":1061,"text":544},{"id":604,"depth":1061,"text":605,"children":1074},[1075,1076],{"id":608,"depth":1069,"text":609},{"id":626,"depth":1069,"text":627},{"id":646,"depth":1061,"text":647},{"id":682,"depth":1061,"text":683,"children":1079},[1080,1081],{"id":686,"depth":1069,"text":687},{"id":722,"depth":1069,"text":723},{"id":740,"depth":1061,"text":741,"children":1083},[1084,1085],{"id":750,"depth":1069,"text":751},{"id":803,"depth":1069,"text":804},{"id":839,"depth":1061,"text":840},{"id":865,"depth":1061,"text":866},{"id":906,"depth":1061,"text":907},{"id":941,"depth":1061,"text":942,"children":1090},[1091,1092],{"id":958,"depth":1069,"text":959},{"id":970,"depth":1069,"text":971},{"id":987,"depth":1061,"text":988},{"id":1012,"depth":1061,"text":1013},{"id":1030,"depth":1061,"text":1031},"Accessing the production database in rollback situations.","md",null,{},true,{"title":148,"description":1096},"o7eOm7BtpnYGZu273xmLC9YSlIVCVNvtG0CvHDdo268",[1104,1105],{"title":144,"path":145,"stem":146,"description":663,"children":-1},{"title":152,"path":153,"stem":154,"children":-1,"description":1106},"A comprehensive overview of the deployment process for new ESProfiler tenants",1789726610103]