<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Chad Metcalf</title>
    <description>The latest articles on Forem by Chad Metcalf (@metcalfc).</description>
    <link>https://forem.com/metcalfc</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1281021%2Fcde8de8e-23ef-462a-84d8-27bf2ae0d898.png</url>
      <title>Forem: Chad Metcalf</title>
      <link>https://forem.com/metcalfc</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/metcalfc"/>
    <language>en</language>
    <item>
      <title>Dev Container: The Path to Standard Dev Environments</title>
      <dc:creator>Chad Metcalf</dc:creator>
      <pubDate>Mon, 12 Feb 2024 00:00:00 +0000</pubDate>
      <link>https://forem.com/daytona/dev-container-the-path-to-standard-dev-environments-4d65</link>
      <guid>https://forem.com/daytona/dev-container-the-path-to-standard-dev-environments-4d65</guid>
      <description>&lt;p&gt;Startups and software companies aligning with the &lt;a href="https://containers.dev/"&gt;Development Container specification&lt;/a&gt; can significantly streamline their development processes. By aligning with established standards and leveraging existing reference implementations, such as those from Microsoft, startups can ensure compatibility and meet user expectations.&lt;/p&gt;

&lt;p&gt;The adoption of &lt;a href="https://dev.to/daytona/inside-the-dev-container-specification-1d6d"&gt;Dev Container Specification&lt;/a&gt; not only reduces the need to reinvent the wheel but also fosters a uniform experience across various platforms, benefiting both business and open-source communities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Microsoft's reference implementations for Dev Container are not open source, except for the Dev Container CLI.&lt;/li&gt;
&lt;li&gt;There's an advantage for other startups supporting Dev Container as it encourages adherence to specifications, revealing areas where the specification may need improvement.&lt;/li&gt;
&lt;li&gt;Multiple implementations of a specification, as seen with Docker and OCI specs, are beneficial but can be challenging for users.&lt;/li&gt;
&lt;li&gt;Daytona aims to align user experiences across different platforms (VS Code, Codespaces, Daytona), benefiting both business and open source communities.&lt;/li&gt;
&lt;li&gt;This alignment will enable a standardized development environment experience, which is seen as powerful and beneficial for all users.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Evolution of Dev Container Integration
&lt;/h2&gt;

&lt;p&gt;The journey of integrating with the Dev Container specification is one of learning and adaptation. Initially setting out to create a unique solution, it became apparent that the gap between independent efforts and the established Dev Container specification was vast. This realization underscores the importance of leveraging reference implementations and adhering to industry standards to minimize duplication of effort and ensure compatibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenges of Divergence
&lt;/h2&gt;

&lt;p&gt;Creating a custom solution that deviates significantly from the Dev Container specification can lead to increased workload and a disjointed user experience. Reference implementations, particularly those from Microsoft, have set user expectations for functionality and performance. Deviating from these expectations can create unnecessary hurdles for users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons Learned: Embracing Established Standards
&lt;/h2&gt;

&lt;p&gt;The experience highlights the value in closely integrating with the &lt;a href="https://github.com/devcontainers/cli"&gt;Dev Container CLI&lt;/a&gt; and other extensions. This approach not only taps into the benefits of existing, robust tools but also ensures that users have a consistent experience, whether they're working in Visual Studio Code, Codespaces, or other environments supporting Dev Container.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rising Tide: The Collective Benefit of Specification Adoption
&lt;/h2&gt;

&lt;p&gt;The broader adoption of the Dev Container specification is akin to a rising tide that lifts all boats. It encourages a shared understanding of how development environments should operate. As more implementations of the spec emerge, it can shine a light on areas that may need further refinement, drawing from lessons learned during Docker's evolution with the OCI spec and others.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge for Users: Navigating Multiple Implementations
&lt;/h2&gt;

&lt;p&gt;While having multiple implementations of a specification can be beneficial, it can also pose challenges for users. They may find themselves navigating a fragmented landscape of development environments, which can impede productivity and lead to confusion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Daytona's Strategic Alignment: Bridging User Experiences
&lt;/h2&gt;

&lt;p&gt;Daytona's approach to closely align with what users expect from Dev Container implementations will bridge the gap between disparate user experiences. This alignment ensures that actions performed in one environment will seamlessly translate to others, whether in VS Code, Codespaces, or Daytona.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Power of Standardization for Open Source Communities
&lt;/h2&gt;

&lt;p&gt;Open-source communities benefit significantly from standardization. With contributors using various platforms, a standard development environment facilitates collaboration and reduces friction. Daytona's commitment to &lt;a href="https://www.daytona.io/definitions/s/standardized-development-environment-sde"&gt;standardization of dev environments&lt;/a&gt; is poised to offer a consistent &lt;a href="https://www.daytona.io/definitions/d/developer-experience-devex"&gt;development experience&lt;/a&gt; for all users, regardless of their platform of choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: The Significance of Alignment with Dev Container
&lt;/h2&gt;

&lt;p&gt;The lessons learned from integrating with the Dev Container specification emphasize the importance of alignment and standardization. For dev tools companies like Daytona, this alignment promises developers a &lt;a href="https://dev.to/daytona/designing-developer-workspaces-for-flow-state-2bpi-temp-slug-4758249"&gt;flow state&lt;/a&gt; and an uniform and powerful development environment experience for users across different platforms. It is through this standardization that the open-source community, as well as business users, can enjoy a cohesive and efficient workflow, reinforcing the collective strength of the software development ecosystem.&lt;/p&gt;

</description>
      <category>devcontainer</category>
      <category>devex</category>
      <category>sde</category>
      <category>dem</category>
    </item>
    <item>
      <title>Install Daytona on DigitalOcean in Minutes</title>
      <dc:creator>Chad Metcalf</dc:creator>
      <pubDate>Wed, 20 Dec 2023 00:00:00 +0000</pubDate>
      <link>https://forem.com/daytona/install-daytona-on-digitalocean-in-minutes-ffa</link>
      <guid>https://forem.com/daytona/install-daytona-on-digitalocean-in-minutes-ffa</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftrozbwalcjewaz4jop3s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftrozbwalcjewaz4jop3s.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
This article provides a step-by-step guide on quickly setting up Daytona on DigitalOcean. You'll learn how to prepare your environment, configure necessary settings, and launch your Daytona instance efficiently.&lt;/p&gt;
&lt;h2&gt;
  
  
  Preparing Your DigitalOcean Account for Daytona
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4UOLCNjJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.datocms-assets.com/103916/1703258755-do-do.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4UOLCNjJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.datocms-assets.com/103916/1703258755-do-do.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Log in to your DigitalOcean account.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a droplet with the recommended specifications:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose Ubuntu 22.04 LTS (Jammy) for optimal compatibility with Daytona.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensure you have a domain, ideally hosted on DigitalOcean, for easier setup.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Configuring OAuth and Domain
&lt;/h2&gt;

&lt;p&gt;Set up an OAuth application on GitHub or GitLab, following the provided instructions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app"&gt;GitHub OAuth App&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.gitlab.com/ee/integration/oauth_provider.html"&gt;GitLab OAuth App&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://support.atlassian.com/bitbucket-cloud/docs/use-oauth-on-bitbucket-cloud/"&gt;Bitbucket OAuth&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Values to set in the identity provider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Homepage URL: &lt;code&gt;https://{{ domain-name }}&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Authorization callback URL: &lt;code&gt;[https://id.{{](https://id.{{/) domain-name }}&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Setting Up the Environment
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Access your DigitalOcean droplet's console.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Confirm Git is installed by running &lt;code&gt;git --version&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clone the Daytona repository using &lt;code&gt;git clone&lt;/code&gt; followed by the repository URL.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navigate to the installer directory and initiate the setup process.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/daytonaio/installer
cd installer
./setup.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cTSualRm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.datocms-assets.com/103916/1703258762-do-install.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cTSualRm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.datocms-assets.com/103916/1703258762-do-install.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Agreeing to Terms and Installing Dependencies
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Accept the terms of use for evaluation or home use. For commercial use, contact the Daytona team.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The setup will install Helm for Kubernetes application management and Certbot for TLS certificate management.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The setup will also configure the cluster with K3S and specify GitHub for version control integration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter the required secrets for OAuth when prompted.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here is the prompt you will receive if you choose Github IdP for example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./setup.sh
...
Enter app hostname (valid domain) [FQDN]: daytona.example.com
Identity Providers (IdP) available [IDP]:
1) github
2) gitlab
3) bitbucket
4) gitlabSelfManaged
5) githubEnterpriseServer
Choose an IdP (type the number and press Enter): 1
Enter IdP Client ID [IDP_ID]: changeme
Enter IdP Client Secret (IDP_SECRET) (input hidden):
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  DNS Configuration and Certificates
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Add DNS records (&lt;code&gt;*&lt;/code&gt; and &lt;code&gt;@&lt;/code&gt;) in DigitalOcean to point to your Daytona instance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In your droplet's console, clone the Daytona installer from our GitHub.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run the setup script &lt;code&gt;./setup.sh&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set up the Acme challenge by creating the necessary DNS records for TLS certificate validation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wait for the DNS to propagate and verify the setup.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jhYX4zi0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.datocms-assets.com/103916/1703258751-do-dns.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jhYX4zi0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.datocms-assets.com/103916/1703258751-do-dns.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Finalizing the Installation
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The installation will proceed to set up a K3S cluster and install Longhorn for storage requirements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The process may take several minutes, during which you can monitor the progress.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Launching Daytona
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Once the installation is complete, navigate to your domain to access the Daytona instance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Log in using GitHub OAuth to authenticate.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a new workspace by specifying a repository URL.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The workspace will launch, and you can begin using Daytona within minutes.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Post-Installation Tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Consider pre-building images to speed up workspace launches.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ideally, you can utilize NVMe storage for faster performance.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Full Tutorial on YouTube
&lt;/h2&gt;

&lt;p&gt;To see these steps in action, you can view the full video tutorial on YouTube, which provides a comprehensive walkthrough of the entire process.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/aT1Oeo3QvDM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Following these steps, you can have a fully functional Daytona environment on DigitalOcean in under half an hour. The process is straightforward, and the environment is just as easy to dismantle if needed.&lt;/p&gt;

&lt;p&gt;Enjoy the speed and convenience of your new Daytona setup!&lt;/p&gt;

</description>
      <category>guides</category>
      <category>howto</category>
    </item>
  </channel>
</rss>
