[{"data":1,"prerenderedAt":1993},["ShallowReactive",2],{"navigation_docs":3,"-deployment-production-setup":204,"-deployment-production-setup-surround":1988},[4,40,69,82,91,116,129,146,167],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20,25,30,35],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-rocket",{"title":26,"path":27,"stem":28,"icon":29},"Project Structure","\u002Fgetting-started\u002Fproject-structure","1.getting-started\u002F4.project-structure","i-lucide-folder-tree",{"title":31,"path":32,"stem":33,"icon":34},"First Deployment","\u002Fgetting-started\u002Ffirst-deployment","1.getting-started\u002F5.first-deployment","i-lucide-upload-cloud",{"title":36,"path":37,"stem":38,"icon":39},"Troubleshooting","\u002Fgetting-started\u002Ftroubleshooting","1.getting-started\u002F6.troubleshooting","i-lucide-wrench",{"title":41,"children":42,"path":67,"stem":68,"page":6},"Platform",[43,47,51,55,59,63],{"title":44,"path":45,"stem":46},"Dashboard","\u002Fplatform\u002Fdashboard","2.platform\u002F1.dashboard",{"title":48,"path":49,"stem":50},"Marketplace","\u002Fplatform\u002Fmarketplace","2.platform\u002F2.marketplace",{"title":52,"path":53,"stem":54},"Monitoring & Metrics","\u002Fplatform\u002Fmonitoring","2.platform\u002F3.monitoring",{"title":56,"path":57,"stem":58},"Projects","\u002Fplatform\u002Fprojects","2.platform\u002F4.projects",{"title":60,"path":61,"stem":62},"Services","\u002Fplatform\u002Fservices","2.platform\u002F5.services",{"title":64,"path":65,"stem":66},"Logs","\u002Fplatform\u002Flogs","2.platform\u002F6.logs","\u002Fplatform","2.platform",{"title":70,"children":71,"path":80,"stem":81,"page":6},"CLI",[72,76],{"title":73,"path":74,"stem":75},"CLI Installation","\u002Fcli\u002Finstallation","3.cli\u002F1.installation",{"title":77,"path":78,"stem":79},"Commands Reference","\u002Fcli\u002Fcommands","3.cli\u002F2.commands","\u002Fcli","3.cli",{"title":83,"children":84,"path":89,"stem":90,"page":6},"TUI",[85],{"title":86,"path":87,"stem":88},"TUI Overview","\u002Ftui\u002Foverview","4.tui\u002F1.overview","\u002Ftui","4.tui",{"title":92,"children":93,"path":114,"stem":115,"page":6},"Docker",[94,98,102,106,110],{"title":95,"path":96,"stem":97},"Docker Containers","\u002Fdocker\u002Fcontainers","5.docker\u002F1.containers",{"title":99,"path":100,"stem":101},"Docker Images","\u002Fdocker\u002Fimages","5.docker\u002F2.images",{"title":103,"path":104,"stem":105},"Docker Compose","\u002Fdocker\u002Fcompose","5.docker\u002F3.compose",{"title":107,"path":108,"stem":109},"Docker Volumes","\u002Fdocker\u002Fvolumes","5.docker\u002F4.volumes",{"title":111,"path":112,"stem":113},"Docker Networks","\u002Fdocker\u002Fnetworks","5.docker\u002F5.networks","\u002Fdocker","5.docker",{"title":117,"children":118,"path":127,"stem":128,"page":6},"PM2",[119,123],{"title":120,"path":121,"stem":122},"Process Management","\u002Fpm2\u002Fprocess-management","6.pm2\u002F1.process-management",{"title":124,"path":125,"stem":126},"Zero-Downtime Deployments","\u002Fpm2\u002Fzero-downtime","6.pm2\u002F2.zero-downtime","\u002Fpm2","6.pm2",{"title":130,"children":131,"path":144,"stem":145,"page":6},"VPS",[132,136,140],{"title":133,"path":134,"stem":135},"VPS Management","\u002Fvps\u002Fssh-management","7.vps\u002F1.ssh-management",{"title":137,"path":138,"stem":139},"SSH Access","\u002Fvps\u002Fssh","7.vps\u002F2.ssh",{"title":141,"path":142,"stem":143},"Firewall","\u002Fvps\u002Ffirewall","7.vps\u002F3.firewall","\u002Fvps","7.vps",{"title":147,"children":148,"path":165,"stem":166,"page":6},"Deployment",[149,153,157,161],{"title":150,"path":151,"stem":152},"Production Setup","\u002Fdeployment\u002Fproduction-setup","8.deployment\u002F1.production-setup",{"title":154,"path":155,"stem":156},"Scaling","\u002Fdeployment\u002Fscaling","8.deployment\u002F2.scaling",{"title":158,"path":159,"stem":160},"GitHub Actions CI\u002FCD","\u002Fdeployment\u002Fgithub-actions","8.deployment\u002F3.github-actions",{"title":162,"path":163,"stem":164},"Security","\u002Fdeployment\u002Fsecurity","8.deployment\u002F4.security","\u002Fdeployment","8.deployment",{"title":168,"children":169,"path":202,"stem":203,"page":6},"Reference",[170,174,178,182,186,190,194,198],{"title":171,"path":172,"stem":173},"Architecture","\u002Freference\u002Farchitecture","9.reference\u002F1.architecture",{"title":175,"path":176,"stem":177},"CLI Reference","\u002Freference\u002Fcli-reference","9.reference\u002F2.cli-reference",{"title":179,"path":180,"stem":181},"Environment Variables","\u002Freference\u002Fenvironment-variables","9.reference\u002F3.environment-variables",{"title":183,"path":184,"stem":185},"API Reference","\u002Freference\u002Fapi-reference","9.reference\u002F4.api-reference",{"title":187,"path":188,"stem":189},"Webhooks","\u002Freference\u002Fwebhooks","9.reference\u002F5.webhooks",{"title":191,"path":192,"stem":193},"Authentication","\u002Freference\u002Fauthentication","9.reference\u002F6.authentication",{"title":195,"path":196,"stem":197},"Configuration","\u002Freference\u002Fconfiguration","9.reference\u002F7.configuration",{"title":199,"path":200,"stem":201},"API Overview","\u002Freference\u002Fapi","9.reference\u002F8.api","\u002Freference","9.reference",{"id":205,"title":150,"body":206,"description":1982,"extension":1983,"links":1984,"meta":1985,"navigation":282,"path":151,"seo":1986,"stem":152,"__hash__":1987},"docs\u002F8.deployment\u002F1.production-setup.md",{"type":207,"value":208,"toc":1937},"minimark",[209,213,217,222,227,243,247,264,268,271,315,319,358,362,401,405,438,442,446,534,538,691,695,754,758,765,851,854,946,950,954,1082,1086,1094,1098,1102,1184,1188,1232,1236,1240,1324,1328,1390,1394,1400,1406,1410,1414,1526,1530,1621,1625,1661,1665,1669,1675,1809,1812,1829,1833,1838,1844,1848,1852,1870,1874,1880,1884,1916,1919,1933],[210,211,150],"h1",{"id":212},"production-setup",[214,215,216],"p",{},"Guide to setting up SkyPort in a production environment.",[218,219,221],"h2",{"id":220},"server-requirements","Server Requirements",[223,224,226],"h3",{"id":225},"minimum","Minimum",[228,229,230,234,237,240],"ul",{},[231,232,233],"li",{},"CPU: 2 cores",[231,235,236],{},"RAM: 2GB",[231,238,239],{},"Storage: 10GB",[231,241,242],{},"Network: 100Mbps connection",[223,244,246],{"id":245},"recommended","Recommended",[228,248,249,252,255,258,261],{},[231,250,251],{},"CPU: 4+ cores",[231,253,254],{},"RAM: 8GB+",[231,256,257],{},"Storage: 50GB+ SSD",[231,259,260],{},"Network: 1Gbps connection",[231,262,263],{},"Backup storage",[218,265,267],{"id":266},"pre-production-checklist","Pre-Production Checklist",[223,269,162],{"id":270},"security",[228,272,275,285,291,297,303,309],{"className":273},[274],"contains-task-list",[231,276,279,284],{"className":277},[278],"task-list-item",[280,281],"input",{"disabled":282,"type":283},true,"checkbox"," Enable HTTPS with valid certificates",[231,286,288,290],{"className":287},[278],[280,289],{"disabled":282,"type":283}," Configure firewall rules",[231,292,294,296],{"className":293},[278],[280,295],{"disabled":282,"type":283}," Set up strong authentication",[231,298,300,302],{"className":299},[278],[280,301],{"disabled":282,"type":283}," Enable audit logging",[231,304,306,308],{"className":305},[278],[280,307],{"disabled":282,"type":283}," Configure API rate limiting",[231,310,312,314],{"className":311},[278],[280,313],{"disabled":282,"type":283}," Use SSH keys for server access",[223,316,318],{"id":317},"performance","Performance",[228,320,322,328,334,340,346,352],{"className":321},[274],[231,323,325,327],{"className":324},[278],[280,326],{"disabled":282,"type":283}," Configure reverse proxy (Caddy\u002FNginx)",[231,329,331,333],{"className":330},[278],[280,332],{"disabled":282,"type":283}," Enable caching",[231,335,337,339],{"className":336},[278],[280,338],{"disabled":282,"type":283}," Set up monitoring",[231,341,343,345],{"className":342},[278],[280,344],{"disabled":282,"type":283}," Configure auto-scaling",[231,347,349,351],{"className":348},[278],[280,350],{"disabled":282,"type":283}," Test load handling",[231,353,355,357],{"className":354},[278],[280,356],{"disabled":282,"type":283}," Optimize Docker resource limits",[223,359,361],{"id":360},"reliability","Reliability",[228,363,365,371,377,383,389,395],{"className":364},[274],[231,366,368,370],{"className":367},[278],[280,369],{"disabled":282,"type":283}," Configure backups",[231,372,374,376],{"className":373},[278],[280,375],{"disabled":282,"type":283}," Set up monitoring and alerts",[231,378,380,382],{"className":379},[278],[280,381],{"disabled":282,"type":283}," Enable health checks",[231,384,386,388],{"className":385},[278],[280,387],{"disabled":282,"type":283}," Configure auto-restart policies",[231,390,392,394],{"className":391},[278],[280,393],{"disabled":282,"type":283}," Test disaster recovery",[231,396,398,400],{"className":397},[278],[280,399],{"disabled":282,"type":283}," Document runbooks",[223,402,404],{"id":403},"compliance","Compliance",[228,406,408,414,420,426,432],{"className":407},[274],[231,409,411,413],{"className":410},[278],[280,412],{"disabled":282,"type":283}," Enable logging and retention",[231,415,417,419],{"className":416},[278],[280,418],{"disabled":282,"type":283}," Configure access controls",[231,421,423,425],{"className":422},[278],[280,424],{"disabled":282,"type":283}," Document security policies",[231,427,429,431],{"className":428},[278],[280,430],{"disabled":282,"type":283}," Plan compliance audits",[231,433,435,437],{"className":434},[278],[280,436],{"disabled":282,"type":283}," Configure data encryption",[218,439,441],{"id":440},"installation-for-production","Installation for Production",[223,443,445],{"id":444},"_1-secure-ssh-access","1. Secure SSH Access",[447,448,453],"pre",{"className":449,"code":450,"language":451,"meta":452,"style":452},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Disable password authentication\nsudo nano \u002Fetc\u002Fssh\u002Fsshd_config\n# Set: PasswordAuthentication no\n# Set: PubkeyAuthentication yes\n\n# Restart SSH\nsudo systemctl restart sshd\n\n# Verify no root login\n# Set: PermitRootLogin no\n","bash","",[454,455,456,465,479,485,491,497,503,517,522,528],"code",{"__ignoreMap":452},[457,458,461],"span",{"class":459,"line":460},"line",1,[457,462,464],{"class":463},"sHwdD","# Disable password authentication\n",[457,466,468,472,476],{"class":459,"line":467},2,[457,469,471],{"class":470},"sBMFI","sudo",[457,473,475],{"class":474},"sfazB"," nano",[457,477,478],{"class":474}," \u002Fetc\u002Fssh\u002Fsshd_config\n",[457,480,482],{"class":459,"line":481},3,[457,483,484],{"class":463},"# Set: PasswordAuthentication no\n",[457,486,488],{"class":459,"line":487},4,[457,489,490],{"class":463},"# Set: PubkeyAuthentication yes\n",[457,492,494],{"class":459,"line":493},5,[457,495,496],{"emptyLinePlaceholder":282},"\n",[457,498,500],{"class":459,"line":499},6,[457,501,502],{"class":463},"# Restart SSH\n",[457,504,506,508,511,514],{"class":459,"line":505},7,[457,507,471],{"class":470},[457,509,510],{"class":474}," systemctl",[457,512,513],{"class":474}," restart",[457,515,516],{"class":474}," sshd\n",[457,518,520],{"class":459,"line":519},8,[457,521,496],{"emptyLinePlaceholder":282},[457,523,525],{"class":459,"line":524},9,[457,526,527],{"class":463},"# Verify no root login\n",[457,529,531],{"class":459,"line":530},10,[457,532,533],{"class":463},"# Set: PermitRootLogin no\n",[223,535,537],{"id":536},"_2-system-hardening","2. System Hardening",[447,539,541],{"className":449,"code":540,"language":451,"meta":452,"style":452},"# Update system\nsudo apt update && sudo apt upgrade -y\n\n# Enable firewall\nsudo ufw enable\nsudo ufw default deny incoming\nsudo ufw default allow outgoing\n\n# Allow SSH\nsudo ufw allow 22\u002Ftcp\n\n# Allow HTTP\u002FHTTPS for SkyPort\nsudo ufw allow 80\u002Ftcp\nsudo ufw allow 443\u002Ftcp\nsudo ufw allow 8080\u002Ftcp  # SkyPort WebUI\n",[454,542,543,548,573,577,582,592,607,621,625,630,641,646,652,664,676],{"__ignoreMap":452},[457,544,545],{"class":459,"line":460},[457,546,547],{"class":463},"# Update system\n",[457,549,550,552,555,558,562,565,567,570],{"class":459,"line":467},[457,551,471],{"class":470},[457,553,554],{"class":474}," apt",[457,556,557],{"class":474}," update",[457,559,561],{"class":560},"sMK4o"," &&",[457,563,564],{"class":470}," sudo",[457,566,554],{"class":474},[457,568,569],{"class":474}," upgrade",[457,571,572],{"class":474}," -y\n",[457,574,575],{"class":459,"line":481},[457,576,496],{"emptyLinePlaceholder":282},[457,578,579],{"class":459,"line":487},[457,580,581],{"class":463},"# Enable firewall\n",[457,583,584,586,589],{"class":459,"line":493},[457,585,471],{"class":470},[457,587,588],{"class":474}," ufw",[457,590,591],{"class":474}," enable\n",[457,593,594,596,598,601,604],{"class":459,"line":499},[457,595,471],{"class":470},[457,597,588],{"class":474},[457,599,600],{"class":474}," default",[457,602,603],{"class":474}," deny",[457,605,606],{"class":474}," incoming\n",[457,608,609,611,613,615,618],{"class":459,"line":505},[457,610,471],{"class":470},[457,612,588],{"class":474},[457,614,600],{"class":474},[457,616,617],{"class":474}," allow",[457,619,620],{"class":474}," outgoing\n",[457,622,623],{"class":459,"line":519},[457,624,496],{"emptyLinePlaceholder":282},[457,626,627],{"class":459,"line":524},[457,628,629],{"class":463},"# Allow SSH\n",[457,631,632,634,636,638],{"class":459,"line":530},[457,633,471],{"class":470},[457,635,588],{"class":474},[457,637,617],{"class":474},[457,639,640],{"class":474}," 22\u002Ftcp\n",[457,642,644],{"class":459,"line":643},11,[457,645,496],{"emptyLinePlaceholder":282},[457,647,649],{"class":459,"line":648},12,[457,650,651],{"class":463},"# Allow HTTP\u002FHTTPS for SkyPort\n",[457,653,655,657,659,661],{"class":459,"line":654},13,[457,656,471],{"class":470},[457,658,588],{"class":474},[457,660,617],{"class":474},[457,662,663],{"class":474}," 80\u002Ftcp\n",[457,665,667,669,671,673],{"class":459,"line":666},14,[457,668,471],{"class":470},[457,670,588],{"class":474},[457,672,617],{"class":474},[457,674,675],{"class":474}," 443\u002Ftcp\n",[457,677,679,681,683,685,688],{"class":459,"line":678},15,[457,680,471],{"class":470},[457,682,588],{"class":474},[457,684,617],{"class":474},[457,686,687],{"class":474}," 8080\u002Ftcp",[457,689,690],{"class":463},"  # SkyPort WebUI\n",[223,692,694],{"id":693},"_3-install-skyport","3. Install SkyPort",[447,696,698],{"className":449,"code":697,"language":451,"meta":452,"style":452},"# Download production binary\nwget https:\u002F\u002Fgithub.com\u002FNil369\u002FSkyPort\u002Freleases\u002Flatest\u002Fdownload\u002Fskyport-linux-amd64\nchmod +x skyport-linux-amd64\nsudo mv skyport-linux-amd64 \u002Fusr\u002Flocal\u002Fbin\u002Fskyport\n\n# Verify\nskyport --version\n",[454,699,700,705,713,724,737,741,746],{"__ignoreMap":452},[457,701,702],{"class":459,"line":460},[457,703,704],{"class":463},"# Download production binary\n",[457,706,707,710],{"class":459,"line":467},[457,708,709],{"class":470},"wget",[457,711,712],{"class":474}," https:\u002F\u002Fgithub.com\u002FNil369\u002FSkyPort\u002Freleases\u002Flatest\u002Fdownload\u002Fskyport-linux-amd64\n",[457,714,715,718,721],{"class":459,"line":481},[457,716,717],{"class":470},"chmod",[457,719,720],{"class":474}," +x",[457,722,723],{"class":474}," skyport-linux-amd64\n",[457,725,726,728,731,734],{"class":459,"line":487},[457,727,471],{"class":470},[457,729,730],{"class":474}," mv",[457,732,733],{"class":474}," skyport-linux-amd64",[457,735,736],{"class":474}," \u002Fusr\u002Flocal\u002Fbin\u002Fskyport\n",[457,738,739],{"class":459,"line":493},[457,740,496],{"emptyLinePlaceholder":282},[457,742,743],{"class":459,"line":499},[457,744,745],{"class":463},"# Verify\n",[457,747,748,751],{"class":459,"line":505},[457,749,750],{"class":470},"skyport",[457,752,753],{"class":474}," --version\n",[223,755,757],{"id":756},"_4-create-systemd-service","4. Create Systemd Service",[214,759,760,761,764],{},"Create ",[454,762,763],{},"\u002Fetc\u002Fsystemd\u002Fsystem\u002Fskyport.service",":",[447,766,770],{"className":767,"code":768,"language":769,"meta":452,"style":452},"language-ini shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[Unit]\nDescription=SkyPort Infrastructure Platform\nAfter=network.target docker.service\nWants=docker.service\n\n[Service]\nType=simple\nUser=skyport\nExecStart=\u002Fusr\u002Flocal\u002Fbin\u002Fskyport start webui --port 8080\nRestart=always\nRestartSec=10\nStandardOutput=journal\nStandardError=journal\n\n[Install]\nWantedBy=multi-user.target\n","ini",[454,771,772,777,782,787,792,796,801,806,811,816,821,826,831,836,840,845],{"__ignoreMap":452},[457,773,774],{"class":459,"line":460},[457,775,776],{},"[Unit]\n",[457,778,779],{"class":459,"line":467},[457,780,781],{},"Description=SkyPort Infrastructure Platform\n",[457,783,784],{"class":459,"line":481},[457,785,786],{},"After=network.target docker.service\n",[457,788,789],{"class":459,"line":487},[457,790,791],{},"Wants=docker.service\n",[457,793,794],{"class":459,"line":493},[457,795,496],{"emptyLinePlaceholder":282},[457,797,798],{"class":459,"line":499},[457,799,800],{},"[Service]\n",[457,802,803],{"class":459,"line":505},[457,804,805],{},"Type=simple\n",[457,807,808],{"class":459,"line":519},[457,809,810],{},"User=skyport\n",[457,812,813],{"class":459,"line":524},[457,814,815],{},"ExecStart=\u002Fusr\u002Flocal\u002Fbin\u002Fskyport start webui --port 8080\n",[457,817,818],{"class":459,"line":530},[457,819,820],{},"Restart=always\n",[457,822,823],{"class":459,"line":643},[457,824,825],{},"RestartSec=10\n",[457,827,828],{"class":459,"line":648},[457,829,830],{},"StandardOutput=journal\n",[457,832,833],{"class":459,"line":654},[457,834,835],{},"StandardError=journal\n",[457,837,838],{"class":459,"line":666},[457,839,496],{"emptyLinePlaceholder":282},[457,841,842],{"class":459,"line":678},[457,843,844],{},"[Install]\n",[457,846,848],{"class":459,"line":847},16,[457,849,850],{},"WantedBy=multi-user.target\n",[214,852,853],{},"Enable and start:",[447,855,857],{"className":449,"code":856,"language":451,"meta":452,"style":452},"# Create skyport user\nsudo useradd -r -s \u002Fbin\u002Ffalse skyport\n\n# Enable service\nsudo systemctl daemon-reload\nsudo systemctl enable skyport\nsudo systemctl start skyport\n\n# Check status\nsudo systemctl status skyport\n",[454,858,859,864,886,890,895,904,915,926,930,935],{"__ignoreMap":452},[457,860,861],{"class":459,"line":460},[457,862,863],{"class":463},"# Create skyport user\n",[457,865,866,868,871,874,877,880,883],{"class":459,"line":467},[457,867,471],{"class":470},[457,869,870],{"class":474}," useradd",[457,872,873],{"class":474}," -r",[457,875,876],{"class":474}," -s",[457,878,879],{"class":474}," \u002Fbin\u002F",[457,881,882],{"class":560},"false",[457,884,885],{"class":474}," skyport\n",[457,887,888],{"class":459,"line":481},[457,889,496],{"emptyLinePlaceholder":282},[457,891,892],{"class":459,"line":487},[457,893,894],{"class":463},"# Enable service\n",[457,896,897,899,901],{"class":459,"line":493},[457,898,471],{"class":470},[457,900,510],{"class":474},[457,902,903],{"class":474}," daemon-reload\n",[457,905,906,908,910,913],{"class":459,"line":499},[457,907,471],{"class":470},[457,909,510],{"class":474},[457,911,912],{"class":474}," enable",[457,914,885],{"class":474},[457,916,917,919,921,924],{"class":459,"line":505},[457,918,471],{"class":470},[457,920,510],{"class":474},[457,922,923],{"class":474}," start",[457,925,885],{"class":474},[457,927,928],{"class":459,"line":519},[457,929,496],{"emptyLinePlaceholder":282},[457,931,932],{"class":459,"line":524},[457,933,934],{"class":463},"# Check status\n",[457,936,937,939,941,944],{"class":459,"line":530},[457,938,471],{"class":470},[457,940,510],{"class":474},[457,942,943],{"class":474}," status",[457,945,885],{"class":474},[218,947,949],{"id":948},"reverse-proxy-configuration","Reverse Proxy Configuration",[223,951,953],{"id":952},"nginx","Nginx",[447,955,958],{"className":956,"code":957,"language":952,"meta":452,"style":452},"language-nginx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","server {\n    listen 443 ssl http2;\n    server_name skyport.example.com;\n\n    ssl_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002Fskyport.example.com\u002Ffullchain.pem;\n    ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fskyport.example.com\u002Fprivkey.pem;\n\n    location \u002F {\n        proxy_pass http:\u002F\u002Flocalhost:8080;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n\nserver {\n    listen 80;\n    server_name skyport.example.com;\n    return 301 https:\u002F\u002F$server_name$request_uri;\n}\n",[454,959,960,965,970,975,979,984,989,993,998,1003,1008,1013,1018,1023,1028,1033,1038,1044,1050,1055,1060,1066,1071,1077],{"__ignoreMap":452},[457,961,962],{"class":459,"line":460},[457,963,964],{},"server {\n",[457,966,967],{"class":459,"line":467},[457,968,969],{},"    listen 443 ssl http2;\n",[457,971,972],{"class":459,"line":481},[457,973,974],{},"    server_name skyport.example.com;\n",[457,976,977],{"class":459,"line":487},[457,978,496],{"emptyLinePlaceholder":282},[457,980,981],{"class":459,"line":493},[457,982,983],{},"    ssl_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002Fskyport.example.com\u002Ffullchain.pem;\n",[457,985,986],{"class":459,"line":499},[457,987,988],{},"    ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fskyport.example.com\u002Fprivkey.pem;\n",[457,990,991],{"class":459,"line":505},[457,992,496],{"emptyLinePlaceholder":282},[457,994,995],{"class":459,"line":519},[457,996,997],{},"    location \u002F {\n",[457,999,1000],{"class":459,"line":524},[457,1001,1002],{},"        proxy_pass http:\u002F\u002Flocalhost:8080;\n",[457,1004,1005],{"class":459,"line":530},[457,1006,1007],{},"        proxy_http_version 1.1;\n",[457,1009,1010],{"class":459,"line":643},[457,1011,1012],{},"        proxy_set_header Upgrade $http_upgrade;\n",[457,1014,1015],{"class":459,"line":648},[457,1016,1017],{},"        proxy_set_header Connection \"upgrade\";\n",[457,1019,1020],{"class":459,"line":654},[457,1021,1022],{},"        proxy_set_header Host $host;\n",[457,1024,1025],{"class":459,"line":666},[457,1026,1027],{},"        proxy_set_header X-Real-IP $remote_addr;\n",[457,1029,1030],{"class":459,"line":678},[457,1031,1032],{},"        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n",[457,1034,1035],{"class":459,"line":847},[457,1036,1037],{},"        proxy_set_header X-Forwarded-Proto $scheme;\n",[457,1039,1041],{"class":459,"line":1040},17,[457,1042,1043],{},"    }\n",[457,1045,1047],{"class":459,"line":1046},18,[457,1048,1049],{},"}\n",[457,1051,1053],{"class":459,"line":1052},19,[457,1054,496],{"emptyLinePlaceholder":282},[457,1056,1058],{"class":459,"line":1057},20,[457,1059,964],{},[457,1061,1063],{"class":459,"line":1062},21,[457,1064,1065],{},"    listen 80;\n",[457,1067,1069],{"class":459,"line":1068},22,[457,1070,974],{},[457,1072,1074],{"class":459,"line":1073},23,[457,1075,1076],{},"    return 301 https:\u002F\u002F$server_name$request_uri;\n",[457,1078,1080],{"class":459,"line":1079},24,[457,1081,1049],{},[223,1083,1085],{"id":1084},"caddy","Caddy",[447,1087,1092],{"className":1088,"code":1090,"language":1091},[1089],"language-text","skyport.example.com {\n    reverse_proxy localhost:8080\n}\n","text",[454,1093,1090],{"__ignoreMap":452},[218,1095,1097],{"id":1096},"tlsssl-certificate","TLS\u002FSSL Certificate",[223,1099,1101],{"id":1100},"using-lets-encrypt","Using Let's Encrypt",[447,1103,1105],{"className":449,"code":1104,"language":451,"meta":452,"style":452},"# Install Certbot\nsudo apt install certbot python3-certbot-nginx\n\n# Generate certificate\nsudo certbot certonly --nginx -d skyport.example.com\n\n# Auto-renewal\nsudo systemctl enable certbot.timer\nsudo systemctl start certbot.timer\n",[454,1106,1107,1112,1127,1131,1136,1154,1158,1163,1174],{"__ignoreMap":452},[457,1108,1109],{"class":459,"line":460},[457,1110,1111],{"class":463},"# Install Certbot\n",[457,1113,1114,1116,1118,1121,1124],{"class":459,"line":467},[457,1115,471],{"class":470},[457,1117,554],{"class":474},[457,1119,1120],{"class":474}," install",[457,1122,1123],{"class":474}," certbot",[457,1125,1126],{"class":474}," python3-certbot-nginx\n",[457,1128,1129],{"class":459,"line":481},[457,1130,496],{"emptyLinePlaceholder":282},[457,1132,1133],{"class":459,"line":487},[457,1134,1135],{"class":463},"# Generate certificate\n",[457,1137,1138,1140,1142,1145,1148,1151],{"class":459,"line":493},[457,1139,471],{"class":470},[457,1141,1123],{"class":474},[457,1143,1144],{"class":474}," certonly",[457,1146,1147],{"class":474}," --nginx",[457,1149,1150],{"class":474}," -d",[457,1152,1153],{"class":474}," skyport.example.com\n",[457,1155,1156],{"class":459,"line":499},[457,1157,496],{"emptyLinePlaceholder":282},[457,1159,1160],{"class":459,"line":505},[457,1161,1162],{"class":463},"# Auto-renewal\n",[457,1164,1165,1167,1169,1171],{"class":459,"line":519},[457,1166,471],{"class":470},[457,1168,510],{"class":474},[457,1170,912],{"class":474},[457,1172,1173],{"class":474}," certbot.timer\n",[457,1175,1176,1178,1180,1182],{"class":459,"line":524},[457,1177,471],{"class":470},[457,1179,510],{"class":474},[457,1181,923],{"class":474},[457,1183,1173],{"class":474},[223,1185,1187],{"id":1186},"self-signed-for-testing-only","Self-Signed (for testing only)",[447,1189,1191],{"className":449,"code":1190,"language":451,"meta":452,"style":452},"openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes\n",[454,1192,1193],{"__ignoreMap":452},[457,1194,1195,1198,1201,1204,1207,1210,1213,1216,1219,1222,1225,1229],{"class":459,"line":460},[457,1196,1197],{"class":470},"openssl",[457,1199,1200],{"class":474}," req",[457,1202,1203],{"class":474}," -x509",[457,1205,1206],{"class":474}," -newkey",[457,1208,1209],{"class":474}," rsa:4096",[457,1211,1212],{"class":474}," -keyout",[457,1214,1215],{"class":474}," key.pem",[457,1217,1218],{"class":474}," -out",[457,1220,1221],{"class":474}," cert.pem",[457,1223,1224],{"class":474}," -days",[457,1226,1228],{"class":1227},"sbssI"," 365",[457,1230,1231],{"class":474}," -nodes\n",[218,1233,1235],{"id":1234},"monitoring-alerts","Monitoring & Alerts",[223,1237,1239],{"id":1238},"system-monitoring","System Monitoring",[447,1241,1243],{"className":449,"code":1242,"language":451,"meta":452,"style":452},"# Install monitoring tools\nsudo apt install htop iotop nethogs\n\n# Monitor in real-time\nhtop\n\n# Check disk usage\ndu -sh *\ndf -h\n\n# Network stats\nnethogs\n",[454,1244,1245,1250,1267,1271,1276,1281,1285,1290,1302,1310,1314,1319],{"__ignoreMap":452},[457,1246,1247],{"class":459,"line":460},[457,1248,1249],{"class":463},"# Install monitoring tools\n",[457,1251,1252,1254,1256,1258,1261,1264],{"class":459,"line":467},[457,1253,471],{"class":470},[457,1255,554],{"class":474},[457,1257,1120],{"class":474},[457,1259,1260],{"class":474}," htop",[457,1262,1263],{"class":474}," iotop",[457,1265,1266],{"class":474}," nethogs\n",[457,1268,1269],{"class":459,"line":481},[457,1270,496],{"emptyLinePlaceholder":282},[457,1272,1273],{"class":459,"line":487},[457,1274,1275],{"class":463},"# Monitor in real-time\n",[457,1277,1278],{"class":459,"line":493},[457,1279,1280],{"class":470},"htop\n",[457,1282,1283],{"class":459,"line":499},[457,1284,496],{"emptyLinePlaceholder":282},[457,1286,1287],{"class":459,"line":505},[457,1288,1289],{"class":463},"# Check disk usage\n",[457,1291,1292,1295,1298],{"class":459,"line":519},[457,1293,1294],{"class":470},"du",[457,1296,1297],{"class":474}," -sh",[457,1299,1301],{"class":1300},"sTEyZ"," *\n",[457,1303,1304,1307],{"class":459,"line":524},[457,1305,1306],{"class":470},"df",[457,1308,1309],{"class":474}," -h\n",[457,1311,1312],{"class":459,"line":530},[457,1313,496],{"emptyLinePlaceholder":282},[457,1315,1316],{"class":459,"line":643},[457,1317,1318],{"class":463},"# Network stats\n",[457,1320,1321],{"class":459,"line":648},[457,1322,1323],{"class":470},"nethogs\n",[223,1325,1327],{"id":1326},"application-monitoring","Application Monitoring",[447,1329,1331],{"className":449,"code":1330,"language":451,"meta":452,"style":452},"# SkyPort status\nskyport status\n\n# View system metrics\nskyport metrics\n\n# Check all services\nskyport docker ps\nskyport pm2 list\n",[454,1332,1333,1338,1345,1349,1354,1361,1365,1370,1380],{"__ignoreMap":452},[457,1334,1335],{"class":459,"line":460},[457,1336,1337],{"class":463},"# SkyPort status\n",[457,1339,1340,1342],{"class":459,"line":467},[457,1341,750],{"class":470},[457,1343,1344],{"class":474}," status\n",[457,1346,1347],{"class":459,"line":481},[457,1348,496],{"emptyLinePlaceholder":282},[457,1350,1351],{"class":459,"line":487},[457,1352,1353],{"class":463},"# View system metrics\n",[457,1355,1356,1358],{"class":459,"line":493},[457,1357,750],{"class":470},[457,1359,1360],{"class":474}," metrics\n",[457,1362,1363],{"class":459,"line":499},[457,1364,496],{"emptyLinePlaceholder":282},[457,1366,1367],{"class":459,"line":505},[457,1368,1369],{"class":463},"# Check all services\n",[457,1371,1372,1374,1377],{"class":459,"line":519},[457,1373,750],{"class":470},[457,1375,1376],{"class":474}," docker",[457,1378,1379],{"class":474}," ps\n",[457,1381,1382,1384,1387],{"class":459,"line":524},[457,1383,750],{"class":470},[457,1385,1386],{"class":474}," pm2",[457,1388,1389],{"class":474}," list\n",[223,1391,1393],{"id":1392},"log-aggregation","Log Aggregation",[214,1395,1396,1397,764],{},"Configure log rotation in ",[454,1398,1399],{},"\u002Fetc\u002Flogrotate.d\u002Fskyport",[447,1401,1404],{"className":1402,"code":1403,"language":1091},[1089],"\u002Fvar\u002Flog\u002Fskyport\u002F*.log {\n    daily\n    rotate 30\n    compress\n    delaycompress\n    notifempty\n    create 0640 skyport skyport\n    sharedscripts\n    postrotate\n        systemctl reload skyport > \u002Fdev\u002Fnull 2>&1 || true\n    endscript\n}\n",[454,1405,1403],{"__ignoreMap":452},[218,1407,1409],{"id":1408},"backup-strategy","Backup Strategy",[223,1411,1413],{"id":1412},"database-backups","Database Backups",[447,1415,1417],{"className":449,"code":1416,"language":451,"meta":452,"style":452},"# Backup PostgreSQL database\ndocker exec postgres pg_dump -U postgres dbname > backup.sql\n\n# Schedule with cron\n0 2 * * * docker exec postgres pg_dump -U postgres dbname > \u002Fbackups\u002F$(date +\\%Y\\%m\\%d).sql\n",[454,1418,1419,1424,1452,1456,1461],{"__ignoreMap":452},[457,1420,1421],{"class":459,"line":460},[457,1422,1423],{"class":463},"# Backup PostgreSQL database\n",[457,1425,1426,1429,1432,1435,1438,1441,1443,1446,1449],{"class":459,"line":467},[457,1427,1428],{"class":470},"docker",[457,1430,1431],{"class":474}," exec",[457,1433,1434],{"class":474}," postgres",[457,1436,1437],{"class":474}," pg_dump",[457,1439,1440],{"class":474}," -U",[457,1442,1434],{"class":474},[457,1444,1445],{"class":474}," dbname",[457,1447,1448],{"class":560}," >",[457,1450,1451],{"class":474}," backup.sql\n",[457,1453,1454],{"class":459,"line":481},[457,1455,496],{"emptyLinePlaceholder":282},[457,1457,1458],{"class":459,"line":487},[457,1459,1460],{"class":463},"# Schedule with cron\n",[457,1462,1463,1466,1469,1472,1474,1476,1478,1480,1482,1484,1486,1488,1490,1492,1495,1498,1501,1504,1507,1510,1512,1515,1517,1520,1523],{"class":459,"line":493},[457,1464,1465],{"class":470},"0",[457,1467,1468],{"class":1227}," 2",[457,1470,1471],{"class":1300}," *",[457,1473,1471],{"class":1300},[457,1475,1471],{"class":1300},[457,1477,1376],{"class":474},[457,1479,1431],{"class":474},[457,1481,1434],{"class":474},[457,1483,1437],{"class":474},[457,1485,1440],{"class":474},[457,1487,1434],{"class":474},[457,1489,1445],{"class":474},[457,1491,1448],{"class":560},[457,1493,1494],{"class":474}," \u002Fbackups\u002F",[457,1496,1497],{"class":560},"$(",[457,1499,1500],{"class":470},"date",[457,1502,1503],{"class":474}," +",[457,1505,1506],{"class":1300},"\\%",[457,1508,1509],{"class":474},"Y",[457,1511,1506],{"class":1300},[457,1513,1514],{"class":474},"m",[457,1516,1506],{"class":1300},[457,1518,1519],{"class":474},"d",[457,1521,1522],{"class":560},")",[457,1524,1525],{"class":474},".sql\n",[223,1527,1529],{"id":1528},"volume-backups","Volume Backups",[447,1531,1533],{"className":449,"code":1532,"language":451,"meta":452,"style":452},"# Backup Docker volumes\nskyport docker volume backup data-volume --destination \u002Fbackups\u002Fdata.tar.gz\n\n# Schedule backups\n0 3 * * * skyport docker volume backup data-volume --destination \u002Fbackups\u002F$(date +\\%Y\\%m\\%d).tar.gz\n",[454,1534,1535,1540,1561,1565,1570],{"__ignoreMap":452},[457,1536,1537],{"class":459,"line":460},[457,1538,1539],{"class":463},"# Backup Docker volumes\n",[457,1541,1542,1544,1546,1549,1552,1555,1558],{"class":459,"line":467},[457,1543,750],{"class":470},[457,1545,1376],{"class":474},[457,1547,1548],{"class":474}," volume",[457,1550,1551],{"class":474}," backup",[457,1553,1554],{"class":474}," data-volume",[457,1556,1557],{"class":474}," --destination",[457,1559,1560],{"class":474}," \u002Fbackups\u002Fdata.tar.gz\n",[457,1562,1563],{"class":459,"line":481},[457,1564,496],{"emptyLinePlaceholder":282},[457,1566,1567],{"class":459,"line":487},[457,1568,1569],{"class":463},"# Schedule backups\n",[457,1571,1572,1574,1577,1579,1581,1583,1586,1588,1590,1592,1594,1596,1598,1600,1602,1604,1606,1608,1610,1612,1614,1616,1618],{"class":459,"line":493},[457,1573,1465],{"class":470},[457,1575,1576],{"class":1227}," 3",[457,1578,1471],{"class":1300},[457,1580,1471],{"class":1300},[457,1582,1471],{"class":1300},[457,1584,1585],{"class":474}," skyport",[457,1587,1376],{"class":474},[457,1589,1548],{"class":474},[457,1591,1551],{"class":474},[457,1593,1554],{"class":474},[457,1595,1557],{"class":474},[457,1597,1494],{"class":474},[457,1599,1497],{"class":560},[457,1601,1500],{"class":470},[457,1603,1503],{"class":474},[457,1605,1506],{"class":1300},[457,1607,1509],{"class":474},[457,1609,1506],{"class":1300},[457,1611,1514],{"class":474},[457,1613,1506],{"class":1300},[457,1615,1519],{"class":474},[457,1617,1522],{"class":560},[457,1619,1620],{"class":474},".tar.gz\n",[223,1622,1624],{"id":1623},"configuration-backups","Configuration Backups",[447,1626,1628],{"className":449,"code":1627,"language":451,"meta":452,"style":452},"# Backup SkyPort configuration\ntar -czf ~\u002F.skyport-backup-$(date +%Y%m%d).tar.gz ~\u002F.skyport\u002F\n",[454,1629,1630,1635],{"__ignoreMap":452},[457,1631,1632],{"class":459,"line":460},[457,1633,1634],{"class":463},"# Backup SkyPort configuration\n",[457,1636,1637,1640,1643,1646,1648,1650,1653,1655,1658],{"class":459,"line":467},[457,1638,1639],{"class":470},"tar",[457,1641,1642],{"class":474}," -czf",[457,1644,1645],{"class":474}," ~\u002F.skyport-backup-",[457,1647,1497],{"class":560},[457,1649,1500],{"class":470},[457,1651,1652],{"class":474}," +%Y%m%d",[457,1654,1522],{"class":560},[457,1656,1657],{"class":474},".tar.gz",[457,1659,1660],{"class":474}," ~\u002F.skyport\u002F\n",[218,1662,1664],{"id":1663},"performance-tuning","Performance Tuning",[223,1666,1668],{"id":1667},"docker-daemon-configuration","Docker Daemon Configuration",[214,1670,1671,1672,764],{},"Edit ",[454,1673,1674],{},"\u002Fetc\u002Fdocker\u002Fdaemon.json",[447,1676,1680],{"className":1677,"code":1678,"language":1679,"meta":452,"style":452},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"log-driver\": \"json-file\",\n  \"log-opts\": {\n    \"max-size\": \"10m\",\n    \"max-file\": \"3\"\n  },\n  \"storage-driver\": \"overlay2\",\n  \"userland-proxy\": false\n}\n","json",[454,1681,1682,1687,1712,1726,1747,1766,1771,1791,1805],{"__ignoreMap":452},[457,1683,1684],{"class":459,"line":460},[457,1685,1686],{"class":560},"{\n",[457,1688,1689,1692,1696,1699,1701,1704,1707,1709],{"class":459,"line":467},[457,1690,1691],{"class":560},"  \"",[457,1693,1695],{"class":1694},"spNyl","log-driver",[457,1697,1698],{"class":560},"\"",[457,1700,764],{"class":560},[457,1702,1703],{"class":560}," \"",[457,1705,1706],{"class":474},"json-file",[457,1708,1698],{"class":560},[457,1710,1711],{"class":560},",\n",[457,1713,1714,1716,1719,1721,1723],{"class":459,"line":481},[457,1715,1691],{"class":560},[457,1717,1718],{"class":1694},"log-opts",[457,1720,1698],{"class":560},[457,1722,764],{"class":560},[457,1724,1725],{"class":560}," {\n",[457,1727,1728,1731,1734,1736,1738,1740,1743,1745],{"class":459,"line":487},[457,1729,1730],{"class":560},"    \"",[457,1732,1733],{"class":470},"max-size",[457,1735,1698],{"class":560},[457,1737,764],{"class":560},[457,1739,1703],{"class":560},[457,1741,1742],{"class":474},"10m",[457,1744,1698],{"class":560},[457,1746,1711],{"class":560},[457,1748,1749,1751,1754,1756,1758,1760,1763],{"class":459,"line":493},[457,1750,1730],{"class":560},[457,1752,1753],{"class":470},"max-file",[457,1755,1698],{"class":560},[457,1757,764],{"class":560},[457,1759,1703],{"class":560},[457,1761,1762],{"class":474},"3",[457,1764,1765],{"class":560},"\"\n",[457,1767,1768],{"class":459,"line":499},[457,1769,1770],{"class":560},"  },\n",[457,1772,1773,1775,1778,1780,1782,1784,1787,1789],{"class":459,"line":505},[457,1774,1691],{"class":560},[457,1776,1777],{"class":1694},"storage-driver",[457,1779,1698],{"class":560},[457,1781,764],{"class":560},[457,1783,1703],{"class":560},[457,1785,1786],{"class":474},"overlay2",[457,1788,1698],{"class":560},[457,1790,1711],{"class":560},[457,1792,1793,1795,1798,1800,1802],{"class":459,"line":519},[457,1794,1691],{"class":560},[457,1796,1797],{"class":1694},"userland-proxy",[457,1799,1698],{"class":560},[457,1801,764],{"class":560},[457,1803,1804],{"class":560}," false\n",[457,1806,1807],{"class":459,"line":524},[457,1808,1049],{"class":560},[214,1810,1811],{},"Reload:",[447,1813,1815],{"className":449,"code":1814,"language":451,"meta":452,"style":452},"sudo systemctl reload docker\n",[454,1816,1817],{"__ignoreMap":452},[457,1818,1819,1821,1823,1826],{"class":459,"line":460},[457,1820,471],{"class":470},[457,1822,510],{"class":474},[457,1824,1825],{"class":474}," reload",[457,1827,1828],{"class":474}," docker\n",[223,1830,1832],{"id":1831},"system-limits","System Limits",[214,1834,1671,1835,764],{},[454,1836,1837],{},"\u002Fetc\u002Fsecurity\u002Flimits.conf",[447,1839,1842],{"className":1840,"code":1841,"language":1091},[1089],"skyport soft nofile 65535\nskyport hard nofile 65535\nskyport soft nproc 65535\nskyport hard nproc 65535\n",[454,1843,1841],{"__ignoreMap":452},[218,1845,1847],{"id":1846},"high-availability","High Availability",[223,1849,1851],{"id":1850},"multi-server-setup","Multi-Server Setup",[1853,1854,1855,1858,1861,1864,1867],"ol",{},[231,1856,1857],{},"Set up load balancer (HAProxy, Nginx)",[231,1859,1860],{},"Install SkyPort on multiple servers",[231,1862,1863],{},"Configure shared storage for data",[231,1865,1866],{},"Use database clustering if applicable",[231,1868,1869],{},"Set up health checks",[223,1871,1873],{"id":1872},"load-balancer-configuration-haproxy","Load Balancer Configuration (HAProxy)",[447,1875,1878],{"className":1876,"code":1877,"language":1091},[1089],"global\n    maxconn 4096\n\nfrontend web\n    bind *:80\n    bind *:443 ssl crt \u002Fetc\u002Fssl\u002Fcert.pem\n    default_backend servers\n\nbackend servers\n    server skyport1 192.168.1.10:8080 check\n    server skyport2 192.168.1.11:8080 check\n    server skyport3 192.168.1.12:8080 check\n",[454,1879,1877],{"__ignoreMap":452},[218,1881,1883],{"id":1882},"security-best-practices","Security Best Practices",[228,1885,1886,1889,1892,1895,1898,1901,1904,1907,1910,1913],{},[231,1887,1888],{},"Enable HTTPS only (disable HTTP)",[231,1890,1891],{},"Use strong passwords and API tokens",[231,1893,1894],{},"Implement rate limiting",[231,1896,1897],{},"Enable audit logging",[231,1899,1900],{},"Regularly update dependencies",[231,1902,1903],{},"Use firewall rules",[231,1905,1906],{},"Enable fail2ban for brute-force protection",[231,1908,1909],{},"Use secrets management for credentials",[231,1911,1912],{},"Regular security audits",[231,1914,1915],{},"Keep backups offline",[1917,1918],"hr",{},[214,1920,1921,1925,1926,1929,1930],{},[1922,1923,1924],"strong",{},"Next",": ",[1927,1928,154],"a",{"href":155}," | ",[1927,1931,1932],{"href":159},"CI\u002FCD Integration",[1934,1935,1936],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":452,"searchDepth":467,"depth":467,"links":1938},[1939,1943,1949,1955,1959,1963,1968,1973,1977,1981],{"id":220,"depth":467,"text":221,"children":1940},[1941,1942],{"id":225,"depth":481,"text":226},{"id":245,"depth":481,"text":246},{"id":266,"depth":467,"text":267,"children":1944},[1945,1946,1947,1948],{"id":270,"depth":481,"text":162},{"id":317,"depth":481,"text":318},{"id":360,"depth":481,"text":361},{"id":403,"depth":481,"text":404},{"id":440,"depth":467,"text":441,"children":1950},[1951,1952,1953,1954],{"id":444,"depth":481,"text":445},{"id":536,"depth":481,"text":537},{"id":693,"depth":481,"text":694},{"id":756,"depth":481,"text":757},{"id":948,"depth":467,"text":949,"children":1956},[1957,1958],{"id":952,"depth":481,"text":953},{"id":1084,"depth":481,"text":1085},{"id":1096,"depth":467,"text":1097,"children":1960},[1961,1962],{"id":1100,"depth":481,"text":1101},{"id":1186,"depth":481,"text":1187},{"id":1234,"depth":467,"text":1235,"children":1964},[1965,1966,1967],{"id":1238,"depth":481,"text":1239},{"id":1326,"depth":481,"text":1327},{"id":1392,"depth":481,"text":1393},{"id":1408,"depth":467,"text":1409,"children":1969},[1970,1971,1972],{"id":1412,"depth":481,"text":1413},{"id":1528,"depth":481,"text":1529},{"id":1623,"depth":481,"text":1624},{"id":1663,"depth":467,"text":1664,"children":1974},[1975,1976],{"id":1667,"depth":481,"text":1668},{"id":1831,"depth":481,"text":1832},{"id":1846,"depth":467,"text":1847,"children":1978},[1979,1980],{"id":1850,"depth":481,"text":1851},{"id":1872,"depth":481,"text":1873},{"id":1882,"depth":467,"text":1883},"Set up SkyPort for production deployments","md",null,{},{"title":150,"description":1982},"VBT4Lg4AFe0XszeJedZ3mA9uwKRHTqUeujMDPN5UcIk",[1989,1991],{"title":141,"path":142,"stem":143,"description":1990,"children":-1},"Configure firewall rules for VPS",{"title":154,"path":155,"stem":156,"description":1992,"children":-1},"Scale applications horizontally and vertically",1778858462138]