<?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: Paschal Kenechukwu Oruche</title>
    <description>The latest articles on DEV Community by Paschal Kenechukwu Oruche (@oruchepaschal).</description>
    <link>https://dev.to/oruchepaschal</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%2F911210%2F7328a2c2-57e1-4c82-83e6-f30a5ceda404.jpeg</url>
      <title>DEV Community: Paschal Kenechukwu Oruche</title>
      <link>https://dev.to/oruchepaschal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/oruchepaschal"/>
    <language>en</language>
    <item>
      <title>Overcoming Terraform Deployment Challenges: How to fix authorization issues using Service Principal on Azure Cloud</title>
      <dc:creator>Paschal Kenechukwu Oruche</dc:creator>
      <pubDate>Sat, 26 Aug 2023 09:10:38 +0000</pubDate>
      <link>https://dev.to/oruchepaschal/overcoming-terraform-deployment-challenges-how-to-fix-authorization-issues-using-service-principal-on-azure-cloud-428h</link>
      <guid>https://dev.to/oruchepaschal/overcoming-terraform-deployment-challenges-how-to-fix-authorization-issues-using-service-principal-on-azure-cloud-428h</guid>
      <description>&lt;p&gt;In my opinion, Terraform is one of the most powerful tools for automating resource deployment. However, even with the right permissions and configurations, there will always be challenges that you will have to overcome. The author describes her triumphant experience provisioning Azure resources with Terraform, overcoming perplexing errors and roadblocks.&lt;/p&gt;

&lt;h4&gt;
  
  
  Before I go into details about the issues I faced and what worked, here is a short overview of Terraform's use for provisioning Azure VMs
&lt;/h4&gt;

&lt;p&gt;(you can view this detailed, low-level example at &lt;a href="https://learn.microsoft.com/en-us/azure/virtual-machines/windows/quick-create-terraform):"&gt;https://learn.microsoft.com/en-us/azure/virtual-machines/windows/quick-create-terraform):&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Install Terraform on your local PC by downloading the binary from the official Terraform website.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create an Azure account if you haven't already done so, and then create a service principal with contributor access. You can use this service principal to authenticate Terraform with Azure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a directory for your Terraform files and initialize it with the Azure provider. You can do this by running terraform init in the directory and specifying the Azure provider.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a Terraform configuration file (usually named main.tf) that defines the resources you want to provision. For example, you can define an Azure VM and an Azure Blob Storage resource.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run terraform plan to preview the changes that Terraform will make to your Azure resources. This step is optional but highly recommended as it can help you catch any potential issues before making any changes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run terraform apply to apply the changes to your Azure resources. Terraform will prompt you to confirm the changes before proceeding.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally, manage your Azure resources going forward, you can use Terraform to update, delete or add new resources.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Back to the main challenge!
&lt;/h3&gt;

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

&lt;p&gt;My sole purpose was to provision Azure resources using Terraform. Despite having a well-configured service principal with the appropriate permissions, Hmm! My expectations of it going so smoothly came short. Attempts to log in with both the service principal and Az Login methods only compounded the problem, yielding errors that seemed to have a false positive (so to speak). In an attempt to resolve this issue, I engaged Microsoft's support, tweaking permissions and meticulously reviewing configurations, but to no avail.&lt;/p&gt;

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

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

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

&lt;p&gt;The breakthrough came unexpectedly when, out of sheer determination, I decided to switch to the root Azure account and opted for Az Login. And just like that, Terraform began to cooperate. &lt;/p&gt;

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

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

&lt;p&gt;This unconventional approach revealed the complexity of interactions between Terraform, Azure, and authentication methods, which provided the solution. In addition to emphasizing the importance of adaptability and creativity in problem-solving, this experience also emphasizes that it is sometimes possible to reach the desired destination by taking an alternative path.&lt;/p&gt;

&lt;p&gt;Well, this is obviously not the best approach and practice I'd adopt going forward, but documenting this here may help someone tomorrow. I believe success often comes when we approach obstacles with an open mind and a willingness to explore unconventional solutions.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>terraform</category>
      <category>azure</category>
      <category>error403</category>
    </item>
    <item>
      <title>How to completely uninstall MongoDB from your Ubuntu machine by following these steps</title>
      <dc:creator>Paschal Kenechukwu Oruche</dc:creator>
      <pubDate>Sun, 13 Aug 2023 10:27:24 +0000</pubDate>
      <link>https://dev.to/oruchepaschal/how-to-completely-uninstall-mongodb-from-your-ubuntu-machine-by-following-these-steps-2di0</link>
      <guid>https://dev.to/oruchepaschal/how-to-completely-uninstall-mongodb-from-your-ubuntu-machine-by-following-these-steps-2di0</guid>
      <description>&lt;p&gt;When it comes to databases MongoDB has established itself as a data storage solution. However there may be instances where you need to remove MongoDB from your Ubuntu machine. Whether you're transitioning to a database system or experiencing difficulties, with your MongoDB setup it's important to ensure a thorough uninstallation to avoid lingering problems.&lt;/p&gt;

&lt;p&gt;Incomplete uninstalls can cause issues, including wasted disk space and conflicts with software. They can also make it challenging to reinstall MongoDB or another database system in the future. If your aim is to perform an uninstallation it's crucial to do it. This article will provide you with step by step instructions on how to remove MongoDB from your Ubuntu machine guaranteeing a start for your upcoming database endeavors.&lt;/p&gt;

&lt;p&gt;Within this article, I'll be offering you a guide, on bidding farewell to MongoDB on your Ubuntu machine in the efficient and hassle free manner possible. &lt;/p&gt;

&lt;p&gt;PS: After this, you can always install a different version or fresh copy, if you like.&lt;/p&gt;

&lt;p&gt;Steps 👇🏽👇🏽👇🏽&lt;/p&gt;

&lt;p&gt;Before uninstalling MongoDB ensure that the MongoDB service is stopped if it is currently running. You can achieve this by executing the command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo systemctl stop mongod&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
remove the MongoDB packages by utilizing the package manager (apt):&lt;br&gt;
&lt;code&gt;sudo apt remove mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-mongos mongodb-org-tools&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now, go ahead to remove any remaining configuration files and dependencies. Use the apt purge command to remove the MongoDB packages:&lt;/p&gt;

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

sudo apt purge mongodb-org
sudo apt purge mongodb-clients mongodb-org-database mongodb-org-server
sudo apt purge mongodb-database-tools


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

&lt;/div&gt;

&lt;p&gt;If you want to completely remove all data and log files associated with MongoDB, you can remove the MongoDB data directory:&lt;br&gt;
&lt;code&gt;sudo rm -r /var/lib/mongodb&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
_-Be cautious with this step, as it will permanently delete your MongoDB data.&lt;br&gt;
_&lt;br&gt;
You can also remove the MongoDB user and group if you no longer need them, This is an optional step, if you decide to make use these elements:&lt;/p&gt;

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

sudo deluser mongodb
sudo delgroup mongodb


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

&lt;/div&gt;

&lt;p&gt;Remove any remaining MongoDB configuration files:&lt;br&gt;
&lt;code&gt;sudo rm /etc/mongod.conf&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Take out any MongoDB ordinary commands and shell scripts:&lt;/p&gt;

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

cd /usr/bin
rm -r mongo*
ls


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

&lt;/div&gt;

&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%2F8ywlr8zoz356yo4u5zvg.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%2F8ywlr8zoz356yo4u5zvg.png" alt="confirming removal of any Mongo shell scripts in your Linux Bin"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cleanup your dependencies by updating the package list and remove any leftover packages that were dependencies of MongoDB:&lt;br&gt;
&lt;code&gt;sudo apt autoremove&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Confirm that MongoDB has been removed:&lt;br&gt;
&lt;code&gt;dpkg -l | grep mongodb&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Good luck ✨✨✨&lt;/p&gt;

</description>
      <category>mongodb</category>
      <category>ubuntu</category>
      <category>devops</category>
    </item>
    <item>
      <title>Data Migration from MongoDB to Azure Cosmos DB</title>
      <dc:creator>Paschal Kenechukwu Oruche</dc:creator>
      <pubDate>Sat, 22 Jul 2023 18:05:44 +0000</pubDate>
      <link>https://dev.to/oruchepaschal/data-migration-from-mongodb-to-azure-cosmos-db-2k1j</link>
      <guid>https://dev.to/oruchepaschal/data-migration-from-mongodb-to-azure-cosmos-db-2k1j</guid>
      <description>&lt;p&gt;In today's piece, I'll be exposing to &lt;strong&gt;you&lt;/strong&gt;, the process that was implemented to migrate data from a MongoDB Cloud cluster to Azure CosmosDB for MongoDB. Although, before we begin to churn out the detailed steps and commands, let's expand a bit on the major elements of this write up. &lt;em&gt;*&lt;em&gt;What really is Azure CosmosDB? *&lt;/em&gt;&lt;/em&gt;&lt;/p&gt;

&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%2Fj6t4ajzqs684uu8wjw6o.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%2Fj6t4ajzqs684uu8wjw6o.png" alt="Microsoft Azure Cosmos DB"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Curled from Microsoft Learn&lt;/em&gt;, Azure Cosmos DB is a fully managed NoSQL and relational database for modern app development. Azure Cosmos DB offers single-digit millisecond response times, automatic and instant scalability, along with guaranteed speed at any scale. To the best of my understanding, AZ Cosmos DB features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NoSQL&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;Apache&lt;/li&gt;
&lt;li&gt;Cassandra&lt;/li&gt;
&lt;li&gt;Apache Gremlin&lt;/li&gt;
&lt;li&gt;Table&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are a couple of other resources, we can look up to gain further insights on these Database technologies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is MongoDB?&lt;/strong&gt;&lt;br&gt;
MongoDB is a popular open-source, NoSQL database that falls under the category of document-oriented databases. It was developed by MongoDB Inc. and is designed to handle large volumes of data, making it suitable for modern applications that require flexible and scalable storage solutions.&lt;/p&gt;

&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%2F3live9l6hwxhnax35pbh.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%2F3live9l6hwxhnax35pbh.png" alt="Mongo DB"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Let's get started, shall we!&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Pre-requisite:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;MongoDB Database up and running &lt;/li&gt;
&lt;li&gt;CosmosDB Database up and running 
Requirements:&lt;/li&gt;
&lt;li&gt;MongoDB connection string &lt;/li&gt;
&lt;li&gt;CosmosDB for MongoDB connection string 
 
&lt;strong&gt;Step 1&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Set up Azure Cosmos DB: Create an Azure Cosmos DB account with the MongoDB API in your Azure subscription. &lt;br&gt;
Note down the connection string for your Azure Cosmos DB account.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Export Data from MongoDB Atlas: Export the data from your MongoDB Atlas cluster using the available tools and methods. &lt;br&gt;
MongoDB provides several options for exporting data, including the mongodump command-line tool, mongoexport utility, or MongoDB Compass. mongodump command was used.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open &lt;strong&gt;powershell&lt;/strong&gt; and run the &lt;strong&gt;mongodump&lt;/strong&gt; command, mongodb will export the data from the database and store it in local machine. Command below:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mongodump --uri=&amp;lt;Atlas_Connection_String&amp;gt; --out=&amp;lt;Output_Directory&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: Remember to replace  with the connection string of MongoDB Atlas cluster, and replace  with the path where you want to save the exported data&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After exporting data from MongoDB to local machine, migrate the data to Azure CosmosDB for MongoDB using the &lt;strong&gt;mongorestore&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Prepare the backup: Ensure that you have a backup of your MongoDB data created using mongodump. The backup should be in a directory containing the BSON files and metadata.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Run &lt;strong&gt;mongorestore&lt;/strong&gt; &lt;br&gt;
Two methods:&lt;br&gt;
A) &lt;br&gt;
&lt;code&gt;mongorestore --host &amp;lt;hostname&amp;gt; --port &amp;lt;port&amp;gt; --username &amp;lt;username&amp;gt; --password &amp;lt;password&amp;gt; --authenticationDatabase &amp;lt;authDatabase&amp;gt; &amp;lt;backup_directory_path&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;B) &lt;br&gt;
&lt;code&gt;mongorestore --uri &amp;lt;connection_uri&amp;gt; &amp;lt;backup_directory_path&amp;gt; -d mydb&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Using method B, run the command below replacing the placeholders:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mongorestore --uri "mongodb://username:password@localhost:27017/" /path/to/backup -d mydb&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Wait for &lt;strong&gt;mongorestore&lt;/strong&gt; to complete the data restoration process. The time required will be depending on the size of the data and the server’s performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Verify the data by connecting to the Azure CosmosDB for MongoDB and perform queries or checks on the restored database&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now, connect your application to use the Azure CosmosDB for MongoDB connection string .&lt;/p&gt;

&lt;p&gt;🫵&lt;/p&gt;

</description>
      <category>mongodb</category>
      <category>azure</category>
      <category>cosmosdb</category>
      <category>thedevopsguy</category>
    </item>
    <item>
      <title>Secure Your Applications with SSL: Installing SSL Certificates for Multiple Server Blocks on Ubuntu with Nginx</title>
      <dc:creator>Paschal Kenechukwu Oruche</dc:creator>
      <pubDate>Sat, 15 Jul 2023 09:52:26 +0000</pubDate>
      <link>https://dev.to/oruchepaschal/secure-your-applications-with-ssl-installing-ssl-certificates-for-multiple-server-blocks-on-ubuntu-with-nginx-1hmp</link>
      <guid>https://dev.to/oruchepaschal/secure-your-applications-with-ssl-installing-ssl-certificates-for-multiple-server-blocks-on-ubuntu-with-nginx-1hmp</guid>
      <description>&lt;p&gt;Using SSL (Secure Sockets Layer) certificates to secure your web apps/services is essential in the modern digital environment to safeguard sensitive data and maintain user confidence. This article will walk you through the process of installing SSL certificates for each application using distinct server blocks if you're running numerous applications on an Ubuntu server configures with Nginx.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;System package updates&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
On Ubuntu computers, this is a recommended procedure. &lt;br&gt;
Run the following commands to verify that your system is up to date:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update
sudo apt upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;*&lt;em&gt;Configure the Certbot Nginx Plugin&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Now, use the Certbot and the Nginx plugin to streamline the SSL certificate installation process. Use the following command to install the Certbot Nginx plugin:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt install python3-certbot-nginx&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;*&lt;em&gt;Configure Nginx Server Blocks&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Assuming you have already set up your server blocks for each application in the Nginx configuration directory (usually located at /etc/nginx/sites-available/), make sure you have the necessary server blocks for your applications. Each server block should define the server name, port, root directory, and other relevant configuration options.&lt;br&gt;
&lt;em&gt;PS: I've already done this; I may just churn out another article for this process&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Obtain SSL certificates&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Let's use the Certbot Nginx plugin to get SSL certificates for each of your applications right away. Run the following command, substituting your real domain names for example.com:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo certbot --nginx -d example1.com -d www.example2.com&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Note: This command will automatically detect your Nginx server blocks and configure SSL certificates for each domain.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Test to Obtain SSL Certificates Renewal of SSL Certificate&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
In order to guarantee that your SSL certificates are always current, Certbot offers an auto-renewal feature. Use the next command to test the renewal procedure:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo certbot renew --dry-run&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;Note: You must get a successful test renewal log like this to be sure the periodic renewal will work for you.&lt;/p&gt;

&lt;p&gt;At this stage, you should receive a confirmation email from &lt;strong&gt;Certbot&lt;/strong&gt; on the email address you specified for receiving updates for renewals and security notices.&lt;/p&gt;

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

&lt;p&gt;*&lt;em&gt;Possible blockers:&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
You might get an error response when you try to obtain the certificates using certbot if you install using this command: &lt;code&gt;sudo apt install certbot&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;_Error response:&lt;br&gt;
_Saving debug log to /var/log/letsencrypt/letsencrypt.log&lt;br&gt;
The requested nginx plugin does not appear to be installed&lt;/p&gt;

&lt;p&gt;To fix this, use the command on the step for configure the Certbot Nginx Plugin stated previously&lt;/p&gt;

</description>
      <category>ssl</category>
      <category>nginx</category>
      <category>certbot</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>Putting an End to the Continuous Node Process Spawning on Port 3000: A Step-by-Step Fix</title>
      <dc:creator>Paschal Kenechukwu Oruche</dc:creator>
      <pubDate>Wed, 07 Jun 2023 15:00:15 +0000</pubDate>
      <link>https://dev.to/oruchepaschal/putting-an-end-to-the-continuous-node-process-spawning-on-port-3000-a-step-by-step-fix-gjn</link>
      <guid>https://dev.to/oruchepaschal/putting-an-end-to-the-continuous-node-process-spawning-on-port-3000-a-step-by-step-fix-gjn</guid>
      <description>&lt;p&gt;In the world of software development, encountering unexpected issues and errors is all too common. Recently, I found myself in a frustrating predicament with a persistent problem: port 3000 continuously spawning a new Node process every time I attempted to terminate it. This issue arose while working on our sandbox server, specifically when I was containerizing the frontend application using Docker. &lt;/p&gt;

&lt;p&gt;In this article, I will be sharing my journey of troubleshooting this problem, providing insights into the error messages encountered and the various attempts made to rectify the situation. &lt;/p&gt;

&lt;p&gt;Join me as I delve into the steps taken to finally fix the persistent port 3000 issue and regain control over the process management.&lt;/p&gt;

&lt;p&gt;So I SSHed into the server to containerize the frontend app on the Sandbox branch(SCM) using docker. The container will also utilize port 3000, and I only discovered this issue when I tried running the container.&lt;/p&gt;

&lt;p&gt;The error message that kept coming was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker: Error response from daemon: driver failed programming external connectivity 
on endpoint chronicle-interface-sandbox 
(fc5d353d06147d84888ffa88ace289e767f7fecf6ce4890cacc6870618a3a07d): 
Error starting userland proxy: listen tcp4 0.0.0.0:300
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also, when I run the command&lt;br&gt;
&lt;code&gt;npm run dev&lt;/code&gt;&lt;br&gt;
on the public folder, it also gave the output below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; dev 
&amp;gt; next dev -H 0.0.0.0 -p 3000  
Port 3000 is already in use.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So, I tried the following ways to fix it,&lt;/p&gt;

&lt;p&gt;Check the processes running the port 3000&lt;/p&gt;

&lt;p&gt;&lt;code&gt;lsof -i :3000&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I Identified the process IDs and kill them,&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kill &amp;lt;PID&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Each time I kill a process, another spins up with another ID.&lt;/p&gt;

&lt;p&gt;I also tried to stop the Node.js process directly without needing the PID&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pkill -f "node.*3000"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It still didn’t fix the issue.&lt;/p&gt;

&lt;p&gt;The final thing I did was to restart the Azure VM, and this fixed it:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo shutdown -r now&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Note: You can restart the server from the Azure portal as well, and once the server is back online, you will need to SSH into it again to access and continue your work.&lt;/p&gt;

</description>
      <category>port3000</category>
      <category>node</category>
      <category>ubuntu</category>
      <category>azure</category>
    </item>
    <item>
      <title>How to provision and configure a Linux VM using Azure CLI</title>
      <dc:creator>Paschal Kenechukwu Oruche</dc:creator>
      <pubDate>Sat, 20 May 2023 06:38:38 +0000</pubDate>
      <link>https://dev.to/oruchepaschal/how-to-provision-and-configure-a-linux-vm-using-azure-cli-2kbg</link>
      <guid>https://dev.to/oruchepaschal/how-to-provision-and-configure-a-linux-vm-using-azure-cli-2kbg</guid>
      <description>&lt;p&gt;Whether you're a seasoned DevOps pro or just getting started on your cloud journey, exploring the wonders of the cloud using a command line interface is fulfilling. It can not be overemphasized that one of the frequent expectations of a Cloud/DevOps engineer is to provision resources in the cloud efficiently.&lt;/p&gt;

&lt;p&gt;In this piece, we'll explore how we can leverage the Azure CLI to provision resources in the cloud, with a specific focus on creating and configuring a Linux virtual machine (VM).&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Rudiments /Requirements:&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Before getting started, ensure that you have the following prerequisites in place:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;An Azure subscription&lt;/li&gt;
&lt;li&gt;Azure CLI installed on your local machine&lt;/li&gt;
&lt;li&gt;Basic knowledge of the Linux operating system&lt;/li&gt;
&lt;li&gt;Basic knowledge of Bash scripting&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Device your environment variables
&lt;/h4&gt;

&lt;p&gt;I'm using a Mac for this, so I'll define mine in my ~/.bashrc file located in my home direcroty.&lt;/p&gt;

&lt;p&gt;$RESOURCE_GROUP_NAME&lt;br&gt;
$LOCATION&lt;br&gt;
$VM_NAME&lt;br&gt;
$VM_IMAGE&lt;br&gt;
$ADMIN_USERNAME&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ouGh9-ur--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8qndh9k89erdpdzpeh0h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ouGh9-ur--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8qndh9k89erdpdzpeh0h.png" alt="Env vars for Vm provisioning" width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We need to run the below command to persist the env vars in our shell&lt;/p&gt;

&lt;p&gt;&lt;code&gt;source ~/.bashrc&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Login to Azure CLI
&lt;/h4&gt;

&lt;p&gt;open your terminal or command prompt and enter command below:&lt;br&gt;
&lt;code&gt;az login&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
or&lt;br&gt;
&lt;code&gt;az login --use-device-code&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Now, proceed to provision the Azure VM using CLI
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;az vm create \&lt;br&gt;
  --resource-group $RESOURCE_GROUP_NAME \&lt;br&gt;
  --name $VM_NAME \&lt;br&gt;
  --image $VM_IMAGE \&lt;br&gt;
  --admin-username $ADMIN_USERNAME \&lt;br&gt;
  --generate-ssh-keys \&lt;br&gt;
  --public-ip-sku Standard&lt;/code&gt;&lt;/p&gt;

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

&lt;h4&gt;
  
  
  Install Nginx server on newly provisioned vm:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;az vm run-command invoke \
   --resource-group $RESOURCE_GROUP_NAME \
   --name $VM_NAME \
   --command-id RunShellScript \
   --scripts "sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install -y nginx"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;h4&gt;
  
  
  Start the Nginx web server
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;az vm run-command invoke \
   --resource-group $RESOURCE_GROUP_NAME \
   --name $VM_NAME \
   --command-id RunShellScript \
   --scripts "sudo systemctl start nginx”
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Expose HTTP port for web traffic:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;az vm open-port --port 80 --resource-group $RESOURCE_GROUP_NAME --name $VM_NAME
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;h4&gt;
  
  
  Expose HTTPS port for encrypted web traffic:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;az vm open-port --port 443 --resource-group $RESOURCE_GROUP_NAME --name $VM_NAME
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At this point, I had a blocker whilst trying to run the command to allow HTTPS traffic, I was able to overcome it using the method below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blocker:
&lt;/h2&gt;

&lt;p&gt;_&amp;gt; (SecurityRuleConflict) Security rule open-port-80 conflicts with rule open-port-443. Rules cannot have the same Priority and Direction. To learn more, see aka.ms/nsgrules.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Code: SecurityRuleConflict&lt;br&gt;
Message: Security rule open-port-80 conflicts with rule open-port-443. Rules cannot have the same Priority and Direction. To learn more, see aka.ms/nsgrules._&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Solution
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;az vm open-port --resource-group $RESOURCE_GROUP_NAME --name $VM_NAME --port 443 --priority 940
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;h4&gt;
  
  
  Summary
&lt;/h4&gt;

&lt;p&gt;we explored how to provision and configure a Linux VM using Azure CLI. We covered the steps from logging in to Azure CLI, creating a resource group, provisioning the VM, connecting to it via SSH, and performing Linux-specific configurations. With Azure CLI's powerful commands, managing and deploying Linux VMs on Azure becomes straightforward.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The End!!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>azuredevops</category>
      <category>bashscripting</category>
      <category>linux</category>
      <category>virtualmachine</category>
    </item>
    <item>
      <title>In the Service of Humanity - An Anecdote by Paschal Kenechukwu Oruche</title>
      <dc:creator>Paschal Kenechukwu Oruche</dc:creator>
      <pubDate>Sun, 30 Apr 2023 14:32:58 +0000</pubDate>
      <link>https://dev.to/oruchepaschal/in-the-service-of-humanity-an-anecdote-by-paschal-kenechukwu-oruche-2b00</link>
      <guid>https://dev.to/oruchepaschal/in-the-service-of-humanity-an-anecdote-by-paschal-kenechukwu-oruche-2b00</guid>
      <description>&lt;p&gt;I know this is where I write about technical stuff, however, just decided to unconventionally publish this on here.&lt;/p&gt;

&lt;p&gt;Volunteering and community service have been an integral part of my life. With a passion for serving my community and improving the lives of those around me, I have dedicated my time and skills to several organizations over the years.&lt;/p&gt;

&lt;p&gt;One of my earliest experiences with volunteering was during my time as the Vice President of Rotaract Wisconsin International University College, Ghana; As a member of the Rotaract club of WIUC sponsored by the Rotary club of Accra East under District 9102, I served on several ad-hoc committees, contributing to the eradication of the Polio endemic and raising autism awareness. I also engineered a signature project, "The First-Ever WIUC Hackathon," aimed at promoting basic education and literacy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WcaaqmlJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ux0nz1xwg96ars7y2cyf.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WcaaqmlJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ux0nz1xwg96ars7y2cyf.jpeg" alt="WIUC Code Fair - Hackathon" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My commitment to community service continued during my National Youth Service Corps year, where I served as IT &amp;amp; Education, CDS President. With a creative approach towards community development service, myself and my team implemented three out of five service projects, including outreach and sensitization on youth inclusion in societal development. I also oversaw the conduct of the 2019 general elections for registered voters at my assigned Polling unit (on of the polling units in Lagos-Mainland) as the Presiding Officer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--60ATqvqu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bdahs777k81vmq7wk40j.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--60ATqvqu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bdahs777k81vmq7wk40j.JPG" alt="NYSC 2018-2019" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SoXlBpLl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1taz5sgn59m4pqyo8g8b.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SoXlBpLl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1taz5sgn59m4pqyo8g8b.JPG" alt="Image description" width="703" height="1080"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's worth mentioning that my experience in volunteering has not been limited to my home country, Nigeria. I'm also serving as the Lead Web Developer at Positive Planet US (promoting inclusive and sustainable economic growth, employment and decent work for all), an international organization based in the United States. In this role, I collaborate with creative designers, content creators, business strategists, the PR team, and other developers to maintain, expand, and scale Positive Planet US's website.&lt;/p&gt;

&lt;p&gt;As an Executive Board Member and Public Relations Officer of ADVISE Volunteer Ghana, I served as the mouthpiece of the organization to the public, disseminating information within and outside the organization, notifying members of meetings, and negotiating terms for the organization with other entities.&lt;/p&gt;

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

&lt;p&gt;My dedication to community service extends to my work as Lead Tech Officer at TechSAH - Technological Support for Aiding Humanity, where I built the MVP (a platform for connecting the most vulnerable individuals in the society to pro-bono services and other humanitarian aids, with special focus on SGBV) for the TECHSAH movement in tackling access to humanitarian needs, especially to the most vulnerable in local communities.&lt;/p&gt;

&lt;p&gt;As a Web Developer for YouthSpark Africa, I developed and managed the new website for YouthSpark Pan Africa, ensuring that the website was up-to-date with information on programs and activities, maintaining unique customizations and quality, and ensuring that the website's security protocols and measures were up-to-date.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5864bc29--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ocwbtcdklbyvdqm3z24.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5864bc29--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ocwbtcdklbyvdqm3z24.jpg" alt="Food Bank Initiative" width="800" height="817"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;To sum up, I would say that my commitment to volunteerism and community service is of an innate fashion and driven intrinsically. My work in economic empowerment, civil rights and social action, and poverty alleviation has made a positive impact on the lives of those in my local community and across boarders. In the service of humanity, I believe that I have demonstrated and will continue to demonstrate that through volunteering and community service, we can all make a difference.&lt;/p&gt;

&lt;p&gt;Thank you for reading my supposed, 'Anecdote' up to this point! 😊 &lt;/p&gt;

</description>
      <category>volunteerism</category>
      <category>societydevelopment</category>
      <category>philanthropist</category>
      <category>humanitarianservice</category>
    </item>
    <item>
      <title>Difference between CNAME and A records</title>
      <dc:creator>Paschal Kenechukwu Oruche</dc:creator>
      <pubDate>Sat, 22 Apr 2023 08:25:32 +0000</pubDate>
      <link>https://dev.to/oruchepaschal/difference-between-cname-and-a-records-4kfc</link>
      <guid>https://dev.to/oruchepaschal/difference-between-cname-and-a-records-4kfc</guid>
      <description>&lt;p&gt;As a Cloud practitioner  ☁️ , DevOps Engineer ♾  and the likes, you'll realize that whilst working on projects, you will experience the constant need for creating environments (test, deployment, sandbox, staging, production etc.), based on specific needs.&lt;/p&gt;

&lt;p&gt;If you're like me, you're constantly working on projects that require the creation of environments with sub-domains or additional domains to serve your applications.&lt;/p&gt;

&lt;p&gt;In this article, I'm going to break down the difference between these two types of DNS records, so you can choose the right one for your project. #FYI -&amp;gt; &lt;em&gt;&lt;strong&gt;from my practical point of view.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;" Let's dive right in 😊 😃 "&lt;/p&gt;

&lt;p&gt;A CNAME (Canonical Name) record and an A (Address) record are both types of DNS (Domain Name System) records that are used to map a domain name to an IP address. However, they differ in their functionality and usage.&lt;/p&gt;

&lt;p&gt;Let's start with A records. An A record is used to map a domain name to a specific IP address. For example, if you have a web server with an IP address of 192.0.2.1, you can create an A record that maps the domain name "example.com" to that IP address. This allows users to access your website by typing "example.com" into their web browser. &lt;/p&gt;

&lt;p&gt;Here's an image to help you visualize an A record:&lt;/p&gt;

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

&lt;p&gt;On the other hand, a CNAME record is used to map a domain name to another domain name. For example, if you have a web server with the domain name "&lt;a href="http://www.example.com"&gt;www.example.com&lt;/a&gt;", you can create a CNAME record that maps "blog.example.com" to "&lt;a href="http://www.example.com"&gt;www.example.com&lt;/a&gt;". This allows users to access your blog using the "blog.example.com" domain name instead of the "&lt;a href="http://www.example.com"&gt;www.example.com&lt;/a&gt;" domain name.&lt;/p&gt;

&lt;p&gt;The image below depicts how CNAME records work:&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;PS:&lt;/strong&gt; It is important to note that using a CNAME record can cause additional DNS lookups, which can increase the response time for the user. Therefore, it is recommended to use A records whenever possible, and to use CNAME records only when necessary.&lt;/p&gt;

&lt;p&gt;Now, a quick Recap:&lt;/p&gt;

&lt;p&gt;An A record is used to map a domain name directly to an IP address. For example, let's say you have a web server with the IP address 192.0.2.1&lt;/p&gt;

&lt;p&gt;A CNAME record is used to map a domain name to another domain name, which in turn is mapped to an IP address through an A record.&lt;/p&gt;

&lt;p&gt;That's all for now, folks! Happy 😊  mapping!&lt;/p&gt;

</description>
      <category>domainmapping</category>
      <category>linux</category>
      <category>cloud</category>
      <category>devops</category>
    </item>
    <item>
      <title>The Dangers of Copy-Paste Malware, and how to prevent them</title>
      <dc:creator>Paschal Kenechukwu Oruche</dc:creator>
      <pubDate>Sun, 02 Apr 2023 07:04:54 +0000</pubDate>
      <link>https://dev.to/oruchepaschal/the-dangers-of-copy-paste-malware-and-how-to-prevent-them-46ie</link>
      <guid>https://dev.to/oruchepaschal/the-dangers-of-copy-paste-malware-and-how-to-prevent-them-46ie</guid>
      <description>&lt;p&gt;Copy-paste malware has become a growing concern in today's digital age. This type of malware is designed to infect a computer (running desktop or mobile operating systems) by hiding within copied and pasted text or code. As soon as the copied content is pasted into a new document, the malware infects the system, giving hackers access to sensitive information.&lt;/p&gt;

&lt;p&gt;The most concerning aspect of copy-paste malware is its silent operation. They can easily slip under the radar of even the most advanced antivirus software, making them difficult to detect. Once they have infiltrated a system, they can be used to steal sensitive data such as passwords, financial information, and confidential documents. It is crucial to stay vigilant and take the necessary precautions to prevent the spread of these digital saboteurs. For the most part, it may seem like a harmless function, but it can pose a significant risk to your digital security. Cybercriminals often use copy-paste techniques to spread malicious code, steal sensitive information, and gain unauthorized access to systems. By copying and pasting content from untrusted sources, you could inadvertently expose yourself to serious cyber threats.&lt;/p&gt;

&lt;p&gt;To protect your data from copy-paste attacks, you should avoid copying and pasting content from untrusted sources. Instead, type URLs directly into your browser and be cautious when downloading files or opening email attachments. Additionally, you can use security software that scans your computer for malware and blocks suspicious activity. By taking these precautions, you can minimize the risk of falling victim to copy-paste attacks and keep your data safe.&lt;/p&gt;

&lt;p&gt;As someone who considers themselves tech-savvy, I never thought I would fall victim to a copy-paste malware attack. But a recent experience with a close friend showed me just how easy it can be for hackers to gain access to sensitive information. It all started when my friend asked for my help in making a payment to a platform they subscribed to. They needed the payment to be made using cryptocurrency, and the options included Bitcoin, Litecoin, and USDT (both ERC20 and TRC20). Fortunately, I had some USDT in my Binance wallet, and I agreed to help. We communicated over WhatsApp, with my friend using WhatsApp Web on their laptop and me using the WhatsApp and Binance mobile apps on my smartphone. They provided the USDT address to send the payment to, and I copied and pasted it into my Binance app.&lt;/p&gt;

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

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

&lt;p&gt;As I was about to send the funds (after inputting both OTPs sent via SMS and email), I was surprised to see that Binance's system had flagged the address. My withdrawal function was temporarily disabled, and I immediately contacted Binance support to find out what was going on.&lt;/p&gt;

&lt;p&gt;To my horror, Binance support informed me that the USDT (TRX) address my friend had sent me was not the correct address. Instead, it was a copy-paste malware attack where the attacker had intercepted my friend's message and changed the USDT (TRX) address to their own. My friend's laptop had been infected with malware, and their personal information was at risk.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bgC6kksC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t7chtnfalw96k1sjqlcp.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bgC6kksC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t7chtnfalw96k1sjqlcp.PNG" alt="Ticket opened to Binance Support" width="800" height="1732"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1FRJwbUx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6dul32nw3bzrt5cvx5qc.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1FRJwbUx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6dul32nw3bzrt5cvx5qc.PNG" alt="Binance Support conversation 2" width="800" height="1732"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DuaJgj3z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d64rnkshi4x9a2bvru1p.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DuaJgj3z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d64rnkshi4x9a2bvru1p.PNG" alt="Binance Support conversation 3" width="800" height="1732"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thankfully, It turned out that the said address ‘’ had been reported a couple of times to Binance and their security systems caught the attack. My friend was able to get their laptop cleaned up and secured. However, this experience opened my eyes to just how vulnerable we all are to copy-paste malware attacks. It's a reminder that we should always be vigilant and cautious when copying and pasting information, especially when it comes to sensitive data like cryptocurrency addresses, bank account details, or login credentials. We should also be mindful of the applications and websites we use, ensuring that they are reputable and secure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BYswthIg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6od36wxufwwd1d35d47q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BYswthIg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6od36wxufwwd1d35d47q.png" alt="Finalized transaction sent to the correct address" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In conclusion, my experience with copy-paste malware was a wake-up call for me. This could affect professionals in different fields, a software Engineers, DevOps Engineers could copy-paste malicious codes orchestrated by nefarious players. It reminded me that we live in a digital age where our personal information is constantly at risk of being compromised. We must take steps to protect ourselves, such as using strong passwords, enabling two-factor authentication, and keeping our devices and softwares up-to-date.&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  Simple Steps to Prevent Copy-Paste Malware from Infecting your computer or smartphone:
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
Copy-paste malware can be a challenging threat to detect and prevent. However, there are steps you can take to reduce the risk of infection. Here are five simple steps to prevent copy-paste malware from infecting your system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep your antivirus software up to date and perform regular system scans.&lt;/li&gt;
&lt;li&gt;Only copy and paste content from trusted sources.&lt;/li&gt;
&lt;li&gt;Double check content copies from trusted and untrusted sources ⚠️ 👀 &lt;/li&gt;
&lt;li&gt;Disable the "Automatically download external images and style formats" option in your email settings.&lt;/li&gt;
&lt;li&gt;Use a firewall to block suspicious incoming connections.&lt;/li&gt;
&lt;li&gt;Educate yourself and your employees about the risks of copy-paste malware and how to avoid them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By following these simple steps, you can significantly reduce the risk of copy-paste malware infecting your system and keep your data safe from cybercriminals.&lt;/p&gt;

</description>
      <category>copypastemalware</category>
      <category>phishing</category>
      <category>cybersecurity</category>
      <category>socialengineering</category>
    </item>
    <item>
      <title>My experience at TechFest organized by the Tech Savvy Law club in Ekiti State University, Nigeria.</title>
      <dc:creator>Paschal Kenechukwu Oruche</dc:creator>
      <pubDate>Thu, 09 Mar 2023 13:43:58 +0000</pubDate>
      <link>https://dev.to/oruchepaschal/my-experience-at-techfest-organized-by-the-tech-savvy-law-club-in-ekiti-state-university-nigeria-1062</link>
      <guid>https://dev.to/oruchepaschal/my-experience-at-techfest-organized-by-the-tech-savvy-law-club-in-ekiti-state-university-nigeria-1062</guid>
      <description>&lt;p&gt;I had an amazing experience at TechFest organized by the Tech Savvy Law club in Ekiti State University, Nigeria. &lt;/p&gt;

&lt;p&gt;I'm excited to share my journey with you in this video!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Fixing PWA Middleware Issues with nvm on NexJS project in 3 simple steps</title>
      <dc:creator>Paschal Kenechukwu Oruche</dc:creator>
      <pubDate>Thu, 09 Mar 2023 13:26:33 +0000</pubDate>
      <link>https://dev.to/oruchepaschal/fixing-pwa-middleware-issues-with-nvm-on-nexjs-project-in-3-simple-steps-5834</link>
      <guid>https://dev.to/oruchepaschal/fixing-pwa-middleware-issues-with-nvm-on-nexjs-project-in-3-simple-steps-5834</guid>
      <description>&lt;p&gt;So I have been experiencing an issue with PWA middleware whilst trying to work on a NexJS project. so this project was pulled from an organization's repo and I'm to get started with building a deployment pipeline using jenkins and our cloud provider is Microsoft Azure. &lt;/p&gt;

&lt;p&gt;When I pulled my working branch of the repo to my local machine, I had issues of PWA middleware complaining about some modules. Now, let's talk a tiny bit about PWA&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;Photo by James Wiseman on Unsplash&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To enhance the functionality of a NextJS PWA, developers use middleware. Middleware in NextJS is code that runs between the server and the application, modifying requests and responses as necessary. PWA middleware is specifically designed to handle the PWA-specific features and requirements.&lt;/p&gt;

&lt;p&gt;Issues with PWA Middleware and Node Modules&lt;/p&gt;

&lt;p&gt;When working on a NextJS project that uses PWA middleware, it's not uncommon to run into issues with node modules. This is because PWA middleware requires specific modules and dependencies to function correctly. If these modules are not installed or if there are version mismatches, the middleware will fail, causing errors in the application.&lt;/p&gt;

&lt;p&gt;If you encounter PWA middleware issues in a NextJS project, there are several steps you can take to resolve them. One common solution is to use Node Version Manager (nvm) to switch between different versions of Node.js.&lt;/p&gt;

&lt;p&gt;However, if you've already tried switching node versions with nvm and are still experiencing issues with PWA middleware, you can try the following steps:&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;Error messages&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;&lt;strong&gt;Step 1: Check Node and npm Versions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first step is to check the versions of Node and npm installed on your machine. You can do this by running the following command in your terminal:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm --v&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Note of the npm version, as this is important for the next step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Install Node Modules&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Next, try installing the required node modules for the project by running the following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm i&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If this command fails, do not force the installation or use legacy peer dependencies. Instead, move on to the next step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Install a Specific Version of npm&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To fix the issue with PWA middleware, you need to install a specific version of npm that matches the version used by other developers who did not encounter the middleware issue. You can do this by running the following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install npm@&amp;lt;version number or latest&amp;gt;&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Replace  with the working npm version used by other developers. Alternatively, you can use the latest keyword to install the latest version of npm.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Update (06/04/2023)&lt;/strong&gt;&lt;br&gt;
A colleague experience some PWA issue whilst working on their branch, so we had to get on a session to see how I can assist with fixing the PWA issue. &lt;br&gt;
I discovered an update as to how you get to add PWA features to your Next.js application, such as offline support and the ability to install the app on a user's device (specifically the statement that loads the next-pwa plugin).&lt;/p&gt;

&lt;p&gt;So, on the next.config.js file, this line of code:&lt;br&gt;
&lt;code&gt;const withPWA = require("next-pwa");&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;was replaced with this:&lt;br&gt;
&lt;code&gt;const withPWA = require('next-pwa')({&lt;br&gt;
  dest: 'public'&lt;br&gt;
})&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;😇😇😇&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PWA middleware is an essential part of building PWAs with NextJS. However, issues with node modules can cause middleware to fail, resulting in errors in the application. If you encounter such issues, you can try switching between different versions of Node.js using nvm or installing a specific version of npm that matches the working version used by other developers. These steps should help you fix the problem and get back to building your NextJS PWA with confidence.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>pwa</category>
      <category>npm</category>
      <category>devops</category>
    </item>
    <item>
      <title>Leveraging DevOps for Faster and Scalable Deployments</title>
      <dc:creator>Paschal Kenechukwu Oruche</dc:creator>
      <pubDate>Fri, 24 Feb 2023 06:58:31 +0000</pubDate>
      <link>https://dev.to/oruchepaschal/leveraging-devops-for-faster-and-scalable-deployments-13mk</link>
      <guid>https://dev.to/oruchepaschal/leveraging-devops-for-faster-and-scalable-deployments-13mk</guid>
      <description>&lt;p&gt;I am thrilled to have spoken at the recently organized Tech Fest organized by the Tech Savvy Law Club, Ekiti State University, on February 18th, 2023. As a DevOps Engineer with a seasoned background in Software Engineering, I shared my insights on the topic of "Leveraging DevOps for Faster and Scalable deployments."&lt;/p&gt;

&lt;p&gt;DevOps has become a buzzword in the world of technology and for good reason. It enables organizations to streamline their software development and deployment processes, resulting in faster delivery of quality products to market. In my presentation, I will delve into the nuances of DevOps and provide insights into how businesses can leverage key tools for faster and more scalable deployments.&lt;/p&gt;

&lt;p&gt;Here is a link to my presentation:&lt;br&gt;
&lt;a href="https://www.slideshare.net/PaschalOruche1/leveraging-devops-for-faster-and-scalable-deployments-keynotepdf"&gt;https://www.slideshare.net/PaschalOruche1/leveraging-devops-for-faster-and-scalable-deployments-keynotepdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The core of my presentation focused on using DevOps methodologies to improve the speed and scalability of software deployments. DevOps is a set of practices that combines software development and operations to improve the speed, quality, and reliability of software delivery. &lt;/p&gt;

&lt;p&gt;I believe that by leveraging DevOps, organizations can achieve faster and more efficient software deployments, resulting in faster time to market, improved collaboration between development and operations teams, increased efficiency, reduced risk of failure, and better customer satisfaction.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>containers</category>
      <category>cloud</category>
      <category>bash</category>
    </item>
  </channel>
</rss>
