{
    "componentChunkName": "component---src-templates-docs-js",
    "path": "/deploy-scalable-software/week-1",
    "result": {"data":{"site":{"siteMetadata":{"title":"Linnaeus University","language":"en","courseCode":"2DV013"}},"mdx":{"fields":{"id":"cea9b261-0150-582c-a4ed-09aaeea89cc1","title":"Week 1: Provision and deploy a server","slug":"/deploy-scalable-software/week-1"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Week 1: Provision and deploy a server\",\n  \"metaTitle\": \"2DV013 | Deploy scalable software | Week 1: Provision and deploy a server\",\n  \"metaDescription\": \"One server, built from code, with a site that deploys on a tag and runs over HTTPS.\",\n  \"order\": 2\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h2\", null, \"Week 1: Provision and deploy a server\"), mdx(\"p\", null, \"This week you set up the foundation the rest of the module stands on: a real server in the university cloud, created by code rather than by clicking, and a pipeline that puts your site on it when you tag a release. You start with a plain static page on purpose, so that all the attention goes to the tools around it.\"), mdx(\"p\", null, \"A server you can destroy and build again from your repo, and a release that is one \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"git tag\"), \".\"), mdx(\"h2\", null, \"Issues\"), mdx(\"p\", null, \"Work through the issues in order, in your own repository. Each one builds on the one before.\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Issue\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"What you do\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"getting-started\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Clone the starter repo, run the site locally and meet the CI pipeline that checks it.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"provision-server\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Terraform creates an OpenStack server and network, and Ansible installs Caddy on it.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"deploy-on-tag\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"The pipeline gets a \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"deploy\"), \" stage that copies the site to the server when you push a tag.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"https\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Serve the site over HTTPS with a certificate from LNU's Campus CA.\")))), mdx(\"p\", null, \"Write the week report in \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"report/week-1.md\"), \" after the last issue.\"), mdx(\"h2\", null, \"Slide decks\"), mdx(\"p\", null, \"Each deck is a self-study lecture of about 15\\u201320 minutes, except the intro, which takes about five.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"../slides/deploy-scalable-software/week1-0-intro/slides.html\"\n  }, \"Week 1 intro\"), \": what the week asks of you\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"../slides/deploy-scalable-software/week1-1-cloud-basics/slides.html\"\n  }, \"Cloud basics\"), \": virtual machines, networks, floating IPs and security groups in OpenStack\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"../slides/deploy-scalable-software/week1-2-iac/slides.html\"\n  }, \"Infrastructure as code\"), \": Terraform and Ansible, declarative against imperative, idempotence\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"../slides/deploy-scalable-software/week1-3-ci-cd/slides.html\"\n  }, \"CI/CD\"), \": pipelines, stages, variables, and why deploying on a tag is a choice\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"../slides/deploy-scalable-software/week1-4-https/slides.html\"\n  }, \"HTTPS\"), \": certificates, ACME and TLS termination\")), mdx(\"h2\", null, \"Reading material\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"docs/OPENSTACK.md\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"docs/TERRAFORM.md\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"docs/ANSIBLE.md\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"docs/CI.md\"), \" in your repo\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://docs.openstack.org/\"\n  }, \"OpenStack documentation\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://ca.camp.lnu.se/\"\n  }, \"ca.camp.lnu.se, LNU's guide to Cumulus\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://developer.hashicorp.com/terraform/docs\"\n  }, \"Terraform documentation\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://docs.ansible.com/ansible/latest/\"\n  }, \"Ansible documentation\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://docs.gitlab.com/ci/\"\n  }, \"GitLab CI/CD documentation\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://caddyserver.com/docs/automatic-https\"\n  }, \"Caddy automatic HTTPS\"))));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#week-1-provision-and-deploy-a-server","title":"Week 1: Provision and deploy a server"},{"url":"#issues","title":"Issues"},{"url":"#slide-decks","title":"Slide decks"},{"url":"#reading-material","title":"Reading material"}]},"parent":{"relativePath":"deploy-scalable-software/week-1.md"},"frontmatter":{"metaTitle":"2DV013 | Deploy scalable software | Week 1: Provision and deploy a server","metaDescription":"One server, built from code, with a site that deploys on a tag and runs over HTTPS.","fullWidth":null}},"allMdx":{"edges":[{"node":{"fields":{"slug":"/deploy-scalable-software","title":"02 - Deploy scalable software"}}},{"node":{"fields":{"slug":"/deploy-scalable-software/assignment-2","title":"Assignment 2"}}},{"node":{"fields":{"slug":"/deploy-scalable-software/week-1","title":"Week 1: Provision and deploy a server"}}},{"node":{"fields":{"slug":"/","title":"Cloud Native Applications (2DV013)"}}},{"node":{"fields":{"slug":"/deploy-scalable-software/week-2","title":"Week 2: A server app in a container"}}},{"node":{"fields":{"slug":"/deploy-scalable-software/week-3","title":"Week 3: Databases and Compose"}}},{"node":{"fields":{"slug":"/group-project/assignment-3","title":"Assignment 3"}}},{"node":{"fields":{"slug":"/deploy-scalable-software/week-4","title":"Week 4: Kubernetes locally"}}},{"node":{"fields":{"slug":"/group-project/kravspec-egen","title":"Kravspec (egen)"}}},{"node":{"fields":{"slug":"/group-project/kravspec-standard","title":"Kravspec (standard)"}}},{"node":{"fields":{"slug":"/group-project/letter-to-customer","title":"Brev till företagskontakt"}}},{"node":{"fields":{"slug":"/group-project/week-12","title":"Course week 12: Project kick-off"}}},{"node":{"fields":{"slug":"/group-project/week-20","title":"Course week 20: Delivery and presentation"}}},{"node":{"fields":{"slug":"/deploy-scalable-software/week-5","title":"Week 5: A real cluster"}}},{"node":{"fields":{"slug":"/group-project","title":"03 - Group Project"}}},{"node":{"fields":{"slug":"/deploy-scalable-software/week-6","title":"Week 6: Release and wrap up"}}},{"node":{"fields":{"slug":"/infrastructure/assignment","title":"Assignment 1"}}},{"node":{"fields":{"slug":"/infrastructure/cloud","title":"University Cloud"}}},{"node":{"fields":{"slug":"/infrastructure","title":"01 - Infrastructure"}}},{"node":{"fields":{"slug":"/infrastructure/wsl","title":"WSL"}}},{"node":{"fields":{"slug":"/study-guide/communication","title":"Communication"}}},{"node":{"fields":{"slug":"/study-guide/exams","title":"Exams"}}},{"node":{"fields":{"slug":"/infrastructure/overview","title":"Overview"}}},{"node":{"fields":{"slug":"/study-guide/expectations","title":"Expectations"}}},{"node":{"fields":{"slug":"/study-guide","title":"Study Guide"}}},{"node":{"fields":{"slug":"/study-guide/instructors","title":"Instructors"}}},{"node":{"fields":{"slug":"/study-guide/readings","title":"Readings"}}},{"node":{"fields":{"slug":"/what-is-cloud-native","title":"0 - What is cloud native?"}}},{"node":{"fields":{"slug":"/what-is-cloud-native/overview","title":"Overview"}}},{"node":{"fields":{"slug":"/study-guide/registration","title":"Registration"}}}]}},"pageContext":{"id":"cea9b261-0150-582c-a4ed-09aaeea89cc1"}},
    "staticQueryHashes": ["253607798","3706406642","710574383"]}