[{"data":1,"prerenderedAt":1509},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-first-deployment":204,"-getting-started-first-deployment-surround":1504},[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":31,"body":206,"description":1497,"extension":1498,"links":1499,"meta":1500,"navigation":1501,"path":32,"seo":1502,"stem":33,"__hash__":1503},"docs\u002F1.getting-started\u002F5.first-deployment.md",{"type":207,"value":208,"toc":1475},"minimark",[209,213,218,231,235,240,243,248,256,321,325,376,380,475,479,538,542,545,549,582,586,592,689,693,754,758,795,799,802,877,881,885,888,949,953,992,996,1052,1056,1059,1123,1127,1176,1180,1245,1249,1253,1312,1316,1364,1368,1425,1429,1461,1464,1471],[210,211,212],"p",{},"This guide walks you through deploying your first application using SkyPort.",[214,215,217],"h2",{"id":216},"prerequisites","Prerequisites",[219,220,221,225,228],"ul",{},[222,223,224],"li",{},"SkyPort installed and running",[222,226,227],{},"Access to the web dashboard or CLI",[222,229,230],{},"An application ready to deploy (Docker image, Node.js app, etc.)",[214,232,234],{"id":233},"deployment-methods","Deployment Methods",[236,237,239],"h3",{"id":238},"method-1-docker-deployment-recommended","Method 1: Docker Deployment (Recommended)",[210,241,242],{},"The simplest way to deploy any application.",[244,245,247],"h4",{"id":246},"step-1-create-a-dockerfile","Step 1: Create a Dockerfile",[210,249,250,251,255],{},"If your app doesn't have one, create a ",[252,253,254],"code",{},"Dockerfile",":",[257,258,263],"pre",{"className":259,"code":260,"language":261,"meta":262,"style":262},"language-dockerfile shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","FROM node:18-alpine\n\nWORKDIR \u002Fapp\nCOPY package*.json .\u002F\nRUN npm ci --only=production\nCOPY . .\n\nEXPOSE 3000\nCMD [\"node\", \"server.js\"]\n","dockerfile","",[252,264,265,273,280,286,292,298,304,309,315],{"__ignoreMap":262},[266,267,270],"span",{"class":268,"line":269},"line",1,[266,271,272],{},"FROM node:18-alpine\n",[266,274,276],{"class":268,"line":275},2,[266,277,279],{"emptyLinePlaceholder":278},true,"\n",[266,281,283],{"class":268,"line":282},3,[266,284,285],{},"WORKDIR \u002Fapp\n",[266,287,289],{"class":268,"line":288},4,[266,290,291],{},"COPY package*.json .\u002F\n",[266,293,295],{"class":268,"line":294},5,[266,296,297],{},"RUN npm ci --only=production\n",[266,299,301],{"class":268,"line":300},6,[266,302,303],{},"COPY . .\n",[266,305,307],{"class":268,"line":306},7,[266,308,279],{"emptyLinePlaceholder":278},[266,310,312],{"class":268,"line":311},8,[266,313,314],{},"EXPOSE 3000\n",[266,316,318],{"class":268,"line":317},9,[266,319,320],{},"CMD [\"node\", \"server.js\"]\n",[244,322,324],{"id":323},"step-2-build-the-image","Step 2: Build the Image",[257,326,330],{"className":327,"code":328,"language":329,"meta":262,"style":262},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Build locally\ndocker build -t my-app:1.0.0 .\n\n# Or pull from registry\ndocker pull nginx:latest\n","bash",[252,331,332,338,357,361,366],{"__ignoreMap":262},[266,333,334],{"class":268,"line":269},[266,335,337],{"class":336},"sHwdD","# Build locally\n",[266,339,340,344,348,351,354],{"class":268,"line":275},[266,341,343],{"class":342},"sBMFI","docker",[266,345,347],{"class":346},"sfazB"," build",[266,349,350],{"class":346}," -t",[266,352,353],{"class":346}," my-app:1.0.0",[266,355,356],{"class":346}," .\n",[266,358,359],{"class":268,"line":282},[266,360,279],{"emptyLinePlaceholder":278},[266,362,363],{"class":268,"line":288},[266,364,365],{"class":336},"# Or pull from registry\n",[266,367,368,370,373],{"class":268,"line":294},[266,369,343],{"class":342},[266,371,372],{"class":346}," pull",[266,374,375],{"class":346}," nginx:latest\n",[244,377,379],{"id":378},"step-3-deploy-with-skyport","Step 3: Deploy with SkyPort",[257,381,383],{"className":327,"code":382,"language":329,"meta":262,"style":262},"# Using CLI\nskyport docker run -d \\\n  --name my-app \\\n  -p 3000:3000 \\\n  -v app-data:\u002Fdata \\\n  my-app:1.0.0\n\n# Or using the dashboard\n# 1. Go to Docker → Run Container\n# 2. Select image\n# 3. Configure ports and volumes\n# 4. Click Deploy\n",[252,384,385,390,408,418,428,438,443,447,452,457,463,469],{"__ignoreMap":262},[266,386,387],{"class":268,"line":269},[266,388,389],{"class":336},"# Using CLI\n",[266,391,392,395,398,401,404],{"class":268,"line":275},[266,393,394],{"class":342},"skyport",[266,396,397],{"class":346}," docker",[266,399,400],{"class":346}," run",[266,402,403],{"class":346}," -d",[266,405,407],{"class":406},"sTEyZ"," \\\n",[266,409,410,413,416],{"class":268,"line":282},[266,411,412],{"class":346},"  --name",[266,414,415],{"class":346}," my-app",[266,417,407],{"class":406},[266,419,420,423,426],{"class":268,"line":288},[266,421,422],{"class":346},"  -p",[266,424,425],{"class":346}," 3000:3000",[266,427,407],{"class":406},[266,429,430,433,436],{"class":268,"line":294},[266,431,432],{"class":346},"  -v",[266,434,435],{"class":346}," app-data:\u002Fdata",[266,437,407],{"class":406},[266,439,440],{"class":268,"line":300},[266,441,442],{"class":346},"  my-app:1.0.0\n",[266,444,445],{"class":268,"line":306},[266,446,279],{"emptyLinePlaceholder":278},[266,448,449],{"class":268,"line":311},[266,450,451],{"class":336},"# Or using the dashboard\n",[266,453,454],{"class":268,"line":317},[266,455,456],{"class":336},"# 1. Go to Docker → Run Container\n",[266,458,460],{"class":268,"line":459},10,[266,461,462],{"class":336},"# 2. Select image\n",[266,464,466],{"class":268,"line":465},11,[266,467,468],{"class":336},"# 3. Configure ports and volumes\n",[266,470,472],{"class":268,"line":471},12,[266,473,474],{"class":336},"# 4. Click Deploy\n",[244,476,478],{"id":477},"step-4-verify-deployment","Step 4: Verify Deployment",[257,480,482],{"className":327,"code":481,"language":329,"meta":262,"style":262},"# Check if running\nskyport docker ps\n\n# View logs\nskyport docker logs my-app -f\n\n# Test the app\ncurl http:\u002F\u002Flocalhost:3000\n",[252,483,484,489,498,502,507,521,525,530],{"__ignoreMap":262},[266,485,486],{"class":268,"line":269},[266,487,488],{"class":336},"# Check if running\n",[266,490,491,493,495],{"class":268,"line":275},[266,492,394],{"class":342},[266,494,397],{"class":346},[266,496,497],{"class":346}," ps\n",[266,499,500],{"class":268,"line":282},[266,501,279],{"emptyLinePlaceholder":278},[266,503,504],{"class":268,"line":288},[266,505,506],{"class":336},"# View logs\n",[266,508,509,511,513,516,518],{"class":268,"line":294},[266,510,394],{"class":342},[266,512,397],{"class":346},[266,514,515],{"class":346}," logs",[266,517,415],{"class":346},[266,519,520],{"class":346}," -f\n",[266,522,523],{"class":268,"line":300},[266,524,279],{"emptyLinePlaceholder":278},[266,526,527],{"class":268,"line":306},[266,528,529],{"class":336},"# Test the app\n",[266,531,532,535],{"class":268,"line":311},[266,533,534],{"class":342},"curl",[266,536,537],{"class":346}," http:\u002F\u002Flocalhost:3000\n",[236,539,541],{"id":540},"method-2-pm2-deployment-nodejs","Method 2: PM2 Deployment (Node.js)",[210,543,544],{},"For Node.js applications without Docker.",[244,546,548],{"id":547},"step-1-clone-your-repository","Step 1: Clone Your Repository",[257,550,552],{"className":327,"code":551,"language":329,"meta":262,"style":262},"git clone https:\u002F\u002Fgithub.com\u002Fusername\u002Fmy-app.git\ncd my-app\nnpm install\n",[252,553,554,565,574],{"__ignoreMap":262},[266,555,556,559,562],{"class":268,"line":269},[266,557,558],{"class":342},"git",[266,560,561],{"class":346}," clone",[266,563,564],{"class":346}," https:\u002F\u002Fgithub.com\u002Fusername\u002Fmy-app.git\n",[266,566,567,571],{"class":268,"line":275},[266,568,570],{"class":569},"s2Zo4","cd",[266,572,573],{"class":346}," my-app\n",[266,575,576,579],{"class":268,"line":282},[266,577,578],{"class":342},"npm",[266,580,581],{"class":346}," install\n",[244,583,585],{"id":584},"step-2-create-ecosystem-config","Step 2: Create Ecosystem Config",[210,587,588,589,255],{},"Create ",[252,590,591],{},"ecosystem.config.js",[257,593,597],{"className":594,"code":595,"language":596,"meta":262,"style":262},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","module.exports = {\n  apps: [\n    {\n      name: 'my-app',\n      script: 'server.js',\n      instances: 2,\n      exec_mode: 'cluster',\n      env: {\n        NODE_ENV: 'production',\n        PORT: 3000,\n      },\n      error_file: '.\u002Flogs\u002Ferror.log',\n      out_file: '.\u002Flogs\u002Fout.log',\n      log_date_format: 'YYYY-MM-DD HH:mm:ss Z',\n    },\n  ],\n};\n","javascript",[252,598,599,604,609,614,619,624,629,634,639,644,649,654,659,665,671,677,683],{"__ignoreMap":262},[266,600,601],{"class":268,"line":269},[266,602,603],{},"module.exports = {\n",[266,605,606],{"class":268,"line":275},[266,607,608],{},"  apps: [\n",[266,610,611],{"class":268,"line":282},[266,612,613],{},"    {\n",[266,615,616],{"class":268,"line":288},[266,617,618],{},"      name: 'my-app',\n",[266,620,621],{"class":268,"line":294},[266,622,623],{},"      script: 'server.js',\n",[266,625,626],{"class":268,"line":300},[266,627,628],{},"      instances: 2,\n",[266,630,631],{"class":268,"line":306},[266,632,633],{},"      exec_mode: 'cluster',\n",[266,635,636],{"class":268,"line":311},[266,637,638],{},"      env: {\n",[266,640,641],{"class":268,"line":317},[266,642,643],{},"        NODE_ENV: 'production',\n",[266,645,646],{"class":268,"line":459},[266,647,648],{},"        PORT: 3000,\n",[266,650,651],{"class":268,"line":465},[266,652,653],{},"      },\n",[266,655,656],{"class":268,"line":471},[266,657,658],{},"      error_file: '.\u002Flogs\u002Ferror.log',\n",[266,660,662],{"class":268,"line":661},13,[266,663,664],{},"      out_file: '.\u002Flogs\u002Fout.log',\n",[266,666,668],{"class":268,"line":667},14,[266,669,670],{},"      log_date_format: 'YYYY-MM-DD HH:mm:ss Z',\n",[266,672,674],{"class":268,"line":673},15,[266,675,676],{},"    },\n",[266,678,680],{"class":268,"line":679},16,[266,681,682],{},"  ],\n",[266,684,686],{"class":268,"line":685},17,[266,687,688],{},"};\n",[244,690,692],{"id":691},"step-3-deploy-with-pm2","Step 3: Deploy with PM2",[257,694,696],{"className":327,"code":695,"language":329,"meta":262,"style":262},"# Start the application\nskyport pm2 start ecosystem.config.js\n\n# View status\nskyport pm2 list\n\n# View logs\nskyport pm2 logs my-app -f\n",[252,697,698,703,716,720,725,734,738,742],{"__ignoreMap":262},[266,699,700],{"class":268,"line":269},[266,701,702],{"class":336},"# Start the application\n",[266,704,705,707,710,713],{"class":268,"line":275},[266,706,394],{"class":342},[266,708,709],{"class":346}," pm2",[266,711,712],{"class":346}," start",[266,714,715],{"class":346}," ecosystem.config.js\n",[266,717,718],{"class":268,"line":282},[266,719,279],{"emptyLinePlaceholder":278},[266,721,722],{"class":268,"line":288},[266,723,724],{"class":336},"# View status\n",[266,726,727,729,731],{"class":268,"line":294},[266,728,394],{"class":342},[266,730,709],{"class":346},[266,732,733],{"class":346}," list\n",[266,735,736],{"class":268,"line":300},[266,737,279],{"emptyLinePlaceholder":278},[266,739,740],{"class":268,"line":306},[266,741,506],{"class":336},[266,743,744,746,748,750,752],{"class":268,"line":311},[266,745,394],{"class":342},[266,747,709],{"class":346},[266,749,515],{"class":346},[266,751,415],{"class":346},[266,753,520],{"class":346},[244,755,757],{"id":756},"step-4-configure-auto-start","Step 4: Configure Auto-Start",[257,759,761],{"className":327,"code":760,"language":329,"meta":262,"style":262},"# Save PM2 configuration\nskyport pm2 save\n\n# Set up startup script\nskyport pm2 startup\n",[252,762,763,768,777,781,786],{"__ignoreMap":262},[266,764,765],{"class":268,"line":269},[266,766,767],{"class":336},"# Save PM2 configuration\n",[266,769,770,772,774],{"class":268,"line":275},[266,771,394],{"class":342},[266,773,709],{"class":346},[266,775,776],{"class":346}," save\n",[266,778,779],{"class":268,"line":282},[266,780,279],{"emptyLinePlaceholder":278},[266,782,783],{"class":268,"line":288},[266,784,785],{"class":336},"# Set up startup script\n",[266,787,788,790,792],{"class":268,"line":294},[266,789,394],{"class":342},[266,791,709],{"class":346},[266,793,794],{"class":346}," startup\n",[236,796,798],{"id":797},"method-3-marketplace-deployment","Method 3: Marketplace Deployment",[210,800,801],{},"Use pre-built, pre-configured applications.",[257,803,805],{"className":327,"code":804,"language":329,"meta":262,"style":262},"# Search for apps\nskyport marketplace search postgres\n\n# Install application\nskyport marketplace install postgres:15\n\n# View installed apps\nskyport marketplace list\n\n# Access application\n# Check the marketplace entry for access details\n",[252,806,807,812,825,829,834,846,850,855,863,867,872],{"__ignoreMap":262},[266,808,809],{"class":268,"line":269},[266,810,811],{"class":336},"# Search for apps\n",[266,813,814,816,819,822],{"class":268,"line":275},[266,815,394],{"class":342},[266,817,818],{"class":346}," marketplace",[266,820,821],{"class":346}," search",[266,823,824],{"class":346}," postgres\n",[266,826,827],{"class":268,"line":282},[266,828,279],{"emptyLinePlaceholder":278},[266,830,831],{"class":268,"line":288},[266,832,833],{"class":336},"# Install application\n",[266,835,836,838,840,843],{"class":268,"line":294},[266,837,394],{"class":342},[266,839,818],{"class":346},[266,841,842],{"class":346}," install",[266,844,845],{"class":346}," postgres:15\n",[266,847,848],{"class":268,"line":300},[266,849,279],{"emptyLinePlaceholder":278},[266,851,852],{"class":268,"line":306},[266,853,854],{"class":336},"# View installed apps\n",[266,856,857,859,861],{"class":268,"line":311},[266,858,394],{"class":342},[266,860,818],{"class":346},[266,862,733],{"class":346},[266,864,865],{"class":268,"line":317},[266,866,279],{"emptyLinePlaceholder":278},[266,868,869],{"class":268,"line":459},[266,870,871],{"class":336},"# Access application\n",[266,873,874],{"class":268,"line":465},[266,875,876],{"class":336},"# Check the marketplace entry for access details\n",[214,878,880],{"id":879},"deployment-best-practices","Deployment Best Practices",[236,882,884],{"id":883},"_1-use-environment-variables","1. Use Environment Variables",[210,886,887],{},"Store sensitive data outside your code:",[257,889,891],{"className":327,"code":890,"language":329,"meta":262,"style":262},"# Set environment variables\nskyport docker run -d \\\n  -e DATABASE_URL=\"postgresql:\u002F\u002Fuser:pass@host:5432\u002Fdb\" \\\n  -e API_KEY=\"secret-key\" \\\n  my-app:1.0.0\n",[252,892,893,898,910,929,945],{"__ignoreMap":262},[266,894,895],{"class":268,"line":269},[266,896,897],{"class":336},"# Set environment variables\n",[266,899,900,902,904,906,908],{"class":268,"line":275},[266,901,394],{"class":342},[266,903,397],{"class":346},[266,905,400],{"class":346},[266,907,403],{"class":346},[266,909,407],{"class":406},[266,911,912,915,918,922,925,927],{"class":268,"line":282},[266,913,914],{"class":346},"  -e",[266,916,917],{"class":346}," DATABASE_URL=",[266,919,921],{"class":920},"sMK4o","\"",[266,923,924],{"class":346},"postgresql:\u002F\u002Fuser:pass@host:5432\u002Fdb",[266,926,921],{"class":920},[266,928,407],{"class":406},[266,930,931,933,936,938,941,943],{"class":268,"line":288},[266,932,914],{"class":346},[266,934,935],{"class":346}," API_KEY=",[266,937,921],{"class":920},[266,939,940],{"class":346},"secret-key",[266,942,921],{"class":920},[266,944,407],{"class":406},[266,946,947],{"class":268,"line":294},[266,948,442],{"class":346},[236,950,952],{"id":951},"_2-configure-volumes-for-data-persistence","2. Configure Volumes for Data Persistence",[257,954,956],{"className":327,"code":955,"language":329,"meta":262,"style":262},"skyport docker run -d \\\n  -v app-data:\u002Fapp\u002Fdata \\\n  -v app-logs:\u002Fapp\u002Flogs \\\n  my-app:1.0.0\n",[252,957,958,970,979,988],{"__ignoreMap":262},[266,959,960,962,964,966,968],{"class":268,"line":269},[266,961,394],{"class":342},[266,963,397],{"class":346},[266,965,400],{"class":346},[266,967,403],{"class":346},[266,969,407],{"class":406},[266,971,972,974,977],{"class":268,"line":275},[266,973,432],{"class":346},[266,975,976],{"class":346}," app-data:\u002Fapp\u002Fdata",[266,978,407],{"class":406},[266,980,981,983,986],{"class":268,"line":282},[266,982,432],{"class":346},[266,984,985],{"class":346}," app-logs:\u002Fapp\u002Flogs",[266,987,407],{"class":406},[266,989,990],{"class":268,"line":288},[266,991,442],{"class":346},[236,993,995],{"id":994},"_3-set-up-health-checks","3. Set Up Health Checks",[257,997,999],{"className":327,"code":998,"language":329,"meta":262,"style":262},"skyport docker run -d \\\n  --health-cmd=\"curl -f http:\u002F\u002Flocalhost:3000\u002Fhealth || exit 1\" \\\n  --health-interval=30s \\\n  --health-timeout=5s \\\n  --health-retries=3 \\\n  my-app:1.0.0\n",[252,1000,1001,1013,1027,1034,1041,1048],{"__ignoreMap":262},[266,1002,1003,1005,1007,1009,1011],{"class":268,"line":269},[266,1004,394],{"class":342},[266,1006,397],{"class":346},[266,1008,400],{"class":346},[266,1010,403],{"class":346},[266,1012,407],{"class":406},[266,1014,1015,1018,1020,1023,1025],{"class":268,"line":275},[266,1016,1017],{"class":346},"  --health-cmd=",[266,1019,921],{"class":920},[266,1021,1022],{"class":346},"curl -f http:\u002F\u002Flocalhost:3000\u002Fhealth || exit 1",[266,1024,921],{"class":920},[266,1026,407],{"class":406},[266,1028,1029,1032],{"class":268,"line":282},[266,1030,1031],{"class":346},"  --health-interval=30s",[266,1033,407],{"class":406},[266,1035,1036,1039],{"class":268,"line":288},[266,1037,1038],{"class":346},"  --health-timeout=5s",[266,1040,407],{"class":406},[266,1042,1043,1046],{"class":268,"line":294},[266,1044,1045],{"class":346},"  --health-retries=3",[266,1047,407],{"class":406},[266,1049,1050],{"class":268,"line":300},[266,1051,442],{"class":346},[236,1053,1055],{"id":1054},"_4-configure-reverse-proxy","4. Configure Reverse Proxy",[210,1057,1058],{},"Set up Caddy for automatic HTTPS and load balancing:",[257,1060,1062],{"className":327,"code":1061,"language":329,"meta":262,"style":262},"# View reverse proxy configuration\nskyport proxy list\n\n# Add routing rule\nskyport proxy add my-app.example.com localhost:3000\n\n# Enable HTTPS\nskyport proxy enable-https my-app.example.com\n",[252,1063,1064,1069,1078,1082,1087,1102,1106,1111],{"__ignoreMap":262},[266,1065,1066],{"class":268,"line":269},[266,1067,1068],{"class":336},"# View reverse proxy configuration\n",[266,1070,1071,1073,1076],{"class":268,"line":275},[266,1072,394],{"class":342},[266,1074,1075],{"class":346}," proxy",[266,1077,733],{"class":346},[266,1079,1080],{"class":268,"line":282},[266,1081,279],{"emptyLinePlaceholder":278},[266,1083,1084],{"class":268,"line":288},[266,1085,1086],{"class":336},"# Add routing rule\n",[266,1088,1089,1091,1093,1096,1099],{"class":268,"line":294},[266,1090,394],{"class":342},[266,1092,1075],{"class":346},[266,1094,1095],{"class":346}," add",[266,1097,1098],{"class":346}," my-app.example.com",[266,1100,1101],{"class":346}," localhost:3000\n",[266,1103,1104],{"class":268,"line":300},[266,1105,279],{"emptyLinePlaceholder":278},[266,1107,1108],{"class":268,"line":306},[266,1109,1110],{"class":336},"# Enable HTTPS\n",[266,1112,1113,1115,1117,1120],{"class":268,"line":311},[266,1114,394],{"class":342},[266,1116,1075],{"class":346},[266,1118,1119],{"class":346}," enable-https",[266,1121,1122],{"class":346}," my-app.example.com\n",[236,1124,1126],{"id":1125},"_5-set-resource-limits","5. Set Resource Limits",[257,1128,1130],{"className":327,"code":1129,"language":329,"meta":262,"style":262},"skyport docker run -d \\\n  --memory=\"512m\" \\\n  --cpus=\"1\" \\\n  my-app:1.0.0\n",[252,1131,1132,1144,1158,1172],{"__ignoreMap":262},[266,1133,1134,1136,1138,1140,1142],{"class":268,"line":269},[266,1135,394],{"class":342},[266,1137,397],{"class":346},[266,1139,400],{"class":346},[266,1141,403],{"class":346},[266,1143,407],{"class":406},[266,1145,1146,1149,1151,1154,1156],{"class":268,"line":275},[266,1147,1148],{"class":346},"  --memory=",[266,1150,921],{"class":920},[266,1152,1153],{"class":346},"512m",[266,1155,921],{"class":920},[266,1157,407],{"class":406},[266,1159,1160,1163,1165,1168,1170],{"class":268,"line":282},[266,1161,1162],{"class":346},"  --cpus=",[266,1164,921],{"class":920},[266,1166,1167],{"class":346},"1",[266,1169,921],{"class":920},[266,1171,407],{"class":406},[266,1173,1174],{"class":268,"line":288},[266,1175,442],{"class":346},[214,1177,1179],{"id":1178},"post-deployment-checklist","Post-Deployment Checklist",[219,1181,1184,1197,1206,1215,1221,1227,1233,1239],{"className":1182},[1183],"contains-task-list",[222,1185,1188,1192,1193,1196],{"className":1186},[1187],"task-list-item",[1189,1190],"input",{"disabled":278,"type":1191},"checkbox"," Application is running (",[252,1194,1195],{},"skyport docker ps",")",[222,1198,1200,1202,1203,1196],{"className":1199},[1187],[1189,1201],{"disabled":278,"type":1191}," Logs look healthy (",[252,1204,1205],{},"skyport docker logs app-name",[222,1207,1209,1211,1212,1196],{"className":1208},[1187],[1189,1210],{"disabled":278,"type":1191}," Health check passes (",[252,1213,1214],{},"curl http:\u002F\u002Flocalhost:port\u002Fhealth",[222,1216,1218,1220],{"className":1217},[1187],[1189,1219],{"disabled":278,"type":1191}," Environment variables are set",[222,1222,1224,1226],{"className":1223},[1187],[1189,1225],{"disabled":278,"type":1191}," Data volumes are mounted",[222,1228,1230,1232],{"className":1229},[1187],[1189,1231],{"disabled":278,"type":1191}," Reverse proxy is configured (if using custom domain)",[222,1234,1236,1238],{"className":1235},[1187],[1189,1237],{"disabled":278,"type":1191}," Monitoring is enabled",[222,1240,1242,1244],{"className":1241},[1187],[1189,1243],{"disabled":278,"type":1191}," Backups are configured",[214,1246,1248],{"id":1247},"troubleshooting-deployment","Troubleshooting Deployment",[236,1250,1252],{"id":1251},"application-wont-start","Application Won't Start",[257,1254,1256],{"className":327,"code":1255,"language":329,"meta":262,"style":262},"# Check logs\nskyport docker logs app-name\n\n# Check for errors\nskyport docker inspect app-name\n\n# Verify image exists\nskyport docker images\n",[252,1257,1258,1263,1274,1278,1283,1294,1298,1303],{"__ignoreMap":262},[266,1259,1260],{"class":268,"line":269},[266,1261,1262],{"class":336},"# Check logs\n",[266,1264,1265,1267,1269,1271],{"class":268,"line":275},[266,1266,394],{"class":342},[266,1268,397],{"class":346},[266,1270,515],{"class":346},[266,1272,1273],{"class":346}," app-name\n",[266,1275,1276],{"class":268,"line":282},[266,1277,279],{"emptyLinePlaceholder":278},[266,1279,1280],{"class":268,"line":288},[266,1281,1282],{"class":336},"# Check for errors\n",[266,1284,1285,1287,1289,1292],{"class":268,"line":294},[266,1286,394],{"class":342},[266,1288,397],{"class":346},[266,1290,1291],{"class":346}," inspect",[266,1293,1273],{"class":346},[266,1295,1296],{"class":268,"line":300},[266,1297,279],{"emptyLinePlaceholder":278},[266,1299,1300],{"class":268,"line":306},[266,1301,1302],{"class":336},"# Verify image exists\n",[266,1304,1305,1307,1309],{"class":268,"line":311},[266,1306,394],{"class":342},[266,1308,397],{"class":346},[266,1310,1311],{"class":346}," images\n",[236,1313,1315],{"id":1314},"port-already-in-use","Port Already in Use",[257,1317,1319],{"className":327,"code":1318,"language":329,"meta":262,"style":262},"# Use a different port\nskyport docker run -d -p 3001:3000 my-app:1.0.0\n\n# Or find what's using the port\nskyport system ports\n",[252,1320,1321,1326,1345,1349,1354],{"__ignoreMap":262},[266,1322,1323],{"class":268,"line":269},[266,1324,1325],{"class":336},"# Use a different port\n",[266,1327,1328,1330,1332,1334,1336,1339,1342],{"class":268,"line":275},[266,1329,394],{"class":342},[266,1331,397],{"class":346},[266,1333,400],{"class":346},[266,1335,403],{"class":346},[266,1337,1338],{"class":346}," -p",[266,1340,1341],{"class":346}," 3001:3000",[266,1343,1344],{"class":346}," my-app:1.0.0\n",[266,1346,1347],{"class":268,"line":282},[266,1348,279],{"emptyLinePlaceholder":278},[266,1350,1351],{"class":268,"line":288},[266,1352,1353],{"class":336},"# Or find what's using the port\n",[266,1355,1356,1358,1361],{"class":268,"line":294},[266,1357,394],{"class":342},[266,1359,1360],{"class":346}," system",[266,1362,1363],{"class":346}," ports\n",[236,1365,1367],{"id":1366},"out-of-disk-space","Out of Disk Space",[257,1369,1371],{"className":327,"code":1370,"language":329,"meta":262,"style":262},"# Check disk usage\nskyport system disk\n\n# Clean up unused images\nskyport docker prune\n\n# Remove unused volumes\nskyport docker volume prune\n",[252,1372,1373,1378,1387,1391,1396,1405,1409,1414],{"__ignoreMap":262},[266,1374,1375],{"class":268,"line":269},[266,1376,1377],{"class":336},"# Check disk usage\n",[266,1379,1380,1382,1384],{"class":268,"line":275},[266,1381,394],{"class":342},[266,1383,1360],{"class":346},[266,1385,1386],{"class":346}," disk\n",[266,1388,1389],{"class":268,"line":282},[266,1390,279],{"emptyLinePlaceholder":278},[266,1392,1393],{"class":268,"line":288},[266,1394,1395],{"class":336},"# Clean up unused images\n",[266,1397,1398,1400,1402],{"class":268,"line":294},[266,1399,394],{"class":342},[266,1401,397],{"class":346},[266,1403,1404],{"class":346}," prune\n",[266,1406,1407],{"class":268,"line":300},[266,1408,279],{"emptyLinePlaceholder":278},[266,1410,1411],{"class":268,"line":306},[266,1412,1413],{"class":336},"# Remove unused volumes\n",[266,1415,1416,1418,1420,1423],{"class":268,"line":311},[266,1417,394],{"class":342},[266,1419,397],{"class":346},[266,1421,1422],{"class":346}," volume",[266,1424,1404],{"class":346},[214,1426,1428],{"id":1427},"next-steps","Next Steps",[219,1430,1431,1438,1444,1450,1455],{},[222,1432,1433,1437],{},[1434,1435,1436],"a",{"href":96},"Docker Management"," - Learn Docker commands",[222,1439,1440,1443],{},[1434,1441,1442],{"href":53},"Monitoring"," - Set up monitoring",[222,1445,1446,1449],{},[1434,1447,1448],{"href":65},"Logging"," - Aggregate logs",[222,1451,1452,1454],{},[1434,1453,154],{"href":155}," - Scale your applications",[222,1456,1457,1460],{},[1434,1458,1459],{"href":159},"CI\u002FCD"," - Automate deployments",[1462,1463],"hr",{},[210,1465,1466,1470],{},[1467,1468,1469],"strong",{},"Congratulations!"," You've deployed your first application with SkyPort.",[1472,1473,1474],"style",{},"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 .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 pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}",{"title":262,"searchDepth":275,"depth":275,"links":1476},[1477,1478,1483,1490,1491,1496],{"id":216,"depth":275,"text":217},{"id":233,"depth":275,"text":234,"children":1479},[1480,1481,1482],{"id":238,"depth":282,"text":239},{"id":540,"depth":282,"text":541},{"id":797,"depth":282,"text":798},{"id":879,"depth":275,"text":880,"children":1484},[1485,1486,1487,1488,1489],{"id":883,"depth":282,"text":884},{"id":951,"depth":282,"text":952},{"id":994,"depth":282,"text":995},{"id":1054,"depth":282,"text":1055},{"id":1125,"depth":282,"text":1126},{"id":1178,"depth":275,"text":1179},{"id":1247,"depth":275,"text":1248,"children":1492},[1493,1494,1495],{"id":1251,"depth":282,"text":1252},{"id":1314,"depth":282,"text":1315},{"id":1366,"depth":282,"text":1367},{"id":1427,"depth":275,"text":1428},"Deploy your first application with SkyPort","md",null,{},{"icon":34},{"title":31,"description":1497},"3Lz8OcGxoslTbZhm7gLg9r4fnTleUC9B5eNPjqKZB1g",[1505,1507],{"title":26,"path":27,"stem":28,"description":1506,"icon":29,"children":-1},"Learn about the project structure of Docus v4.",{"title":36,"path":37,"stem":38,"description":1508,"icon":39,"children":-1},"Common issues and solutions for SkyPort",1778858459265]