{"data":{"allMdx":{"nodes":[{"id":"a78d8b17-8100-576d-9ab9-673f94043914","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\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar FeedItems = makeShortcode(\"FeedItems\");\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(\"h1\", {\n    \"id\": \"projects\"\n  }, \"Projects\"), mdx(\"p\", null, \"This page contains only content that has the tag \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"project\"), \".\"), mdx(\"p\", null, \"This works thanks to this code:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\"\n  }, \"<FeedItems filterByTags={['project']} />\\n\")), mdx(\"p\", null, \"More about the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"FeedItems\"), \" component in the docs: \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/Chronoblog/gatsby-theme-chronoblog#feeditems-component\"\n  }, \"gatsby-theme-chronoblog#feeditems-component\")), mdx(\"p\", null, \"This is convenient for creating pages with your works, portfolio, collecting articles of a certain subject in one place, etc.\"), mdx(\"p\", null, \"If you do not need an extra page, just remove it from \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"src/pages/\"), \", and remove link to this page from the main menu: \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"src/gatsby-theme-chronoblog/site-header.mdx\"), \".\"), mdx(\"p\", null, \"More about the additional site pages in the docs: \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/Chronoblog/gatsby-theme-chronoblog#pages\"\n  }, \"gatsby-theme-chronoblog#pages\")), mdx(\"h2\", {\n    \"id\": \"projects-any-content-with-the-project-tag\"\n  }, \"Projects (any content with the \\\"project\\\" tag):\"), mdx(FeedItems, {\n    filterByTags: ['project'],\n    mdxType: \"FeedItems\"\n  }));\n}\n;\nMDXContent.isMDXComponent = true;","excerpt":"Projects This page contains only content that has the tag  project . This works thanks to this code: More about the  FeedItems  component in…","fields":{"slug":"/projects/","type":"pages"},"headings":[{"value":"Projects","depth":1},{"value":"Projects (any content with the \"project\" tag):","depth":2}],"frontmatter":{"title":"","description":null,"link":null,"date":null,"tags":null,"draft":null,"hide":null,"cover":null}},{"id":"82df53bf-dc02-598e-b574-f7eb84444064","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\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar AuthorBanner = makeShortcode(\"AuthorBanner\");\nvar FeedSearch = makeShortcode(\"FeedSearch\");\nvar Tags = makeShortcode(\"Tags\");\nvar FeedItems = makeShortcode(\"FeedItems\");\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(AuthorBanner, {\n    mdxType: \"AuthorBanner\"\n  }), mdx(FeedSearch, {\n    mdxType: \"FeedSearch\"\n  }), mdx(Tags, {\n    mdxType: \"Tags\"\n  }), mdx(FeedItems, {\n    mdxType: \"FeedItems\"\n  }));\n}\n;\nMDXContent.isMDXComponent = true;","excerpt":"","fields":{"slug":"/","type":"pages"},"headings":[],"frontmatter":{"title":"","description":null,"link":null,"date":null,"tags":null,"draft":null,"hide":null,"cover":null}},{"id":"c662d9bd-16a0-59d9-aaff-903dd8350216","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\": \"Setting up SSL on Server\",\n  \"cover\": \"./cover.png\",\n  \"date\": \"2022-01-24T00:00:00.000Z\",\n  \"description\": \"We'll set up a SSL Certificate on the server with Let's Encrypt\",\n  \"tags\": [\"Nginx\", \"DigitalOCean\", \"SSL\", \"Let's Encrypt\", \"Ubuntu\"]\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(\"p\", null, \"Let's Encrypt is a Certificate Authority which allows you obtain and install free TLS/SSL certificates. Certbot from Let's Encrypt automates the whole process of obtaining and installing a certficate on your server running Nginx or Apache.\"), mdx(\"p\", null, \"This article assumes that you have a domain name for your server. If you do not have a domain name, you need to create a self-signed SSL certificate. Visit \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-nginx-in-ubuntu-16-04\"\n  }, \"here\"), \" to see how to add a self-signed SSL certificate on your server.\"), mdx(\"p\", null, \"Let's get started.\"), mdx(\"h3\", {\n    \"id\": \"install-certbot\"\n  }, \"Install Certbot\"), mdx(\"p\", null, \"Use the following command to install Certbot:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"$ sudo apt install certbot python3-certbot-nginx\\n\")), mdx(\"h3\", {\n    \"id\": \"obtain-and-install-an-ssl-certificate\"\n  }, \"Obtain and Install an SSL Certificate\"), mdx(\"p\", null, \"Once Cerbot is installed, we can run the following command to obtain a SSL certificate for our server:\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"NOTE: Replace example.com with your domain name\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"sudo certbot --nginx -d example.com -d www.example.com\\n\")), mdx(\"p\", null, \"Follow the steps in the prompt and agree to their terms of service. At the end of this, the certificate will be downloaded, installed, and loaded on your server. Your website should now be secured.\"), mdx(\"h3\", {\n    \"id\": \"verify-certbot-auto-renewal\"\n  }, \"Verify Certbot Auto-Renewal\"), mdx(\"p\", null, \"Let's Encrypt's certificates are valid for 90 days. We can use Certbot to automaically renew our certificates which are within 30 days of expiration.\"), mdx(\"p\", null, \"Certbot has a command for testing its certificate renewal process. By running this command, it will test its renewal process and it will also renew your certificates and reload Nginx to use the renewed certificates.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"$ sudo certbot renew --dry-run\\n\")), mdx(\"h3\", {\n    \"id\": \"conclusion\"\n  }, \"Conclusion\"), mdx(\"p\", null, \"We set up a SSL Certificate on our server using Let's Encrypt. With Certbot, most of the processes were automated, which makes it very easy to install SSL certificates on your server.\"));\n}\n;\nMDXContent.isMDXComponent = true;","excerpt":"Let's Encrypt is a Certificate Authority which allows you obtain and install free TLS/SSL certificates. Certbot from Let's Encrypt automates…","fields":{"slug":"/2022-1-24-setup-ssl/","type":"posts"},"headings":[{"value":"Install Certbot","depth":3},{"value":"Obtain and Install an SSL Certificate","depth":3},{"value":"Verify Certbot Auto-Renewal","depth":3},{"value":"Conclusion","depth":3}],"frontmatter":{"title":"Setting up SSL on Server","description":"We'll set up a SSL Certificate on the server with Let's Encrypt","link":null,"date":"2022-01-24T00:00:00.000Z","tags":["Nginx","DigitalOCean","SSL","Let's Encrypt","Ubuntu"],"draft":null,"hide":null,"cover":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAIAAADwazoUAAAACXBIWXMAAAsTAAALEwEAmpwYAAABb0lEQVQoz2P4TxT4+//fn////6GJMuDVA1L978fbvz8//H155O+vT/9/fYCLo2v+9w+IQMSfv3+B6O+/v3+Bop/v/H+6/v/Nzv/Pt/7/8QqnZph+hLX/f3/8/ezAswOl9zbHvzre9O/Vsf9/f6E7+x9Yx4u3nzYevvzr9587T17vPHFj2a6ztx6/unznsVpwpXnqRPP4hvefvsAVo2u+/+xt28LdM9Yf9SicEdO4ZNnucxldqzYducppVagX3iLhWvXm41dQ6GHV/PX7z6JJG+ZvPXnl3vPbj18/evn+1LVHj1++X7H77NS1h1fsOfvq/WecNj9789G/fO7SXWca5u6Ytu7IrI3Hpq8/unjH6QVbTy7afrpm1taWBbtw2vzu09fyaZuBlnQt3QtkdC/dt/nIlQmrDkTVL0poWVY1fQswFLDYDAe///z9+esPhP3tByhgD5y7fenOs5NXHwLZv37/hevEl0iQFUHYyCIQAAC81FKn7MmyQgAAAABJRU5ErkJggg==","aspectRatio":1.900990099009901,"src":"/static/4e1070bbcb23f5e1f5c2c09ea738ae21/6caa6/cover.png","srcSet":"/static/4e1070bbcb23f5e1f5c2c09ea738ae21/a4b17/cover.png 192w,\n/static/4e1070bbcb23f5e1f5c2c09ea738ae21/1ef16/cover.png 384w,\n/static/4e1070bbcb23f5e1f5c2c09ea738ae21/6caa6/cover.png 768w,\n/static/4e1070bbcb23f5e1f5c2c09ea738ae21/3f078/cover.png 1152w,\n/static/4e1070bbcb23f5e1f5c2c09ea738ae21/6050d/cover.png 1200w","srcWebp":"/static/4e1070bbcb23f5e1f5c2c09ea738ae21/25278/cover.webp","srcSetWebp":"/static/4e1070bbcb23f5e1f5c2c09ea738ae21/a278a/cover.webp 192w,\n/static/4e1070bbcb23f5e1f5c2c09ea738ae21/2474b/cover.webp 384w,\n/static/4e1070bbcb23f5e1f5c2c09ea738ae21/25278/cover.webp 768w,\n/static/4e1070bbcb23f5e1f5c2c09ea738ae21/e7b8c/cover.webp 1152w,\n/static/4e1070bbcb23f5e1f5c2c09ea738ae21/9000d/cover.webp 1200w","sizes":"(max-width: 768px) 100vw, 768px","presentationWidth":768,"presentationHeight":403}}}}},{"id":"d7cbfd54-418c-5c28-8aa8-8522ea263d70","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\": \"Setting up a Web Server with Nginx\",\n  \"cover\": \"./cover.jpg\",\n  \"date\": \"2021-12-26T00:00:00.000Z\",\n  \"description\": \"We will set up a web server on DigitalOcean Droplet with Nginx\",\n  \"tags\": [\"Nginx\", \"DigitalOcean\", \"Droplet\", \"Web Server\"]\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(\"p\", null, \"Our Node app is running on the Docker container we created in the last \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"http://localhost:8000/2021-12-25-nodejs-postgresql-server-digitalocean/\"\n  }, \"post\"), \".\"), mdx(\"p\", null, \"Let's add an Nginx Web Server to our Droplet, so that we can reverse-proxy all traffic to our server.\"), mdx(\"h3\", {\n    \"id\": \"install-nginx\"\n  }, \"Install Nginx\"), mdx(\"p\", null, \"We can connect to our Droplet and install Nginx with the following command:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"$ apt install nginx\\n\")), mdx(\"p\", null, \"When the installation is completed, verify that Nginx is running by typing:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"$ systemctl status nginx\\n\")), mdx(\"p\", null, \"And we should get something similar to:\"), mdx(\"span\", {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"696px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"32.68292682926829%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAAHABQDASIAAhEBAxEB/8QAFwABAAMAAAAAAAAAAAAAAAAAAAMECP/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAHRNgiUV//EABcQAQEBAQAAAAAAAAAAAAAAAAEAAhL/2gAIAQEAAQUCAHnMX//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABkQAAEFAAAAAAAAAAAAAAAAAAABEBEhMf/aAAgBAQAGPwK0kxv/xAAaEAACAgMAAAAAAAAAAAAAAAAAEQEhQWFx/9oACAEBAAE/IZw7DhuiKoR//9oADAMBAAIAAwAAABCLz//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABURAQEAAAAAAAAAAAAAAAAAABEQ/9oACAECAQE/EAn/xAAcEAACAgIDAAAAAAAAAAAAAAABIQARMUFxgeH/2gAIAQEAAT8QB5IFLXBwBVvfs3ALwZ//2Q==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"nginx is running\",\n    \"title\": \"nginx is running\",\n    \"src\": \"/static/ca28bba043fd836018b1bb7344aeb53a/a4476/nginx.jpg\",\n    \"srcSet\": [\"/static/ca28bba043fd836018b1bb7344aeb53a/bd2b6/nginx.jpg 205w\", \"/static/ca28bba043fd836018b1bb7344aeb53a/ceeba/nginx.jpg 410w\", \"/static/ca28bba043fd836018b1bb7344aeb53a/a4476/nginx.jpg 696w\"],\n    \"sizes\": \"(max-width: 696px) 100vw, 696px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n    \"), mdx(\"h3\", {\n    \"id\": \"server-blocks\"\n  }, \"Server Blocks\"), mdx(\"p\", null, \"We can set up server blocks to set different configurations and host more than one domain from a single server.\"), mdx(\"p\", null, \"For this, we can create new config files (i.e., /etc/nginx/sites-available/your_domain) for our domain or we can use the default file (/etc/nginx/sites-available/default).\"), mdx(\"p\", null, \"We will just modify the default file. So modify it as follows:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"server {\\n  server_name your_domain www.your_domain;\\n\\n  location / {\\n    proxy_pass http://your_domain:port;\\n  }\\n}\\n\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"NOTE: If you are creating your own files for your domain, make sure you link them to the \", mdx(\"em\", {\n    parentName: \"strong\"\n  }, \"/etc/nginx/site-enabled\"), \" directory with the following command:\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"$ ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/\"))), mdx(\"p\", null, \"Test to make sure there's no syntax error in the files by typing:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"$ nginx -t\\n\")), mdx(\"p\", null, \"If everything is good, restart Nginx:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"$ systemctl restart nginx\\n\")), mdx(\"p\", null, \"That's it! Nginx is now running on our Droplet, and it will direct traffic to our domain, where our Node app is running.\"), mdx(\"h3\", {\n    \"id\": \"conclusion\"\n  }, \"Conclusion\"), mdx(\"p\", null, \"We set up Nginx Web Server on our Droplet. In the next post, we will set up SSL with Let's Encrypt.\"));\n}\n;\nMDXContent.isMDXComponent = true;","excerpt":"Our Node app is running on the Docker container we created in the last  post . Let's add an Nginx Web Server to our Droplet, so that we can…","fields":{"slug":"/2021-12-26-nginx-server/","type":"posts"},"headings":[{"value":"Install Nginx","depth":3},{"value":"Server Blocks","depth":3},{"value":"Conclusion","depth":3}],"frontmatter":{"title":"Setting up a Web Server with Nginx","description":"We will set up a web server on DigitalOcean Droplet with Nginx","link":null,"date":"2021-12-26T00:00:00.000Z","tags":["Nginx","DigitalOcean","Droplet","Web Server"],"draft":null,"hide":null,"cover":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAAMABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAABAAGCP/EABQBAQAAAAAAAAAAAAAAAAAAAAL/2gAMAwEAAhADEAAAAeiA6A5A58l//8QAGBABAQEBAQAAAAAAAAAAAAAABAEDAhD/2gAIAQEAAQUCOi5BxZWlCjpVJnJhtxNfP//EABYRAAMAAAAAAAAAAAAAAAAAABARIf/aAAgBAwEBPwGsf//EABYRAAMAAAAAAAAAAAAAAAAAABARIf/aAAgBAgEBPwGsf//EACMQAAEDAwIHAAAAAAAAAAAAAAEAAgMREjEhIwQTIkFRcYH/2gAIAQEABj8Ca8btG1tDriUZOWY9cDuuJuptTGPp+ZUdSXaZcqFePS//xAAeEAABBQACAwAAAAAAAAAAAAABABEhMUFRcYGRof/aAAgBAQABPyF7L4CANupkJhl7Px4QEpKYgArbOQnUEBI6DnM2LQAwD0L/2gAMAwEAAgADAAAAEP8Az//EABgRAQADAQAAAAAAAAAAAAAAAAEAESFR/9oACAEDAQE/EEobzkJ//8QAFxEAAwEAAAAAAAAAAAAAAAAAEBEhUf/aAAgBAgEBPxBUcwf/xAAcEAEBAAIDAQEAAAAAAAAAAAABEQAhMUFRYaH/2gAIAQEAAT8QdmpZkFoBLq3nL9Soup0GDXHDYi6xz7g6AzYnPa0k7yrHRSvvn5gksSdS8b6fMGa3sEP3Wf/Z","aspectRatio":1.7142857142857142,"src":"/static/857bae867cb6351c15a296e47f3e5c6b/60a5f/cover.jpg","srcSet":"/static/857bae867cb6351c15a296e47f3e5c6b/3e5eb/cover.jpg 192w,\n/static/857bae867cb6351c15a296e47f3e5c6b/2880b/cover.jpg 384w,\n/static/857bae867cb6351c15a296e47f3e5c6b/60a5f/cover.jpg 768w,\n/static/857bae867cb6351c15a296e47f3e5c6b/2f1b1/cover.jpg 800w","srcWebp":"/static/857bae867cb6351c15a296e47f3e5c6b/25278/cover.webp","srcSetWebp":"/static/857bae867cb6351c15a296e47f3e5c6b/a278a/cover.webp 192w,\n/static/857bae867cb6351c15a296e47f3e5c6b/2474b/cover.webp 384w,\n/static/857bae867cb6351c15a296e47f3e5c6b/25278/cover.webp 768w,\n/static/857bae867cb6351c15a296e47f3e5c6b/ccdb5/cover.webp 800w","sizes":"(max-width: 768px) 100vw, 768px","presentationWidth":768,"presentationHeight":446}}}}},{"id":"997da485-c273-5f0a-913c-679e25e9e0ff","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\": \"Setting up a with Node.js App and Postgresql Database on DigitalOcean Droplet\",\n  \"cover\": \"./cover.jpg\",\n  \"date\": \"2021-12-25T00:00:00.000Z\",\n  \"description\": \"We will spin up a Node.js app with Postgresql DB on DigitalOcean Droplet\",\n  \"tags\": [\"Node.js\", \"Postgresql\", \"DigitalOcean\", \"Droplet\", \"Docker\", \"Docker Compose\"]\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(\"p\", null, \"Using Docker, let's spin up a Node.js app and Postgresql DB containers and deploy them on the Droplet we created in the last \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"/2021-12-24-digitalocean-droplet/\"\n  }, \"post\"), \".\"), mdx(\"h3\", {\n    \"id\": \"install-docker\"\n  }, \"Install Docker\"), mdx(\"p\", null, \"Connect to the Droplet via SSH or PuTTy and follow the instructions on the \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://docs.docker.com/engine/install/ubuntu/\"\n  }, \"Docker\"), \" and \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://docs.docker.com/compose/install/\"\n  }, \"Docker Compose\"), \" documentation pages to install Docker and Docker Compose on Ubuntu.\"), mdx(\"h3\", {\n    \"id\": \"dockerfile\"\n  }, \"Dockerfile\"), mdx(\"p\", null, \"Let's create a Dockerfile to install Node.js. We will also specify all files (code, configs, assets, etc) to copy into the container, which we will generate in a moment.\"), mdx(\"p\", null, mdx(\"em\", {\n    parentName: \"p\"\n  }, \"Dockerfile\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"FROM node:latest\\nWORKDIR /app\\nCOPY package.json .\\nRUN npm install\\nCOPY . .\\nRUN npx prisma generate\\nEXPOSE 4000\\nCMD [\\\"npm\\\", \\\"run\\\", \\\"start\\\"]\\n\")), mdx(\"p\", null, \"If we are using \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.prisma.io/\"\n  }, \"Prisma\"), \" in our app, we should also let Docker run the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"prisma generate\"), \" command during build.\"), mdx(\"h3\", {\n    \"id\": \"dockerignore\"\n  }, \".dockerignore\"), mdx(\"p\", null, \"Before we continue, let's create a .dockerignore file to exclude certain files when Docker runs the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Copy\"), \" command in the Dockerfile we created earlier.\"), mdx(\"p\", null, mdx(\"em\", {\n    parentName: \"p\"\n  }, \"dockerignore\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"node_modules\\nDockerfile\\n.env\\n.dockerignore\\n.git\\n.gitignore\\n\")), mdx(\"h3\", {\n    \"id\": \"docker-composeyml\"\n  }, \"docker-compose.yml\"), mdx(\"p\", null, \"We will create three different docker-compose.yml files to configure our application's dependencies in development and production environment.\"), mdx(\"p\", null, \"Let's start with the main docker-compose file, which includes the configuration for our Node app as well as for the Postgresql image we will use from \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://hub.docker.com/_/postgres\"\n  }, \"DockerHub\"), \".\"), mdx(\"p\", null, mdx(\"em\", {\n    parentName: \"p\"\n  }, \"docker-compose.yml\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"version: '3'\\nservices:\\n  node-app:\\n    build: .\\n    volumes:\\n      - ./:/app\\n      - /app/node_modules\\n    environment:\\n      - PORT=4000\\n    depends_on:\\n      - db\\n  db:\\n    image: postgres\\n    restart: always\\n    environment:\\n      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}\\n      - POSTGRES_USER=${POSTGRES_USER}\\n    volumes:\\n      - postgres:/var/lib/postgresql/data\\nvolumes:\\n  postgres:\\n\")), mdx(\"p\", null, \"Next, we will create \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"docker-compose.dev.yml\"), \" and \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"docker-compose.prod.yml\"), \" to configure the development and production environment, respectively\"), mdx(\"p\", null, mdx(\"em\", {\n    parentName: \"p\"\n  }, \"docker-compose.dev.yml\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"version: '3'\\nservices:\\n  node-app:\\n    environment:\\n      - NODE_ENV=development\\n      - DATABASE_URL=${DATABASE_URL_DEV}\\n    command: npm run start\\n\")), mdx(\"p\", null, mdx(\"em\", {\n    parentName: \"p\"\n  }, \"docker-compose.prod.yml\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"version: '3'\\nservices:\\n  node-app:\\n    environment:\\n      - NODE_ENV=production\\n      - DATABASE_URL=${DATABASE_URL_DIGITALOCEAN}\\n    command: >\\n      sh -c \\\"npm run db:migrate:prod &&\\n             npm run build &&\\n             npm run start:prod\\\"\\n\")), mdx(\"h3\", {\n    \"id\": \"build-images-create-and-start-containers\"\n  }, \"Build Images, Create and Start Containers\"), mdx(\"p\", null, \"We can use the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"docker-compose up\"), \" command to build images and create containers, then start them all at once. We can also specify .env file with the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"--env-file\"), \" flag, followed by the path to the .env file.\"), mdx(\"p\", null, \"To do this for a development environment, we run the following:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"docker-compose -f docker-compose.yml -f docker-compose.dev.yml --env-file ./.env up -d\\n\")), mdx(\"p\", null, \"Or the following for a production environment:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"docker-compose -f docker-compose.yml -f docker-compose.prod.yml --env-file ./.env up -d\\n\")), mdx(\"p\", null, \"We should now have two containers running for our Node app and Postgresql DB.\"), mdx(\"span\", {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"820px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"7.3170731707317085%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAABABQDASIAAhEBAxEB/8QAFwABAAMAAAAAAAAAAAAAAAAAAAQGB//EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAHIqYJBC//EABgQAAIDAAAAAAAAAAAAAAAAAAIDMTIz/9oACAEBAAEFAmanLLf/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAWEAADAAAAAAAAAAAAAAAAAAABEIH/2gAIAQEABj8CNf8A/8QAGRAAAQUAAAAAAAAAAAAAAAAAAAGBobHw/9oACAEBAAE/IZQy6lR//9oADAMBAAIAAwAAABAHz//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAEDAQE/ECf/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAWEAEBAQAAAAAAAAAAAAAAAAAAsQH/2gAIAQEAAT8QPpqif//Z')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"containers running\",\n    \"title\": \"containers running\",\n    \"src\": \"/static/b13a9b5c3970ac838a564f49eaecf4ce/63a81/docker-ps.jpg\",\n    \"srcSet\": [\"/static/b13a9b5c3970ac838a564f49eaecf4ce/bd2b6/docker-ps.jpg 205w\", \"/static/b13a9b5c3970ac838a564f49eaecf4ce/ceeba/docker-ps.jpg 410w\", \"/static/b13a9b5c3970ac838a564f49eaecf4ce/63a81/docker-ps.jpg 820w\", \"/static/b13a9b5c3970ac838a564f49eaecf4ce/f25e0/docker-ps.jpg 954w\"],\n    \"sizes\": \"(max-width: 820px) 100vw, 820px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n    \"), mdx(\"h3\", {\n    \"id\": \"conclusion\"\n  }, \"Conclusion\"), mdx(\"p\", null, \"We have deployed a Node app and Postgresql DB to our Droplet with Docker and they are running on the Docker containers we created.\"), mdx(\"p\", null, \"In the next post, we will add Nginx Web Server to our Droplet to direct traffic to our server via reverse-proxy.\"));\n}\n;\nMDXContent.isMDXComponent = true;","excerpt":"Using Docker, let's spin up a Node.js app and Postgresql DB containers and deploy them on the Droplet we created in the last  post . Install…","fields":{"slug":"/2021-12-25-nodejs-postgresql-server-digitalocean/","type":"posts"},"headings":[{"value":"Install Docker","depth":3},{"value":"Dockerfile","depth":3},{"value":".dockerignore","depth":3},{"value":"docker-compose.yml","depth":3},{"value":"Build Images, Create and Start Containers","depth":3},{"value":"Conclusion","depth":3}],"frontmatter":{"title":"Setting up a with Node.js App and Postgresql Database on DigitalOcean Droplet","description":"We will spin up a Node.js app with Postgresql DB on DigitalOcean Droplet","link":null,"date":"2021-12-25T00:00:00.000Z","tags":["Node.js","Postgresql","DigitalOcean","Droplet","Docker","Docker Compose"],"draft":null,"hide":null,"cover":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAAKABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAQFCP/EABcBAAMBAAAAAAAAAAAAAAAAAAABAgP/2gAMAwEAAhADEAAAAed4cpmr0Cj/xAAZEAADAQEBAAAAAAAAAAAAAAACAwQBBRD/2gAIAQEAAQUCm5GUJZGIjRNiC9//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAYEQEAAwEAAAAAAAAAAAAAAAABAAIRQf/aAAgBAgEBPwELa6wHrP/EACQQAAECAgsBAAAAAAAAAAAAAAIBEQATAwQSFCAhIiMyUWHw/9oACAEBAAY/Aq0d7oRkBbYl5eJ91C7g6RdfYRJgk6Plg//EABwQAQABBAMAAAAAAAAAAAAAAAERACAhoTFBUf/aAAgBAQABPyEN9HRcpo36pkJhyTJXjVYWkk7P/9oADAMBAAIAAwAAABB43//EABcRAQEBAQAAAAAAAAAAAAAAAAEAEUH/2gAIAQMBAT8QB11get//xAAZEQEAAwEBAAAAAAAAAAAAAAABABExIaH/2gAIAQIBAT8QE1o4VnPb2AKsZ//EABwQAQEBAAIDAQAAAAAAAAAAAAERIUFxACAxYf/aAAgBAQABPxAd/Br5By2R5epDnzqNAC5DX6OXxXsihCqR37l6T0//2Q==","aspectRatio":2,"src":"/static/32e55ca0c3f225cabc1b8a9fe6cdc719/60a5f/cover.jpg","srcSet":"/static/32e55ca0c3f225cabc1b8a9fe6cdc719/3e5eb/cover.jpg 192w,\n/static/32e55ca0c3f225cabc1b8a9fe6cdc719/2880b/cover.jpg 384w,\n/static/32e55ca0c3f225cabc1b8a9fe6cdc719/60a5f/cover.jpg 768w,\n/static/32e55ca0c3f225cabc1b8a9fe6cdc719/d9e57/cover.jpg 1152w,\n/static/32e55ca0c3f225cabc1b8a9fe6cdc719/68386/cover.jpg 1280w","srcWebp":"/static/32e55ca0c3f225cabc1b8a9fe6cdc719/25278/cover.webp","srcSetWebp":"/static/32e55ca0c3f225cabc1b8a9fe6cdc719/a278a/cover.webp 192w,\n/static/32e55ca0c3f225cabc1b8a9fe6cdc719/2474b/cover.webp 384w,\n/static/32e55ca0c3f225cabc1b8a9fe6cdc719/25278/cover.webp 768w,\n/static/32e55ca0c3f225cabc1b8a9fe6cdc719/e7b8c/cover.webp 1152w,\n/static/32e55ca0c3f225cabc1b8a9fe6cdc719/b923f/cover.webp 1280w","sizes":"(max-width: 768px) 100vw, 768px","presentationWidth":768,"presentationHeight":384}}}}},{"id":"3169adc7-8147-54a8-b50a-478b6b83611e","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\": \"Creating Virtual Machines with DigitalOcean's Droplets\",\n  \"cover\": \"./imgix-server.jpg\",\n  \"date\": \"2021-12-24T00:00:00.000Z\",\n  \"description\": \"Overview of creating a VM with DigitalOcean's Droplet.\",\n  \"tags\": [\"Virtual Machine\", \"DigitalOcean\", \"Droplet\"]\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(\"p\", null, \"Droplets are scalable Linux-based virtual machines from \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.digitalocean.com\"\n  }, \"DigitalOcean\"), \".\\nWe will take a look at how to create a Droplet, running Ubuntu 20.04 (LTS) x64.\"), mdx(\"h3\", {\n    \"id\": \"create-a-droplet\"\n  }, \"Create a Droplet\"), mdx(\"p\", null, \"After registering an account with \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.digitalocean.com\"\n  }, \"DigitalOcean\"), \", create a new project, which will run on the droplet we are about to create.\"), mdx(\"span\", {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"820px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"49.26829268292683%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAAKABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABwAC/8QAFQEBAQAAAAAAAAAAAAAAAAAAAgP/2gAMAwEAAhADEAAAAVxHN0uordJf/8QAHRAAAQIHAAAAAAAAAAAAAAAAAQcRAAIGEBIhNv/aAAgBAQABBQJON0iHM2AhN+Qa3//EABcRAAMBAAAAAAAAAAAAAAAAAAECEDL/2gAIAQMBAT8BTIn/xAAXEQADAQAAAAAAAAAAAAAAAAABAxAy/9oACAECAQE/AWbM/8QAHBAAAAYDAAAAAAAAAAAAAAAAAAECBHGyEDFh/9oACAEBAAY/AmcruY4NEGUruef/xAAaEAEAAgMBAAAAAAAAAAAAAAABESEAEDFB/9oACAEBAAE/IVMYfcxUjlhMtW5tY7rJCea//9oADAMBAAIAAwAAABDT3//EABcRAQADAAAAAAAAAAAAAAAAAAABEaH/2gAIAQMBAT8QxQp//8QAGBEAAgMAAAAAAAAAAAAAAAAAARAhcbH/2gAIAQIBAT8QjedX/8QAHxABAQACAQQDAAAAAAAAAAAAAREAITEQQVFhcYGR/9oACAEBAAE/EFXJGAHB2Aw+WBB5bpv7r3gO/elqgV86A+sMy1W4vx0//9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"create a new project\",\n    \"title\": \"create a new project\",\n    \"src\": \"/static/992b896d14b66ec2632b45ebc744c96c/63a81/create-new-project.jpg\",\n    \"srcSet\": [\"/static/992b896d14b66ec2632b45ebc744c96c/bd2b6/create-new-project.jpg 205w\", \"/static/992b896d14b66ec2632b45ebc744c96c/ceeba/create-new-project.jpg 410w\", \"/static/992b896d14b66ec2632b45ebc744c96c/63a81/create-new-project.jpg 820w\", \"/static/992b896d14b66ec2632b45ebc744c96c/3470a/create-new-project.jpg 1230w\", \"/static/992b896d14b66ec2632b45ebc744c96c/12a53/create-new-project.jpg 1640w\", \"/static/992b896d14b66ec2632b45ebc744c96c/e8a0e/create-new-project.jpg 1675w\"],\n    \"sizes\": \"(max-width: 820px) 100vw, 820px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n    \"), mdx(\"p\", null, \"Next, click on Create, then select Droplet.\"), mdx(\"span\", {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"820px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"21.951219512195124%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAAEABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAcE/8QAFQEBAQAAAAAAAAAAAAAAAAAAAQP/2gAMAwEAAhADEAAAAazTis84H//EABoQAAEFAQAAAAAAAAAAAAAAAAABAgMGByL/2gAIAQEAAQUCzrupDY0P/8QAFxEAAwEAAAAAAAAAAAAAAAAAAQIQMv/aAAgBAwEBPwFMif/EABcRAAMBAAAAAAAAAAAAAAAAAAABAzL/2gAIAQIBAT8BrtiP/8QAHRAAAAUFAAAAAAAAAAAAAAAAAAECIUEEECIxQv/aAAgBAQAGPwKkjJem6Oyocf/EABgQAAIDAAAAAAAAAAAAAAAAAAABESEx/9oACAEBAAE/IVlvLysokstWhKz/2gAMAwEAAgADAAAAEPgP/8QAGBEAAgMAAAAAAAAAAAAAAAAAAAExobH/2gAIAQMBAT8QqLByf//EABgRAAIDAAAAAAAAAAAAAAAAAAABEaGx/9oACAECAQE/ELb0RQf/xAAZEAEBAQEBAQAAAAAAAAAAAAABESEAMXH/2gAIAQEAAT8QvSsaBhyGTnB7HNd5xFKqhQKqawD4Hf/Z')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"create a new droplet\",\n    \"title\": \"create a new droplet\",\n    \"src\": \"/static/b658d9e694c4153551a0d236e25c37ee/63a81/create-droplet.jpg\",\n    \"srcSet\": [\"/static/b658d9e694c4153551a0d236e25c37ee/bd2b6/create-droplet.jpg 205w\", \"/static/b658d9e694c4153551a0d236e25c37ee/ceeba/create-droplet.jpg 410w\", \"/static/b658d9e694c4153551a0d236e25c37ee/63a81/create-droplet.jpg 820w\", \"/static/b658d9e694c4153551a0d236e25c37ee/3470a/create-droplet.jpg 1230w\", \"/static/b658d9e694c4153551a0d236e25c37ee/12a53/create-droplet.jpg 1640w\", \"/static/b658d9e694c4153551a0d236e25c37ee/8ea48/create-droplet.jpg 1699w\"],\n    \"sizes\": \"(max-width: 820px) 100vw, 820px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n    \"), mdx(\"p\", null, \"We will select Ubuntu as an image, and select the remaining options suitable for our needs.\"), mdx(\"span\", {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"820px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"59.512195121951216%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAAMABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIDCP/EABQBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAdROqJQoD//EABoQAAMAAwEAAAAAAAAAAAAAAAABAhIhMTL/2gAIAQEAAQUCrVZEJJX64I//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAYEAEBAAMAAAAAAAAAAAAAAAABERAgIf/aAAgBAQAGPwLDAK3mn//EAB0QAAICAQUAAAAAAAAAAAAAAAAhARFRMUFxofD/2gAIAQEAAT8hR2WBFfQ/IJUq5yQTgqy8zQf/2gAMAwEAAgADAAAAEJcP/8QAFhEBAQEAAAAAAAAAAAAAAAAAAAEx/9oACAEDAQE/EIx//8QAFREBAQAAAAAAAAAAAAAAAAAAARD/2gAIAQIBAT8QZ//EAB8QAQACAQUAAwAAAAAAAAAAAAERIQAxQVFxkWHB4f/aAAgBAQABPxAChb2lGvJkFu/K88x4NgLMbXK7u+SJKJ9/3LimhLZrvmp25//Z')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"create a new droplet\",\n    \"title\": \"create a new droplet\",\n    \"src\": \"/static/92ffb2e536457564056db98a68fe9411/63a81/create-droplet-2.jpg\",\n    \"srcSet\": [\"/static/92ffb2e536457564056db98a68fe9411/bd2b6/create-droplet-2.jpg 205w\", \"/static/92ffb2e536457564056db98a68fe9411/ceeba/create-droplet-2.jpg 410w\", \"/static/92ffb2e536457564056db98a68fe9411/63a81/create-droplet-2.jpg 820w\", \"/static/92ffb2e536457564056db98a68fe9411/3470a/create-droplet-2.jpg 1230w\", \"/static/92ffb2e536457564056db98a68fe9411/a608a/create-droplet-2.jpg 1523w\"],\n    \"sizes\": \"(max-width: 820px) 100vw, 820px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n    \"), mdx(\"span\", {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"820px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"60.48780487804878%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAAMABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAABQAECP/EABcBAAMBAAAAAAAAAAAAAAAAAAECAwT/2gAMAwEAAhADEAAAAeox1S9Ks2Sif//EABwQAAICAgMAAAAAAAAAAAAAAAMEAQIFEQASE//aAAgBAQABBQK2+wMgcrdaRHCTq2VThsKIfBT/xAAWEQADAAAAAAAAAAAAAAAAAAAAASH/2gAIAQMBAT8Bcoj/xAAZEQACAwEAAAAAAAAAAAAAAAABAgADEjH/2gAIAQIBAT8BoAdsEdjLlis//8QAHxAAAQQCAgMAAAAAAAAAAAAAAQACAxESIQQTIiMy/9oACAEBAAY/AtIxO4MsTN+1x0j4gWb0gmt7ZYqN3G6lHHk5+I+nmyv/xAAcEAEAAgMAAwAAAAAAAAAAAAABABEhMUFhcZH/2gAIAQEAAT8hAKCqhZA1JetfZZxVim/LNK5EF0JHEArHMh9s/9oADAMBAAIAAwAAABAwD//EABYRAQEBAAAAAAAAAAAAAAAAAAEAEf/aAAgBAwEBPxBoxLQb/8QAGxEBAAICAwAAAAAAAAAAAAAAAREhADFhgZH/2gAIAQIBAT8QhqdBuuYEnvLomFPM/8QAGxABAQADAQEBAAAAAAAAAAAAAREAIWExQXH/2gAIAQEAAT8QFQGzF3efuDuIQk94b5xVESiX54bYG+YkwrFqPvHBOD/Xwio05hmaL1lbArvP/9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"create a new droplet\",\n    \"title\": \"create a new droplet\",\n    \"src\": \"/static/799e30acb930db6f07e28186bd57c094/63a81/create-droplet-3.jpg\",\n    \"srcSet\": [\"/static/799e30acb930db6f07e28186bd57c094/bd2b6/create-droplet-3.jpg 205w\", \"/static/799e30acb930db6f07e28186bd57c094/ceeba/create-droplet-3.jpg 410w\", \"/static/799e30acb930db6f07e28186bd57c094/63a81/create-droplet-3.jpg 820w\", \"/static/799e30acb930db6f07e28186bd57c094/3470a/create-droplet-3.jpg 1230w\", \"/static/799e30acb930db6f07e28186bd57c094/d03fb/create-droplet-3.jpg 1486w\"],\n    \"sizes\": \"(max-width: 820px) 100vw, 820px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n    \"), mdx(\"span\", {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"820px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"55.1219512195122%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAALABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAMBAgj/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAHUQyhA4P/EABkQAQEBAAMAAAAAAAAAAAAAAAIBAxAhMv/aAAgBAQABBQJemZpADnLOzx//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAaEAACAgMAAAAAAAAAAAAAAAAAAQIRECFx/9oACAEBAAY/AjaTKjFLhY8f/8QAGxABAQADAAMAAAAAAAAAAAAAAQARIUExUZH/2gAIAQEAAT8h8WCEBBxZ4BXL7MaOo72fsX//2gAMAwEAAgADAAAAEKvP/8QAFxEAAwEAAAAAAAAAAAAAAAAAAAEhMf/aAAgBAwEBPxCEWH//xAAYEQEBAAMAAAAAAAAAAAAAAAABABEhQf/aAAgBAgEBPxAUclvt/8QAHRABAQACAgMBAAAAAAAAAAAAAREAIUFhMVGB0f/aAAgBAQABPxASI6qWX7j5ypyp1kCeAgJ5X29uJI10NctZd8rBD9z/2Q==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"create a new droplet\",\n    \"title\": \"create a new droplet\",\n    \"src\": \"/static/a884d566eab26b52c7affe57e24acdc2/63a81/create-droplet-4.jpg\",\n    \"srcSet\": [\"/static/a884d566eab26b52c7affe57e24acdc2/bd2b6/create-droplet-4.jpg 205w\", \"/static/a884d566eab26b52c7affe57e24acdc2/ceeba/create-droplet-4.jpg 410w\", \"/static/a884d566eab26b52c7affe57e24acdc2/63a81/create-droplet-4.jpg 820w\", \"/static/a884d566eab26b52c7affe57e24acdc2/3470a/create-droplet-4.jpg 1230w\", \"/static/a884d566eab26b52c7affe57e24acdc2/c7d70/create-droplet-4.jpg 1506w\"],\n    \"sizes\": \"(max-width: 820px) 100vw, 820px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n    \"), mdx(\"p\", null, \"For Authentication, we will select SSH keys. Since I'm running Windows on my PC, I will be using \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.puttygen.com/\"\n  }, \"PuTTygen\"), \" to generate public and private SSH keys and \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.putty.org/\"\n  }, \"PuTTy\"), \" to access our Droplet. Those who use Mac or Linux can just use ssh-keygen to generate SSH keys and ssh into their droplet.\"), mdx(\"p\", null, \"Open PuTTygen and click on \\\"Generate\\\".\"), mdx(\"span\", {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"468px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"98.04878048780489%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAAUABQDASIAAhEBAxEB/8QAGgABAAEFAAAAAAAAAAAAAAAAAAQBAgMFB//EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAHv2VMKI6yNtCWwH//EAB0QAQEAAgEFAAAAAAAAAAAAAAIBAAMEBRITFDL/2gAIAQEAAQUC9vabOobcHKbgsjrAwcjySOhduH5//8QAFhEAAwAAAAAAAAAAAAAAAAAAABAR/9oACAEDAQE/ASv/xAAWEQADAAAAAAAAAAAAAAAAAAAAEBH/2gAIAQIBAT8BI//EAB4QAAICAgIDAAAAAAAAAAAAAAABESECMRIiQlGh/9oACAEBAAY/AmkqxrRaTJgyUcpeiOs+ieP0p+RsTnZ//8QAHhABAAMAAgIDAAAAAAAAAAAAAQARITFBYXGhscH/2gAIAQEAAT8hADEbZPuD+Co/ZiQiRXgahuwDLgwa1eqqxPY65eZ7M3qFvJRfBP/aAAwDAQACAAMAAAAQgMcA/8QAFhEAAwAAAAAAAAAAAAAAAAAAABAR/9oACAEDAQE/ECH/AP/EABYRAAMAAAAAAAAAAAAAAAAAAAAQEf/aAAgBAgEBPxAp/wD/xAAdEAEAAwACAwEAAAAAAAAAAAABABEhMVFBYbFx/9oACAEBAAE/EBHmEiBo2pxE3cMH9HCaRaVY/Lig1lVsLT3GQsK2DnBlwpFo4X4ym2ERkspSevEXivZ0aOnOI8yF3gvVE//Z')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"generate ssh keys\",\n    \"title\": \"generate ssh keys\",\n    \"src\": \"/static/4dae63238b327c6a65f8f23e63d2623d/0f8b0/puttygen.jpg\",\n    \"srcSet\": [\"/static/4dae63238b327c6a65f8f23e63d2623d/bd2b6/puttygen.jpg 205w\", \"/static/4dae63238b327c6a65f8f23e63d2623d/ceeba/puttygen.jpg 410w\", \"/static/4dae63238b327c6a65f8f23e63d2623d/0f8b0/puttygen.jpg 468w\"],\n    \"sizes\": \"(max-width: 468px) 100vw, 468px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n    \"), mdx(\"p\", null, \"First, click on \\\"Save public key\\\" and \\\"Save private key\\\" to save both keys to a file. We will use the public key file later.\"), mdx(\"p\", null, \"On DigitalOcean's Droplet setup page, click on \\\"New SSH Key\\\". Copy the generated key on PuTTYgen and paste it into the SSH key content. Enter a name and click \\\"Add SSH Key\\\".\"), mdx(\"span\", {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"820px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"51.707317073170735%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAAKABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAMECP/EABUBAQEAAAAAAAAAAAAAAAAAAAQF/9oADAMBAAIQAxAAAAHpO01AW1JPb//EABoQAAMBAAMAAAAAAAAAAAAAAAECAwQFMTL/2gAIAQEAAQUCFmBDtRV6PGYyTmjmnHx//8QAGREAAQUAAAAAAAAAAAAAAAAAEgIDBBAR/9oACAEDAQE/AW5BqHK//8QAGhEAAAcAAAAAAAAAAAAAAAAAAgMEEBESE//aAAgBAgEBPwE1LmC8t//EACEQAAEDAgcBAAAAAAAAAAAAAAEAAxECIRASExRCUWOC/9oACAEBAAY/AjAB+11fiZV1O1Zk+YR0WqGpN8lMYf/EABwQAQADAAIDAAAAAAAAAAAAAAEAETEhYXGhsf/aAAgBAQABPyHRmS2UNggRX0V7iBPo6+oLjlwr+an2n//aAAwDAQACAAMAAAAQe8//xAAYEQACAwAAAAAAAAAAAAAAAAABERAhQf/aAAgBAwEBPxAg6G9j/8QAGREAAgMBAAAAAAAAAAAAAAAAAREQQVGB/9oACAECAQE/EAnB0q3sf//EABwQAQADAQADAQAAAAAAAAAAAAEAESExQVFhof/aAAgBAQABPxCgzKkMv1eTBLD43tRnsHRv7EMwrsp1V6uMQAAzLpoLq/M1d3XZ/9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"add ssh key on Droplet\",\n    \"title\": \"add ssh key on Droplet\",\n    \"src\": \"/static/0320f241cd83c93e20945017e5d36be7/63a81/add-public-ssh-to-digitalocean.jpg\",\n    \"srcSet\": [\"/static/0320f241cd83c93e20945017e5d36be7/bd2b6/add-public-ssh-to-digitalocean.jpg 205w\", \"/static/0320f241cd83c93e20945017e5d36be7/ceeba/add-public-ssh-to-digitalocean.jpg 410w\", \"/static/0320f241cd83c93e20945017e5d36be7/63a81/add-public-ssh-to-digitalocean.jpg 820w\", \"/static/0320f241cd83c93e20945017e5d36be7/1d306/add-public-ssh-to-digitalocean.jpg 1029w\"],\n    \"sizes\": \"(max-width: 820px) 100vw, 820px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n    \"), mdx(\"p\", null, \"We can enter a hostname and then select our project we had created in the beginning, then click \\\"Create Droplet\\\".\"), mdx(\"span\", {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"820px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"60.97560975609756%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAAMABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAYCAwUI/8QAFgEBAQEAAAAAAAAAAAAAAAAAAgQF/9oADAMBAAIQAxAAAAHqG1LiM95MYVn/xAAcEAABBQADAAAAAAAAAAAAAAADAAECBAUQERX/2gAIAQEAAQUCiyZuuC6ZoG9aws+zOwD/xAAaEQACAgMAAAAAAAAAAAAAAAABAgADEhRB/9oACAEDAQE/Ad2sciuHGQn/xAAWEQADAAAAAAAAAAAAAAAAAAABEBL/2gAIAQIBAT8BoL//xAAeEAABBAEFAAAAAAAAAAAAAAABAAIREhAhMUKR4f/aAAgBAQAGPwIr3D4roSNlx6Rc6JtC/8QAGhAAAwEAAwAAAAAAAAAAAAAAAAERITFhgf/aAAgBAQABPyFLypXusmlY4EBCJ6GqaOQI2F0j/9oADAMBAAIAAwAAABC8L//EABgRAQEAAwAAAAAAAAAAAAAAAAEAMaHR/9oACAEDAQE/EFCK12M4G//EABYRAQEBAAAAAAAAAAAAAAAAAAEAEf/aAAgBAgEBPxBodNv/xAAdEAEAAwACAwEAAAAAAAAAAAABABEhMVFBYZHB/9oACAEBAAE/EC1dQQF67NRR7TABV/WJ2DDoU7rxzMlsDwjz0BkUJ+s//9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"create a new Droplet\",\n    \"title\": \"create a new Droplet\",\n    \"src\": \"/static/f53a535a6aee7cd96cfeaddef96c3fd0/63a81/create-droplet-5.jpg\",\n    \"srcSet\": [\"/static/f53a535a6aee7cd96cfeaddef96c3fd0/bd2b6/create-droplet-5.jpg 205w\", \"/static/f53a535a6aee7cd96cfeaddef96c3fd0/ceeba/create-droplet-5.jpg 410w\", \"/static/f53a535a6aee7cd96cfeaddef96c3fd0/63a81/create-droplet-5.jpg 820w\", \"/static/f53a535a6aee7cd96cfeaddef96c3fd0/3470a/create-droplet-5.jpg 1230w\", \"/static/f53a535a6aee7cd96cfeaddef96c3fd0/4b3c3/create-droplet-5.jpg 1296w\"],\n    \"sizes\": \"(max-width: 820px) 100vw, 820px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n    \"), mdx(\"p\", null, \"And we have our new Droplet! We can access our Droplet with PuTTy or SSH.\"), mdx(\"span\", {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"820px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"50.73170731707317%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAAKABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAIDBAj/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAv/aAAwDAQACEAMQAAAB1IzIQlgT/8QAGRABAAIDAAAAAAAAAAAAAAAAAQARAxAh/9oACAEBAAEFAk7TDCW7/8QAFhEBAQEAAAAAAAAAAAAAAAAAAAER/9oACAEDAQE/AWR//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAGhAAAgIDAAAAAAAAAAAAAAAAAQIAESAxQf/aAAgBAQAGPwKbjFgtk8GH/8QAGhAAAwADAQAAAAAAAAAAAAAAAAERITFBUf/aAAgBAQABPyHkqngkC4K5vZzJoUR//9oADAMBAAIAAwAAABCQP//EABYRAQEBAAAAAAAAAAAAAAAAAAABQf/aAAgBAwEBPxBJY//EABYRAQEBAAAAAAAAAAAAAAAAAAABIf/aAAgBAgEBPxBdf//EABwQAQADAAIDAAAAAAAAAAAAAAEAESExQVFhgf/aAAgBAQABPxDl3AVejXs7iGh+ROVhVwBty0BfonLLeWNRvdn/2Q==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"our new Droplet\",\n    \"title\": \"our new Droplet\",\n    \"src\": \"/static/9b05e24d40173a25fdd6d57346773d56/63a81/my-droplet.jpg\",\n    \"srcSet\": [\"/static/9b05e24d40173a25fdd6d57346773d56/bd2b6/my-droplet.jpg 205w\", \"/static/9b05e24d40173a25fdd6d57346773d56/ceeba/my-droplet.jpg 410w\", \"/static/9b05e24d40173a25fdd6d57346773d56/63a81/my-droplet.jpg 820w\", \"/static/9b05e24d40173a25fdd6d57346773d56/3470a/my-droplet.jpg 1230w\", \"/static/9b05e24d40173a25fdd6d57346773d56/c691f/my-droplet.jpg 1457w\"],\n    \"sizes\": \"(max-width: 820px) 100vw, 820px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n    \"), mdx(\"h3\", {\n    \"id\": \"connect-to-a-droplet\"\n  }, \"Connect to a Droplet\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Copy the ipv4 address of our droplet.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Open PuTTy and paste the ip address into Host Name.\\n\", mdx(\"span\", {\n    parentName: \"li\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"434px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"99.02439024390245%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAIDBAUI/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAAB6SwdhEgqFQIA/8QAGxAAAwADAQEAAAAAAAAAAAAAAQIDAAQSESH/2gAIAQEAAQUCmOFTYq2LU8hPstZVzqnp3XIqFiEuc//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8BH//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8BH//EAB4QAAEEAwEBAQAAAAAAAAAAAAEAAhEhAxIyIkFx/9oACAEBAAY/AsgB45UuyaBen2s5+0F6LD+J1VNJwhvWqbq0WYThAor/xAAdEAACAgIDAQAAAAAAAAAAAAABEQAhMdFBUWGh/9oACAEBAAE/IbkPhWJVnoUVWc4I1iQ8MQaB2SbMCrEhLIhErIFWREEkFZ3GwACOdz//2gAMAwEAAgADAAAAEGPHAP/EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8QH//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8QH//EAB8QAQEAAwEAAQUAAAAAAAAAAAERACExQaFRYXGBwf/aAAgBAQABPxBl8A64h4CgsyinRtKUpKbO7vmLGF0fHxH94iGkY6S/34xXFRTiM8U9xLlT9gI9/OaYKpjoK77MR+RR1b4PXAIZnpdDtV9c/9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"configure putty\",\n    \"title\": \"configure putty\",\n    \"src\": \"/static/e7915136c9e5fa7f63c236fb9f86cab9/3e5a1/putty-config-1.jpg\",\n    \"srcSet\": [\"/static/e7915136c9e5fa7f63c236fb9f86cab9/bd2b6/putty-config-1.jpg 205w\", \"/static/e7915136c9e5fa7f63c236fb9f86cab9/ceeba/putty-config-1.jpg 410w\", \"/static/e7915136c9e5fa7f63c236fb9f86cab9/3e5a1/putty-config-1.jpg 434w\"],\n    \"sizes\": \"(max-width: 434px) 100vw, 434px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n    \")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Under SSH -> Auth, click \\\"Browse\\\" and choose the private key file we saved from PuTTygen earlier.\\n\", mdx(\"span\", {\n    parentName: \"li\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"438px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"98.53658536585365%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAAAAMEBQj/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAAB6OoaWdGmiVUtBAD/xAAbEAADAAIDAAAAAAAAAAAAAAABAgMEEQASE//aAAgBAQABBQJT5gZtG4jP1tvc8V1ZNgG5Zq0KAXJP/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHhAAAgICAgMAAAAAAAAAAAAAAAECERIhIjIxQXH/2gAIAQEABj8Cmk+MKpndIWUtk1XnF2bwaKwr4NuuyRGvbHpaZ//EAB4QAAICAgIDAAAAAAAAAAAAAAERACExQVGRobHh/9oACAEBAAE/IS4MG69RmQOnZ+Qu45CAjJExh4QgAa5W68QmhIaovcDk3RiEA0XBzoJ//9oADAMBAAIAAwAAABCIxzz/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAWEQEBAQAAAAAAAAAAAAAAAAABIDH/2gAIAQIBAT8QEcj/xAAdEAEAAgMAAwEAAAAAAAAAAAABABEhMUFRYYFx/9oACAEBAAE/EG50pVkPHhnl6j2hQQH1zjIzltNJzkuM6p2fRrMPQGC79ACIQDAoR5C0bTJaEKNnd3mMlEPLA/YkhENDqj37n//Z')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"configure putty\",\n    \"title\": \"configure putty\",\n    \"src\": \"/static/8a411ae3b43b7d4e0cb598362830d09d/853c8/putty-config-2.jpg\",\n    \"srcSet\": [\"/static/8a411ae3b43b7d4e0cb598362830d09d/bd2b6/putty-config-2.jpg 205w\", \"/static/8a411ae3b43b7d4e0cb598362830d09d/ceeba/putty-config-2.jpg 410w\", \"/static/8a411ae3b43b7d4e0cb598362830d09d/853c8/putty-config-2.jpg 438w\"],\n    \"sizes\": \"(max-width: 438px) 100vw, 438px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n    \")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Go back to Session and click \\\"Open\\\".\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Login as \\\"root\\\"\\n\", mdx(\"span\", {\n    parentName: \"li\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"644px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"63.41463414634146%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAANABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAYCCP/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAeeNTIuE4P/EABwQAAAGAwAAAAAAAAAAAAAAAAABAgQFBhAWM//aAAgBAQABBQIrLLJLZ5gNrHLGjDXn/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAIhAAAAQEBwAAAAAAAAAAAAAAAAECBAMFEdEQMTVTYXGU/9oACAEBAAY/AqFNHiS4jquNVe+hVwdZo8z31XxPsf/EABgQAQADAQAAAAAAAAAAAAAAAAEQIFFh/9oACAEBAAE/IeWQPA8vJdUwf//aAAwDAQACAAMAAAAQMM//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAcEAEAAgEFAAAAAAAAAAAAAAABEBEAITFBobH/2gAIAQEAAT8QCWotRt30BCK1Dha+CXc+Gf/Z')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"configure putty\",\n    \"title\": \"configure putty\",\n    \"src\": \"/static/d8a46a874100cd9afbc26d4e48391d35/39cdb/putty-config-3.jpg\",\n    \"srcSet\": [\"/static/d8a46a874100cd9afbc26d4e48391d35/bd2b6/putty-config-3.jpg 205w\", \"/static/d8a46a874100cd9afbc26d4e48391d35/ceeba/putty-config-3.jpg 410w\", \"/static/d8a46a874100cd9afbc26d4e48391d35/39cdb/putty-config-3.jpg 644w\"],\n    \"sizes\": \"(max-width: 644px) 100vw, 644px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n    \"))), mdx(\"p\", null, \"We are connected to our Droplet as \\\"root\\\".\"), mdx(\"span\", {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"654px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"60.48780487804878%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAAMABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAUGBAf/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAHgGqarx0Jg/8QAHBABAAEEAwAAAAAAAAAAAAAABQQAAQIDEhU0/9oACAEBAAEFAuyS5IymzaBZnZRL3pUnXpJA8f8A/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAJhAAAQMBBQkAAAAAAAAAAAAAAQIDBAAREhMhwRAiIzEyQVFykf/aAAgBAQAGPwK1E98Zc1Pka02JMqW1iC8njnMfaXemPqN/u6rwNjcrEdW5u9arQLaX76Cv/8QAHBABAAMAAgMAAAAAAAAAAAAAAQARIWFxkaGx/9oACAEBAAE/IXnQfaw2zar82Q9W7rHySscHsl9YBQAF0ZPew//aAAwDAQACAAMAAAAQ0A//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAaEAEBAAMBAQAAAAAAAAAAAAABEQAhMRBB/9oACAEBAAE/EBNEFZ5yUb81hcAuRo0XJsyHaEyOFecQSMOCnMnp/sIAhAVhYeTv/9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"connect to droplet\",\n    \"title\": \"connect to droplet\",\n    \"src\": \"/static/d672c3d8b2fd7ef0d18253fd1ad06c24/d23b4/connect-to-droplet-1.jpg\",\n    \"srcSet\": [\"/static/d672c3d8b2fd7ef0d18253fd1ad06c24/bd2b6/connect-to-droplet-1.jpg 205w\", \"/static/d672c3d8b2fd7ef0d18253fd1ad06c24/ceeba/connect-to-droplet-1.jpg 410w\", \"/static/d672c3d8b2fd7ef0d18253fd1ad06c24/d23b4/connect-to-droplet-1.jpg 654w\"],\n    \"sizes\": \"(max-width: 654px) 100vw, 654px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n    \"), mdx(\"p\", null, \"Now, instead of continuing as \\\"root\\\", it's better to create a new user for security reasons. So let's create a new user.\"), mdx(\"h4\", {\n    \"id\": \"add-a-new-user\"\n  }, \"Add a new user\"), mdx(\"p\", null, \"Follow the following steps to create a new user.\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Use the adduser command to create a new user.\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"$ adduser username\\n\")), mdx(\"ol\", {\n    \"start\": 2\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Set the password at the prompt.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Follow the prompts to set the new user's information.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Use the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"usermod\"), \" command to add the user to the \\\"sudo\\\" group\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"$ usermod -aG sudo username\\n\")), mdx(\"ol\", {\n    \"start\": 5\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Use the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"su - username\"), \" command to switch to the new user.\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"$ su - username\\n\")), mdx(\"p\", null, \"We are now switched into our new user.\"), mdx(\"h3\", {\n    \"id\": \"conclusion\"\n  }, \"Conclusion\"), mdx(\"p\", null, \"We created a new project and Droplet in DigitalOcean.\\nWe will create a server on our Droplet in the next post.\"));\n}\n;\nMDXContent.isMDXComponent = true;","excerpt":"Droplets are scalable Linux-based virtual machines from  DigitalOcean .\nWe will take a look at how to create a Droplet, running Ubuntu 20.0…","fields":{"slug":"/2021-12-24-digitalocean-droplet/","type":"posts"},"headings":[{"value":"Create a Droplet","depth":3},{"value":"Connect to a Droplet","depth":3},{"value":"Add a new user","depth":4},{"value":"Conclusion","depth":3}],"frontmatter":{"title":"Creating Virtual Machines with DigitalOcean's Droplets","description":"Overview of creating a VM with DigitalOcean's Droplet.","link":null,"date":"2021-12-24T00:00:00.000Z","tags":["Virtual Machine","DigitalOcean","Droplet"],"draft":null,"hide":null,"cover":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAANABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABgcA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAgP/2gAMAwEAAhADEAAAAZ2XYzVm1ZPoU//EABoQAQEAAgMAAAAAAAAAAAAAAAQFAwYBFTP/2gAIAQEAAQUCQjAtXFbPKREqdqKnEwx20PXWtfOCR//EABYRAAMAAAAAAAAAAAAAAAAAAAEQQf/aAAgBAwEBPwExf//EABYRAQEBAAAAAAAAAAAAAAAAAAASUf/aAAgBAgEBPwHUv//EACMQAAIBAwQBBQAAAAAAAAAAAAECAwASIQQRIzETMkFhcYH/2gAIAQEABj8CkQSHTwKfYFs/VCXSytDIwta0+oCvK8MUbKbDbvn57rUQxksqhSN+80P2oQ3M0vKWOO6//8QAHRABAAICAwEBAAAAAAAAAAAAAQARITFBUWFxgf/aAAgBAQABPyFLhmriz2ofmJZN34UaTmaaFAigO3qIf6OK2+32EErBav2FxSBMEGAvgCf/2gAMAwEAAgADAAAAEEgv/8QAGBEBAQADAAAAAAAAAAAAAAAAAQAhQfD/2gAIAQMBAT8QCPNMOL//xAAbEQACAQUAAAAAAAAAAAAAAAAAAREhMdHh8P/aAAgBAgEBPxC6l1UOT28n/8QAGhABAQADAQEAAAAAAAAAAAAAAREAITFBUf/aAAgBAQABPxBLwdAmlgCB4Vxb00xInMEYj3Cscpg9YC9hr5muwbyoBnAQYLOGbNNcZaKZYR6GpiLQFWrX2H//2Q==","aspectRatio":1.5,"src":"/static/7faae50023e53e0d37847aa593adbf54/60a5f/imgix-server.jpg","srcSet":"/static/7faae50023e53e0d37847aa593adbf54/3e5eb/imgix-server.jpg 192w,\n/static/7faae50023e53e0d37847aa593adbf54/2880b/imgix-server.jpg 384w,\n/static/7faae50023e53e0d37847aa593adbf54/60a5f/imgix-server.jpg 768w,\n/static/7faae50023e53e0d37847aa593adbf54/d9e57/imgix-server.jpg 1152w,\n/static/7faae50023e53e0d37847aa593adbf54/4b91a/imgix-server.jpg 1536w,\n/static/7faae50023e53e0d37847aa593adbf54/de003/imgix-server.jpg 4581w","srcWebp":"/static/7faae50023e53e0d37847aa593adbf54/25278/imgix-server.webp","srcSetWebp":"/static/7faae50023e53e0d37847aa593adbf54/a278a/imgix-server.webp 192w,\n/static/7faae50023e53e0d37847aa593adbf54/2474b/imgix-server.webp 384w,\n/static/7faae50023e53e0d37847aa593adbf54/25278/imgix-server.webp 768w,\n/static/7faae50023e53e0d37847aa593adbf54/e7b8c/imgix-server.webp 1152w,\n/static/7faae50023e53e0d37847aa593adbf54/7dd62/imgix-server.webp 1536w,\n/static/7faae50023e53e0d37847aa593adbf54/7de5e/imgix-server.webp 4581w","sizes":"(max-width: 768px) 100vw, 768px","presentationWidth":768,"presentationHeight":514}}}}},{"id":"35af54b6-dedb-555c-90ed-f3472188746b","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\": \"First Post\",\n  \"cover\": \"./image.jpg\",\n  \"date\": \"2021-12-17T00:00:00.000Z\",\n  \"description\": \"My first post.\"\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(\"p\", null, \"This is a personal blog created with \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://gatsbyjs.com\"\n  }, \"Gatsby\"), \".\"), mdx(\"p\", null, \"I will mostly write about Web Development and Tech.\"));\n}\n;\nMDXContent.isMDXComponent = true;","excerpt":"This is a personal blog created with  Gatsby . I will mostly write about Web Development and Tech.","fields":{"slug":"/2021-12-17-first-post/","type":"posts"},"headings":[],"frontmatter":{"title":"First Post","description":"My first post.","link":null,"date":"2021-12-17T00:00:00.000Z","tags":null,"draft":null,"hide":null,"cover":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAYEBwj/xAAVAQEBAAAAAAAAAAAAAAAAAAADAv/aAAwDAQACEAMQAAAB0Al2EkmrySSi/8QAHBAAAQQDAQAAAAAAAAAAAAAAAgEDBAUGERIh/9oACAEBAAEFAmD4k17m7yEvMZ5CUMbpErIweD//xAAXEQADAQAAAAAAAAAAAAAAAAABAhAR/9oACAEDAQE/AVbAZ//EABYRAQEBAAAAAAAAAAAAAAAAAAEQIf/aAAgBAgEBPwFNn//EAB4QAAAGAwEBAAAAAAAAAAAAAAABAgMREgQTMXEh/9oACAEBAAY/An1ejLyDaWnaUXmfCCQ5U6nHYDjCnTyE32Svsgvg/8QAHRABAAIDAAMBAAAAAAAAAAAAAQARITFBkaGxwf/aAAgBAQABPyE0OC9xzdXVZMhyVHW/sFzddP0jQGqLTy1iUFSf/9oADAMBAAIAAwAAABBDP//EABgRAQADAQAAAAAAAAAAAAAAAAEAESFh/9oACAEDAQE/EC7Mi23P/8QAFxEBAQEBAAAAAAAAAAAAAAAAAQARIf/aAAgBAgEBPxBEdsb/xAAbEAEBAAMBAQEAAAAAAAAAAAABEQAhMUGhsf/aAAgBAQABPxBjoMzahT+ZRcdKBs6SiCewxa50+sA1xa0RHiXfR1hacd6IgNkNSbVXASAngZ//2Q==","aspectRatio":1.5,"src":"/static/fe6dba5bdc4c54bca265fad3da2ea1ec/3bf7d/image.jpg","srcSet":"/static/fe6dba5bdc4c54bca265fad3da2ea1ec/3e5eb/image.jpg 192w,\n/static/fe6dba5bdc4c54bca265fad3da2ea1ec/2880b/image.jpg 384w,\n/static/fe6dba5bdc4c54bca265fad3da2ea1ec/3bf7d/image.jpg 640w","srcWebp":"/static/fe6dba5bdc4c54bca265fad3da2ea1ec/f461a/image.webp","srcSetWebp":"/static/fe6dba5bdc4c54bca265fad3da2ea1ec/a278a/image.webp 192w,\n/static/fe6dba5bdc4c54bca265fad3da2ea1ec/2474b/image.webp 384w,\n/static/fe6dba5bdc4c54bca265fad3da2ea1ec/f461a/image.webp 640w","sizes":"(max-width: 640px) 100vw, 640px","presentationWidth":640,"presentationHeight":427}}}}}]},"allSitePage":{"nodes":[{"path":"/dev-404-page/"},{"path":"/tags/nginx/"},{"path":"/tags/digital-o-cean/"},{"path":"/tags/ssl/"},{"path":"/tags/lets-encrypt/"},{"path":"/tags/ubuntu/"},{"path":"/tags/digital-ocean/"},{"path":"/tags/droplet/"},{"path":"/tags/web-server/"},{"path":"/tags/node-js/"},{"path":"/tags/postgresql/"},{"path":"/tags/docker/"},{"path":"/tags/docker-compose/"},{"path":"/tags/virtual-machine/"},{"path":"/2022-1-24-setup-ssl/"},{"path":"/2021-12-26-nginx-server/"},{"path":"/2021-12-25-nodejs-postgresql-server-digitalocean/"},{"path":"/2021-12-24-digitalocean-droplet/"},{"path":"/2021-12-17-first-post/"},{"path":"/404/"},{"path":"/tags/"},{"path":"/404.html"},{"path":"/"},{"path":"/projects/"}]}}}