{"componentChunkName":"component---src-templates-blog-list-jsx","path":"/blog/14/","result":{"data":{"prismic":{"allFeaturedblogs":{"edges":[{"node":{"featured_blogs_enabled":true,"heading":[{"type":"paragraph","text":"Featured posts","spans":[]}],"featured_blog_1":{"__typename":"PRISMIC_Blog","_linkType":"Link.document","blog_header_image":{"dimensions":{"width":790,"height":395},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/6d8d81b1-971a-4313-b033-b4e125cb14a0_MondoDB-blog-header-790x395.PNG?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Introducing DigitalOcean Managed MongoDB – a fully managed, database as a service for modern apps","spans":[]}],"blog_post_date":"2021-06-29","blog_post_content":[{"type":"paragraph","text":"MongoDB is one of the most popular databases, and it’s ideal for apps that evolve rapidly and need to handle huge volumes of data and traffic. It offers advantages like flexible document schemas, code-native data access, change-friendly design, and easy horizontal scale-out.","spans":[{"start":22,"end":44,"type":"hyperlink","data":{"link_type":"Web","url":"https://db-engines.com/en/ranking","target":"_blank"}}]},{"type":"paragraph","text":"However, building and maintaining MongoDB clusters from the ground up can be a huge undertaking. Developers often complain that they have to spend their valuable time and resources on database management. Well, we’ve been listening and have some great news: accessing and managing MongoDB on DigitalOcean just got a lot simpler!","spans":[]},{"type":"paragraph","text":"We are excited to announce that DigitalOcean Managed MongoDB is now in General Availability. Managed MongoDB is a fully managed, database as a service (DBaaS) offering from DigitalOcean, built in partnership with and certified by MongoDB Inc. It provides you all the technical capabilities that make MongoDB so beloved in the developer community. Together we have ensured that you will get access to all the latest releases of the MongoDB document database as they become available.","spans":[{"start":32,"end":91,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/managed-databases-mongodb/"}},{"start":230,"end":241,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.mongodb.com/","target":"_blank"}}]},{"type":"paragraph","text":"Managed MongoDB simplifies the MongoDB administration. Developers of all skill levels, even those who do not have prior experience in databases, can spin up MongoDB clusters in just a few minutes. We handle the provisioning, managing, scaling, updates, backups, and security of your MongoDB clusters, allowing you to offload the complex, time consuming –yet critical – database administration tasks to us. This empowers you to focus on what really matters: building awesome apps.","spans":[]},{"type":"embed","oembed":{"height":113,"width":200,"embed_url":"https://www.youtube.com/watch?v=NvHQSV7jnKA","type":"video","version":"1.0","title":"Create a MongoDB Database on DigitalOcean","author_name":"DigitalOcean","author_url":"https://www.youtube.com/c/Digitalocean","provider_name":"YouTube","provider_url":"https://www.youtube.com/","cache_age":null,"thumbnail_url":"https://i.ytimg.com/vi/NvHQSV7jnKA/hqdefault.jpg","thumbnail_width":480,"thumbnail_height":360,"html":"<iframe width=\"200\" height=\"113\" src=\"https://www.youtube.com/embed/NvHQSV7jnKA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>"}},{"type":"heading2","text":"Benefits of Managed MongoDB","spans":[]},{"type":"paragraph","text":"","spans":[]},{"type":"list-item","text":"Easy set up and maintenance: We create the database clusters for you. Simply choose the cluster configuration (e.g., memory, disk size, number of nodes, etc.), and the data center in which you want to host the database. Follow a few simple steps and your database cluster will be up and running in a matter of minutes. You can spin up clusters using the cloud control panel, CLI, or API.\n\n","spans":[{"start":0,"end":28,"type":"strong"}]},{"type":"list-item","text":"Automatic daily backups with point in time recovery: Data is one of the most important assets of an app, so it’s critical to backup your database. We take backups of your entire clusters automatically on a daily basis, for free. We also provide a point in time recovery for 7 days, that way if things go wrong due to human error, machine error, or some combination of both, you can easily restore the database as it was at any point in the previous 7 days. \n\n","spans":[{"start":0,"end":52,"type":"strong"}]},{"type":"list-item","text":"Automatic updates and access to latest MongoDB releases: You get access to MongoDB 4.4. This is the latest release of MongoDB and comes packed with numerous enhancements like hedged reads, rust, and swift drivers. Since we have developed Managed MongoDB in partnership with MongoDB Inc, you will always get access to new releases as they become available. With Managed MongoDB, the updates happen automatically. Just select a date and time for the updates and we take care of the rest. This makes it easy to stay up to date with MongoDB releases without disrupting your business.\n\n","spans":[{"start":0,"end":56,"type":"strong"},{"start":148,"end":169,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.mongodb.com/new","target":"_blank"}}]},{"type":"list-item","text":"High availability with automated failover: If your database goes down, it can take down the entire app, leading to bad customer experiences. With Managed MongoDB, you can easily minimize the downtime for your database and make it highly available with standby nodes. Standby nodes add redundancy, so if for example the primary node fails, the standby node is immediately promoted to primary and begins serving requests while we provision a replacement standby node in the background.\n\n","spans":[{"start":0,"end":42,"type":"strong"}]},{"type":"list-item","text":"Scale up easily to handle traffic spikes: As your app gains traction and the usage grows, it’s important to have a database that can keep up with the increased demand. With Managed MongoDB, you can easily scale up the size of database nodes when needed.\n\n","spans":[{"start":0,"end":41,"type":"strong"}]},{"type":"list-item","text":"Secure by default: Since data is critical, it also needs to be secure. We encrypt data at rest with LUKS and in transit with SSL. When you create a new cluster, it’s placed in a VPC network by default that provides a more secure connection between resources. You can also restrict access to your nodes to prevent brute-force password and denial-of-service attacks.","spans":[{"start":0,"end":18,"type":"strong"},{"start":178,"end":189,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/docs/networking/vpc/"}}]},{"type":"heading2","text":"The need for Managed Databases","spans":[]},{"type":"paragraph","text":"DigitalOcean’s mission is to simplify cloud computing so developers, startups, and SMBs can spend more time building software that changes the world. While databases are a critical component to any application, building, maintaining, and scaling them can be complex and time consuming. For developers that are building apps for their business, database administration is often not a core focus area. But it’s quite common to find developers that write the code and then also roll up their sleeves to maintain databases. Such users would rather offload the tedious database administration and focus their limited time and energy on building and enhancing their apps. ","spans":[]},{"type":"paragraph","text":"With this in mind, we introduced Managed Databases a couple of years ago and are excited to add Managed MongoDB to our portfolio. With this release, DigitalOcean Managed Databases now supports the following engines:","spans":[{"start":33,"end":50,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/managed-databases/"}}]},{"type":"image","url":"https://images.prismic.io/www-static/87745cc1-1c5f-4463-b104-104b7fc30dc7_managed-databases-logos.png?auto=compress,format","alt":null,"copyright":null,"dimensions":{"width":849,"height":104}},{"type":"paragraph","text":"Managed MongoDB launch comes on the heels of DigitalOcean App Platform, a modern, reimagined PaaS (Platform as a Service) that we released a few months ago. App Platform makes it very easy to build, deploy, and scale apps and static sites. You can deploy code by simply pointing to your GitHub and GitLab repos, and App Platform will do all the heavy lifting of managing infrastructure, app runtimes, and dependencies. App Platform, along with Managed Databases, helps fulfill DigitalOcean’s mission by empowering developers, startups, and SMBs to focus more on their apps, and less on the underlying infrastructure and databases.","spans":[{"start":45,"end":70,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/app-platform/"}}]},{"type":"heading2","text":"How Managed MongoDB works","spans":[]},{"type":"paragraph","text":"DigitalOcean provides you with various compute options to build your apps like:","spans":[]},{"type":"list-item","text":"Droplets: On-demand, Linux virtual machines suitable for production business applications and personal passion projects.","spans":[{"start":0,"end":8,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/droplets/"}}]},{"type":"list-item","text":"DigitalOcean Kubernetes: Managed Kubernetes with automatic scaling, upgrades, and a free control plane.","spans":[{"start":0,"end":23,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/kubernetes/"}}]},{"type":"list-item","text":"DigitalOcean App Platform: A fully managed Platform as a Service.","spans":[{"start":0,"end":25,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/app-platform/"}}]},{"type":"paragraph","text":"No matter which compute option you choose to build your apps, you can easily add Managed MongoDB to it. In addition to this, Managed MongoDB also integrates with the Node.js 1-Click App from DigitalOcean Marketplace making it a lot easier to build Node.js apps.","spans":[{"start":166,"end":215,"type":"hyperlink","data":{"link_type":"Web","url":"https://marketplace.digitalocean.com/apps/nodejs"}}]},{"type":"heading2","text":"Simple, predictable pricing","spans":[]},{"type":"paragraph","text":"Just like all DigitalOcean products, Managed MongoDB provides simple, predictable pricing that allows you to control costs and prevent any surprise bills. You can spin up a database cluster for just $15/month, or a highly available three-node replica set for $45/month. Click here for more information.","spans":[{"start":270,"end":301,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/pricing/#managed-databases"}}]},{"type":"heading2","text":"Regional availability","spans":[]},{"type":"paragraph","text":"Managed MongoDB is currently available in the following regions:","spans":[]},{"type":"list-item","text":"NYC3 (New York, USA)","spans":[]},{"type":"list-item","text":"FRA1 (Frankfurt, Germany)","spans":[]},{"type":"list-item","text":"AMS3 (Amsterdam, Netherlands)","spans":[]},{"type":"paragraph","text":"We will be making Managed Mongo available in other regions soon. Please check out the release notes for most up to date information on regional availability.","spans":[{"start":86,"end":99,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/docs/release-notes/"}}]},{"type":"heading2","text":"Join us at deploy, DigitalOcean’s virtual user conference","spans":[]},{"type":"paragraph","text":"Today we have deploy, DigitalOcean’s signature user conference, which focuses on celebrating, educating, and connecting awesome builders from all over the world.","spans":[{"start":14,"end":20,"type":"hyperlink","data":{"link_type":"Web","url":"https://deploy.digitalocean.com/home"}}]},{"type":"paragraph","text":"Check out the keynote session from DigitalOcean's CEO, Yancey Spruill, in which he talks about where we're headed as a company and shares some exciting product updates. His keynote will be followed by sessions from community members, engineers, customers, and other experts that are building technologies and businesses powered by the cloud. With live Q&A and an active Discord server, there’s ample opportunity to engage and learn something new. Click here to attend the deploy conference.","spans":[{"start":14,"end":69,"type":"hyperlink","data":{"link_type":"Web","url":"https://deploy.digitalocean.com/agenda/session/552806"}},{"start":347,"end":384,"type":"hyperlink","data":{"link_type":"Web","url":"http://do.co/deploy-discord"}},{"start":461,"end":489,"type":"hyperlink","data":{"link_type":"Web","url":"http://do.co/deploy"}}]},{"type":"paragraph","text":"We are also launching a hackathon for DigitalOcean Managed MongoDB. Learn how you can participate, submit an app and get a t-shirt.","spans":[{"start":24,"end":66,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/mongodb-hackathon"}}]},{"type":"paragraph","text":"We hope you will give Managed MongoDB a try. Here are some sample datasets and sample apps that you can use to kick the tires. Check out the docs and let us know what you think!","spans":[{"start":22,"end":43,"type":"hyperlink","data":{"link_type":"Web","url":"https://cloud.digitalocean.com/databases/new?engine=mongodb"}},{"start":59,"end":90,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/do-community/mongodb-resources","target":"_blank"}},{"start":141,"end":145,"type":"hyperlink","data":{"link_type":"Web","url":"https://docs.digitalocean.com/products/databases/mongodb/"}}]},{"type":"paragraph","text":"If you’d like to have a conversation about using DigitalOcean and Managed MongoDB in your business, please feel free to contact our sales team.","spans":[{"start":120,"end":142,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/company/contact/sales/"}}]},{"type":"paragraph","text":"Happy coding!","spans":[]},{"type":"paragraph","text":"André Bearfield","spans":[]},{"type":"paragraph","text":"Director of Product Management","spans":[]}],"tags":[{"tag1":{"__typename":"PRISMIC_Tag","tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"author":{"__typename":"PRISMIC_Author","author_name":"André Bearfield","author_image":{"dimensions":{"width":553,"height":547},"alt":"André Bearfield","copyright":null,"url":"https://images.prismic.io/www-static/fdc7c85186f0a850b04083e1d4306bd1c19772e8_andre-bearfield.png?auto=compress,format"},"_meta":{"uid":"andre-bearfield"}},"_meta":{"uid":"introducing-digitalocean-managed-mongodb"}},"featured_blog_2":{"__typename":"PRISMIC_Blog","_linkType":"Link.document","blog_header_image":{"dimensions":{"width":790,"height":400},"alt":"Droplet Console","copyright":null,"url":"https://images.prismic.io/www-static/710499ae-78cc-4179-afc1-15793637b200_DODX3727-790x400-logo-2.jpg?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Securely connect to Droplets with SSH key pairs using a new Droplet Console","spans":[]}],"blog_post_date":"2021-08-10","blog_post_content":[{"type":"paragraph","text":"The famous author Ken Blanchard once said, “Feedback is the breakfast of champions.\" This is something we truly believe at DigitalOcean, and we always strive to enhance our products based on customer feedback.","spans":[]},{"type":"paragraph","text":"With this goal in mind, we are excited to introduce a new Droplet Console that will make it much easier to connect to your Droplets securely. The new Droplet Console provides one-click SSH access to your Droplets through a native-like SSH/Terminal experience. It also eliminates the need for a password or manual configuration of SSH keys. Starting today, we’re pleased to announce that the new Droplet Console is now available to all Droplet users.","spans":[]},{"type":"heading2","text":"Why you should be using Secure Shell (SSH) ","spans":[]},{"type":"paragraph","text":"Password-based security is notoriously insecure due to password fatigue and the overuse of passwords such as ‘123456’. Secure Shell or SSH is a network communication protocol that solves this by using passwordless solutions for encryption, enabling two computers to communicate and securely share data. At a high level, SSH works by creating cryptographic key pairs consisting of a public and private key, which are computer generated and stored separately to ensure their security. ","spans":[{"start":80,"end":117,"type":"hyperlink","data":{"link_type":"Web","url":"https://cybernews.com/best-password-managers/most-common-passwords/"}}]},{"type":"paragraph","text":"SSH has become the default encryption protocol for many industries, but it was difficult to use SSH keys with DigitalOcean’s current Recovery (VNC) console, which is why we developed our new Droplet Console. The new Droplet Console is backed by an agent that security supervises the key pair, while also providing one-click SSH access to our users. You can see the full list of features below.","spans":[]},{"type":"heading2","text":"The new Droplet Console: More time saving, less time wasting ","spans":[]},{"type":"paragraph","text":"The new Droplet Console is for everyone who is looking to build fast, secure apps and avoid hassles with SSH access & usability issues.","spans":[]},{"type":"paragraph","text":"In addition to easier SSH access, the new Droplet Console comes with:","spans":[]},{"type":"list-item","text":"Copy/paste text: Instead of typing lengthy key pairs and text manually, you can use copy/paste to save time. ","spans":[{"start":0,"end":17,"type":"strong"}]},{"type":"list-item","text":"Multi-color support: Multi-color support makes the console more useful and intuitive, and breaks the conventional standard appearance which is black text on a white background. ","spans":[{"start":0,"end":41,"type":"strong"}]},{"type":"list-item","text":"Multi-language support: DigitalOcean’s new Droplet Console supports multiple languages, meaning you can now type and view any content in any language that is supported by UTF-8","spans":[{"start":0,"end":24,"type":"strong"}]},{"type":"list-item","text":"OS/images supported: Linux distributions (Ubuntu(16.04 - 20.04), Fedora (32 & 33), Debian (9), CentOS (7.6 & 8.3), CentOS 8 Stream, Rocky Linux and Marketplace images.","spans":[{"start":0,"end":20,"type":"strong"},{"start":148,"end":159,"type":"hyperlink","data":{"link_type":"Web","url":"https://marketplace.digitalocean.com/"}}]},{"type":"paragraph","text":"The new Droplet Console is available by default on any new Droplets you spin up. You can also enable it manually on older Droplets. Click here to learn more!","spans":[{"start":132,"end":157,"type":"hyperlink","data":{"link_type":"Web","url":"https://docs.digitalocean.com/products/droplets/how-to/connect-with-console/"}}]},{"type":"paragraph","text":"Check out this short walkthrough video that shows the new Droplet Console in action: ","spans":[]},{"type":"embed","oembed":{"type":"video","embed_url":"https://www.youtube.com/watch?v=Qt7QihVuxiE","title":"Access Your Droplet Terminal Through the Web Console","provider_name":"YouTube","thumbnail_url":"https://i.ytimg.com/vi/Qt7QihVuxiE/hqdefault.jpg","provider_url":"https://www.youtube.com/","author_name":"DigitalOcean","author_url":"https://www.youtube.com/c/Digitalocean","height":113,"width":200,"version":"1.0","thumbnail_height":360,"thumbnail_width":480,"html":"<iframe width=\"200\" height=\"113\" src=\"https://www.youtube.com/embed/Qt7QihVuxiE?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>"}},{"type":"paragraph","text":"We hope you’re excited about the new Droplet Console. You’re welcome to spin some Droplets up right now, and try out the new Droplet Console – why wait?","spans":[{"start":72,"end":103,"type":"hyperlink","data":{"link_type":"Web","url":"https://cloud.digitalocean.com/droplets/new"}}]},{"type":"paragraph","text":"Happy coding!","spans":[]},{"type":"paragraph","text":"Harsh Banwait, Senior Product Manager","spans":[]}],"tags":[{"tag1":{"__typename":"PRISMIC_Tag","tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"author":{"__typename":"PRISMIC_Author","author_name":"Harsh Banwait","author_image":{"dimensions":{"width":600,"height":399},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/e83ff690-b20c-4d88-a2b6-57e562558cd6_download.png?auto=compress,format"},"_meta":{"uid":"harsh-banwait"}},"_meta":{"uid":"new-droplet-console-ssh-support"}},"featured_blog_3":{"__typename":"PRISMIC_Blog","_linkType":"Link.document","blog_header_image":{"dimensions":{"width":790,"height":400},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/588e28d3-d41e-480b-937b-8c3b19201f6e_DODX3568-790x400-Blog.jpg?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"How to scale your SaaS product without breaking the bank","spans":[]}],"blog_post_date":"2021-06-22","blog_post_content":[{"type":"paragraph","text":"These days, if you are in the business of software, chances are you are delivering or plan to deliver your services using a Software-as-a-Service (SaaS) model. A combination of internet-based delivery, subscription-based pricing, and low-friction product experiences have made SaaS solutions valuable tools for their users, and an excellent vehicle for software builders looking to distribute their products.","spans":[]},{"type":"paragraph","text":"These factors have made SaaS solutions ubiquitous; SaaS is the largest segment in the public cloud market, and is used to provide functionality ranging from personal finance apps for consumers, to productivity software for businesses, and even tools and services for software developers themselves to compose their applications and simplify their workflows. It is also not uncommon to find micro-SaaS applications being built for specific industries such as retail, job functions such as accounting or marketing, or tasks such as event management. ","spans":[]},{"type":"paragraph","text":"The best thing about this SaaS wave has been that it has allowed a new generation of software builders to build and monetize applications and participate in the digital economy. Previously, you had to be a big company with lots of resources, name recognition and distribution networks to successfully sell software products. Now, irrespective of whether you are a single person working on a passion project, a small team of developers in a startup, or a small and medium-sized business (SMB), the SaaS model enables you to express your ideas in the form of software and deliver them to customers anywhere in the world.","spans":[]},{"type":"heading2","text":"The unique challenges of building SaaS solutions","spans":[]},{"type":"paragraph","text":"","spans":[]},{"type":"paragraph","text":"Despite the opportunities that come with the widespread adoption of SaaS products, software builders still have to answer key questions in their journey to building successful SaaS products. Understanding what customers to target, features to prioritize, how to price your product, and how to acquire customers are all critical questions to figure out while you are also doing the important job of actually building and operating the product. ","spans":[]},{"type":"paragraph","text":"Writing the code, testing, deployment, monitoring the usage in production, and ensuring that your apps are able to handle the additional demand when customer base and usage grows are all essential and time-consuming tasks.","spans":[]},{"type":"paragraph","text":"Additionally, being able to test multiple ideas, pivot, and double down on the ideas that actually work is critical in early stages of SaaS development. Once growth comes, it is equally important to scale up without compromising on performance or reliability. Needless to say, all of this needs to be economically viable as well, since not everyone has the resources of large SaaS providers like Salesforce or Adobe.","spans":[]},{"type":"heading2","text":"Cloud Computing enables builders but also poses challenges","spans":[]},{"type":"paragraph","text":"","spans":[]},{"type":"paragraph","text":"Fortunately, for the act of building and operating your apps, cloud computing can help take some load off your shoulders. Unless you have the scale and resources of Facebook, chances are you are not going to set up your own data centers to host the computing infrastructure that powers your SaaS company. Public cloud infrastructure providers can bring great value to SaaS builders by providing on-demand computing services with usage-based pricing. However, just like how the legacy software companies weren't built for the SaaS model, the early (and big) cloud computing services were not optimized for the unique needs of small SaaS building teams. ","spans":[]},{"type":"paragraph","text":"Smaller SaaS teams face challenges with large cloud computing providers, including:","spans":[]},{"type":"heading4","text":"Too many technology options","spans":[]},{"type":"paragraph","text":"There are just too many options for tech stacks on which to build your SaaS - programming languages, application development frameworks, libraries, runtime environments, architectural patterns, and deployment models - and the list is growing by the day.","spans":[]},{"type":"heading4","text":"Complexity of cloud computing services","spans":[]},{"type":"paragraph","text":"Even when you have decided on a technology stack, there is a lot of cloud vendor-specific terminology you need to learn and heavy lifting you need to do to build on the cloud, not all of which contributes to making your SaaS applications successful.","spans":[]},{"type":"heading4","text":"Unpredictable costs","spans":[]},{"type":"paragraph","text":"The experimentation necessary in early stages of SaaS development, as well as the scaling of applications required during the growth phase, call for affordable and predictable pricing from your cloud provider. The last thing SaaS teams want is surprising and indecipherable bills from your cloud provider. Unfortunately, smaller businesses often experience unpredictable costs with cloud providers who are busy serving only the large enterprises.","spans":[]},{"type":"heading2","text":"DigitalOcean provides a simple, cost effective solution for SaaS builders","spans":[]},{"type":"paragraph","text":"Fortunately, at DigitalOcean we have a laser focus on small software development teams, who are trying to build the next generation of applications. Today, DigitalOcean customers are already building SaaS applications which serve all kinds of customers.","spans":[{"start":191,"end":217,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/solutions/saas/"}}]},{"type":"paragraph","text":"We believe SaaS builders should focus on building apps that power their business, and not spend their valuable time on managing infrastructure. That is exactly what we have been able to enable through our intuitive products that are built for scale and reliability.","spans":[{"start":205,"end":223,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/"}}]},{"type":"list-item","text":"Vidazoo is an advertising technology company specializing in video streaming and serving. It serves video ads to thousands of websites and handles close to 10 billion requests per day. \n\n“We are as much a data company as an adtech company. Our business relies on speedy and accurate data processing at massive scale. DigitalOcean provides us the perfect set of tools to operate our SaaS business profitably, while not making us feel the need to become full time system administrators. We plan to move a lot of our apps to DigitalOcean App Platform and other fully managed products.” - Roman Svichar, CTO of Vidazoo","spans":[{"start":0,"end":7,"type":"hyperlink","data":{"link_type":"Web","url":"https://vidazoo.com/"}},{"start":187,"end":583,"type":"em"}]},{"type":"paragraph","text":"We believe in meeting customers where they are. If they already have an understanding of cloud infrastructure technologies, they should be able to leverage that knowledge and get started with our products without any further ramp up.","spans":[]},{"type":"list-item","text":"Whatfix is an enterprise SaaS provider that offers a digital adoption platform to businesses. The company helps enterprises gain the full value of their investments in enterprise applications by providing real-time, interactive, and contextual guidance to users of those applications. \n\n“What we really love about the DigitalOcean platform is the ease of use. We feel like we know infrastructure and can handle most of the configuration and management. What we needed from a cloud was not bells and whistles but efficiency and reliability. DigitalOcean provides us a platform to build our apps and then gets out of the way. Just how we like it.” - Achyuth Krishna, Director of Engineering of Whatfix","spans":[{"start":0,"end":7,"type":"hyperlink","data":{"link_type":"Web","url":"https://whatfix.com/blog/driving-the-future-now-were-excited-to-announce-our-90-million-series-d-funding/"}},{"start":287,"end":648,"type":"em"}]},{"type":"paragraph","text":"We understand that scaling while maintaining reliability of applications and profitability of business is important, so we provide robust solutions which minimize downtime.","spans":[]},{"type":"list-item","text":"Centra is a SaaS-based e-commerce platform for global direct-to-consumer and wholesale e-commerce brands. Centra provides a powerful e-commerce backend that lets brands build pixel-perfect, custom designed, online flagship stores. \n\n“How do we enable our customers to create differentiated online experiences? How do we ensure their e-commerce apps stay up and running at all times? How do we scale on-demand when traffic grows or new customers come in? These are the questions that we ask ourselves every day. Thankfully, we have a partner in DigitalOcean that provides just the platform to answer those questions enabling us to guarantee 99.9% uptime for our clients.” - Martin Jensen, CEO of Centra","spans":[{"start":0,"end":6,"type":"hyperlink","data":{"link_type":"Web","url":"https://centra.com/"}},{"start":233,"end":673,"type":"em"}]},{"type":"paragraph","text":"These are just a few examples of SaaS businesses finding success on DigitalOcean. We are constantly amazed by the creativity and innovation that software builders are utilizing our platform for. If you are interested in learning more about product updates, technical deep-dives and best practices for building SaaS products and businesses, please contact us to learn how we can help you get started. ","spans":[{"start":340,"end":357,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/migrate/?utmmedium=blog","target":"_blank"}}]},{"type":"paragraph","text":"Come build with DigitalOcean!","spans":[]},{"type":"paragraph","text":"Looking to migrate your SaaS to DigitalOcean? Leverage free infrastructure credits, robust training, and technical support to ensure a worry-free migration.","spans":[{"start":0,"end":156,"type":"strong"},{"start":0,"end":156,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/migrate/?utmmedium=blog","target":"_blank"}}]},{"type":"paragraph","text":"","spans":[]},{"type":"paragraph","text":"Raman Sharma","spans":[]},{"type":"paragraph","text":"Vice President, Product & Programs Marketing","spans":[]}],"tags":[{"tag1":{"__typename":"PRISMIC_Tag","tag":"Developer Relations","_linkType":"Link.document","_meta":{"uid":"developer-relations"}}}],"author":{"__typename":"PRISMIC_Author","author_name":"Raman Sharma","author_image":{"dimensions":{"width":512,"height":512},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/497b4b14-d192-493a-8b66-7ae176ba99f3_raman.png?auto=compress,format"},"_meta":{"uid":"raman-sharma"}},"_meta":{"uid":"how-to-scale-your-saas-product-without-breaking-the-bank"}}}}]}}},"pageContext":{"limit":12,"skip":156,"numPages":33,"currentPage":14,"data":[{"node":{"author":{"_linkType":"Link.document","author_name":"Kamal Nasser","author_image":{"dimensions":{"width":1008,"height":1008},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/e2285fcfaf32ce7ec26329fe7e416ae896fbf991_portrait_2k18_bw_smallres.jpg?auto=compress,format"},"_meta":{"uid":"kamal-nasser"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"Fully-automated Git-based Static Website","copyright":null,"url":"https://images.prismic.io/www-static/0aaec289-b9b2-4d3f-8dfc-0d1d2bdb349a_www_under_5_blog.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Deploying a Fully-automated Git-based Static Website in Under 5 Minutes","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Sometimes you simply want to get a static website up and running as quickly as possible, whether it be the actual website, a placeholder, or a basic landing page. Recently I started using Caddy, a modern web-server focused on simplicity and security. It includes native support for Git and Let's Encrypt thanks to its plugin-based architecture. ","spans":[]},{"type":"paragraph","text":"RELATED: Implementing HTTPS for Chrome Users","spans":[{"start":0,"end":44,"type":"strong"},{"start":9,"end":44,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/implementing-https-for-chrome-users/"}}]},{"type":"paragraph","text":"I love how easy-to-use Caddy is, and I wanted to share a tutorial about how we can deploy a static website synced with a Git repository in under 5 minutes—all on a Droplet that spins up in 55 seconds.","spans":[]},{"type":"heading4","text":"Prerequisites","spans":[]},{"type":"o-list-item","text":"An Ubuntu 16.04 server configured according to our Initial Server Setup guide. While the goal is to get a website up quickly, we don't want to skimp on security. The guide will set up a secure environment for Caddy. Skip step 7 of the guide as we will be using a Cloud Firewall instead of a software firewall installed on the Droplet.","spans":[{"start":51,"end":77,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04"}},{"start":263,"end":277,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/cloud-firewalls/"}}]},{"type":"o-list-item","text":"A domain name you own, to be used for the website.","spans":[]},{"type":"heading4","text":"Step 1 — Install Caddy","spans":[]},{"type":"paragraph","text":"Caddy provides pre-built binaries on its website. Download Caddy on your Droplet:","spans":[{"start":37,"end":48,"type":"hyperlink","data":{"link_type":"Web","url":"https://caddyserver.com/download"}}]},{"type":"preformatted","text":"```[php]{`","spans":[]},{"type":"paragraph","text":"    wget -O caddy.tar.gz \"https://caddyserver.com/download/linux/amd64?plugins=http.git&license=personal\"  ","spans":[]},{"type":"preformatted","text":"`}```","spans":[]},{"type":"paragraph","text":"This command will download a Caddy binary with the following settings:","spans":[]},{"type":"paragraph","text":"Platform: Linux 64-bit ","spans":[]},{"type":"paragraph","text":"Plugins: http.git ","spans":[]},{"type":"paragraph","text":"License: Personal","spans":[]},{"type":"paragraph","text":"Keep in mind that the personal license is available for non-commercial use only.","spans":[]},{"type":"paragraph","text":"Extract the downloaded archive into a new directory and `cd` into it:","spans":[]},{"type":"preformatted","text":"```[php]{`","spans":[]},{"type":"paragraph","text":"    mkdir caddy  ","spans":[]},{"type":"paragraph","text":"    tar vxf caddy.tar.gz -C caddy  ","spans":[]},{"type":"paragraph","text":"    cd caddy  ","spans":[]},{"type":"preformatted","text":"`}```","spans":[]},{"type":"paragraph","text":"The archive contains the Caddy binary and a Systemd service file. We will use both in this guide. First, install the binary:","spans":[]},{"type":"preformatted","text":"```[php]{`","spans":[]},{"type":"paragraph","text":"    sudo cp caddy /usr/local/bin  ","spans":[]},{"type":"paragraph","text":"    sudo chown root:root /usr/local/bin/caddy  ","spans":[]},{"type":"paragraph","text":"    sudo chmod 755 /usr/local/bin/caddy  ","spans":[]},{"type":"preformatted","text":"`}```","spans":[]},{"type":"paragraph","text":"Because Caddy will serve as our front-facing web server, it will need to be able to listen on ports 80 and 443. Linux requires binaries to be run as root in order to listen on any port under 1024. It is however possible to allow specific binaries to do so without full root privileges:","spans":[]},{"type":"preformatted","text":"```[php]{`","spans":[]},{"type":"paragraph","text":"    sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy  ","spans":[]},{"type":"preformatted","text":"`}```","spans":[]},{"type":"paragraph","text":"Then, create Caddy's configuration directories and set proper permissions:","spans":[]},{"type":"preformatted","text":"```[php]{`","spans":[]},{"type":"paragraph","text":"    sudo mkdir /etc/caddy  ","spans":[]},{"type":"paragraph","text":"    sudo chown -R root:www-data /etc/caddy  ","spans":[]},{"type":"paragraph","text":"    sudo mkdir /etc/ssl/caddy  ","spans":[]},{"type":"paragraph","text":"    sudo chown -R www-data:root /etc/ssl/caddy  ","spans":[]},{"type":"paragraph","text":"    sudo chmod 0770 /etc/ssl/caddy  ","spans":[]},{"type":"preformatted","text":"`}```","spans":[]},{"type":"paragraph","text":"Finally, install the Systemd service file:","spans":[]},{"type":"preformatted","text":"```[php]{`","spans":[]},{"type":"paragraph","text":"    sudo cp init/linux-systemd/caddy.service /etc/systemd/system/  ","spans":[]},{"type":"paragraph","text":"    sudo chown root:root /etc/systemd/system/caddy.service  ","spans":[]},{"type":"paragraph","text":"    sudo chmod 644 /etc/systemd/system/caddy.service  ","spans":[]},{"type":"paragraph","text":"    sudo systemctl daemon-reload  ","spans":[]},{"type":"preformatted","text":"`}```","spans":[]},{"type":"heading4","text":"Step 2 — Configure DNS","spans":[]},{"type":"paragraph","text":"Before configuring and starting Caddy we want to set up DNS so that Caddy is able to issue an SSL certificate via Let's Encrypt.","spans":[]},{"type":"paragraph","text":"Add your domain name in the Domains page. We will create two DNS records pointing to the Droplet: one for IPv4 and one for IPv6.","spans":[{"start":28,"end":35,"type":"hyperlink","data":{"link_type":"Web","url":"https://cloud.digitalocean.com/networking/domains"}}]},{"type":"paragraph","text":"The first will be of type A. In the hostname field, enter `@`. Select your Droplet in the Will Direct To field and add the record. The second record will have the same settings but with type AAAA.","spans":[]},{"type":"heading4","text":"Step 3 — Configure Caddy","spans":[]},{"type":"paragraph","text":"For the purposes of this guide, we will use the following example website: https://github.com/kamaln7/basic-static-website","spans":[{"start":75,"end":122,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/kamaln7/basic-static-website"}}]},{"type":"paragraph","text":"Caddy's configuration file will be located in `/etc/caddy/Caddyfile`. Open the file in a text editor (nano, vim, etc.) and enter the following:  ","spans":[]},{"type":"preformatted","text":"```[php]{`","spans":[]},{"type":"paragraph","text":"    example.com {  ","spans":[]},{"type":"paragraph","text":"        tls you@example.com","spans":[]},{"type":"paragraph","text":"        internal /.git","spans":[]},{"type":"paragraph","text":"        git https://github.com/kamaln7/basic-static-website.git {","spans":[]},{"type":"paragraph","text":"            interval 300","spans":[]},{"type":"paragraph","text":"        }","spans":[]},{"type":"paragraph","text":"        gzip","spans":[]},{"type":"paragraph","text":"        redir 301 {","spans":[]},{"type":"paragraph","text":"            if {scheme} is http","spans":[]},{"type":"paragraph","text":"            /  https://{host}{uri}","spans":[]},{"type":"paragraph","text":"        }","spans":[]},{"type":"paragraph","text":"    }","spans":[]},{"type":"preformatted","text":"`}```","spans":[]},{"type":"paragraph","text":"Replace `example.com` with your domain name and `you@example.com` with your email address. This email address will be used to issue a Let's Encrypt certificate for your domain so make sure to enter a valid one that you have access to.","spans":[]},{"type":"paragraph","text":"This configures basic sane defaults: gzip compression will be used when suitable and all HTTP traffic will be redirected to HTTPS.","spans":[]},{"type":"paragraph","text":"The main piece of this configuration is the `git` block. This will configure Caddy to use the Git repository’s contents as the website's files, checking for updates every 5 minutes.","spans":[]},{"type":"heading4","text":"Step 4 — Start Caddy","spans":[]},{"type":"paragraph","text":"Start Caddy, and enable it to start on boot:","spans":[]},{"type":"preformatted","text":"```[php]{`","spans":[]},{"type":"paragraph","text":"    sudo systemctl start caddy  ","spans":[]},{"type":"paragraph","text":"    sudo systemctl enable caddy","spans":[]},{"type":"preformatted","text":"`}```","spans":[]},{"type":"paragraph","text":"It might take a few seconds for Caddy to receive the certificate from Let's Encrypt and clone your repository, but you should now be able to browse to your domain name and see your website.","spans":[]},{"type":"paragraph","text":"Now, any changes you make in your Git repository will be automatically applied.","spans":[]},{"type":"heading4","text":"Step 5 — Configure a Firewall","spans":[]},{"type":"paragraph","text":"DigitalOcean Cloud Firewalls make it very easy to configure a secure firewall. Browse to the Firewalls page and click on the Create Firewall button. If you already have one or more Firewalls on your account, you can access the Create Firewall page through the Create menu at the top of the page.","spans":[{"start":93,"end":107,"type":"hyperlink","data":{"link_type":"Web","url":"https://cloud.digitalocean.com/networking/firewalls"}}]},{"type":"paragraph","text":"For the inbound rules, we will allow SSH, HTTP, and HTTPS traffic. Keep the outbound rules as is. Select your Droplet and create the firewall. ","spans":[]},{"type":"paragraph","text":"For further instructions on Cloud Firewalls, see our tutorial How To Create Your First DigitalOcean Cloud Firewall.","spans":[{"start":62,"end":114,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-create-your-first-digitalocean-cloud-firewall"}}]},{"type":"heading4","text":"Optional: Step 6 — Enable Instant Deployments using Webhooks","spans":[]},{"type":"paragraph","text":"Caddy will check the Git repository for changes every five minutes by default. While you can set the interval to a lower value, a better solution would be to configure GitHub to push any changes to Caddy instead. This will allow for near-instant updates.","spans":[]},{"type":"paragraph","text":"Caddy makes this process very easy as well. The webhook will require a secret—you can use anything you want. The `uuidgen` program is a convenient tool that allows you to easily generate a random secure string. Simply run `uuidgen` and copy its output.","spans":[]},{"type":"paragraph","text":"Edit `Caddyfile` and add the following line inside the Git block, replacing secret with your secret:","spans":[]},{"type":"preformatted","text":"```[php]{`","spans":[]},{"type":"paragraph","text":"    hook /github_hook secret  ","spans":[]},{"type":"preformatted","text":"`}```","spans":[]},{"type":"paragraph","text":"Restart Caddy to apply the changes:","spans":[]},{"type":"preformatted","text":"```[php]{`","spans":[]},{"type":"paragraph","text":"    sudo systemctl restart caddy  ","spans":[]},{"type":"preformatted","text":"`}```","spans":[]},{"type":"paragraph","text":"Then, configure Github to use the new webhook endpoint: browse to your repository's settings page and click on Webhooks. Add a new webhook and set the Payload URL to `https://domain.com/github_hook`. Set the the Content type to `application/json` and enter your secret and click on Add Webhook.","spans":[]},{"type":"paragraph","text":"Now, whenever you push a change to your Git repository, it will be reflected on your website in seconds. For instance, if you are using the example website mentioned above, go ahead and change the highlight color to blue by replacing `b--gold` with `b--blue`. Commit the updated file and reload the page!","spans":[{"start":140,"end":155,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/kamaln7/basic-static-website"}}]},{"type":"heading4","text":"Conclusion","spans":[]},{"type":"paragraph","text":"By following this guide, you will have deployed a fully-automated low-maintenance website using modern technologies such as HTTP/2 and Let's Encrypt. Caddy is a versatile web server and supports many great features such as on-the-fly Markdown rendering. You can find a list of plugins and features on the Features page on its website. Browse through the documentation to see what features you might want to enable and how to do so.","spans":[{"start":305,"end":318,"type":"hyperlink","data":{"link_type":"Web","url":"https://caddyserver.com/features"}},{"start":350,"end":367,"type":"hyperlink","data":{"link_type":"Web","url":"https://caddyserver.com/docs"}}]},{"type":"paragraph","text":"Kamal Nasser is a Developer Advocate at DigitalOcean. He is also a Computer Science student with a passion for software engineering and avocados. You can find him on Twitter @kamaln7.","spans":[{"start":0,"end":183,"type":"em"},{"start":174,"end":182,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/kamaln7"}}]}],"blog_post_date":"2018-08-08","tags":[{"tag1":{"tag":"Community","_linkType":"Link.document","_meta":{"uid":"community"}}}],"_meta":{"uid":"deploying-a-fully-automated-git-based-static-website-in-under-5-minutes"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Shiven Ramji","author_image":{"dimensions":{"width":170,"height":170},"alt":"Shiven Ramji","copyright":null,"url":"https://images.prismic.io/www-static/79c5726c75adb45644613d2371026b1bb789a415_shiven_ramji-090ac31e.png?auto=compress,format"},"_meta":{"uid":"shiven_ramji"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"submarine illustration","copyright":null,"url":"https://images.prismic.io/www-static/b6f7ab68c7c82f84a3da51562d218b3b85df7095_2018midyear-blog_v3_blog--1-.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"2018: Mid-Year Product Update","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"We're past the middle of the year and I want to provide everyone in our community with an update on progress and upcoming plans. We outlined a series of initiatives in January and have made significant progress on those. I'm also going to share what we're planning for the next two quarters.","spans":[{"start":168,"end":175,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/2018-whats-shipping-next-on-digitalocean/"}}]},{"type":"paragraph","text":"Our roadmap is driven by insights derived from feedback that we receive from the community across various channels. This April, we hosted our very first  TIDE NYC conference in our offices to bring together our community, our partners, and our product teams to learn from one another.  Our talks included lessons from scaling to millions of users, infrastructure automation, and some of the trends in cloud native computing. (I encourage you to watch all of TIDE NYC’s talks on our YouTube page.) We also used this time to get direct feedback on our 2018 roadmap, which further refined the initiatives we have planned for the remainder of the year.","spans":[{"start":154,"end":162,"type":"hyperlink","data":{"link_type":"Web","url":"https://tidenyc.splashthat.com/"}},{"start":305,"end":346,"type":"hyperlink","data":{"link_type":"Web","url":"https://youtu.be/sTVSB3xaR68"}},{"start":348,"end":373,"type":"hyperlink","data":{"link_type":"Web","url":"https://youtu.be/FZjy5ZNIxvI"}},{"start":391,"end":423,"type":"hyperlink","data":{"link_type":"Web","url":"https://youtu.be/_6Jr8tqqL6w"}},{"start":451,"end":494,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.youtube.com/playlist?list=PLseEp7p6EwibAnWVIxSp6NoVu9gFfECwm"}}]},{"type":"heading1","text":"Our Progress over the First Half of 2018","spans":[]},{"type":"heading2","text":"New Droplet Plans","spans":[]},{"type":"paragraph","text":"In January we introduced new Droplet plans that significantly increased resources while keeping pricing the same.","spans":[{"start":14,"end":42,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/new-droplet-plans/"}}]},{"type":"paragraph","text":"Standard Droplets are a good balance of CPU, memory, and SSD.  Each Standard Droplet now has twice the RAM and larger local SSD storage, and several plans have additional vCPUs. We recently also introduced the 192GB RAM 32 vCPUs Standard Droplet to the lineup for $960/mo.","spans":[]},{"type":"paragraph","text":"CPU Optimized Droplets are designed for applications requiring more powerful CPU resources like video transcoding, CI/CD, and batch processing.  Each CPU Optimized Droplet plan now has more RAM and SSD, and we also introduced a new 1 vCPU Optimized Droplet with 25 GB of local SSD for $20/mo.","spans":[]},{"type":"paragraph","text":"To learn more about differences between Standard and CPU Optimized Plans, please see the Community article, Choosing the Right Droplet for Your Application. Since announcing these plans, we have added the ability to pool your bandwidth across all Droplets in your account, making it less likely that you will incur overage charges. We’ve also lowered the overage rate for bandwidth to $0.01/GB in all regions.","spans":[{"start":108,"end":155,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/choosing-the-right-droplet-for-your-application"}}]},{"type":"paragraph","text":"Over 1 million Droplets are active on the DigitalOcean platform today, and we will continue to introduce new sizes and types later this year and beyond as we continue to address new use cases and application types being designed by our customers.","spans":[]},{"type":"heading2","text":"Storage Upgrades","spans":[]},{"type":"paragraph","text":"Several upgrades were released earlier this year to improve block and object storage.","spans":[]},{"type":"paragraph","text":"Block Storage received a significant performance update and now provides 50% lower cluster latency, as well as the ability to burst IOPS and bandwidth rates.  In addition, we added a time-saving feature with the ability to automatically format your Block Storage Volumes.  We also expanded regional coverage, with Block Storage now available in Amsterdam.","spans":[{"start":25,"end":55,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/block-storage-volume-performance-burst/"}},{"start":223,"end":270,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/auto-format-and-mount/"}},{"start":345,"end":354,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/block-storage-in-ams3/"}}]},{"type":"paragraph","text":"In January, Spaces object storage launched in Singapore, joining availability in New York and Amsterdam. Since we launched Spaces in September of 2017, adoption has grown rapidly and we’re now storing billions of objects. Spaces now supports version 4 of pre-signed URLs, scheduled deletion of objects, and the UI has been upgraded to provide previews of stored images, audio, and videos.  We did experience growing pains in the early days of Spaces and have identified and fixed these early issues, which you can read about here. We’re committed to and focused on improving our Spaces offering to help as your cloud storage needs scale.","spans":[{"start":46,"end":55,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/spaces-available-in-sgp1/"}},{"start":525,"end":529,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/pages/spaces_update"}}]},{"type":"heading2","text":"Load Balancers","spans":[]},{"type":"paragraph","text":"We rolled out a significant update to Load Balancers, making it easier to deliver HTTPS with free-of-charge automatically renewed Let’s Encrypt integration, and added support for HTTP/2 as an option in the Control Panel.","spans":[{"start":14,"end":52,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/introducing-load-balancer-upgrades/"}},{"start":130,"end":143,"type":"hyperlink","data":{"link_type":"Web","url":"https://letsencrypt.org/"}}]},{"type":"paragraph","text":"Popular browsers are beginning to notify users when they visit sites that are not HTTPS-enabled with a \"Not secure\" label. It is now even more important to support HTTPS on your websites. You can read more about some of the options to support HTTPS in this blog post.","spans":[{"start":212,"end":266,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/implementing-https-for-chrome-users/"}}]},{"type":"heading2","text":"Virtual Private Cloud (VPC)","spans":[]},{"type":"paragraph","text":"In July, we enabled Private Networking as the first of four phases to give customers Virtual Private Cloud (VPC) capabilities. Later this year we will add improved visualization and management capabilities for your private networks into the Control Panel. Combining Private Networking isolation with Cloud Firewalls, Let's Encrypt SSL Certificates for Load Balancers, SSH keys, and 2FA provides the security you need to build scalable, robust, and secure production environments.","spans":[{"start":20,"end":38,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/docs/release-notes/2018/private-networking/"}}]},{"type":"heading2","text":"Developer Experience","spans":[]},{"type":"paragraph","text":"Making DigitalOcean both simple and powerful to use is one of our highest priorities, and we have rolled out three significant releases focused on your developer experience.  The first was the introduction of the Control Panel Dashboard, making it faster to access common resources and account information, as well as changes to the navigation with quick links to API and community documentation.","spans":[{"start":213,"end":236,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/introducing-control-panel-dashboard/"}}]},{"type":"paragraph","text":"Our second major release was on July 25, when we rolled out Projects, a new way to control and organize your infrastructure on DigitalOcean.  These changes are designed to save you time, and make it easier to access the most important information as your infrastructure grows. We also introduced our new DigitalOcean Product Documentation center, which contains Overviews and Quickstart guides on everything DigitalOcean has to offer, as well as How-Tos and Resource links to dive in deeper.","spans":[{"start":60,"end":68,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/organizing-your-infrastructure-with-projects/"}},{"start":317,"end":338,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/docs/"}}]},{"type":"paragraph","text":"In addition to the improvements above, we have updated all of our services for the General Data Protection Regulation (GDPR).","spans":[{"start":83,"end":117,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/security/gdpr/"}}]},{"type":"heading1","text":"What’s coming in the second half of 2018","spans":[]},{"type":"heading2","text":"Kubernetes","spans":[]},{"type":"paragraph","text":"We announced DigitalOcean Kubernetes to simplify container orchestration.  Over 20,000 developers have signed up for early access with plans to run many different kinds of application workloads on their Kubernetes cluster, from web applications to message queues and batch processes. We are currently working with early access users, who are evaluating for various workloads and providing feedback to help us build the right product.  We will continue to expand the number of users in the coming weeks, and we expect in Q4 to move to limited availability.","spans":[{"start":13,"end":36,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/introducing-digitalocean-kubernetes/"}}]},{"type":"heading2","text":"Custom Images","spans":[]},{"type":"paragraph","text":"We are excited to share that we will be introducing support for Custom Images in Q3. This has been a top request in our community, and we are thrilled to bring it to life with the ease and simplicity you have come to associate with our platform. The ability to add custom images allows you to easily migrate your workloads to the cloud without needing to spend time and effort trying to recreate your environment.","spans":[]},{"type":"heading2","text":"Spaces CDN and New Regions","spans":[]},{"type":"paragraph","text":"One of the most common uses for Spaces object storage is the hosting and delivery of web assets.  We are adding content delivery capabilities directly into the Spaces product to make web asset delivery faster and more scalable.  With this new capability, your Spaces content will be delivered from global edge locations near your end users.","spans":[]},{"type":"paragraph","text":"We are also expanding Spaces to SFO2 in September and adding FRA1 and LON1 in 2019.","spans":[]},{"type":"heading2","text":"Application Marketplace","spans":[]},{"type":"paragraph","text":"We want to accelerate your development of applications by removing the complexity of installing and configuring common application building blocks and dependencies, such as development stacks, solutions, and services. One-click application launcher is an easy way to get going today, and we plan on releasing improvements to the experience with better discoverability and more partner solutions towards the end of the year.","spans":[]},{"type":"heading2","text":"Managed Database Services","spans":[]},{"type":"paragraph","text":"We are working on a new service that will make it easy to host your databases on DigitalOcean as a managed service (DBaaS). We will start addressing this need for our customers with support for one database engine later in the year. We’ll share additional details on this service as plans develop in Q4.","spans":[]},{"type":"heading1","text":"Give Us Your Feedback","spans":[]},{"type":"paragraph","text":"We have been busy building products and features to help you build and scale your applications on DigitalOcean.  This is only a sampling of all the features and improvements we are bringing to you in 2018. We hope they are lining up with the kinds of services you need, and we really want to hear from you on any ideas for what you’d like to see next!  Please share your thoughts with us in the comments below.","spans":[]},{"type":"paragraph","text":"Happy coding,","spans":[]},{"type":"paragraph","text":"Shiv, VP Product","spans":[]}],"blog_post_date":"2018-08-02","tags":[{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}},{"tag1":{"tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"_meta":{"uid":"2018-mid-year-product-update"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Josh Viney and Celia McQueen","author_image":null,"_meta":{"uid":"josh_viney_and_celia_mcqueen"}},"blog_header_image":{"dimensions":{"width":1536,"height":800},"alt":"server illustration","copyright":null,"url":"https://images.prismic.io/www-static/ce5971e51da88507f72d03b02e38026a0bf8cab7_blog-projects-v3-retina.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Organizing your Infrastructure with Projects","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"At the beginning of the year, we published our plans for 2018, and committed to continuously improving your developer experience using DigitalOcean. We included an open call for developers willing to provide feedback on new features focused on making it simpler for you to manage all the infrastructure needed to run applications at scale.","spans":[{"start":33,"end":61,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/2018-whats-shipping-next-on-digitalocean/"}},{"start":164,"end":188,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.getfeedback.com/r/6oH0ELJm/"}}]},{"type":"paragraph","text":"So far this year, the insights you provided have helped us release:","spans":[]},{"type":"list-item","text":"The Dashboard","spans":[{"start":4,"end":13,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/introducing-control-panel-dashboard/"}}]},{"type":"list-item","text":"New Product Documentation Site","spans":[{"start":4,"end":30,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/docs"}}]},{"type":"list-item","text":"Google Sign In","spans":[{"start":0,"end":14,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/digitalocean-control-panel-and-documentation-updates/"}}]},{"type":"list-item","text":"Droplet Search","spans":[{"start":0,"end":14,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/digitalocean-control-panel-and-documentation-updates/"}}]},{"type":"list-item","text":"Auto-formatted Block Storage, and","spans":[{"start":0,"end":28,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/auto-format-and-mount/"}}]},{"type":"list-item","text":"A number of user experience improvements","spans":[{"start":12,"end":40,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/digitalocean-control-panel-and-documentation-updates/"}}]},{"type":"paragraph","text":"One consistent piece of feedback we heard is that you wanted more control of how you organized your infrastructure. Today, we’re proud to announce the rollout of more updates, including a new navigation and an exciting feature set that we call Projects, which extends the Dashboard capabilities to keep you organized even as your infrastructure needs grow.","spans":[]},{"type":"heading3","text":"Why Projects?","spans":[]},{"type":"paragraph","text":"We created DigitalOcean Projects to keep your systems organized and focused, save you time navigating the Control Panel, and align with the applications, environments, clients, or projects that you use to run your businesses. The release of the Dashboard experience presented your Droplets, Load Balancers, Domains, Floating IPs, and Spaces in one place. Now with Projects, we put you in control. You can create the structures that make sense for the way you and your team work.","spans":[]},{"type":"paragraph","text":"With this new release, all of your existing resources will start off in your default project, which works just like the Dashboard. As you expand your infrastructure from that single project, you will be able to create more projects and move your resources freely between them - during creation, one at a time, or via the bulk move option. You can quickly navigate between projects through the new projects menu, which sorts your default project at the top and your most recently created projects below it. In the Settings tab, you can make changes to the project name, purpose, and description, or delete unused projects.","spans":[]},{"type":"paragraph","text":"There’s no limit to the number of projects you can have, or the number of resources you can have in them. They scale to meet your needs.","spans":[]},{"type":"paragraph","text":"Check out our documentation for more details.","spans":[{"start":14,"end":27,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/docs/projects"}}]},{"type":"image","url":"https://images.prismic.io/www-static/d2ce24c30519ca470f277b56ef3547e95517ddb8_projects.jpg?auto=compress,format","alt":"Projects screenshot","copyright":null,"dimensions":{"width":1600,"height":1220}},{"type":"paragraph","text":"This is the first of many iterations we’re planning to release this year. We will be extending and iterating on the functionality of Projects over the coming months to include:","spans":[]},{"type":"list-item","text":"Supporting more resources such as Block Storage and upcoming Kubernetes","spans":[]},{"type":"list-item","text":"New Projects API to programmatically access and work with your projects","spans":[]},{"type":"list-item","text":"Billing Usage per project, and","spans":[]},{"type":"list-item","text":"Usability improvements based on your feedback","spans":[]},{"type":"heading3","text":"Design","spans":[]},{"type":"paragraph","text":"As soon as you log in, you’ll notice some design changes. We needed to make changes to maintain the simple user experience you love, especially as we plan the addition of more capabilities like Kubernetes, DBaaS, VPC, and Application Marketplace.","spans":[]},{"type":"paragraph","text":"The most obvious change is the updated main menu for the Control Panel. The new left navigation focuses on your projects. We kept our familiar links to Droplets, Spaces, Images, Networking, Monitoring, and API intact below them, and added your account information—Profile or Team, Billing, and Security settings, so that they’re always only one click away. On the top, we provide quick access to your Droplets by making Droplet search more prominent, and added your current month’s usage so that you can keep track of your costs at a glance.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/ZTQxNjU1NzctMDBjMC00NWJiLWI4ZTctN2FiOWNiM2IwMmEy_projectsuxvideo-100.gif?auto=compress,format","alt":"Demo animated GIF","copyright":null,"dimensions":{"width":2508,"height":1838}},{"type":"paragraph","text":"The design and development of projects required multiple iterations, frequent usability tests, and continuous feedback from you. We couldn’t have done it without the involvement of our beta volunteers. If you would like to be a part of future research initiatives or product betas, please see our research page and sign up for the research program. We look forward to your feedback as we continue to improve the Control Panel.","spans":[{"start":297,"end":310,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/research/"}}]},{"type":"paragraph","text":"Josh Viney, Sr. Product Manager, Developer Experience","spans":[{"start":0,"end":10,"type":"strong"}]},{"type":"paragraph","text":"Celia McQueen, Sr. Product Designer","spans":[{"start":0,"end":13,"type":"strong"}]}],"blog_post_date":"2018-07-25","tags":[{"tag1":{"tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"_meta":{"uid":"organizing-your-infrastructure-with-projects"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Tyler Crandall","author_image":{"dimensions":{"width":280,"height":280},"alt":"Tyler Crandall","copyright":null,"url":"https://images.prismic.io/www-static/445258e6ef5412ec1d759c61296620e393cea199_tyler_crandall-bd42a38f.png?auto=compress,format"},"_meta":{"uid":"tyler_crandall"}},"blog_header_image":{"dimensions":{"width":784,"height":392},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/2be313667e4d0e87218a1ea70c40d76d4ab9805b_implementinghttps_mostov_v3_blog.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Implementing HTTPS for Chrome Users","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"HTTPS encryption allows websites to protect end users, encrypting traffic between browsers and the site’s web servers. Browser developers plan to add new warnings for end users when they surf to websites not encrypted with HTTPS, before eventually phasing out HTTP in favor of HTTPS. Yesterday, Google became the first major browser developer to implement an extra notification warning, as part of the roll out for Chrome version 68, warning users that HTTP-only sites are “Not secure” in the address bar, next to the domain name: \n","spans":[{"start":0,"end":16,"type":"hyperlink","data":{"link_type":"Web","url":"https://en.wikipedia.org/wiki/HTTPS"}}]},{"type":"image","url":"https://images.prismic.io/www-static/9441bba55c82308c976c7901583afd4e49fbf397_screen-shot-2018-07-23-at-1.55.13-pm.png?auto=compress,format","alt":null,"copyright":null,"dimensions":{"width":1366,"height":500}},{"type":"paragraph","text":"This additional warning encourages website owners to adopt HTTPS, and it is a positive step toward making the Web a more secure environment for end users.","spans":[]},{"type":"paragraph","text":"Certificate Authorities Separate HTTPS from HTTP","spans":[{"start":0,"end":48,"type":"strong"}]},{"type":"paragraph","text":"The distinction between HTTPS and HTTP to a web browser is based on certificate authorities (CAs) that come pre-installed in the browser software. CAs are entities that cryptographically sign TLS/SSL certificates to vouch for their authenticity. Browsers and operating systems have a list of trusted CAs that they use to verify site certificates.","spans":[]},{"type":"paragraph","text":"Until recently, most CAs were commercial operations that charged money for their verification and signing services. Let's Encrypt has made this process free for users by completely automating the procedure, and by relying on sponsorship and donations to fund the necessary infrastructure.","spans":[]},{"type":"paragraph","text":"Explaining Let’s Encrypt","spans":[{"start":0,"end":24,"type":"strong"}]},{"type":"paragraph","text":"Let’s Encrypt is an open and automated certificate authority that uses the Automatic Certificate Management Environment (ACME) protocol to provide free TLS/SSL certificates to any compatible client. These certificates can be used to encrypt communication between your web server and your users. There are dozens of clients available, written in various programming languages, and many integrations with popular administrative tools, services, and servers.","spans":[]},{"type":"paragraph","text":"The most popular ACME client, Certbot, is now developed by the Electronic Frontier Foundation. In addition to verifying domain ownership and fetching certificates, Certbot can automatically configure TLS/SSL on both Apache and Nginx web servers.","spans":[]},{"type":"paragraph","text":"How Let's Encrypt Works","spans":[{"start":0,"end":23,"type":"strong"}]},{"type":"paragraph","text":"Let's Encrypt's ACME protocol defines how clients communicate with its servers to request certificates, verify domain ownership, and download certificates. It is currently in the process of becoming an official IETF standard.","spans":[{"start":211,"end":215,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.ietf.org/"}}]},{"type":"paragraph","text":"Let's Encrypt offers domain-validated certificates, meaning they have to check that the certificate request comes from a person who actually controls the domain. They do this by sending the client a unique token, and then making a web or DNS request to retrieve a key derived from that token.","spans":[]},{"type":"paragraph","text":"For example, with the HTTP-based challenge, the client will compute a key from the unique token and an account token, then place the results in a file to be served by the web server. The Let's Encrypt servers then retrieve the file at http://example.com/.well-known/acme-challenge/token. If the key is correct, the client has proven it can control resources on example.com, and the server will sign and return a certificate.","spans":[{"start":235,"end":286,"type":"hyperlink","data":{"link_type":"Web","url":"http://example.com/.well-known/acme-challenge/token"}}]},{"type":"paragraph","text":"The ACME protocol defines multiple challenges your client can use to prove domain ownership. The HTTPS challenge is similar to HTTP, except instead of a text file, the client will provision a self-signed certificate with the key included. The DNS challenge looks for the key in a DNS TXT record. You can learn more in our introductory tutorial for Let’s Encrypt.","spans":[{"start":322,"end":361,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/an-introduction-to-let-s-encrypt"}}]},{"type":"paragraph","text":"What can I do to enable HTTPS on my sites hosted on DigitalOcean?","spans":[{"start":0,"end":65,"type":"strong"}]},{"type":"paragraph","text":"If you have websites that have not implemented HTTPS and you expect this new warning to impact your site usage, here are some simple and relatively inexpensive recommendations.","spans":[]},{"type":"paragraph","text":"A simple and powerful option is to use a DigitalOcean Load Balancer, which creates and automatically renews SSL certificates from Let’s Encrypt for you. Load Balancers cost $20 per month and are highly available. In addition to offloading HTTPS traffic, you gain additional performance with support for HTTP/2, and you can easily manage traffic across your servers. If you choose this option, our new Product Documentation center has a helpful tutorial.","spans":[{"start":87,"end":143,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/introducing-load-balancer-upgrades/"}},{"start":436,"end":452,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/docs/networking/load-balancers/how-to/lets-encrypt/"}}]},{"type":"paragraph","text":"A second option is to follow one of our Let’s Encrypt tutorials to implement HTTPS directly with your web servers. We have over 50 tutorials, such as how to secure Nginx with Let's Encrypt on Ubuntu 18.04 as well as product documentation on how to set up Let’s Encrypt certificates on Load Balancers. This is a good option to prevent additional monthly costs if you have time to configure and maintain your TLS certificates.","spans":[{"start":40,"end":63,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tags/let-s-encrypt?type=tutorials"}},{"start":150,"end":204,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-18-04"}},{"start":241,"end":299,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/docs/networking/load-balancers/how-to/lets-encrypt/"}}]},{"type":"paragraph","text":"A third option is to use a CDN like Cloudflare, which has an integration with Let’s Encrypt to handle HTTPS traffic on your behalf. Adding a CDN can result in additional costs, but may be a good option if you need faster content delivery and HTTPS support. Cloudflare has a blog post that describes some of the history behind these updates and what to expect in the coming months.","spans":[{"start":274,"end":283,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.cloudflare.com/https-or-bust-chromes-plan-to-label-sites-as-not-secure/"}}]},{"type":"paragraph","text":"These Changes Will Help Keep Users Safer","spans":[{"start":0,"end":40,"type":"strong"}]},{"type":"paragraph","text":"Yesterday’s change is only the beginning of a series of tweaks by Google: in September, for version 69, sites using HTTPS will no longer show the green “Secure” text in the address bar, and in October, for version 70, the “Not secure” label for HTTP-only sites will turn red. In the future, these types of warnings will also happen on the mobile version of Chrome.","spans":[{"start":31,"end":72,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.chromium.org/Home/chromium-security/marking-http-as-non-secure"}}]},{"type":"paragraph","text":"Securing websites is important, and Google adding this new warning in Chrome is a strong move toward encouraging more developers to do so. Ultimately, this will keep all internet users a little safer.","spans":[]}],"blog_post_date":"2018-07-24","tags":[{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}}],"_meta":{"uid":"implementing-https-for-chrome-users"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"DigitalOcean","author_image":{"dimensions":{"width":600,"height":600},"alt":"Sammy avatar","copyright":null,"url":"https://images.prismic.io/www-static/a10e3c2eb15b74ee43f872be3044313423b1c9a9_sammy_avatar.png?auto=compress,format"},"_meta":{"uid":"digitalocean"}},"blog_header_image":{"dimensions":{"width":5000,"height":2500},"alt":"OSCon letters with a dolphin, narwhal, and jellyfish popping out of the letters with the words 'See you there!' underneath illustration","copyright":null,"url":"https://images.prismic.io/www-static/f3efcf4db49e107ee21d7edf28add4c7c9c2fe18_oscon_seeyouthere.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Prepped for Portland and OSCON 2018","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"It's the 20th year of OSCON, held this week in Portland, Oregon, and we will be in attendance!","spans":[{"start":22,"end":27,"type":"hyperlink","data":{"link_type":"Web","url":"https://conferences.oreilly.com/oscon/oscon-or"}}]},{"type":"paragraph","text":"We have two great presentations lined up:","spans":[]},{"type":"list-item","text":"Lauren McCarthy and Tom Spiegelman will share DigitalOcean's approach to tackling the Spectre and Meltdown vulnerabilities, covering what the company chose to move forward with and why, and","spans":[]},{"type":"list-item","text":"Andrew Kim will be sharing a technical deep dive into how DigitalOcean uses anycast IPs, BGP, and Kubernetes to run globally distributed services on containers","spans":[]},{"type":"paragraph","text":"On Wednesday, July 18, from 11:50 AM-12:30 PM, Lauren McCarthy and Tom Spiegelman present \"DigitalOcean’s approach to Spectre and Meltdown\" in E143/144.","spans":[{"start":91,"end":138,"type":"hyperlink","data":{"link_type":"Web","url":"https://conferences.oreilly.com/oscon/oscon-or/public/schedule/detail/71101"}},{"start":91,"end":138,"type":"strong"}]},{"type":"paragraph","text":"News of the security vulnerabilities Spectre and Meltdown gripped headlines earlier this year, and for good reason: the bugs affected an estimated three billion chips in use. The impact to cloud providers was substantial, and DigitalOcean was no exception.","spans":[{"start":0,"end":256,"type":"em"}]},{"type":"paragraph","text":"Lauren McCarthy and Tom Spiegelman share DigitalOcean’s approach to tackling the Spectre and Meltdown vulnerabilities—dubbed \"Smeltdown”—covering what the company chose to move forward with and why. This was one of the biggest challenges the company has dealt with in terms of complexity and scale. One of the key issues was timeliness: while the big cloud companies received advanced notice, DigitalOcean didn’t have that luxury. But it couldn’t use that as an excuse: it just meant working smarter and harder. Lauren and Tom discuss the hardships faced and how the chosen solution left the company with a more secure cloud infrastructure and ready move forward to work toward new offerings so that developers and their teams can focus on what matters: building software that changes the world.","spans":[{"start":0,"end":795,"type":"em"}]},{"type":"paragraph","text":"On Thursday, July 19, from 4:15 PM-4:55 PM, Andrew Kim presents \"Containers and anycast IPs at DigitalOcean\" in D139/140.","spans":[{"start":65,"end":107,"type":"hyperlink","data":{"link_type":"Web","url":"https://conferences.oreilly.com/oscon/oscon-or/public/schedule/detail/67422"}},{"start":65,"end":107,"type":"strong"}]},{"type":"paragraph","text":"Today’s container networking technology has made it significantly easier to build distributed systems on top of container orchestrators such as Kubernetes, Mesosphere, and Docker Swarm. Container networking technologies use Linux primitives such as iptables and IPVS to provide load-balancing capabilities for network traffic across containers in a cluster. These simple yet powerful tools are a cornerstone to the success of containerized systems, as they provide highly available environments with little to no effort.","spans":[{"start":0,"end":520,"type":"em"}]},{"type":"paragraph","text":"Despite the many benefits of container networking, running containerized applications that must be latency sensitive and globally distributed is an extremely challenging task. Container networking is mainly scoped for in-cluster traffic, leaving little room to globally distribute an application across multiple clusters. Moreover, extending a container network for external traffic requires many additional layers of abstraction, usually introducing points of failures in a cluster and increasing end-to-end latency.","spans":[{"start":0,"end":517,"type":"em"}]},{"type":"paragraph","text":"Andrew Kim leads a technical deep dive into how DigitalOcean uses anycast IPs, BGP, and Kubernetes to run globally distributed services on containers. Along the way, Andrew discusses design considerations for scalability, architectural trade-offs, data center networking, lessons learned in production, and challenges to adopting containers for latency sensitive applications.","spans":[{"start":0,"end":376,"type":"em"}]},{"type":"paragraph","text":"You can also catch us at booth #101 at the following times:","spans":[{"start":25,"end":35,"type":"strong"}]},{"type":"list-item","text":"Wednesday, July 18 from 10:20 AM to 7:00 PM, and","spans":[]},{"type":"list-item","text":"Thursday, July 19 from 10:20 AM to 4:15 PM","spans":[]}],"blog_post_date":"2018-07-16","tags":[{"tag1":{"tag":"Engineering","_linkType":"Link.document","_meta":{"uid":"engineering"}}},{"tag1":{"tag":"Developer Relations","_linkType":"Link.document","_meta":{"uid":"developer-relations"}}}],"_meta":{"uid":"oscon-2018"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Karan M.V.","author_image":null,"_meta":{"uid":"karan_m_v_"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"boxes illustration","copyright":null,"url":"https://images.prismic.io/www-static/4b72fc5ef5c399d1a62f17fd45900df3a679f7aa_do_webinars_blog.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Engaging Developer Communities through Webinars (Part 1)","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"As as developer-first company, we are always looking for meaningful channels to engage with the developer community. Our Community site contains over 1,900 tutorials on various DevOps and system administrator topics, and our Meetups host a community of 40,000+ members across 73 groups in 33 countries where members share resources, learn, and have discussions about technical topics.","spans":[{"start":150,"end":165,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials"}},{"start":225,"end":232,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.meetup.com/pro/digitalocean"}}]},{"type":"paragraph","text":"We started organizing webinars as a way to combine the best of both worlds: the learning experience available through our online tutorials and the interactivity and camaraderie facilitated through our in-person meetups. Since our first webinar in September 2016, we have organized more than 30 webinars on a wide range of themes, including containers, orchestration, CI/CD, configuration management, and big data, with developers from around the world tuning in to our content.","spans":[]},{"type":"paragraph","text":"We’ve learned a lot over the past two years and want to share how community organizers can create webinars to engage further with their communities.","spans":[]},{"type":"heading2","text":"1. Choosing the right webinar tool","spans":[]},{"type":"paragraph","text":"The virtual nature of webinars is a prime advantage compared to in-person events. Attendees can join from anywhere in the world, providing them greater flexibility and accessibility. Without the limits of physical capacity, webinars allow for greater attendance.","spans":[]},{"type":"paragraph","text":"Organizers of in-person events have an arsenal of techniques for audience engagement, such as Q&As, live quizzes and social media contests. To retain some of that flavor online, you must carefully choose the tool for delivering a webinar. Commonly-used tools include Google Hangouts, Zoom, GoToWebinar, and On24.","spans":[]},{"type":"paragraph","text":"We use GoToWebinar for many of our webinars. To help attendees focus on the demos and technical content that a speaker is sharing, we primarily do screencasts. This, coupled with other in-session engagement features such as live polls, helps us gauge audience interest and customize our content on-the-fly.","spans":[]},{"type":"paragraph","text":"Tip: Many of the webinar and engagement tools often have associated costs. Evaluating the tools in the context of your goals and budget will help you deliver more value to your community.","spans":[]},{"type":"heading2","text":"2. Getting the right equipment","spans":[]},{"type":"paragraph","text":"If a webinar session is being recorded for later viewing, it is important to consider factors that would produce a high-quality video output suitable to your audience. Some of these are:","spans":[]},{"type":"paragraph","text":"Video Resolution","spans":[{"start":0,"end":16,"type":"strong"}]},{"type":"paragraph","text":"Ensure the tool you choose supports recording in HD resolution or higher. In some tools, this depends on the resolution of the speaker’s display or webcam.","spans":[]},{"type":"paragraph","text":"Audio Quality","spans":[{"start":0,"end":13,"type":"strong"}]},{"type":"paragraph","text":"Many professional webinar speakers and organizers invest in a professional microphone setup for a high-quality audio recording. Whenever possible, do a trial-run with your speakers to test their microphones, the ambient noise, and their internet connection to ensure a better experience for your attendees.","spans":[]},{"type":"paragraph","text":"Post-Processing","spans":[{"start":0,"end":15,"type":"strong"}]},{"type":"paragraph","text":"Like any other video, many webinar sessions require post-processing such as video editing, animation overlays, and audio corrections, which will help deliver a better video output. The time taken for this process can be reduced by checking audio and video quality before the session, ensuring relevant animations/diagrams/graphics are created beforehand, and other post-processing factors such as frame-rates are considered.","spans":[]},{"type":"heading2","text":"3. Targeting attendees globally","spans":[]},{"type":"paragraph","text":"Due to the virtual nature of webinars, developers from all around the world can attend or engage with your sessions. While targeting to engage with developers globally, there are a few key things to keep in mind:","spans":[]},{"type":"paragraph","text":"Content","spans":[{"start":0,"end":7,"type":"strong"}]},{"type":"paragraph","text":"The content must resonate with your global audience and not be restricted to a certain geography. For example, a webinar on best practices for hosting developer events in the U.S. might not relate to community organizers in India.","spans":[]},{"type":"paragraph","text":"Speaker/s","spans":[{"start":0,"end":9,"type":"strong"}]},{"type":"paragraph","text":"The speaker for the sessions should also be relevant to the global audience in terms of their vocabulary, language, and speaking style. The content delivered by the speaker should be understood by both native and non-native English speakers.","spans":[]},{"type":"paragraph","text":"Time","spans":[{"start":0,"end":4,"type":"strong"}]},{"type":"paragraph","text":"It is essential that the time of the live session is considerate of the global audience. The cultural and social factors of the target geographies come into play here while deciding the appropriate time for your session, such as weekends vs. weekdays, evenings vs. mornings, and length. Based on your target audience, you can identify a ‘sweet-spot’ that would be suitable for a majority of your target audience. An alternative to this would be to host multiple sessions in different time zones that would be convenient to the respective regions.","spans":[]},{"type":"paragraph","text":"The content of our webinars is technology-oriented and geography-agnostic, which draws thousands of developers from all over the world. The speakers delivering this content are well-known subject matter experts who have experience in delivering their content to international audiences.","spans":[]},{"type":"paragraph","text":"Tip: Having an idea of the geographies that you wish to target will help you build better engagement with developers across the world.","spans":[]},{"type":"heading2","text":"4. Creating a learning path","spans":[]},{"type":"paragraph","text":"A major reason for your audience to attend webinars is to learn by the various means available through a live session. Not every attendee might be fully equipped to assimilate the content in terms of their understanding and skill levels. While some might be experts on the content and expecting answers to specific questions, others might be beginners looking to understand the basics.","spans":[]},{"type":"paragraph","text":"Creating a learning path will help attendees evaluate their understanding and self-select their learning path by attending all or a specific set of sessions within a published content curriculum. The learning path can consist of multiple webinar sessions along with various types of accompanying supplementary resources.","spans":[]},{"type":"paragraph","text":"In our webinar series on containers and microservices, our learning path consisted of six webinar sessions with accompanying DigitalOcean tutorials and quizzes for self-evaluation.","spans":[{"start":7,"end":53,"type":"hyperlink","data":{"link_type":"Web","url":"https://go.digitalocean.com/containers-and-microservices.html"}}]},{"type":"paragraph","text":"Tip: Continuously engage with devs to help them navigate the learning path. An example is by targeting email campaigns to people based on which stage they are in the learning path.","spans":[]},{"type":"paragraph","text":"In my next post, I will share what happens during and after the webinar. If you have any questions about the tips I’ve provided, feel free to leave a comment below!","spans":[]},{"type":"paragraph","text":"Karan MV is the India Outreach Manager at DigitalOcean. He is focused on building and helping developer and startup communities leverage DigitalOcean to solve their problems. He launched the webinars program at DigitalOcean and is currently involved in scaling it.","spans":[{"start":0,"end":264,"type":"em"}]}],"blog_post_date":"2018-07-09","tags":[{"tag1":{"tag":"Community","_linkType":"Link.document","_meta":{"uid":"community"}}}],"_meta":{"uid":"engaging-developer-communities-through-webinars-part-1"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Ryan Quinn","author_image":{"dimensions":{"width":240,"height":240},"alt":"Ryan Quinn","copyright":null,"url":"https://images.prismic.io/www-static/f9ea432b5990fac0de17b009eb0c7b3f2dc6885b_pasted-image-at-2017_09_15-10_25-am.png?auto=compress,format"},"_meta":{"uid":"ryan_quinn"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"waves illustration with the text currents","copyright":null,"url":"https://images.prismic.io/www-static/46f6503e2a60d5a17286285d3596eef8db19d91f_currets_blog_header--1-.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"DigitalOcean Currents: June 2018","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"For the fourth edition of Currents, our quarterly report on developer trends in the cloud, we asked nearly 5,000 respondents around the world for their opinions on developer technologies like containers and serverless computing, and the latest hiring trends in software development.","spans":[{"start":8,"end":34,"type":"hyperlink","data":{"link_type":"Web","url":"http://digitalocean.com/currents/june-2018"}}]},{"type":"paragraph","text":"Some of our key findings this time around include:","spans":[]},{"type":"list-item","text":"Containers are gaining momentum, with 49 percent of developers now using them. As container technology and management tools continue advancing at a rapid pace, containers are becoming a go-to tool in the developer arsenal.","spans":[{"start":0,"end":31,"type":"strong"}]},{"type":"list-item","text":"Serverless computing is in a much earlier stage of adoption, with half of developers reporting they don’t have a clear understanding of what it is. One of the biggest challenges developers report when it comes to serverless is monitoring and debugging.","spans":[{"start":0,"end":59,"type":"strong"}]},{"type":"list-item","text":"Opportunity for growth and development is the most important thing developers want in their jobs, so it’s unsurprising this is also the top reason they leave them. Companies that are deliberate about creating long-term paths for their developers are more likely to retain their technical workforce.","spans":[{"start":0,"end":96,"type":"strong"}]},{"type":"list-item","text":"Coding bootcamp participants feel more prepared for the workforce than college graduates, but employers have yet to warm up to bootcamp graduates: 48 percent have not filled any positions with a bootcamp graduate in the last few years.","spans":[{"start":0,"end":88,"type":"strong"}]},{"type":"heading2","text":"Developers are going all in on containers","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/ce1c9bc8f92394b9949d323c20889dbee40963cd_currents-1.png?auto=compress,format","alt":"The most beneficial aspect of containers","copyright":null,"dimensions":{"width":1144,"height":682}},{"type":"paragraph","text":"Nearly half of our respondents (49 percent) use containers today, and most who don’t use them yet (78 percent) plan to adopt containers in the future. Developers in the U.K. are adopting containers at a slightly slower rate than other respondents, with 43 percent using the technology today and 73 percent planning to use it in the future.","spans":[]},{"type":"paragraph","text":"Developers who do use containers cite easy scalability as the biggest benefit, though they face challenges in setting up persistent data storage and network configuration.","spans":[]},{"type":"heading2","text":"Developers in India are slightly ahead of the pack when it comes to serverless adoption","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/49adc1229e46de8632a672ea2b7a2d2cfa13ed34_currents-2.png?auto=compress,format","alt":"Serverless adoption","copyright":null,"dimensions":{"width":665,"height":464}},{"type":"paragraph","text":"Globally, only a third of developers have deployed applications in a serverless environment; however, 43 percent of developers based in India have done so. Of the half that do not yet have a clear understanding of serverless, 81 percent plan to do further research into the technology this year.","spans":[]},{"type":"heading2","text":"Competition for top technical talent is fierce, and company culture is the most important factor for talent retention","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/285f3f5f3509c276d4c7f60f0ddd58c3754adb16_currents-3.png?auto=compress,format","alt":"IT Talent","copyright":null,"dimensions":{"width":1325,"height":559}},{"type":"paragraph","text":"Overall, a third (34 percent) of hiring managers at companies that struggle to retain IT talent cite competing job opportunities as the main reason technical employees leave. And, one third of hiring managers in Canada noted lack of growth opportunities as well. When we look at what’s working: more than half of hiring managers at companies with strong IT talent retention list their workplace culture as the primary reason for their success.","spans":[]},{"type":"heading2","text":"Traditional college degree programs don’t leave developers feeling adequately prepared","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/43fc20c08a243411f53d105e9d8ef04330494e30_currents-4.png?auto=compress,format","alt":"Bootcamp","copyright":null,"dimensions":{"width":1339,"height":723}},{"type":"paragraph","text":"Sixty-one percent of developers felt that coding bootcamp adequately prepared them for their jobs, compared to 36 percent of college graduates. Canadian developers feel more prepared overall, with 67 percent of coding bootcamp alumni saying they felt prepared, compared to 40 percent of those who participated in a college degree program.","spans":[]},{"type":"paragraph","text":"However, nearly half of all bootcamp participants (49 percent) felt that their education was sometimes a disadvantage in job interviews. There might be some truth to this. Even though a majority of hiring managers (55 percent) claimed they do not distinguish between graduates of bootcamps and 4-year programs, nearly half (48 percent) said that they had not hired a bootcamp graduate over the past few years.","spans":[]},{"type":"paragraph","text":"DigitalOcean Currents is published quarterly, highlighting the latest trends among developers in the cloud.","spans":[]},{"type":"paragraph","text":"Catch up on all our previous issues from:","spans":[]},{"type":"list-item","text":"March 2018","spans":[{"start":0,"end":10,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/currents-march-2018/"}}]},{"type":"list-item","text":"December 2017","spans":[{"start":0,"end":13,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/currents-dec-2017/"}}]},{"type":"list-item","text":"September 2017","spans":[{"start":0,"end":14,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/currents-developer-report/"}}]},{"type":"paragraph","text":"If you would like to be among the first to receive Currents each quarter, sign up here. You’ll receive the latest report once it is released and you’ll be able to share ideas on what topics we should cover and participate in our next survey.","spans":[{"start":82,"end":86,"type":"hyperlink","data":{"link_type":"Web","url":"https://docs.google.com/forms/d/e/1FAIpQLScwem9s1c7oKRbRF_ZKcTdxQUQlns52L2CgltSyHn1UJOpvkw/viewform"}}]},{"type":"paragraph","text":"Read more about these and other findings in the full report. Read the full Currents report here.","spans":[{"start":91,"end":95,"type":"hyperlink","data":{"link_type":"Web","url":"http://digitalocean.com/currents/june-2018"}}]}],"blog_post_date":"2018-06-29","tags":[{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}}],"_meta":{"uid":"currents-june-2018"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Jake Levirne","author_image":null,"_meta":{"uid":"jake_levirne"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"Male developer on a computer illustration","copyright":null,"url":"https://images.prismic.io/www-static/aa8f0bd1e58728cbe1f42522b204e3dd1940f09a_do_devex_blog.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Control Panel and Documentation Updates","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"At DigitalOcean we love to make things easier for developers. You want to spend your time learning valuable new skills, building software, and scaling up your applications—not managing your infrastructure. With that in mind, we’ve made improvements to the following over the past two months to the DigitalOcean control panel and documentation to save you time:","spans":[]},{"type":"list-item","text":"Use Google for Login","spans":[]},{"type":"list-item","text":"New Product Documentation Center","spans":[]},{"type":"list-item","text":"Droplet Search","spans":[]},{"type":"list-item","text":"Droplet Expanded View","spans":[]},{"type":"list-item","text":"Simplified Backups","spans":[]},{"type":"list-item","text":"Auto-format Block Storage Volumes","spans":[]},{"type":"list-item","text":"Recovery ISO","spans":[]},{"type":"paragraph","text":"Read on for more details!","spans":[]},{"type":"heading2","text":"Use Google for Login","spans":[]},{"type":"paragraph","text":"Want to remember fewer passwords? Now you can use your Google account to log in to DigitalOcean.","spans":[]},{"type":"list-item","text":"For new accounts, choose “Sign up with Google”.","spans":[]},{"type":"list-item","text":"For existing accounts, visit your account Security Settings page, and select “Use Google SSO”.","spans":[{"start":42,"end":59,"type":"hyperlink","data":{"link_type":"Web","url":"https://cloud.digitalocean.com/settings/security"}}]},{"type":"image","url":"https://images.prismic.io/www-static/dddf6e41a3192adac796b8691297c94c80953e13_google-sso.png?auto=compress,format","alt":"Google SSO","copyright":null,"dimensions":{"width":1600,"height":714}},{"type":"heading2","text":"New Product Documentation Center","spans":[]},{"type":"paragraph","text":"DigitalOcean is built by developers for developers, and we know good software development includes thorough, well-maintained documentation. Our new DigitalOcean Product Documentation center contains Overviews and Quickstart guides on everything DigitalOcean has to offer, as well as How-Tos and Resource links to dive in deeper. As you use the new site, let us know how we're doing with a quick star rating or more in-depth feedback.","spans":[{"start":148,"end":182,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/docs"}}]},{"type":"image","url":"https://images.prismic.io/www-static/e297718ab39a7185cb3542f0010f187e2ea97991_docs.png?auto=compress,format","alt":"New product documentation site","copyright":null,"dimensions":{"width":1600,"height":827}},{"type":"heading2","text":"Droplet Search","spans":[]},{"type":"paragraph","text":"With Droplet Search, we’ve made it easier for you to find your Droplets from the Dashboard, or from any page in the control panel.  From the top of any page, just start typing the name of a Droplet and quickly see a list of matches to jump to.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/83cd2451c17e5f1aca6b57481db9ea157a55e56d_search.png?auto=compress,format","alt":"Easier Droplet search","copyright":null,"dimensions":{"width":1440,"height":368}},{"type":"heading2","text":"Droplet Expanded View","spans":[]},{"type":"paragraph","text":"Speaking of the Dashboard, we’ve now made it easier for you to get more details about a Droplet without having to click around. Just expand one of your Droplets in the Dashboard to see the nitty gritty.","spans":[{"start":16,"end":25,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/introducing-control-panel-dashboard/"}}]},{"type":"image","url":"https://images.prismic.io/www-static/33b1a67dedcd9806b9aac948aec6b72e5957c72a_expanded-view.png?auto=compress,format","alt":"Expanded view","copyright":null,"dimensions":{"width":1598,"height":830}},{"type":"heading2","text":"Simplified Backups","spans":[]},{"type":"paragraph","text":"We never want you to lose your hard work, so we’ve made it easy to know, at a glance, which of your Droplets have backups enabled. Just jump to the Dashboard and scan down your list of Droplets.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/52ebe7dfeac0c19ba3887a2a882dbbfcbbe1feda_click-to-enable.png?auto=compress,format","alt":"Enable backups","copyright":null,"dimensions":{"width":1600,"height":525}},{"type":"paragraph","text":"If you spot a Droplet that doesn’t have backups enabled, one click can turn on backups and protect your work. We also made it easy to turn on backups when creating a new Droplet: click the “Enable Backups” button and we’ve got you covered.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/91857804c2a1e739d928939972709759b9e23fa5_enable-backups.png?auto=compress,format","alt":"Add backups","copyright":null,"dimensions":{"width":1468,"height":440}},{"type":"heading2","text":"Auto-format Block Storage Volumes","spans":[]},{"type":"paragraph","text":"This new capability allows you to automatically format and mount a Block Storage Volume in a few seconds, right when a new Droplet is being created.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/c0ffff947c61dcaedbd2bf61c7c3da8a968018d1_autoformat.png?auto=compress,format","alt":"Auto-format","copyright":null,"dimensions":{"width":1600,"height":326}},{"type":"paragraph","text":"You can also do this when creating a new Block Storage Volume to attach to an existing Droplet. For more details, check out this post from our blog.","spans":[{"start":129,"end":147,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/auto-format-and-mount/"}}]},{"type":"heading2","text":"Recovery ISO","spans":[]},{"type":"paragraph","text":"Though we hope you never need it, we’ve made the process of booting your Droplet from a Recovery ISO much easier.  Booting from a recovery ISO allows you to recover from kernel mismatches and perform repairs on corrupted file systems.  In the past, this required you to contact Support, but now you can boot a Droplet from a Recovery ISO on your own from a Droplet’s “Recovery” page in the Control Panel.","spans":[{"start":115,"end":142,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-recover-from-file-system-corruption-using-fsck-and-a-recovery-iso"}}]},{"type":"image","url":"https://images.prismic.io/www-static/991eef288acb67e1ebba97f4d58ea7bc699567c0_recovery.png?auto=compress,format","alt":"Recovery","copyright":null,"dimensions":{"width":1600,"height":762}},{"type":"paragraph","text":"That's all for now, but keep letting us know what you love about DigitalOcean and what we can do to make it easier and better for you and your team.","spans":[{"start":29,"end":44,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.uservoice.com"}}]}],"blog_post_date":"2018-06-28","tags":[{"tag1":{"tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"_meta":{"uid":"digitalocean-control-panel-and-documentation-updates"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"TC Currie","author_image":{"dimensions":{"width":1372,"height":1352},"alt":"TC Currie","copyright":null,"url":"https://images.prismic.io/www-static/c97b5e9a80062bc03c460bbd59e8aa8aa45428f6_tc-dangerous-nite1.jpg?auto=compress,format"},"_meta":{"uid":"tc_currie"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"pipes with letters ENIGMA on them as keys illustration","copyright":null,"url":"https://images.prismic.io/www-static/b805d650985c40095317a5edf80625f243902058_do_enigma_blog.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"How 2,000 Droplets Broke the Enigma Code in 13 Minutes","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"In late 2017, at the Imperial War Museum in London, developers applied modern artificial intelligence (AI) techniques to break the “unbreakable” Enigma machine used by the Nazis to encrypt their correspondences in World War II.  Using AI processes across 2,000 DigitalOcean servers, engineers at Enigma Pattern accomplished in 13 minutes what took Alan Turing years to do—and at a cost of just $7.","spans":[{"start":145,"end":159,"type":"hyperlink","data":{"link_type":"Web","url":"https://en.wikipedia.org/wiki/Enigma_Machine"}}]},{"type":"paragraph","text":"I have long been fascinated by the Enigma machine and its impact on World War II.  Aside from being a huge history geek, my father-in-law went over to Normandy on D+3 (three days after the Omaha beachhead was established). He served in an advance corps, finding ways for the army to move across the country, and as such, they were the first to come across one of the concentration camps and liberate it.  None of that would have been possible without Enigma.","spans":[]},{"type":"heading2","text":"The Enigma Machine","spans":[]},{"type":"paragraph","text":"The Enigma machine is a complicated apparatus consisting of a keyboard, a set of rotors, an alphabet ring, and plug connections, all configurable by the operator. For the message to be both encrypted and decrypted, both operators had to know two sets of codes. A daily base code, changed every 24 hours, was published monthly by the Germans. Then, each operator created an individual setting used only for that message.  The key to the individual code was sent in the first characters of the message, coded in the base code.  This created over 53 billion possible combinations, changing every 24 hours.  Because of this, the machine was widely considered unbreakable.","spans":[]},{"type":"paragraph","text":"Marian Rejewsky, working with other mathematicians at the Polish Cipher Bureau, cracked an early version of the Enigma machine in 1932 by the tried-and-true method of stealing a few machines and reverse engineering the mechanism. It took him just under a year to figure out the general principle of the German military’s double message setting and the wiring of the rotors, and another year to catalog the settings. After all of that, daily keys could be obtained in under 20 minutes.","spans":[{"start":0,"end":15,"type":"hyperlink","data":{"link_type":"Web","url":"https://en.wikipedia.org/wiki/Marian_Rejewski"}}]},{"type":"paragraph","text":"But as Germany revved up its war machine, the Nazi navy made the machine more complex with the addition of plugs and more rotors, making it impossible for humans to work through the billions of possible combinations. Enter Bletchley Park in rural England, where Alan Turing, a brilliant English mathematician, gathered a team of cryptographers, puzzle solvers, linguists, and mathematicians in 1939 with the mission of breaking the German codes.","spans":[{"start":262,"end":273,"type":"hyperlink","data":{"link_type":"Web","url":"https://en.wikipedia.org/wiki/Alan_Turing"}}]},{"type":"paragraph","text":"“Enigma gave the foundation to Alan Turing to develop the computer,” explained Rafal Janczyk, a Polish mathematician and CEO and co-founder of Enigma Pattern.","spans":[{"start":143,"end":157,"type":"hyperlink","data":{"link_type":"Web","url":"http://www.enigmapattern.com/"}}]},{"type":"paragraph","text":"Rejewsky and his team smuggled their cracked Enigma machines out of Poland, and worked their way to Bletchley Park where they donated the machines and their expertise to Turing. Building on Rejewsky’s work, Turing was able to automate the cryptography that could crack the daily code. It took the better part of a year to decrypt their first message. They called their work the Bombe, and it’s widely considered to be the first computer.","spans":[]},{"type":"paragraph","text":"But it was more elaborate than simply breaking the code. Because the Nazis changed the rotor settings every 24 hours, each new day brought a new set of 15,354,393,600 password variants that had to be decrypted.  Many times they worked through the night only to fail to break the code and have to start over the next day.","spans":[]},{"type":"paragraph","text":"It was an exhausting, near-impossible task. And, seven decades later, Enigma Pattern wondered how modern technology like AI could change things, and if they could break the code in a fraction of the time.","spans":[]},{"type":"heading2","text":"Geeking out: Breaking Enigma with Modern AI","spans":[]},{"type":"paragraph","text":"“The project started from the question, ‘What would Alan Turing be able to do nowadays if he had the current computing power and all the development around AI,’” said Janczyk. Since AI is still such a new discipline, the company allows their employees to spend 20 percent of their time on side projects of their choice that encourage out-of-the-box uses of AI.","spans":[]},{"type":"paragraph","text":"Retracing Turing’s footsteps was a pet project of Lukasz Kuncewicz, Enigma’s Head of Data Science (and another Polish mathematician co-founder). Kuncewicz chose this project to refer to the common history of Brits and Poles using human intelligence to overcome the biggest obstacles of the Second World War. (Their third co-founder, Mike Gibbons, is British).","spans":[]},{"type":"paragraph","text":"Kuncewicz decided to recreate the Nazi navy’s version of the machine, which was the most sophisticated. His team started by recreating the machine, rotors, and plugs in Python. Initially, they tried to teach their AI to decode the Enigma code itself, but it didn’t work. Neither did Lambda functions from Amazon.","spans":[]},{"type":"paragraph","text":"The problem, he said, was with the amount of computations. “Since the Lambda function from AWS is not very quick, and has some limits regarding execution time, the number of concurrent Lambda calculations was very high. So high that we actually spent more than a week going from one AWS department to another, trying to squeeze a decision from them regarding extending our limit.”","spans":[]},{"type":"paragraph","text":"Enter DigitalOcean. “We only use [DigitalOcean] for quick ‘bish bash bosh’ needs—they are very good when we need to have a bigger server run for a few hours,” he said. Enigma Pattern uses DigitalOcean for a variety of things—from learning environments, to quick compute tasks where results will be stored on their internal computers, to prototyping projects when they're not sure yet how many machines will be needed.","spans":[]},{"type":"paragraph","text":"When Enigma mentioned the project, DigitalOcean quickly agreed to provide the ML 1-Click Droplets. It fit the company’s developer focus, said Mark Mims, the R&D Engineer who designed the ML 1-Click that launched last year, and demonstrated the ease of use, as an ML 1-Click Droplet can be spun up in a few minutes with (you guessed it) one click. “But if you’re looking to spin up 2,000 servers, you won’t be using the web UI,” said Mims.  “That takes a call to the help desk.” Within half a day, DigitalOcean had hydrated the 1,000 droplets used in the testing phase.","spans":[{"start":203,"end":221,"type":"hyperlink","data":{"link_type":"Web","url":"https://thenewstack.io/digitalocean-adds-object-storage-machine-learning/"}}]},{"type":"paragraph","text":"The next step for Kuncewicz and his team was training an algorithm to recognize German, which they did by using Grimms Fairy Tales, including Hansel & Gretel, Rapunzel, Cinderella, and Rumpelstiltskin; 200 tales in all. Why children’s stories? Well, it’s not like the AI had to decrypt German philosophy, but instead military telegraphs, which use as few words as possible.  Fairy tales are also written in simple language, so it makes sense. And it worked. Interestingly, in the end the AI could not understand German.  But it did what machine learning does best: recognize patterns.","spans":[{"start":202,"end":218,"type":"hyperlink","data":{"link_type":"Web","url":"http://www.gasl.org/refbib/Grimm__Maerchen.pdf"}}]},{"type":"image","url":"https://images.prismic.io/www-static/fd5a6b465db6d23bea5c2f741bb4ab28ac672431_enigmacodesocial_grimms_blog.png?auto=compress,format","alt":"Fairytales","copyright":null,"dimensions":{"width":784,"height":418}},{"type":"paragraph","text":"It took two weeks for the team to train the machines and create the Python code, and another two weeks for the first successful attempt to decrypt a message.  But in order to copy Turing’s success, a successful decryption had to be done in less than 24 hours.","spans":[]},{"type":"paragraph","text":"Then they decided to try to break it by using sheer computing power, adding another 1,000 Droplets. I’ll let Kuncewicz explain the details:","spans":[]},{"type":"paragraph","text":"“First,” he said, “one has to accept the fact, that even if you have 2,000 Droplets, you still have billions of combinations to be checked. And the neural network that we used, however good at spotting the German language, is not a speed demon.","spans":[]},{"type":"paragraph","text":"“It's because it uses recurrence, which gives you this boost when dealing with languages, but you pay with the calculation time. So the idea is, you need to separate the wheat from the chaff, and use the network only to check the best possible candidates.","spans":[]},{"type":"paragraph","text":"“So for the AI to shine, we actually use 2,000 minions that do the tedious work. Everybody praises AI, but it's actually the minions that do the 99% of work. Life, right?”","spans":[]},{"type":"paragraph","text":"“We wrote one minion in Python, and DigitalOcean has this very nice API for storing images. So you create one minion, say ‘DigitalOcean, please save it as an image,’ and then you say ‘DigitalOcean, please create 2,000 copies of it and make them run,’ and you have them.","spans":[]},{"type":"paragraph","text":"“The code is really simple. It connects to the bus and gets a first not-yet-taken assignment. The assignment is a package of the gibberish text (the encoded message) and combinations of passwords to run on it. It checks the gibberish against every password, checks if the decoded message sounds like German, and if so, sends it through the same bus for more detailed inspection by the AI.","spans":[]},{"type":"paragraph","text":"“And this is exactly what the Droplets do. They get their share of password combinations from RabbitMQ, they take a few letters of the gibberish they need to decode, they decode it using the given passwords, and apply a very crude (but very quick) check if at the end of this pipeline we have something that resembles German.”","spans":[]},{"type":"paragraph","text":"If the code looks like German, it’s pushed back to the main server where the AI works its magic.","spans":[]},{"type":"paragraph","text":"“The job is not coordinated in any way, each minion doesn't know anything about others—they are fully autonomic. This is great, because it means that we can have 200, 2,000, or 20,000 of them if we like (and if DigitalOcean allows). The more we have, the less time will pass before breaking the Enigma code.”","spans":[]},{"type":"paragraph","text":"The 2,000 virtual servers ran through 41 million combinations per second.  After 13 minutes of minion work, boom! The new Bombe had broken the code.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/d04e2526f87a9aa495a319e654086e6d51491aca_enigmacodesocial_mostov_v1_blog.png?auto=compress,format","alt":"AI uses","copyright":null,"dimensions":{"width":784,"height":418}},{"type":"heading2","text":"Enigma Pattern: Who are these People?","spans":[]},{"type":"paragraph","text":"“AI is being called the new electricity,” said Janczyk, “because it will be in everything.” Enigma Pattern works with companies that already collect big data but are unsure of the ways to harness its power.  “You would be surprised at how many companies store big data but don’t know how to put it to use,” he said. “For example, a coffee chain would rather throw up a new store than delve through the data to determine how to optimize the stores they already have, because they know how to open a new store and don’t know how to dig through the data.”","spans":[]},{"type":"paragraph","text":"One of their clients has a fleet of over 10,000 cars on which they collect a variety of raw data. Janczyk and his team sat down with the client to discuss the pain points of the business, how they might use the data they already had to help ease the pain, and how AI could help.","spans":[]},{"type":"paragraph","text":"Tires are a significant business cost. In addition to the price of the tires is the cost of maintenance and driver downtime.  If you don’t change the tires in time, you’re endangering the life of your drivers.  Change them too often, and you lose money. It turns out, you can teach a machine to hear the level of wear on a tire.","spans":[]},{"type":"paragraph","text":"“Out of the sound of the spinning tire, we were able to teach the machine the level of wear of the tire,” Janczyk said. “Now the company is able to change tires based on the sound of the wear and automatically schedule downtime to which saves lives and money.”","spans":[]},{"type":"paragraph","text":"“With AI and ML, there is such an unlimited amount of possibility, which is what makes it so exciting,” said Janczyk.  “That’s what makes my work fascinating,” he said, \"finding new uses for AI.”","spans":[]},{"type":"paragraph","text":"Who knows what mysteries AI will solve in the future? By appreciating the problems that Enigma presented to previous generations and applying modern techniques, we can expand our vision for what AI can accomplish in today’s world.","spans":[]},{"type":"paragraph","text":"To see how Enigma functioned, check out this link or watch it in action on YouTube.","spans":[{"start":0,"end":83,"type":"strong"},{"start":40,"end":49,"type":"hyperlink","data":{"link_type":"Web","url":"https://en.wikipedia.org/wiki/Enigma_machine"}},{"start":53,"end":82,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.youtube.com/watch?v=mcX7iO_XCFA"}}]},{"type":"paragraph","text":"To learn more about Alan Turing and the work done at Bletchley Park, check out Andrew Hodges’ acclaimed biography of the computing legend, titled “Alan Turing: The Enigma.”","spans":[{"start":0,"end":172,"type":"strong"},{"start":147,"end":170,"type":"hyperlink","data":{"link_type":"Web","url":"http://www.turing.org.uk/book/"}}]},{"type":"paragraph","text":"You can check out Enigma Pattern's code on GitHub, with a warning from Kuncewicz that it’s a bit messy.","spans":[{"start":0,"end":103,"type":"strong"},{"start":18,"end":49,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/EnigmaPatternInc/EnigmaCode"}}]},{"type":"paragraph","text":"TC Currie is a journalist, storyteller, data geek, poet, body positive activist and occasional lingerie model. After spending 25 years in software development working with data movement and accessibility, she wrote her first novel during National Novel Writing Month and fell in love with writing.","spans":[{"start":0,"end":9,"type":"hyperlink","data":{"link_type":"Web","url":"http://www.tccurrie.com/"}},{"start":0,"end":297,"type":"em"}]}],"blog_post_date":"2018-06-22","tags":[{"tag1":{"tag":"Engineering","_linkType":"Link.document","_meta":{"uid":"engineering"}}}],"_meta":{"uid":"how-2000-droplets-broke-the-enigma-code-in-13-minutes"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Ben Uretsky","author_image":{"dimensions":{"width":197,"height":197},"alt":"Ben Uretsky","copyright":null,"url":"https://images.prismic.io/www-static/9c33dc1465bf14e543a18d402452f77970d3b4c1_aaeaaqaaaaaaaa3gaaaajdbmyjgxnzvjlti2zwutnddlzi04mgyxltlhyjfhotnlytgzna.jpg?auto=compress,format"},"_meta":{"uid":"ben_uretsky"}},"blog_header_image":{"dimensions":{"width":2286,"height":1510},"alt":"Picture of Ben and Mark","copyright":null,"url":"https://images.prismic.io/www-static/764e2f903ada646e9a5abb31b90401c01766158e_ben_and_mark-1.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"The Next Wave: DigitalOcean's New CEO","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"A few months ago, I announced my plans to find my successor as we approached our next phase of growth. Today, I am very excited to announce that Mark Templeton will be joining us as DigitalOcean’s new CEO.","spans":[{"start":20,"end":38,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/onwardandupwardtogether/"}}]},{"type":"paragraph","text":"We were looking for a leader who could scale our operations, evolve our go-to-market strategy, and help us reach our audacious vision of becoming every developer’s cloud platform of choice when deploying software. After spending time with Mark, I knew that he was the perfect fit for us.","spans":[]},{"type":"paragraph","text":"From 2001 to 2015, he served as president and CEO of Citrix Systems. While at Citrix, Mark helped grow the business from $15 million in revenue with one product, one customer segment, and one go-to-market path to a global industry leader with more than 100 million users and annual revenue of over $3 billion. He joined the company prior to its initial public offering and served in a leadership capacity throughout his 20-plus years with the organization. Under his leadership, Citrix earned multiple “best places to work” awards and Mark himself was honored with several awards including a coveted spot on Glassdoor’s Highest Rated CEOs list in 2013.","spans":[]},{"type":"paragraph","text":"When I asked him what he saw in DigitalOcean, he replied that he was inspired by our unique position in the market and focus on delivering simplicity at scale. He went on to talk about our incredible team, happy customers, and what perfect timing it was to make an enormous impact on the industry. He compared the opportunity to his early days at Citrix — when the company had a singular focus on offering the best remote access technology in the world. That focus was the seed of the Citrix vision of a virtual workplace, inspired by the deep belief that work was not a place.","spans":[]},{"type":"paragraph","text":"Mark believes we have an incredible opportunity to serve tens of millions of developers and the digital-first businesses they go on to create. He shares our focus on simplicity and supports our efforts to ensure our cloud is an enabler for a future that accelerates software development and inspires innovation among our customers. Mark will help DigitalOcean operate and scale to a whole new level while doubling down on our strategy to be the world’s simplest cloud experience.","spans":[]},{"type":"paragraph","text":"We are so fortunate to gain a leader with Mark’s experience, talent, and vision. DigitalOcean is at an inflection point and we’ve laid the groundwork together for this rocket ship to soar. We now have a $200 million run rate and a community that is more than 3.5 million developers strong. As we enter into our next chapter, I am confident Mark is the right leader to inspire and scale our team, accelerate our business, and most importantly, uphold our commitment to our customers and the developer community at large.","spans":[]},{"type":"paragraph","text":"Please join us in welcoming Mark on what promises to be an exciting journey!","spans":[]},{"type":"paragraph","text":"Ben Uretsky","spans":[]},{"type":"paragraph","text":"Co-Founder, DigitalOcean","spans":[]}],"blog_post_date":"2018-06-20","tags":[{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}}],"_meta":{"uid":"the-next-wave-digitaloceans-new-ceo"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Jeff Zellner","author_image":null,"_meta":{"uid":"jeff_zellner"}},"blog_header_image":{"dimensions":{"width":1024,"height":512},"alt":"multi-region docker registry","copyright":null,"url":"https://images.prismic.io/www-static/082fce91-94c8-41a3-b7fa-883177bdfed0_multi-region-Docker-Registry_social.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Deploying a Multi-region Docker Registry to Improve Performance","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Over the past several years, containers in general, and Docker specifically, have become quite prevalent across industry. Containerization offers isolated and reproducible build and runtime environments in a simple and developer-friendly form. They make the entire software development process run a bit smoother, from initial development to deploying services in production. Orchestration frameworks like Kubernetes and Mesos offer robust abstractions of service components, which simplifies deployment and management.","spans":[]},{"type":"paragraph","text":"Like many other tech companies, DigitalOcean uses containers internally to run production services. Quite a few of our services run inside Kubernetes, and a large slice of those run on an internal platform that we've built to abstract away some of the pain points for developers new to Kubernetes. We also use containers for CI/CD in our build systems, and locally for development. In this post, I’ll describe how we redesigned our Docker registry architecture for better performance.  (You can find out more about how DigitalOcean used both containers and Kubernetes in a talk by Joonas Bergius, and more about our internal platform, DOCC, in this talk by Mac Browning.)","spans":[{"start":571,"end":577,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.youtube.com/watch?v=Jhfd5FjYimU"}},{"start":644,"end":653,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.youtube.com/watch?v=K5WRJvMx4us"}}]},{"type":"heading2","text":"Simple beginnings and growing pains","spans":[]},{"type":"paragraph","text":"Initially, to host our private Docker images, we set up a single server running the official Docker registry, backed by object storage. This is a common, simple pattern for private registries, and it worked well early on. By relying on a consistent object store for backing storage, the registry itself doesn’t have to worry about consistency. However, with a single registry instance, there are still performance and availability bottlenecks, as well as a dependency on being able to reach the region running the registry.","spans":[]},{"type":"paragraph","text":"As our use of containers grew, we started to experience general performance issues such as slow or failing image pushes. A simple solution for this would be to increase the number of registry instances running, but we’d still have a dependency on the single region being available and reachable from every server.","spans":[]},{"type":"paragraph","text":"Additionally, the default behavior of the official Docker registry is to serve the actual image data via a redirect to the backing store. This means a request from a client arrives at the registry server, which returns a HTTP redirect to object storage (or whatever remote backend you have configured the registry to use). One unique issue that we encountered was a large deployment of large Docker images (~10GB) spiking bandwidth to our storage backend. Hundreds of clients requested a new, large image at the same time, saturating our connection to storage from our data center. Running multiple instances of the registry wouldn’t solve this issue—all the data would still come from the backing store.","spans":[]},{"type":"heading2","text":"Design goals","spans":[]},{"type":"paragraph","text":"We decided it was time to to overhaul our Docker registry architecture, with a few primary goals in mind:","spans":[]},{"type":"list-item","text":"Presence in every region","spans":[]},{"type":"list-item","text":"Regional caching to reduce the overall bandwidth egress from any region","spans":[]},{"type":"list-item","text":"Reduction or elimination of single points of failure","spans":[]},{"type":"heading2","text":"Architecture choices","spans":[]},{"type":"paragraph","text":"We operate relatively large Kubernetes clusters in every DigitalOcean region, so using the fundamental building blocks that Kubernetes and our customizations offer was a logical choice. Kubernetes provided us with great primitives like scaling deployments and simple rolling deploys. Additionally, we have lots of internal tooling for running, monitoring, and managing services running inside Kubernetes.","spans":[]},{"type":"paragraph","text":"For caching, we decided to take advantage of the Docker registry’s ability to disable redirects. Disabling redirection causes the registry server to retrieve image data, and then send it directly to the client, instead of redirecting the request to the backend store. This adds a bit of latency to the initial response, but enables us to put a caching proxy like Squid in front of the registry and serve cached data without transiting to the backing store on subsequent requests.","spans":[{"start":78,"end":95,"type":"hyperlink","data":{"link_type":"Web","url":"https://docs.docker.com/registry/configuration/#redirect"}},{"start":363,"end":368,"type":"hyperlink","data":{"link_type":"Web","url":"http://www.squid-cache.org"}}]},{"type":"paragraph","text":"At this point, we had a good idea of how to run multiple caching registries in every region, but we still needed a way to direct clients to request Docker images from the registry in their region, instead of a single global one. To accomplish this, we created a new DNS zone that was not shared between regions, so that clients in each region could resolve the DNS address of our registry to the local region's registry deployment, instead of to a single registry located in a different region.","spans":[]},{"type":"heading2","text":"Implementation details","spans":[]},{"type":"paragraph","text":"The registry configuration we ended up using was rather standard, using a storage backend configured with access key and secret key. The one important bit, as previously mentioned was disabling `redirect`:","spans":[]},{"type":"preformatted","text":"```[php]{`","spans":[]},{"type":"paragraph","text":"    storage:  ","spans":[]},{"type":"paragraph","text":"      redirect:","spans":[]},{"type":"paragraph","text":"        disable: true","spans":[]},{"type":"preformatted","text":"`}```","spans":[]},{"type":"paragraph","text":"For caching image data locally with the registry, we chose to use Squid. Each instance of the registry would be deployed with its own Squid instance, with its own cache storage. This approach was simple to set up and configure, but does have drawbacks: notably, that each instance of the registry has its own independent cache. This means that in a deployment of multiple instances, multiple identical requests directed to different backing instances could result in several cache misses, one for each instance of the registry and cache. There's room for future improvement here, setting up a larger, shared cache that all registry instances in a region sit behind. Any local caching at all was a big improvement over our original setup, so it was an okay tradeoff to make in our initial work.","spans":[{"start":66,"end":71,"type":"hyperlink","data":{"link_type":"Web","url":"http://www.squid-cache.org"}}]},{"type":"paragraph","text":"To configure Squid, we wrote a simple configuration to listen for HTTPS connections and to send all cache misses to the local registry:","spans":[]},{"type":"preformatted","text":"```[php]{`","spans":[]},{"type":"paragraph","text":"    https_port 443 accel defaultsite=dockerregistry no-vhost cert=cert.pem key=key.pem  ","spans":[]},{"type":"paragraph","text":"    ...","spans":[]},{"type":"paragraph","text":"    cache_peer 127.0.0.1 parent 5000 0 no-query originserver no-digest forceddomain=dockerregistry name=upstream login=PASSTHRU ssl  ","spans":[]},{"type":"paragraph","text":"    acl site dstdomain dockerregistry  ","spans":[]},{"type":"paragraph","text":"    http_access allow site  ","spans":[]},{"type":"paragraph","text":"    cache_peer_access upstream allow site  ","spans":[]},{"type":"paragraph","text":"    cache allow site ","spans":[]},{"type":"preformatted","text":"`}```","spans":[]},{"type":"paragraph","text":"Once we had written the registry and Squid configuration, we combined the two pieces of software to run together in a Kubernetes deployment. Each pod would run an instance of the registry and an instance of Squid, with its own temporary disk storage. Deploying this across our regional Kubernetes clusters was straightforward.","spans":[]},{"type":"preformatted","text":"```[php]{`","spans":[]},{"type":"paragraph","text":"    apiVersion: extensions/v1beta1  ","spans":[]},{"type":"paragraph","text":"    kind: Deployment  ","spans":[]},{"type":"paragraph","text":"    metadata:  ","spans":[]},{"type":"paragraph","text":"      name: registry","spans":[]},{"type":"paragraph","text":"    spec:  ","spans":[]},{"type":"paragraph","text":"      replicas: 3","spans":[]},{"type":"paragraph","text":"      template:","spans":[]},{"type":"paragraph","text":"        spec:","spans":[]},{"type":"paragraph","text":"          volumes:","spans":[]},{"type":"paragraph","text":"            - name: registry-config","spans":[]},{"type":"paragraph","text":"              configMap:","spans":[]},{"type":"paragraph","text":"                name: registry-config","spans":[]},{"type":"paragraph","text":"            - name: squid-config","spans":[]},{"type":"paragraph","text":"              configMap:","spans":[]},{"type":"paragraph","text":"                name: squid-config","spans":[]},{"type":"paragraph","text":"            - name: cache","spans":[]},{"type":"paragraph","text":"              emptyDir: {}","spans":[]},{"type":"paragraph","text":"          containers:","spans":[]},{"type":"paragraph","text":"            - name: registry","spans":[]},{"type":"paragraph","text":"              image: registry:2.6.2","spans":[]},{"type":"paragraph","text":"              volumeMounts:","spans":[]},{"type":"paragraph","text":"                - name: registry-config","spans":[]},{"type":"paragraph","text":"                  mountPath: /etc/docker/registry/config.yml","spans":[]},{"type":"paragraph","text":"                  subPath: config.yml","spans":[]},{"type":"paragraph","text":"            - name: squid","spans":[]},{"type":"paragraph","text":"              image: squid:3.5.12","spans":[]},{"type":"paragraph","text":"              ports:","spans":[]},{"type":"paragraph","text":"                - containerPort: 443","spans":[]},{"type":"paragraph","text":"              volumeMounts:","spans":[]},{"type":"paragraph","text":"                - name: squid-config","spans":[]},{"type":"paragraph","text":"                  mountPath: /etc/squid/squid.conf","spans":[]},{"type":"paragraph","text":"                  subPath: squid.conf","spans":[]},{"type":"paragraph","text":"                - name: cache","spans":[]},{"type":"paragraph","text":"                  mountPath: /cache","spans":[]},{"type":"preformatted","text":"`}```","spans":[]},{"type":"paragraph","text":"The last bit of remaining work was enabling ingress to our new registry, which we did using our existing HAProxy ingress controllers. We terminate TLS with Squid, so HAProxy is only responsible for forwarding TCP traffic to our deployment.","spans":[]},{"type":"preformatted","text":"```[php]{`","spans":[]},{"type":"paragraph","text":"    apiVersion: extensions/v1beta1  ","spans":[]},{"type":"paragraph","text":"    kind: Ingress  ","spans":[]},{"type":"paragraph","text":"    metadata:  ","spans":[]},{"type":"paragraph","text":"      name: docker","spans":[]},{"type":"paragraph","text":"    spec:  ","spans":[]},{"type":"paragraph","text":"      rules:","spans":[]},{"type":"paragraph","text":"        - host: dockerregistry","spans":[]},{"type":"paragraph","text":"          http:","spans":[]},{"type":"paragraph","text":"            paths:","spans":[]},{"type":"paragraph","text":"              - path: /","spans":[]},{"type":"paragraph","text":"                backend:","spans":[]},{"type":"paragraph","text":"                  serviceName: docker","spans":[]},{"type":"paragraph","text":"                  servicePort: 443","spans":[]},{"type":"paragraph","text":"      tls:","spans":[]},{"type":"paragraph","text":"        - hosts:","spans":[]},{"type":"paragraph","text":"            - dockerregistry","spans":[]},{"type":"paragraph","text":"          secretName: not_needed","spans":[]},{"type":"preformatted","text":"`}```","spans":[]},{"type":"heading2","text":"Conclusion","spans":[]},{"type":"paragraph","text":"In conclusion, this registry architecture has been working well, providing much quicker pulls and pushes across all of our data centers. With this setup, we now have Docker registries running in all of our regions, and no region depends on reaching another region to serve data. Each registry instance is now backed by a Squid caching proxy, allowing us to keep many requests for the same data entirely in cache, and entirely local to the region. This has enabled larger deploys and much higher pull performance.","spans":[]},{"type":"paragraph","text":"Future improvements will be made around metrics instrumentation and monitoring. While we currently compute metrics by scraping the registry logs, we're looking forward to the Docker registry including Prometheus metrics natively. Additionally, creating a shared regional cache for our registry deployments should provide a nice performance boost and reduce the number of cache misses we see in operation. ","spans":[{"start":191,"end":219,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/docker/distribution/pull/2466"}}]},{"type":"paragraph","text":"Jeff Zellner is a Senior Software Engineer on the Delivery team, where he works on providing infrastructure and automation around Kubernetes to the DigitalOcean engineering organization at large. He's a long-time remote worker, startup-o-phile, and incredibly good skier.","spans":[{"start":0,"end":271,"type":"em"}]}],"blog_post_date":"2018-06-12","tags":[{"tag1":{"tag":"Engineering","_linkType":"Link.document","_meta":{"uid":"engineering"}}}],"_meta":{"uid":"deploying-a-multi-region-docker-registry-to-improve-performance"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Priya Chakravarthi","author_image":{"dimensions":{"width":200,"height":200},"alt":"Priya Chakravarthi","copyright":null,"url":"https://images.prismic.io/www-static/a764a7c4d900d2e77bbd3a25ad5b2a348063df40_image.png?auto=compress,format"},"_meta":{"uid":"priya_chakravarthi"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"Droplet illustration","copyright":null,"url":"https://images.prismic.io/www-static/da552a7e73a57ae8b974605a7ae65ccad3553db6_burstableblockstorage_blog.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"You Can Now Automatically Format and Mount Block Storage Volumes","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Since we launched Block Storage Volumes in 2016, we noticed users searching for our tutorials on partitioning and formatting storage devices and volumes in Linux. At the same time, some users were accidentally formatting already pre-formatted volumes due to the manual process involved in setting up.","spans":[{"start":125,"end":140,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-partition-and-format-storage-devices-in-linux"}},{"start":145,"end":152,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-partition-and-format-digitalocean-block-storage-volumes-in-linux"}}]},{"type":"paragraph","text":"This was a cue for us to reduce the friction in the user experience and allow users to simply click to add storage to their Droplets. For example, when you attach a thumb drive to your computer it just works and is ready for use instantly. Why should attaching a volume to your Droplet be different?","spans":[]},{"type":"paragraph","text":"In late May, we launched the “automatically format and mount” feature across all regions that support Block Storage Volumes. With this new feature, we reduce human errors and speed up the process of attaching external storage to your Droplets.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/4060a4747858063da5cee0e3e748c7a8684c7a25_block-storage-1.png?auto=compress,format","alt":"Configuration Options","copyright":null,"dimensions":{"width":1302,"height":1258}},{"type":"paragraph","text":"This feature is supported, using the DigitalOcean control panel or API, for Droplets running the following operating systems:","spans":[]},{"type":"list-item","text":"Ubuntu","spans":[]},{"type":"list-item","text":"Debian versions 8+","spans":[]},{"type":"list-item","text":"Fedora","spans":[]},{"type":"list-item","text":"Fedora Atomic","spans":[]},{"type":"list-item","text":"CentOS","spans":[]},{"type":"paragraph","text":"DigitalOcean users can select between two popular  Linux filesystems, Ext4 or XFS, for formatting their volumes. To get things going, we provide default mount options and use a default mount point corresponding to your volume name.","spans":[]},{"type":"paragraph","text":"To customize these mount options, you can SSH into your Droplet and run commands specific to your Linux distribution. If your company or application dictates the use of a specific filesystem that is not currently supported, or you want to control your mount options or name, our in-product instructions are now customized to the operating system version and can be copied and executed as-is.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/93a2166dbc5afb7921735222f61fa7980e6d3a60_block-storage-2.png?auto=compress,format","alt":"Configuration Options","copyright":null,"dimensions":{"width":1300,"height":1474}},{"type":"paragraph","text":"Block Storage Volumes provide the same baseline performance for all sizes, which makes them a great fit for the majority of use cases that require attached storage. (ICYMI, we recently detailed some of the performance improvements we’ve made.) With the new “automatically format and mount” feature, adding high performance block storage becomes a breeze.","spans":[{"start":194,"end":241,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/block-storage-volume-performance-burst/"}}]},{"type":"paragraph","text":"Ready to try this out? Add a volume to your Droplet now.","spans":[{"start":23,"end":56,"type":"hyperlink","data":{"link_type":"Web","url":"https://cloud.digitalocean.com/droplets/volumes"}}]}],"blog_post_date":"2018-06-06","tags":[{"tag1":{"tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"_meta":{"uid":"auto-format-and-mount"}}}]}}}