<?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>DEV Community: ninefyi</title>
    <description>The latest articles on DEV Community by ninefyi (@ninefyi).</description>
    <link>https://dev.to/ninefyi</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%2F162444%2F7a46fdde-3721-44ab-a098-43e6e16cfd1c.png</url>
      <title>DEV Community: ninefyi</title>
      <link>https://dev.to/ninefyi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ninefyi"/>
    <language>en</language>
    <item>
      <title>Hacktoberfest 23 Contributor and Maintainer</title>
      <dc:creator>ninefyi</dc:creator>
      <pubDate>Tue, 24 Oct 2023 08:24:18 +0000</pubDate>
      <link>https://dev.to/ninefyi/hacktoberfest-23-contributor-and-maintainer-8bp</link>
      <guid>https://dev.to/ninefyi/hacktoberfest-23-contributor-and-maintainer-8bp</guid>
      <description>&lt;h3&gt;
  
  
  Intro
&lt;/h3&gt;

&lt;p&gt;Hey there! I'm an old-school developer. I'm an admin of MongoDB Thailand User Group. I joined many Hacktoberfest events. I love to contribute my knowledge when I am available to Thai developers. Please check out my GitHub profile - &lt;a href="https://github.com/ninefyi"&gt;ninefyi&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  As a contributor
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Highs and Lows
&lt;/h3&gt;

&lt;p&gt;Highs: This year, it is easy to find Thai open-source repos. Many Thai developers create awesome repos, which I can find in &lt;a href="https://open.source.in.th/"&gt;one&lt;/a&gt; place.&lt;/p&gt;

&lt;p&gt;Lows: It is not easy to manage the time when you intend to contribute something to the communities.&lt;/p&gt;




&lt;h2&gt;
  
  
  As a maintainer
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Project
&lt;/h3&gt;

&lt;p&gt;The project is the MongoDB tutorial website for Thai developers because sometimes it is difficult for anyone who can understand some technical content. That is why I created it.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/mongodbthailand"&gt;
        mongodbthailand
      &lt;/a&gt; / &lt;a href="https://github.com/mongodbthailand/mongodbthailand.github.io"&gt;
        mongodbthailand.github.io
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1 id="user-content-mongodbthailandcom-website"&gt;&lt;a class="heading-link" href="https://github.com/mongodbthailand/mongodbthailand.github.io#mongodbthailandcom-website"&gt;mongodbthailand.com Website&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;โปรเจกต์นี้สำหรับเก็บซอร์สโค้ดของเว็บไซต์ &lt;a href="https://mongodbthailand.com" rel="nofollow"&gt;MongoDB Thailand&lt;/a&gt; เว็บไซต์รวบรวมข้อมูลและคำแนะนำการใช้งาน MongoDB
สำหรับคอมมูนิตี้ชาวไทย&lt;/p&gt;
&lt;h2 id="user-content-hacktoberfest-2023"&gt;&lt;a class="heading-link" href="https://github.com/mongodbthailand/mongodbthailand.github.io#hacktoberfest-2023"&gt;Hacktoberfest 2023&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;ปัจจุบันโครงการนี้เปิดรับ MR เพื่อเพิ่มคอนเทนต์ที่น่าสนใจ สามารถติดตามรายละเอียดเพิ่มเติมได้ที่
&lt;a href="https://mongodbthailand.com/hacktoberfest-2023" rel="nofollow"&gt;หน้ารายละเอียดกิจกรรม Hacktoberfest 2023&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="user-content-สำหรับนักพัฒนาและผู้ร่วมแก้ไข"&gt;&lt;a class="heading-link" href="https://github.com/mongodbthailand/mongodbthailand.github.io#%E0%B8%AA%E0%B8%B3%E0%B8%AB%E0%B8%A3%E0%B8%B1%E0%B8%9A%E0%B8%99%E0%B8%B1%E0%B8%81%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2%E0%B9%81%E0%B8%A5%E0%B8%B0%E0%B8%9C%E0%B8%B9%E0%B9%89%E0%B8%A3%E0%B9%88%E0%B8%A7%E0%B8%A1%E0%B9%81%E0%B8%81%E0%B9%89%E0%B9%84%E0%B8%82"&gt;สำหรับนักพัฒนาและผู้ร่วมแก้ไข&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;เพื่อให้โปรเจกต์นี้มีรูปแบบการย่อหน้าที่ตรงกัน กรุณาลง Extension &lt;a href="https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig" rel="nofollow"&gt;EditorConfig&lt;/a&gt; ในโปรแกรมแก้ไขโค้ดของท่าน&lt;/p&gt;
&lt;h2 id="user-content--project-structure"&gt;&lt;a class="heading-link" href="https://github.com/mongodbthailand/mongodbthailand.github.io#-project-structure"&gt;🚀 Project Structure&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Inside of your Astro + Starlight project, you'll see the following folders and files:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;
├── public/
├── src/
│   ├── assets/
│   ├── content/
│   │   ├── docs/
│   │   └── config.ts
│   └── env.d.ts
├── astro.config.mjs
├── package.json
├── tailwind.config.cjs
└── tsconfig.json
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Starlight looks for &lt;code&gt;.md&lt;/code&gt; or &lt;code&gt;.mdx&lt;/code&gt; files in the &lt;code&gt;src/content/docs/&lt;/code&gt; directory. Each file is exposed as a route based on its file name.&lt;/p&gt;
&lt;p&gt;Images can be added to &lt;code&gt;src/assets/&lt;/code&gt; and embedded in Markdown with a relative link.&lt;/p&gt;
&lt;p&gt;Static assets, like favicons, can be placed in the &lt;code&gt;public/&lt;/code&gt; directory.&lt;/p&gt;
&lt;h2 id="user-content--commands"&gt;&lt;a class="heading-link" href="https://github.com/mongodbthailand/mongodbthailand.github.io#-commands"&gt;🧞 Commands&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;All commands are run from the root of the project, from a terminal:&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;npm install&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Installs dependencies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;npm run dev&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Starts local dev server at &lt;code&gt;localhost:4321&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;npm run&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/mongodbthailand/mongodbthailand.github.io"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Highs and Lows
&lt;/h3&gt;

&lt;p&gt;Highs: I can find many Thai contributors who can help and use MongoDB this year. I hope they enjoy it and make our repo invaluable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Low: I still need more contributors to share their knowledge with other people through the website.
&lt;/h2&gt;

&lt;p&gt;Thank you!!!&lt;/p&gt;

</description>
      <category>hack23maintainer</category>
      <category>hack23contributor</category>
      <category>hacktoberfest23</category>
    </item>
    <item>
      <title>GitHub Actions for MongoDB Atlas App Services</title>
      <dc:creator>ninefyi</dc:creator>
      <pubDate>Tue, 23 May 2023 09:11:59 +0000</pubDate>
      <link>https://dev.to/ninefyi/github-actions-for-mongodb-atlas-app-services-2mhg</link>
      <guid>https://dev.to/ninefyi/github-actions-for-mongodb-atlas-app-services-2mhg</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;I created GitHub Actions for MongoDB Atlas App Services. There are two jobs: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;build Astro to generate static files&lt;/li&gt;
&lt;li&gt;copy static files and push them to MongoDB Atlas App Services.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Category Submission:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;DIY Deployments&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  App Link:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://frontend-app-hqqpl.mongodbstitch.com"&gt;Click&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;p&gt;There are two parts: GitHub Codespaces and GitHub Actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub Codespaces
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open GitHub Codespaces link to GitHub&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gmVwBKs1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/246n8iyis5if4cc6bnft.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gmVwBKs1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/246n8iyis5if4cc6bnft.png" alt="Setting up GitHub Codespaces" width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open the terminal inside GitHub Codespaces and run below command&lt;br&gt;
&lt;code&gt;npm create astro@latest -- --template framework-svelte&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Update svelte.config.js&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9sJ467eD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kcpz83g187iy1l0h20xt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9sJ467eD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kcpz83g187iy1l0h20xt.png" alt="Update svelte config" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Update package.json&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BwQQy-4r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bxv9vcjdqdir7qp1hib7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BwQQy-4r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bxv9vcjdqdir7qp1hib7.png" alt="Update package.json" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run &lt;code&gt;npm run dev&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;you can open browser after run no 5.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ba9c_gLl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1s1ejzi0cykq74gmyhc0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ba9c_gLl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1s1ejzi0cykq74gmyhc0.png" alt="website" width="800" height="299"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;create a GitHub Actions workflow.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c7wOd7bZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ovwd27ditk64e5hencnp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c7wOd7bZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ovwd27ditk64e5hencnp.png" alt="gha" width="800" height="535"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deploy-mdb-atlas-app-service&lt;/span&gt;
&lt;span class="na"&gt;run-name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ github.actor }} deploys an app on the Atlas App Service&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;workflow_dispatch&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;build-astro-svelte&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v3&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-node@v3&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;18'&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm i&lt;/span&gt;
        &lt;span class="na"&gt;working-directory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./fe&lt;/span&gt; 
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm run build&lt;/span&gt;
        &lt;span class="na"&gt;working-directory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./fe&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mkdir -p ./data/files&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cp -R ./fe/dist/* ./data/files&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/upload-artifact@v3&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;build-artifact&lt;/span&gt;
          &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./data&lt;/span&gt;
  &lt;span class="na"&gt;deploy-to-aas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;needs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;build-astro-svelte&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v3&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-node@v3&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;18'&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm install -g mongodb-realm-cli&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mkdir -p build-artifact&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/download-artifact@v3&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;build-artifact&lt;/span&gt;
          &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;build-artifact&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;realm-cli login --api-key ${{ secrets.API_KEY }} --private-api-key ${{ secrets.PRIVATE_API_KEY }} -y&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;realm-cli pull --remote ${{ vars.APP_ID }}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cp -R ./build-artifact/* ./${{ vars.APP_NAME }}/hosting&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;realm-cli push --remote ${{ vars.APP_ID }} -s -c -y&lt;/span&gt;
        &lt;span class="na"&gt;working-directory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./${{ vars.APP_NAME }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After create dev and GitHub Actions on GitHub Codespaces, we will prepare MongoDB Atlas App Services.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Sign-in on &lt;a href="https://cloud.mongodb.com/"&gt;https://cloud.mongodb.com/&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to Data services and "Create"&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yjRI0aMx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/apcpu8y5rjy19gyyrm3d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yjRI0aMx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/apcpu8y5rjy19gyyrm3d.png" alt="mdb1" width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a paid MongoDB cluster.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SfzvR2Fj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8wwg5bw5byw2ckjnxhkb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SfzvR2Fj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8wwg5bw5byw2ckjnxhkb.png" alt="mdb2" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create an app services&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--z9h6ZGlQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xcu6xc6rrbnatm7tdw9f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z9h6ZGlQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xcu6xc6rrbnatm7tdw9f.png" alt="mdb3" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter required information and "Create".&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tZ5-gEcX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/po6qyx7hgejyud0j9tzo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tZ5-gEcX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/po6qyx7hgejyud0j9tzo.png" alt="mdb4" width="800" height="527"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable hosting.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JK_IsSA5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r075wecq59vyjjsbqqyw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JK_IsSA5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r075wecq59vyjjsbqqyw.png" alt="mdb5" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy APP ID.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lL0qIjQu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z1z4se9u1okom8yeof4u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lL0qIjQu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z1z4se9u1okom8yeof4u.png" alt="mdb6" width="800" height="549"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create API KEY for GitHub Actions.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TnvH97FT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/25g8qki5pf3nzvgbqknl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TnvH97FT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/25g8qki5pf3nzvgbqknl.png" alt="mdb10" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter required information.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fwj-MBDb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2z9zzhrelliu6xbmlduh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fwj-MBDb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2z9zzhrelliu6xbmlduh.png" alt="mdb11" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy and Save the "Public and Private API key"&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rVscIb43--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9eel2n0txnlkrt8inbcn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rVscIb43--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9eel2n0txnlkrt8inbcn.png" alt="mdb12" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After prepare MongoDB Atlas App Services, we will create secrets &amp;amp; variables on GitHub settings.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Go to "New repository variable"&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--afN8hSRb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aysz6pfyvgrq1qnfb7h6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--afN8hSRb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aysz6pfyvgrq1qnfb7h6.png" alt="mdb7" width="800" height="539"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create APP_NAME variable.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rW8xtNcn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d6p5v2skd0wuz2hgqtjo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rW8xtNcn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d6p5v2skd0wuz2hgqtjo.png" alt="mdb8" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create APP_ID variable&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fS_gdjvp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6efmcm4mytbkz0jhcbd3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fS_gdjvp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6efmcm4mytbkz0jhcbd3.png" alt="mdb9" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create APP&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--h1gKREdE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s0cmj980ewh9489ctfsn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h1gKREdE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s0cmj980ewh9489ctfsn.png" alt="mdb13" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to "New repository secret"&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZUsOxius--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eolfgvbeu066losjrtl6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZUsOxius--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eolfgvbeu066losjrtl6.png" alt="gha1" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create API_KEY secret.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UYe4NxIR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/treauk80j8zkhk9am0bm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UYe4NxIR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/treauk80j8zkhk9am0bm.png" alt="gha2" width="800" height="539"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create PRIVATE_API_KEY secret.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UBCuVzat--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lezigj8f148x3vregtli.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UBCuVzat--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lezigj8f148x3vregtli.png" alt="gha3" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run workflow manually for deployment.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JDzCn4pf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5aj0gwe0wjbflr5g3gi3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JDzCn4pf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5aj0gwe0wjbflr5g3gi3.png" alt="gha4" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If workflow runs passed, you can see files in hosting and can see the result on the website.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FMvSMzDJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/la4pcjjvzihkdlja8vza.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FMvSMzDJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/la4pcjjvzihkdlja8vza.png" alt="gh5" width="800" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;10.&lt;br&gt;
 Website&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ba9c_gLl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1s1ejzi0cykq74gmyhc0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ba9c_gLl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1s1ejzi0cykq74gmyhc0.png" alt="website" width="800" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Description
&lt;/h3&gt;

&lt;p&gt;This application runs on MongoDB Atlas App Services (Hosting). It is a service for static files. I will show how to use GitHub Actions to create CI/CD pipeline for Atlas App Service deployment. I also demonstrate how to use GitHub Codespaces for testing deployment to run Astro.&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Source Code
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/ninefyi/astro-gha-mdb-hosting"&gt;GitHub repo&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Permissive License:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;MIT&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Background (What made you decide to build this particular app? What inspired you?)
&lt;/h2&gt;

&lt;p&gt;My inspiration is the less content about MongoDB Atlas App Services and how to use GitHub Codespaces and GitHub Actions to create an automated deployment frontend to MongoDB Atlas App Services.&lt;/p&gt;

&lt;h3&gt;
  
  
  How I built it (How did you utilize GitHub Actions or GitHub Codespaces? Did you learn something new along the way? Pick up a new skill?)
&lt;/h3&gt;

&lt;p&gt;I used GitHub Codespaces for development and GitHub Actions to deploy static files to MongoDB Atlas App Services. I learned how to test my front-end website using GitHub Codespaces. It is a free tier, and I do not need to install any software on my laptop. I learned how to use secrets and variables to hide my key from MongoDB Atlas for GitHub Actions. It looked seamless between GitHub Codespaces and GitHub Actions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Additional Resources/Info
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/kkoziarski/react-vite-github-codespaces-5529"&gt;Expose port 3000 for GitHub Codespaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mongodb.com/docs/atlas/app-services/cli/"&gt;Realm-Cli&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>githubhack23</category>
      <category>atlasappservices</category>
      <category>mongodbatlas</category>
      <category>astro</category>
    </item>
    <item>
      <title>Pulumi Challenge 03</title>
      <dc:creator>ninefyi</dc:creator>
      <pubDate>Sun, 13 Nov 2022 14:56:46 +0000</pubDate>
      <link>https://dev.to/ninefyi/pulumi-challenge-03-4a1o</link>
      <guid>https://dev.to/ninefyi/pulumi-challenge-03-4a1o</guid>
      <description>&lt;p&gt;I did the &lt;a href="https://www.pulumi.com/challenge/deployments/"&gt;Pulumi Challenge 03&lt;/a&gt;, and I published my code on &lt;a href="https://github.com/ninefyi/pulumi-challenge-03"&gt;this&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What did I learn from Pulumi Challenge 03?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is easy to use Pulumi deployment because it will link to GitHub. When you push code to GitHub, Pulumi deployment will automatically build your code.&lt;/li&gt;
&lt;li&gt;I learnt how to use AWS CLI to get a session token from an MFA account using the below command.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Display MFA devices
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws iam list-mfa-devices
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Create a temporary session token
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ws sts get-session-token &lt;span class="nt"&gt;--serial-number&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;SerialNumber] &lt;span class="nt"&gt;--token-code&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Token from MFA device] &lt;span class="nt"&gt;--duration-seconds&lt;/span&gt; 86400
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  After I push the code to GitHub, the Pulumi deployment will run immediately.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3qfSWeA2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tlquzieqg57mt1g17r7k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3qfSWeA2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tlquzieqg57mt1g17r7k.png" alt="Pulumi deployment" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SvdRGH1W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zstpckmkegsgp54362tg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SvdRGH1W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zstpckmkegsgp54362tg.png" alt="Python Lambda" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The pulumi is the one tool that I should learn :).&lt;/p&gt;

</description>
      <category>pulumi</category>
      <category>aws</category>
      <category>challenge</category>
    </item>
    <item>
      <title>Pulumi Challenge 01</title>
      <dc:creator>ninefyi</dc:creator>
      <pubDate>Sat, 24 Sep 2022 09:13:03 +0000</pubDate>
      <link>https://dev.to/ninefyi/pulumi-challenge-01-22e</link>
      <guid>https://dev.to/ninefyi/pulumi-challenge-01-22e</guid>
      <description>&lt;p&gt;I attended the &lt;a href="https://www.pulumi.com/challenge/startup-in-a-box/" rel="new"&gt;[Pulumi Challenge 01]&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It is exciting because I love programming for Infrastructure as Code (IaC) and learning about any services in any cloud platform, such as AWS and Azure GCP.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I learned from Pulumi challenge 01.
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;How to create a Pulumi account.&lt;/li&gt;
&lt;li&gt;How to create a new AWS account.&lt;/li&gt;
&lt;li&gt;How to create a new Checkly account.&lt;/li&gt;
&lt;li&gt;How to install Pulumi CLI on my MacBook Pro using:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;pulumi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;How to install AWS CLI on my MacBook Pro using:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;awscli 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;How to create Access Key and Secret from AWS account.&lt;/li&gt;
&lt;li&gt;How to create API Key from Checkly.&lt;/li&gt;
&lt;li&gt;How to find Account ID from Checkly.&lt;/li&gt;
&lt;li&gt;How to link Checkly key to Pulumi by using the below command.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pulumi config &lt;span class="nb"&gt;set &lt;/span&gt;checkly:apiKey &amp;lt;YOUR API KEY&amp;gt; &lt;span class="nt"&gt;--secret&lt;/span&gt;
pulumi config &lt;span class="nb"&gt;set &lt;/span&gt;checkly:accountId &amp;lt;YOUR ACCOUNT ID&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;How to set up an AWS profile using:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws configure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;How to solve the problem of running the website because there are limits on the country that can display only from these countries which are ("US", "CA", "GB", "DE").&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  You can find the code below inside cdn-website &amp;gt; index.ts
&lt;/h3&gt;

&lt;p&gt;I live in Singapore, so I can't open the website because AWS Cloudfront allows only specific regions. I can fix it by adding my country code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Before
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="nx"&gt;restrictions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nl"&gt;geoRestriction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;restrictionType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;whitelist&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;locations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;US&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;CA&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;GB&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;DE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
          &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  After
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="nx"&gt;restrictions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nl"&gt;geoRestriction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;restrictionType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;whitelist&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;locations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;US&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;CA&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;GB&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;DE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SG&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
          &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can deploy all resources and pulumi projects using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pulumi up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also clean up all resources and projects using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pulumi destroy &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pulumi stack &lt;span class="nb"&gt;rm&lt;/span&gt; &amp;lt;your environment&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Please feel free to see my video recording for more information.&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/IC9fnZyZKkM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;You can also find my repo which includes everything you need for this challenge &lt;a href="https://github.com/ninefyi/pulumi-challenge-01"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Keep learning!!!&lt;/p&gt;

</description>
      <category>pulumi</category>
      <category>aws</category>
      <category>challenge</category>
      <category>startup</category>
    </item>
    <item>
      <title>[Azure Trial Hackathon - SonarQube community branch plugin on AKS]</title>
      <dc:creator>ninefyi</dc:creator>
      <pubDate>Tue, 08 Mar 2022 14:33:14 +0000</pubDate>
      <link>https://dev.to/ninefyi/azure-trial-hackathon-sonarqube-community-branch-plugin-on-aks-2oh3</link>
      <guid>https://dev.to/ninefyi/azure-trial-hackathon-sonarqube-community-branch-plugin-on-aks-2oh3</guid>
      <description>&lt;h3&gt;
  
  
  Overview of My Submission
&lt;/h3&gt;

&lt;p&gt;My project is for the Developers who need to deploy the SonarQube which is the code quality tool on the Kubernetes cluster. This tool is useful for the software company to analyze the code before deploying the code on a production/staging environment. It would be helpful for Devs who need to set up like me :)&lt;/p&gt;

&lt;h3&gt;
  
  
  Submission Category: Computing Captains
&lt;/h3&gt;

&lt;h3&gt;
  
  
  My Github Repository: &lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ninefyi"&gt;
        ninefyi
      &lt;/a&gt; / &lt;a href="https://github.com/ninefyi/azuretrialhack-2022"&gt;
        azuretrialhack-2022
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      https://dev.to/ninefyi/azure-trial-hackathon-sonarqube-community-branch-plugin-on-aks-4pjb-temp-slug-8928180/edit
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1 id="user-content-my-project-is-for-the-microsoft-azure-trial-hackathon-on-devto"&gt;&lt;a class="heading-link" href="https://github.com/ninefyi/azuretrialhack-2022#my-project-is-for-the-microsoft-azure-trial-hackathon-on-devto"&gt;My project is for The Microsoft Azure Trial Hackathon on Dev.to&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/ninefyi/azure-trial-hackathon-sonarqube-community-branch-plugin-on-aks-4pjb-temp-slug-8928180" rel="nofollow"&gt;Dev.to&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mc1arke/sonarqube-community-branch-plugin"&gt;Plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/cli/azure/install-azure-cli" rel="nofollow"&gt;Azure-CLI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="user-content-instruction"&gt;&lt;a class="heading-link" href="https://github.com/ninefyi/azuretrialhack-2022#instruction"&gt;Instruction&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;az login&lt;/li&gt;
&lt;li&gt;az account set -s "[Subscription name]"&lt;/li&gt;
&lt;li&gt;az group create --name rg-aks-trial --location eastasia&lt;/li&gt;
&lt;li&gt;az network public-ip create -g rg-aks-trial -n pip-aks-trial --dns-name aks-trial --allocation-method Static --sku Standard&lt;/li&gt;
&lt;li&gt;az aks create --resource-group rg-aks-trial --name aks-trial --node-count 3 --node-vm-size Standard_B2s&lt;/li&gt;
&lt;li&gt;az aks install-cli&lt;/li&gt;
&lt;li&gt;az aks get-credentials --name aks-trial -g rg-aks-trial --admin&lt;/li&gt;
&lt;li&gt;az aks show -g rg-aks-trial -n aks-trial --query "identity.principalId" -o tsv&lt;/li&gt;
&lt;li&gt;az account show --query "id" -o tsv&lt;/li&gt;
&lt;li&gt;az role assignment create --assignee "answer_no_8" --role "Network Contributor" --scope subscriptions/answer_no_9/resourceGroups/rg-aks-trial&lt;/li&gt;
&lt;li&gt;az network public-ip list -g rg-aks-trial -o tsv --query "[].ipAddress"&lt;/li&gt;
&lt;li&gt;kubectl config use-context aks-trial-admin&lt;/li&gt;
&lt;li&gt;kubectl create namespace sonarqube&lt;/li&gt;
&lt;li&gt;kubectl apply -f ./aks/postgres&lt;/li&gt;
&lt;li&gt;kubectl apply -f ./aks/sonarqube&lt;/li&gt;
&lt;li&gt;kubectl label namespace sonarqube cert-manager.io/disable-validation=true&lt;/li&gt;
&lt;li&gt;helm repo add ingress-nginx &lt;a href="https://kubernetes.github.io/ingress-nginx" rel="nofollow"&gt;https://kubernetes.github.io/ingress-nginx&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;helm repo add jetstack &lt;a href="https://charts.jetstack.io" rel="nofollow"&gt;https://charts.jetstack.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;helm repo update&lt;/li&gt;
&lt;li&gt;helm install nginx-ingress ingress-nginx/ingress-nginx \
--version 4.0.13 \
--namespace sonarqube \…&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ninefyi/azuretrialhack-2022"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;/h3&gt;

&lt;h3&gt;
  
  
  Software deployment on AKS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Website: SonarQube Community Editon&lt;/li&gt;
&lt;li&gt;Database: Postgres&lt;/li&gt;
&lt;li&gt;SSL: Letsencrypt&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Azure resources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Azure Kubernetes Services&lt;/li&gt;
&lt;li&gt;Azure Public IP Address&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vjHJ1zZR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/ninefyi/azuretrialhack-2022/main/screenshots/1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vjHJ1zZR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/ninefyi/azuretrialhack-2022/main/screenshots/1.png" alt="alt_text" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s-AFWKQ0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/ninefyi/azuretrialhack-2022/main/screenshots/2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s-AFWKQ0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/ninefyi/azuretrialhack-2022/main/screenshots/2.png" alt="alt_text" width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ym1fdTqN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/ninefyi/azuretrialhack-2022/main/screenshots/3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ym1fdTqN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/ninefyi/azuretrialhack-2022/main/screenshots/3.png" alt="alt_text" width="800" height="303"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q5Hv87_9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/ninefyi/azuretrialhack-2022/main/screenshots/4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q5Hv87_9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/ninefyi/azuretrialhack-2022/main/screenshots/4.png" alt="alt_text" width="800" height="542"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DEV usernames: &lt;a href="https://dev.to/ninefyi"&gt;ninefyi&lt;/a&gt;&lt;/p&gt;

</description>
      <category>azuretrialhack</category>
      <category>microsoft</category>
      <category>azure</category>
    </item>
  </channel>
</rss>
