<?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: Ibrahim Okić</title>
    <description>The latest articles on DEV Community by Ibrahim Okić (@kaizerpwn).</description>
    <link>https://dev.to/kaizerpwn</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%2F1452850%2F7a3c8107-c334-45d5-b251-be4615606a2d.jpeg</url>
      <title>DEV Community: Ibrahim Okić</title>
      <link>https://dev.to/kaizerpwn</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kaizerpwn"/>
    <language>en</language>
    <item>
      <title>🚀 Building Desktop Apps with Wails: A Go Developer's Perspective</title>
      <dc:creator>Ibrahim Okić</dc:creator>
      <pubDate>Tue, 11 Mar 2025 22:00:50 +0000</pubDate>
      <link>https://dev.to/kaizerpwn/building-desktop-apps-with-wails-a-go-developers-perspective-526p</link>
      <guid>https://dev.to/kaizerpwn/building-desktop-apps-with-wails-a-go-developers-perspective-526p</guid>
      <description>&lt;h2&gt;
  
  
  Why Wails? 🤔
&lt;/h2&gt;

&lt;p&gt;Wails is a lightweight and fast alternative to Electron for building desktop applications with Go. Unlike Electron, which embeds a full browser engine (and eats RAM like there's no tomorrow 🦖), Wails uses the WebView2, making it significantly more efficient. Here are some key features that make Wails stand out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Standard Go Backend – Write your backend logic in Go, keeping it clean and efficient.&lt;/li&gt;
&lt;li&gt;Flexible Frontend – Use any frontend framework you’re comfortable with, such as React, Vue, or Svelte.&lt;/li&gt;
&lt;li&gt;Pre-built Templates – Quickly scaffold projects with ready-to-use templates.&lt;/li&gt;
&lt;li&gt;Seamless Go-JavaScript Communication – Call Go methods directly from JavaScript.&lt;/li&gt;
&lt;li&gt;Auto-generated TypeScript Definitions – Type safety for Go structs and methods.&lt;/li&gt;
&lt;li&gt;Native Look and Feel – Support for native dialogs, menus, and dark/light mode. 🌗&lt;/li&gt;
&lt;li&gt;Modern UI Effects – Translucency and frosted glass effects. ✨&lt;/li&gt;
&lt;li&gt;Event-Driven System – Unified eventing between Go and JavaScript.&lt;/li&gt;
&lt;li&gt;Cross-Platform – Works on Windows, macOS, and Linux. 🖥️&lt;/li&gt;
&lt;li&gt;Efficient Rendering – Uses native rendering instead of an embedded browser.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My Experience with Wails v2 🎮
&lt;/h2&gt;

&lt;p&gt;I built a game launcher for a multiplayer server using Wails v2. The application allows players to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download game files 📥&lt;/li&gt;
&lt;li&gt;Manage mods 🔧&lt;/li&gt;
&lt;li&gt;View in-game profiles and notifications 🔔&lt;/li&gt;
&lt;li&gt;Check statistics (e.g., most active players, territory status) 📊&lt;/li&gt;
&lt;li&gt;Login, Register a new account and reset passwords 🔑&lt;/li&gt;
&lt;li&gt;Enable Discord Rich Presence 🟢&lt;/li&gt;
&lt;li&gt;Auto-install dependencies like Visual C++ Runtime and DirectX 9 🛠️&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;One of the coolest features I added was a self-updater. The launcher checks for the latest version, and if an update is available, a dialog prompts the user to update before proceeding. No more outdated versions floating around.&lt;/p&gt;

&lt;h2&gt;
  
  
  Development Challenges 😅
&lt;/h2&gt;

&lt;p&gt;While Wails offers a fantastic experience, it does have some limitations. The biggest issue I encountered was the lack of support for cookies, which I needed for authentication and authorization. I managed to work around this by using global window variables, but I hope the WebView2 team at Microsoft adds support for it soon. 🙏&lt;/p&gt;

&lt;h2&gt;
  
  
  Do I Recommend Wails? 💯
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Absolutely&lt;/strong&gt;. If you’re building a desktop app and want to avoid Electron’s resource-heavy approach (seriously, why does a simple app need 500MB of RAM? 🤯) or don’t want to struggle with Rust’s complexity in Tauri, Wails is a perfect choice. The developer experience is top-notch, and the performance is impressive.&lt;/p&gt;

&lt;p&gt;Wails proves that building desktop applications with Go doesn’t have to be complicated. It combines the power of Go with the flexibility of modern frontend technologies, making it an excellent tool for developers who want efficiency without sacrificing user experience.&lt;/p&gt;

&lt;p&gt;If you haven’t tried Wails yet, give it a shot—you won’t regret it and your RAM will thank you! 🖥️🔥&lt;/p&gt;

</description>
      <category>go</category>
      <category>react</category>
    </item>
    <item>
      <title>CI/CD Pipeline for a Next.js Application Using GitHub Actions, ArgoCD, and MicroK8s</title>
      <dc:creator>Ibrahim Okić</dc:creator>
      <pubDate>Tue, 03 Sep 2024 12:30:00 +0000</pubDate>
      <link>https://dev.to/kaizerpwn/cicd-pipeline-for-a-nextjs-application-using-github-actions-argocd-and-microk8s-7a4</link>
      <guid>https://dev.to/kaizerpwn/cicd-pipeline-for-a-nextjs-application-using-github-actions-argocd-and-microk8s-7a4</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fag1ez4w5gyxv44iowv5c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fag1ez4w5gyxv44iowv5c.png" alt="GitOps flow using GitHub Actions, ArgoCD and Microk8s"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗 Setting up GitHub Actions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.) Create a GitHub repository
&lt;/h3&gt;

&lt;p&gt;Alright, first things first—let’s create a GitHub repository to house your Next.js app. In my case, I named mine "netflix-next." 😉 Feel free to call yours whatever you want, but I highly recommend a name that inspires fear and respect in your fellow developers.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.) Create a GitHub repository named &lt;code&gt;infrastructure&lt;/code&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  3.) Inside it, create the following directories and files
&lt;/h3&gt;

&lt;p&gt;For reference, check my repositories: &lt;code&gt;https://github.com/kaizerpwn/netflix-next&lt;/code&gt; and &lt;code&gt;https://github.com/kaizerpwn/infrastructure&lt;/code&gt;):&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

k8s
-- netflix-next
---- deployment.yml
---- service.yml
---- ingress.yml


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

&lt;/div&gt;

&lt;p&gt;Here’s what each file does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;deployment.yml&lt;/strong&gt;: Defines the configuration for deploying your app’s Docker container, including the number of replicas and the image to use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;service.yml&lt;/strong&gt;: Sets up the networking layer for your app, ensuring that traffic is directed to the correct pods.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ingress.yml&lt;/strong&gt;: Manages external access to the services, routing HTTP/S traffic to the correct service endpoints.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The contents of these files are as follows:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;deployment.yml:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

apiVersion: apps/v1
kind: Deployment
metadata:
  name: netflix-next-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: netflix-next
  template:
    metadata:
      labels:
        app: netflix-next
    spec:
      containers:
        - name: netflix-next-container
          image: ghcr.io/&amp;lt;YOUR_GITHUB_USERNAME&amp;gt;/&amp;lt;YOUR_DOCKER_IMAGE_NAME&amp;gt;:e19d20e9df6de3f64f622c46c4f6315ce37b3097
          ports:
            - containerPort: 3000
      imagePullSecrets:
        - name: regcred



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

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;ingress.yml:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-staging
  name: netflix-next-ingress
  namespace: default
spec:
  ingressClassName: public
  rules:
    - host: netflix.kaizer.live
      http:
        paths:
          - path: /.well-known/acme-challenge/
            pathType: Prefix
            backend:
              service:
                name: cm-acme-http-solver-service
                port:
                  number: 80
          - path: /
            pathType: Prefix
            backend:
              service:
                name: netflix-next-service
                port:
                  number: 80
  tls:
    - hosts:
        - netflix.kaizer.live
      secretName: netflix-next-tls


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

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;service.yml:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

apiVersion: v1
kind: Service
metadata:
  name: netflix-next-service
spec:
  type: LoadBalancer
  selector:
    app: netflix-next
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  4.) Create a GitHub personal access token (shown in the video).
&lt;/h3&gt;

&lt;p&gt;To allow GitHub Actions to interact with your repositories, create a GitHub personal access token. This token will be used to authenticate the workflow when it pushes updates or checks out code.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/xWkdZ43SQ14"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
&lt;h3&gt;
  
  
  5.) Add the codespace secret to the &lt;code&gt;infrastructure&lt;/code&gt; repository (shown in the video).
&lt;/h3&gt;

&lt;p&gt;Add your personal access token as a secret to the infrastructure repository. This allows the GitHub Actions workflow to use it securely without exposing your credentials.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/0wOTmVMt6Q8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
&lt;h3&gt;
  
  
  6.) Add the actions secrets to the &lt;code&gt;netflix-next&lt;/code&gt; repository (shown in the video).
&lt;/h3&gt;

&lt;p&gt;Similarly, add necessary secrets to the netflix-next repository. These might include Docker registry credentials, API keys, or any other sensitive information your workflow needs.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Na2PjRPRzXo"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
&lt;h3&gt;
  
  
  7.) Once this is done, create a workflow file &lt;code&gt;pipeline.yml&lt;/code&gt; (shown in the video):
&lt;/h3&gt;

&lt;p&gt;Now, create a pipeline.yml file in the .github/workflows directory of your netflix-next repository. This file will define the CI/CD pipeline for your Next.js app:&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;pipeline.yml:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

name: CI/CD Pipeline for Next.js

on:
  push:
    branches: [ "main" ]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Source Code
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18.x'

      - name: Install Dependencies
        run: npm ci

      - name: Build Next.js App
        run: npm run build

      - name: Docker Login
        uses: docker/login-action@v2
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.PAT_TOKEN }}

      - name: Docker Build and Push
        id: build-push
        uses: docker/build-push-action@v3
        with:
          context: .
          file: ./Dockerfile
          push: true
          tags: |
            ghcr.io/&amp;lt;YOUR_USERNAME&amp;gt;/&amp;lt;YOUR_DOCKER_IMAGE_NAME&amp;gt;:${{ github.sha }}
            ghcr.io/&amp;lt;YOUR_USERNAME&amp;gt;/&amp;lt;YOUR_DOCKER_IMAGE_NAME&amp;gt;:latest

      - name: Get Docker Image Digest
        id: digest
        run: |
          IMAGE_DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' ghcr.io/&amp;lt;YOUR_USERNAME&amp;gt;/&amp;lt;YOUR_DOCKER_IMAGE_NAME&amp;gt;:${{ github.sha }})
          echo "IMAGE_DIGEST=$IMAGE_DIGEST" &amp;gt;&amp;gt; $GITHUB_ENV

      - name: Checkout Infra Repository
        uses: actions/checkout@v4
        with:
          repository: &amp;lt;YOUR_USERNAME&amp;gt;/infrastructure
          ref: 'main'
          token: ${{ secrets.INFRASTRUCTURE_TOKEN }}
          path: infrastructure

      - name: Verify File Presence
        run: |
          echo "Checking file presence:"
          ls -la infrastructure/k8s/&amp;lt;YOUR_REPOSITORY&amp;gt;/
          cat infrastructure/k8s/&amp;lt;YOUR_REPOSITORY&amp;gt;/deployment.yml

      - name: Update Deployment Manifest
        run: |
          echo "Updating deployment manifest:"
          # Print the file content before changes
          echo "Before update:"
          cat infrastructure/k8s/&amp;lt;YOUR_REPOSITORY&amp;gt;/deployment.yml

          # Update the image tag in the deployment manifest with the digest
          sed -i "s|image: ghcr.io/&amp;lt;YOUR_USERNAME&amp;gt;/&amp;lt;YOUR_DOCKER_IMAGE_NAME&amp;gt;:.*|image: ghcr.io/&amp;lt;YOUR_USERNAME&amp;gt;/&amp;lt;YOUR_DOCKER_IMAGE_NAME&amp;gt;:${{ github.sha }}|g" infrastructure/k8s/&amp;lt;YOUR_REPOSITORY&amp;gt;/deployment.yml

          # Print the file content after changes
          echo "After update:"
          cat infrastructure/k8s/&amp;lt;YOUR_REPOSITORY&amp;gt;/deployment.yml

      - name: Stage and Commit Changes
        run: |
          cd infrastructure
          git config user.name "GitHub Actions Bot"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git add k8s/&amp;lt;YOUR_REPOSITORY&amp;gt;/deployment.yml
          # Verify the staging
          git status
          # Commit and push changes if there are modifications
          if git diff --cached --quiet; then
            echo "No changes to commit"
          else
            git commit -m "Update image to version ${{ github.sha }}"
            git push origin main
          fi


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  8.) After committing this file, the first build will start. Click on the Actions tab and wait for it to run.
&lt;/h3&gt;

&lt;p&gt;If everything is correct, the build will be green 🌿, and in the &lt;code&gt;infrastructure&lt;/code&gt; repository, the GitHub Actions bot will automatically update the image tag in the deployment.yml, so you can check that. After these steps, we have completed everything related to GitHub. &lt;/p&gt;

&lt;p&gt;We can now move on to the &lt;strong&gt;server part&lt;/strong&gt;. Also, if you wish, you can add more pipelines, e.g., one for staging environment and another for production, etc.&lt;/p&gt;
&lt;h2&gt;
  
  
  ⚙ MicroK8s Installation and Configuration Guide
&lt;/h2&gt;

&lt;p&gt;Now I will provide a step-by-step guide to installing MicroK8s, enabling essential services, and setting up Argo CD on your Kubernetes cluster.&lt;/p&gt;
&lt;h3&gt;
  
  
  1.) Install MicroK8s
&lt;/h3&gt;

&lt;p&gt;To get started, you need to install MicroK8s using snapd. Run the following commands in your terminal:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo apt install snapd
sudo snap install microk8s --classic


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  2.) Enable Required Services
&lt;/h3&gt;

&lt;p&gt;After installing MicroK8s, you need to enable several essential services to ensure your cluster is fully functional. The following commands will enable DNS, storage, registry, MetalLB (Load Balancer), hostpath storage, Ingress, Dashboard, Cert Manager, and MinIO:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

microk8s enable dns
microk8s enable storage # (optional)
microk8s enable registry
microk8s enable metallb # Load balancer
microk8s enable hostpath-storage # (optional)
microk8s enable cert-manager # Certificate manager
microk8s enable dashboard # Kubernetes dashboard (optional)
microk8s enable ingress # Routing rules manager
microk8s enable minio # Object storage S3 service - like Amazon S3 (optional)


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  3.) Install Argo CD
&lt;/h3&gt;

&lt;p&gt;To deploy Argo CD as a service, follow these steps. Ensure you check for the latest version of Argo CD before applying the command:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

microk8s.kubectl create namespace argocd
microk8s.kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.12.3/manifests/install.yaml


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  4.) Expose Argo CD on an External Port
&lt;/h3&gt;

&lt;p&gt;To expose Argo CD on an external port, you have two options. You can either change the Service type to NodePort or LoadBalancer.&lt;/p&gt;
&lt;h5&gt;
  
  
  Method 1: Using NodePort
&lt;/h5&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

microk8s.kubectl edit svc argocd-server -n argocd


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

&lt;/div&gt;

&lt;p&gt;Change the spec.type from ClusterIP to NodePort:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

spec:
  type: NodePort

ports:
  - name: http
    port: 80
    targetPort: 8080
    nodePort: 32080  # Choose any port within the valid NodePort range (30000-32767)
  - name: https
    port: 443
    targetPort: 8443
    nodePort: 32443  # Choose any port within the valid NodePort range (30000-32767)


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

&lt;/div&gt;
&lt;h5&gt;
  
  
  Method 2: Using LoadBalancer
&lt;/h5&gt;

&lt;p&gt;Alternatively, change the spec.type to LoadBalancer if you have MetalLB or other LoadBalancer service:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

spec:
  type: LoadBalancer


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  5.) Retrieve the Initial Argo CD Admin Password
&lt;/h3&gt;

&lt;p&gt;To obtain the initial password for logging into the Argo CD dashboard (the username is admin), run the following command:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

microk8s.kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d


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

&lt;/div&gt;

&lt;p&gt;Copy the output and use it to log in to the Argo CD dashboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.) Create a Docker Registry Secret
&lt;/h3&gt;

&lt;p&gt;To create a Docker registry secret for accessing private Docker images (e.g., from GitHub Container Registry), use the following command. Replace GITHUB_USERNAME, GITHUB_PERSONAL_ACCESS_TOKEN, and GITHUB_EMAIL with your GitHub credentials:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

microk8s.kubectl create secret docker-registry regcred \
  --docker-server=ghcr.io \
  --docker-username="GITHUB_USERNAME" \
  --docker-password="GITHUB_PERSONAL_ACCESS_TOKEN" \
  --docker-email="GITHUB_EMAIL" \
  -n default


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

&lt;/div&gt;

&lt;p&gt;By following these steps, you will have a fully configured MicroK8s cluster with essential services and Argo CD ready for use. Make sure to replace placeholders with your actual information when creating secrets or applying configuration changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.) Access the ArgoCD on the web
&lt;/h3&gt;

&lt;p&gt;To check the port on which ArgoCD is running, use the following command:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

microk8s kubectl get svc -n argocd


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

&lt;/div&gt;

&lt;p&gt;You will get output like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

argocd-applicationset-controller          ClusterIP      10.152.183.42    &amp;lt;none&amp;gt;         7000/TCP,8080/TCP            5d19h
argocd-dex-server                         ClusterIP      10.152.183.120   &amp;lt;none&amp;gt;         5556/TCP,5557/TCP,5558/TCP   5d19h
argocd-metrics                            ClusterIP      10.152.183.249   &amp;lt;none&amp;gt;         8082/TCP                     5d19h
argocd-notifications-controller-metrics   ClusterIP      10.152.183.122   &amp;lt;none&amp;gt;         9001/TCP                     5d19h
argocd-redis                              ClusterIP      10.152.183.218   &amp;lt;none&amp;gt;         6379/TCP                     5d19h
argocd-repo-server                        ClusterIP      10.152.183.25    &amp;lt;none&amp;gt;         8081/TCP,8084/TCP            5d19h
argocd-server                             LoadBalancer   10.152.183.26    10.64.140.43   80:32092/TCP,443:31217/TCP   5d19h
argocd-server-metrics                     ClusterIP      10.152.183.202   &amp;lt;none&amp;gt;         8083/TCP                     5d19h


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

&lt;/div&gt;

&lt;p&gt;You can now access ArgoCD in your web browser using &lt;a href="http://YOUR_SERVER_IP:31217/" rel="noopener noreferrer"&gt;http://YOUR_SERVER_IP:31217/&lt;/a&gt; or the port that was displayed in the output specific to your setup. &lt;/p&gt;

&lt;p&gt;Username: &lt;code&gt;admin&lt;/code&gt;&lt;br&gt;
Password: &lt;code&gt;The password is provided in the output of step 5.&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  8.) Connect repository with ArgoCD
&lt;/h3&gt;

&lt;p&gt;To connect your repository with ArgoCD follow steps shown in the video: &lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/kku3FdMovws"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  9.) Create and deploy new application
&lt;/h3&gt;

&lt;p&gt;Finally, create and deploy your app using ArgoCD. Follow the steps in the video, and watch as your app springs to life like a phoenix from the ashes—or, you know, like an app from the cloud. &lt;/p&gt;

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

&lt;p&gt;By the end of this adventure, you'll have a fully configured MicroK8s cluster, with all the bells and whistles, ready to handle whatever you throw at it.&lt;/p&gt;

&lt;p&gt;Happy coding, and may your builds be ever green! 🌿&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>selfhosted</category>
      <category>argocd</category>
      <category>gitops</category>
    </item>
  </channel>
</rss>
