<?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: Selmouni</title>
    <description>The latest articles on DEV Community by Selmouni (@aselmouni).</description>
    <link>https://dev.to/aselmouni</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%2F1185219%2F3b6b0fcf-fa72-4a54-8924-6e350a7fbf21.png</url>
      <title>DEV Community: Selmouni</title>
      <link>https://dev.to/aselmouni</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aselmouni"/>
    <language>en</language>
    <item>
      <title>The Cloud Resume Challenge - GCP</title>
      <dc:creator>Selmouni</dc:creator>
      <pubDate>Sun, 15 Oct 2023 01:30:14 +0000</pubDate>
      <link>https://dev.to/aselmouni/the-cloud-resume-challenge-gcp-26bj</link>
      <guid>https://dev.to/aselmouni/the-cloud-resume-challenge-gcp-26bj</guid>
      <description>&lt;p&gt;Explore my resume at &lt;a href="//www.challenge.selmouni.website"&gt;www.challenge.selmouni.website&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I recently completed the &lt;a href="https://cloudresumechallenge.dev/docs/the-challenge/googlecloud/"&gt;Cloud Resume Challenge on Google Cloud Platform (GCP)&lt;/a&gt;. The challenge is a project that involves building a personal resume website and deploying it using various GCP services like Cloud Storage, Cloud CDN, Cloud DNS, Cloud Firestore, Cloud Functions, Google Load Balancing, Terraform, and GitHub Actions. In this post I will share my experience of completing this challenge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Static Website Hosting - Cloud Storage
&lt;/h2&gt;

&lt;p&gt;The foundation of my project was hosting a static website on GCP's Cloud Storage. While I'm bad at web design, I modified &lt;a href="https://startbootstrap.com/theme/resume"&gt;this template&lt;/a&gt; to suit my needs.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EYrP-RhV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hndfhsu92vxq3ax813jl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EYrP-RhV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hndfhsu92vxq3ax813jl.png" alt="" width="406" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Visitors Counter - Cloud Functions
&lt;/h2&gt;

&lt;p&gt;To add a dynamic touch to my resume, the challenge suggested implementing a visitors counter (the best part so far). This involved a dance between JavaScript for the frontend, Firestore for data storage, and Cloud Functions for serverless magic.I crafted a Cloud Function to consistently update the visitors counter within the Firestore database upon each user's website visit, and then utilized JavaScript to showcase the current number of visitors.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Infrastructure as Code - Terraform
&lt;/h2&gt;

&lt;p&gt;To ensure reproducibility and scalability, I used Infrastructure as Code (IaC) with Terraform. I utilized Terraform to articulate the configurations for all the GCP services implemented in this project.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  CI/CD - GitHub Actions
&lt;/h2&gt;

&lt;p&gt;Creating CI/CD pipelines becomes a crucial part of the software industry as it automates builds, tests, and deployments. Therefore, I used GitHub Actions to handle these tasks for both the backend and frontend, ensuring automatic deployment of changes and the updating of Cloud Storage content with each push to my GitHub repository.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Terraform
&lt;/h3&gt;

&lt;p&gt;It was a good experience working with Terraform. I discovered the power of infrastructure as code to make projects clear, efficient, and scalable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Serverless Components
&lt;/h3&gt;

&lt;p&gt;The concept of serverless computing was initially unclear to me, &lt;br&gt;
 but implementing Cloud Function introduced me to the world of serverless architectures.&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub Actions (CI/CD)
&lt;/h3&gt;

&lt;p&gt;I had some experience using Jenkins for my CI/CD processes. Transitioning to GitHub Actions, I found the transition to be quite smooth.&lt;/p&gt;

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

&lt;p&gt;As I wrap up the Cloud Resume Challenge on GCP, I want to thank &lt;a href="https://forrestbrazeal.gumroad.com/"&gt;Forrest Brazeal&lt;/a&gt; for this wonderful challenge. This challenge provided me with valuable hands-on experience, and the journey was truly rewarding.&lt;/p&gt;

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

&lt;p&gt;I hope my experience encourages you to take on your own challenges. Feel free to explore my project repositories: &lt;br&gt;
-&lt;a href="https://github.com/Selmouni-Abdelilah/gcp-resume-challenge-frontend"&gt;Frontend&lt;/a&gt; &lt;br&gt;
-&lt;a href="https://github.com/Selmouni-Abdelilah/gcp-resume-challenge-backend"&gt;Backend&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
