<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Narayan Adhikary</title>
    <description>The latest articles on Forem by Narayan Adhikary (@wovosoft).</description>
    <link>https://forem.com/wovosoft</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%2F524406%2F5f1ea2a2-32fc-4654-9377-af082d798c34.png</url>
      <title>Forem: Narayan Adhikary</title>
      <link>https://forem.com/wovosoft</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/wovosoft"/>
    <language>en</language>
    <item>
      <title>Complete Guide to Setting Up a Mail Server with Postfix, Dovecot, and Roundcube</title>
      <dc:creator>Narayan Adhikary</dc:creator>
      <pubDate>Mon, 21 Apr 2025 09:14:15 +0000</pubDate>
      <link>https://forem.com/wovosoft/complete-guide-to-setting-up-a-mail-server-with-postfix-dovecot-and-roundcube-65c</link>
      <guid>https://forem.com/wovosoft/complete-guide-to-setting-up-a-mail-server-with-postfix-dovecot-and-roundcube-65c</guid>
      <description>&lt;p&gt;Generated from Chat GPT&lt;/p&gt;




&lt;h2&gt;
  
  
  🌐 &lt;strong&gt;Complete Guide to Setting Up a Mail Server with Postfix, Dovecot, and Roundcube&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This guide walks you through the process of setting up a mail server using &lt;strong&gt;Postfix&lt;/strong&gt;, &lt;strong&gt;Dovecot&lt;/strong&gt;, and &lt;strong&gt;Roundcube&lt;/strong&gt;. It also explains the role of each component in the mail system, how they interact, and how to set them up.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Installing Postfix (SMTP server).&lt;/li&gt;
&lt;li&gt;Installing Dovecot (IMAP server).&lt;/li&gt;
&lt;li&gt;Creating an email account.&lt;/li&gt;
&lt;li&gt;Configuring Dovecot and Postfix.&lt;/li&gt;
&lt;li&gt;Installing and configuring Roundcube.&lt;/li&gt;
&lt;li&gt;Testing everything.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  📨 &lt;strong&gt;Postfix: Mail Transfer Agent (MTA)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Postfix&lt;/strong&gt; is a &lt;strong&gt;Mail Transfer Agent (MTA)&lt;/strong&gt; that handles the sending and routing of emails. It is responsible for accepting incoming emails and forwarding outgoing emails. It works based on the &lt;strong&gt;SMTP&lt;/strong&gt; (Simple Mail Transfer Protocol), which is the standard protocol for sending emails across the internet.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;How Postfix Works&lt;/strong&gt;:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;When a user sends an email, &lt;strong&gt;Postfix&lt;/strong&gt; receives it and routes it to the appropriate destination mail server using DNS-based &lt;strong&gt;MX&lt;/strong&gt; (Mail Exchange) records.&lt;/li&gt;
&lt;li&gt;If the email is meant for a local user (on the same server), Postfix delivers it to the local mailbox for that user.&lt;/li&gt;
&lt;li&gt;For outgoing emails, Postfix uses SMTP to send the email to the recipient's email server.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  📨 &lt;strong&gt;Dovecot: Mail Delivery Agent (MDA) &amp;amp; IMAP/POP3 Server&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Dovecot&lt;/strong&gt; serves as both a &lt;strong&gt;Mail Delivery Agent (MDA)&lt;/strong&gt; and an &lt;strong&gt;IMAP/POP3 server&lt;/strong&gt;. It allows users to access their emails and interact with their mailbox. &lt;strong&gt;Dovecot&lt;/strong&gt; manages the storage of emails on the server and enables email retrieval via &lt;strong&gt;IMAP&lt;/strong&gt; (Internet Message Access Protocol) or &lt;strong&gt;POP3&lt;/strong&gt; (Post Office Protocol).&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;How Dovecot Works&lt;/strong&gt;:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mail Storage&lt;/strong&gt;: Dovecot stores incoming emails in a &lt;strong&gt;Maildir&lt;/strong&gt; or &lt;strong&gt;mbox&lt;/strong&gt; format. It allows users to keep emails on the server and access them remotely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IMAP&lt;/strong&gt;: IMAP allows users to read and manage their emails while keeping them on the server. Changes to folders or messages (such as moving, deleting, or marking as read) are synchronized across all devices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;POP3&lt;/strong&gt;: POP3 downloads emails to the local client and removes them from the server. It is less commonly used today because it doesn't synchronize changes across devices.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dovecot also provides &lt;strong&gt;SSL/TLS encryption&lt;/strong&gt; to secure the transmission of email data between the client and the server.&lt;/p&gt;




&lt;h3&gt;
  
  
  📧 &lt;strong&gt;Roundcube: Webmail Interface&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Roundcube&lt;/strong&gt; is a &lt;strong&gt;webmail client&lt;/strong&gt; that provides users with a graphical interface for managing their emails through a web browser. Roundcube connects to &lt;strong&gt;Dovecot&lt;/strong&gt; over IMAP to retrieve email messages and to &lt;strong&gt;Postfix&lt;/strong&gt; to send outgoing mail via SMTP.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;How Roundcube Works&lt;/strong&gt;:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web-based Access&lt;/strong&gt;: Roundcube allows users to access their emails from any browser by connecting to the server using &lt;strong&gt;IMAP&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sending Email&lt;/strong&gt;: It sends email messages using &lt;strong&gt;SMTP&lt;/strong&gt; via &lt;strong&gt;Postfix&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email Management&lt;/strong&gt;: Roundcube offers an easy-to-use interface for managing emails, organizing them into folders (Inbox, Sent, Drafts, Trash), and composing new messages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rich Features&lt;/strong&gt;: Roundcube supports attachments, address books, and other features typically found in desktop email clients.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🔐 &lt;strong&gt;SSL/TLS Encryption: Secure Communication&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;SSL (Secure Sockets Layer)&lt;/strong&gt; and &lt;strong&gt;TLS (Transport Layer Security)&lt;/strong&gt; are protocols used to encrypt communication between the email server and email clients. This encryption ensures that your emails and login credentials are secure while being transmitted over the internet.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;How SSL/TLS Works&lt;/strong&gt;:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dovecot&lt;/strong&gt; and &lt;strong&gt;Postfix&lt;/strong&gt; can be configured to use &lt;strong&gt;SSL/TLS&lt;/strong&gt; to secure both incoming and outgoing email traffic.

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IMAP over SSL (IMAPS)&lt;/strong&gt;: Secures the connection for email retrieval.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SMTP over SSL (SMTPS)&lt;/strong&gt;: Secures the connection for sending emails.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTPS&lt;/strong&gt;: Secures the web-based Roundcube interface.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;SSL/TLS ensures that the email content remains confidential and protected from unauthorized access or interception during transmission.&lt;/p&gt;




&lt;h3&gt;
  
  
  🗂 &lt;strong&gt;Mail Storage Formats: Maildir vs. Mbox&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Both &lt;strong&gt;Maildir&lt;/strong&gt; and &lt;strong&gt;Mbox&lt;/strong&gt; are mail storage formats used by &lt;strong&gt;Dovecot&lt;/strong&gt; to store email messages on the server. They determine how emails are stored and accessed on the server.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Maildir&lt;/strong&gt;:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Each email is stored as a separate file in a directory structure (typically &lt;code&gt;/new&lt;/code&gt;, &lt;code&gt;/cur&lt;/code&gt;, and &lt;code&gt;/tmp&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;It is more efficient and reliable, especially for larger mailboxes with many emails.&lt;/li&gt;
&lt;li&gt;Preferred for most modern mail servers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Mbox&lt;/strong&gt;:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;All emails are stored in a single file.&lt;/li&gt;
&lt;li&gt;Easier to back up but can become inefficient when dealing with large mailboxes.&lt;/li&gt;
&lt;li&gt;Less commonly used today.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Recommendation&lt;/strong&gt;: &lt;strong&gt;Maildir&lt;/strong&gt; is generally preferred because it provides better performance and is more scalable.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔄 &lt;strong&gt;Mail Flow Process&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The interaction between &lt;strong&gt;Postfix&lt;/strong&gt;, &lt;strong&gt;Dovecot&lt;/strong&gt;, and &lt;strong&gt;Roundcube&lt;/strong&gt; forms a complete email system. Here’s the typical flow of an email:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Postfix (SMTP)&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A user sends an email from their email client (Roundcube, Outlook, etc.).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Postfix&lt;/strong&gt; receives the email and routes it to the correct destination mail server using the recipient’s MX records.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dovecot (IMAP/POP3)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The recipient’s email server stores the incoming email in the mailbox.&lt;/li&gt;
&lt;li&gt;The recipient logs in via IMAP to retrieve their messages, or POP3 to download emails to their client.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Roundcube (Webmail Client)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Roundcube provides a web-based interface for users to check their email. It connects to the &lt;strong&gt;Dovecot IMAP server&lt;/strong&gt; to retrieve emails and uses &lt;strong&gt;SMTP&lt;/strong&gt; to send outgoing emails via &lt;strong&gt;Postfix&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  🧑‍💻 &lt;strong&gt;Summary of Key Components and Roles&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Postfix&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;SMTP Server&lt;/strong&gt; — Responsible for sending and receiving emails.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dovecot&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;IMAP/POP3 Server&lt;/strong&gt; — Stores emails and allows retrieval via IMAP/POP3.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Roundcube&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Webmail Client&lt;/strong&gt; — Provides a user-friendly interface for accessing and managing email.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maildir&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Mail Storage Format&lt;/strong&gt; — Stores emails in individual files, organized in directories.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SSL/TLS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Encryption&lt;/strong&gt; — Secures email communication between the server and client.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  🚀 &lt;strong&gt;Step-by-Step Mail Server Setup&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Now, let’s break down the process of setting up a mail server with &lt;strong&gt;Postfix&lt;/strong&gt;, &lt;strong&gt;Dovecot&lt;/strong&gt;, and &lt;strong&gt;Roundcube&lt;/strong&gt;:&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 1: Install Postfix&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;postfix
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;Step 2: Install Dovecot&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;dovecot-core dovecot-imapd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;Step 3: Install Roundcube&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;roundcube
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;Step 4: Configure Postfix&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Set up Postfix for sending emails and routing them to the correct destination mail server.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 5: Configure Dovecot&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Set up Dovecot to handle the retrieval and storage of emails using either &lt;strong&gt;IMAP&lt;/strong&gt; or &lt;strong&gt;POP3&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose between &lt;strong&gt;Maildir&lt;/strong&gt; or &lt;strong&gt;mbox&lt;/strong&gt; for email storage.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 6: Configure SSL/TLS Encryption&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Enable &lt;strong&gt;SSL/TLS&lt;/strong&gt; in both &lt;strong&gt;Postfix&lt;/strong&gt; and &lt;strong&gt;Dovecot&lt;/strong&gt; to secure email communication.&lt;/li&gt;
&lt;li&gt;Install SSL certificates and configure Postfix/Dovecot to use them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 7: Set Up Roundcube&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Configure Roundcube to connect to &lt;strong&gt;Dovecot&lt;/strong&gt; over IMAP and use &lt;strong&gt;Postfix&lt;/strong&gt; for SMTP.&lt;/li&gt;
&lt;li&gt;Set up user authentication, folders, and the web interface.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🛡️ &lt;strong&gt;Security Considerations&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSL/TLS Encryption&lt;/strong&gt;: Encrypt both incoming and outgoing email traffic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication&lt;/strong&gt;: Ensure that only authorized users can send and receive emails.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spam Protection&lt;/strong&gt;: Configure &lt;strong&gt;Postfix&lt;/strong&gt; with anti-spam measures like &lt;strong&gt;SpamAssassin&lt;/strong&gt; or &lt;strong&gt;Postgrey&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🧑‍💻 &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;You now have a basic understanding of the components involved in setting up a mail server with &lt;strong&gt;Postfix&lt;/strong&gt;, &lt;strong&gt;Dovecot&lt;/strong&gt;, and &lt;strong&gt;Roundcube&lt;/strong&gt;. Here’s a summary of what each component does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Postfix&lt;/strong&gt; handles the sending of emails using SMTP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dovecot&lt;/strong&gt; stores and retrieves emails using IMAP/POP3.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Roundcube&lt;/strong&gt; provides a user-friendly, web-based interface for managing emails.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This setup will allow you to send and receive emails, securely manage your mailboxes, and access your emails from any device using a browser or email client.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Laravel Dev Environment in Linux</title>
      <dc:creator>Narayan Adhikary</dc:creator>
      <pubDate>Thu, 07 Dec 2023 17:09:01 +0000</pubDate>
      <link>https://forem.com/wovosoft/laravel-dev-environment-in-linux-50f1</link>
      <guid>https://forem.com/wovosoft/laravel-dev-environment-in-linux-50f1</guid>
      <description>&lt;p&gt;This article guides you through installing and configuring Nginx for local development on Linux. It covers installing Nginx, PostgreSQL, PHP, and Laravel's required extensions. Additionally, it explains configuring Nginx for multiple domains and subdomains using virtual hosts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install nginx
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Verify Nginx installation:
&lt;/h2&gt;

&lt;p&gt;Open your browser and navigate to &lt;a href="http://localhost"&gt;http://localhost&lt;/a&gt;. You should see the Nginx welcome page. But if your distro comes with apache2 pre-installed you should see the welcome page of apache2. No, worries we will fix that later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Postgresql
&lt;/h2&gt;

&lt;p&gt;See &lt;a href="https://www.postgresql.org/download/linux/ubuntu/"&gt;details here&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create the file repository configuration:&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" &amp;gt; /etc/apt/sources.list.d/pgdg.list'&lt;/span&gt;

&lt;span class="c"&gt;# Import the repository signing key:&lt;/span&gt;
wget &lt;span class="nt"&gt;--quiet&lt;/span&gt; &lt;span class="nt"&gt;-O&lt;/span&gt; - https://www.postgresql.org/media/keys/ACCC4CF8.asc | &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-key add -

&lt;span class="c"&gt;# Update the package lists:&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update

&lt;span class="c"&gt;# Install the latest version of PostgreSQL.&lt;/span&gt;
&lt;span class="c"&gt;# If you want a specific version, use 'postgresql-12' or similar instead of 'postgresql':&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nb"&gt;install &lt;/span&gt;postgresql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After successful Installation, open terminal and do the following:&lt;/p&gt;

&lt;p&gt;Switch to postgresql console. It will ask for sudo (super user password)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; postgres psql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change password and remember it carefully. This password is not the password of your system user, rather it is your postgres admin password.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="se"&gt;\p&lt;/span&gt;assword
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Install &lt;code&gt;php&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Add repository&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;add-apt-repository ppa:ondrej/php
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, run the following command to install latest php,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;php &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Verify PHP version
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If it shows the php version, then it is installed successfully.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Laravel required php extensions
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;php-ctype php-curl php-xml php-fileinfo php-mbstring php-pdo php-tokenizer php-session php-hash php-dom php-filter php-pgsql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, as you have nginx installed, you might not need apache. So, it can be removed from your system by following the&lt;br&gt;
below method:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;service apache2 stop
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get purge apache2 apache2-utils apache2.2-bin apache2-common
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get autoremove
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our required components are installed. Now, its time for configuration.&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://laravel.com/docs/10.x/deployment#nginx"&gt;https://laravel.com/docs/10.x/deployment#nginx&lt;/a&gt; Laravel provided a basic nginx configuration to run laravel projects. But for most of the cases its perfectly fine.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;server&lt;/span&gt; {
    &lt;span class="n"&gt;listen&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;;
    &lt;span class="n"&gt;listen&lt;/span&gt; [::]:&lt;span class="m"&gt;80&lt;/span&gt;;
    &lt;span class="n"&gt;server_name&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;;
    &lt;span class="n"&gt;root&lt;/span&gt; /&lt;span class="n"&gt;srv&lt;/span&gt;/&lt;span class="n"&gt;example&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;/&lt;span class="n"&gt;public&lt;/span&gt;;

    &lt;span class="n"&gt;add_header&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;-&lt;span class="n"&gt;Frame&lt;/span&gt;-&lt;span class="n"&gt;Options&lt;/span&gt; &lt;span class="s2"&gt;"SAMEORIGIN"&lt;/span&gt;;
    &lt;span class="n"&gt;add_header&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;-&lt;span class="n"&gt;Content&lt;/span&gt;-&lt;span class="n"&gt;Type&lt;/span&gt;-&lt;span class="n"&gt;Options&lt;/span&gt; &lt;span class="s2"&gt;"nosniff"&lt;/span&gt;;

    &lt;span class="n"&gt;index&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt;;

    &lt;span class="n"&gt;charset&lt;/span&gt; &lt;span class="n"&gt;utf&lt;/span&gt;-&lt;span class="m"&gt;8&lt;/span&gt;;

    &lt;span class="n"&gt;location&lt;/span&gt; / {
        &lt;span class="n"&gt;try_files&lt;/span&gt; $&lt;span class="n"&gt;uri&lt;/span&gt; $&lt;span class="n"&gt;uri&lt;/span&gt;/ /&lt;span class="n"&gt;index&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt;?$&lt;span class="n"&gt;query_string&lt;/span&gt;;
    }

    &lt;span class="n"&gt;location&lt;/span&gt; = /&lt;span class="n"&gt;favicon&lt;/span&gt;.&lt;span class="n"&gt;ico&lt;/span&gt; { &lt;span class="n"&gt;access_log&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;; &lt;span class="n"&gt;log_not_found&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;; }
    &lt;span class="n"&gt;location&lt;/span&gt; = /&lt;span class="n"&gt;robots&lt;/span&gt;.&lt;span class="n"&gt;txt&lt;/span&gt;  { &lt;span class="n"&gt;access_log&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;; &lt;span class="n"&gt;log_not_found&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;; }

    &lt;span class="n"&gt;error_page&lt;/span&gt; &lt;span class="m"&gt;404&lt;/span&gt; /&lt;span class="n"&gt;index&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt;;

    &lt;span class="n"&gt;location&lt;/span&gt; ~ \.&lt;span class="n"&gt;php&lt;/span&gt;$ {
        &lt;span class="n"&gt;fastcgi_pass&lt;/span&gt; &lt;span class="n"&gt;unix&lt;/span&gt;:/&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;run&lt;/span&gt;/&lt;span class="n"&gt;php&lt;/span&gt;/&lt;span class="n"&gt;php8&lt;/span&gt;.&lt;span class="m"&gt;2&lt;/span&gt;-&lt;span class="n"&gt;fpm&lt;/span&gt;.&lt;span class="n"&gt;sock&lt;/span&gt;;
        &lt;span class="n"&gt;fastcgi_param&lt;/span&gt; &lt;span class="n"&gt;SCRIPT_FILENAME&lt;/span&gt; $&lt;span class="n"&gt;realpath_root&lt;/span&gt;$&lt;span class="n"&gt;fastcgi_script_name&lt;/span&gt;;
        &lt;span class="n"&gt;include&lt;/span&gt; &lt;span class="n"&gt;fastcgi_params&lt;/span&gt;;
    }

    &lt;span class="n"&gt;location&lt;/span&gt; ~ /\.(?!&lt;span class="n"&gt;well&lt;/span&gt;-&lt;span class="n"&gt;known&lt;/span&gt;).* {
        &lt;span class="n"&gt;deny&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt;;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can make this configuration file for each sites, or this can be&lt;br&gt;
like &lt;a href="https://serverfault.com/questions/623327/configuring-multiple-domain-in-nginx-in-one-file"&gt;https://serverfault.com/questions/623327/configuring-multiple-domain-in-nginx-in-one-file&lt;/a&gt;.&lt;br&gt;
Anyway, I am not going for that, you can try it if you like.&lt;/p&gt;

&lt;h2&gt;
  
  
  Domain and Subdomains for Local Development
&lt;/h2&gt;

&lt;p&gt;Before further discussion, lets know about the mechanism. First, when you visit a website by using a domain, the OS&lt;br&gt;
looks up for the IP in DNS cache, then it visits the website by IP after resolving it.&lt;/p&gt;

&lt;p&gt;To, access websites hosted locally by local domains or subdomains, we need to tell the OS how to handle it. This is done&lt;br&gt;
by vhosts. The configuration for vhosts is at `/etc/hosts. If you see the contents you will find something like this:&lt;/p&gt;

&lt;pre&gt;
127.0.0.1   localhost
127.0.0.1   local1.test
127.0.0.1   local2.test
127.0.0.1   subdomain.local2.test
127.0.1.1   wovosoft
&lt;/pre&gt;

&lt;p&gt;See the top-most loop back ip 127.0.0.1 and 127.0.1.1. Each line is paired with IP and domain name. The lines instructs the OS to forward all the requests for local1.test, local2.test and localhost to the same IP address 127.0.0.1 on port 80. Now the question is how, the server will know, for which domain which application should handle the request? Well, this is determined by server applications like apache or nginx. Here we will go for nginx.&lt;/p&gt;

&lt;p&gt;Now, reconsider the above nginx configuration provided by laravel. We, can use that sample to instruct nginx how to&lt;br&gt;
handle the request for different domains or sub-domains.&lt;/p&gt;

&lt;p&gt;Configuration for local1.test&lt;/p&gt;

&lt;pre&gt;
server {
    listen 80;
    listen [::]:80;
    server_name local1.test;
    root /home/your_username/sites/local1/public;
 
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
 
    index index.php;
 
    charset utf-8;
 
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
 
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }
 
    error_page 404 /index.php;
 
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
 
    location ~ /\.(?!well-known).* {
        deny all;
    }
}
&lt;/pre&gt;

&lt;p&gt;Configuration for local2.test&lt;/p&gt;

&lt;pre&gt;
server {
    listen 80;
    listen [::]:80;
    server_name local2.test;
    root /home/your_username/sites/local2/public;
 
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
 
    index index.php;
 
    charset utf-8;
 
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
 
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }
 
    error_page 404 /index.php;
 
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
 
    location ~ /\.(?!well-known).* {
        deny all;
    }
}
&lt;/pre&gt;

&lt;p&gt;So, if you look carefully, you will understand that for local domains, all requests are forwarded to 127.0.0.1 at port&lt;br&gt;
80 by using &lt;code&gt;/etc/hosts&lt;/code&gt; configuration file. You need to append a line for each local websites in that file. After that you need to make the configuration files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Storing and instructing nginx to use configuration files
&lt;/h2&gt;

&lt;p&gt;By default, nginx stores configuration files in &lt;code&gt;/etc/nginx/sites-available&lt;/code&gt; and &lt;code&gt;/etc/nginx/sites-enabled&lt;/code&gt;. And enables the sites by creating a symlink in &lt;code&gt;/etc/nginx/sites-enabled&lt;/code&gt; to the configuration file in &lt;code&gt;/etc/nginx/sites-available&lt;/code&gt;.&lt;/p&gt;

&lt;pre&gt;
sudo ln -s /etc/nginx/sites-available/your_config_file.conf /etc/nginx/sites-enabled
&lt;/pre&gt;

&lt;p&gt;But managing this procedure every time in local development is a bit of hassle. So, we will use a different approach.&lt;br&gt;
We, will create folder outside the hidden area. For example &lt;code&gt;/home/your_username/nginx/domains&lt;/code&gt;&lt;br&gt;
or &lt;code&gt;/home/your_username/nginx/sites-enabled&lt;/code&gt; anything else that is easily accessible by you.&lt;/p&gt;

&lt;p&gt;Next, open the nginx configuration file at &lt;code&gt;/etc/nginx/nginx.conf&lt;/code&gt; and add the following line in the http block.&lt;/p&gt;

&lt;pre&gt;
include /home/your_username/nginx/domains/*;
&lt;/pre&gt;

&lt;p&gt;If you want to use &lt;code&gt;/home/your_username/nginx/sites-enabled&lt;/code&gt; then add the following line in the http block.&lt;/p&gt;

&lt;pre&gt;http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    gzip on;
    gzip_disable "msie6";
    gzip_comp_level 5;
    gzip_min_length 256;
    gzip_proxied any;
    gzip_vary on;

    gzip_types
    application/atom+xml
    application/javascript
    application/json
    application/rss+xml
    application/vnd.ms-fontobject
    application/x-font-ttf
    application/x-web-app-manifest+json
    application/xhtml+xml
    application/xml
    font/opentype
    image/svg+xml
    image/x-icon
    text/css
    text/plain
    text/x-component;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

    #PUT IT HERE
    include /home/your_username/nginx/sites-enabled/*;
}

&lt;/pre&gt;

&lt;p&gt;And if you want the configuration files to have &lt;code&gt;.conf&lt;/code&gt; extension, then add the following line in the http block.&lt;br&gt;
Actually, this is a good practice, and it can give you some idea about the file type.&lt;/p&gt;

&lt;pre&gt;
include /home/your_username/nginx/domains/*.conf;
&lt;/pre&gt;

&lt;p&gt;Now, do the same for &lt;code&gt;/etc/hosts&lt;/code&gt; file. Add the following line at the bottom of the file.&lt;/p&gt;

&lt;pre&gt;
#include "/home/your_username/hosts/custom.conf"
&lt;/pre&gt;

&lt;p&gt;This custom.conf file is easily editable and accessible. So, you can add or remove domains or subdomains easily.&lt;/p&gt;

&lt;h1&gt;
  
  
  Notable points
&lt;/h1&gt;

&lt;p&gt;After applying all previous configurations, sometimes you may get errors about laravel.log file cannot be opened in append mode, or bootstrap/cache is not accessible. This happens because of current users or www-data users permission access. To fix this follow the next steps: &lt;/p&gt;

&lt;p&gt;Never set a directory to 777. you should change directory ownership. so set your current user that you are logged in with as owner and the webserver user (www-data, apache, ...) as the group. You can try this:&lt;/p&gt;

&lt;pre&gt;
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
&lt;/pre&gt;

&lt;p&gt;then to set directory permission try this:&lt;/p&gt;

&lt;pre&gt;
chmod -R 775 storage
chmod -R 775 bootstrap/cache
&lt;/pre&gt;

&lt;p&gt;See more about this configuration at:&lt;a href="https://stackoverflow.com/a/45673457"&gt;https://stackoverflow.com/a/45673457&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;** Happy Coding **&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>laravel</category>
      <category>nginx</category>
      <category>php</category>
    </item>
    <item>
      <title>Vue event modifiers</title>
      <dc:creator>Narayan Adhikary</dc:creator>
      <pubDate>Fri, 18 Mar 2022 09:35:07 +0000</pubDate>
      <link>https://forem.com/wovosoft/vue-event-modifiers-l37</link>
      <guid>https://forem.com/wovosoft/vue-event-modifiers-l37</guid>
      <description>&lt;p&gt;Imagine you want to implement events something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Modal&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;ok.prevent=&lt;/span&gt;&lt;span class="s"&gt;"doNothing"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
Modal Code
&lt;span class="nt"&gt;&amp;lt;/Modal&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is when ok button of the modal is clicked, you want to prevent the event. In that case the prevent modifier can be implemented by code given below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;okButtonClickedMethod&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="c1"&gt;//First emit the ok event, then check if it is prevented or not&lt;/span&gt;
    &lt;span class="nf"&gt;emit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ok&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="c1"&gt;//then hides modal&lt;/span&gt;
     &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaultPrevented&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="c1"&gt;//emitted event is prevented now&lt;/span&gt;
     &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;**** Happy Coding ***&lt;/p&gt;

</description>
    </item>
    <item>
      <title>wovoui's main url updated</title>
      <dc:creator>Narayan Adhikary</dc:creator>
      <pubDate>Tue, 15 Feb 2022 19:06:43 +0000</pubDate>
      <link>https://forem.com/wovosoft/wovouis-main-url-updated-194d</link>
      <guid>https://forem.com/wovosoft/wovouis-main-url-updated-194d</guid>
      <description>&lt;p&gt;We are updating the main documentation url of wovoui to &lt;a href="https://wovoui.wovosoft.com"&gt;https://wovoui.wovosoft.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's now hosted in Vercel and Built with vuepress2. &lt;/p&gt;

</description>
      <category>bootstrap</category>
      <category>vue</category>
      <category>wovoui</category>
      <category>javascript</category>
    </item>
    <item>
      <title>wovoui-icons: Bootstrap 5 icons in Vue 3</title>
      <dc:creator>Narayan Adhikary</dc:creator>
      <pubDate>Sun, 23 Jan 2022 21:08:47 +0000</pubDate>
      <link>https://forem.com/wovosoft/wovoui-icons-bootstrap-5-icons-in-vue-3-2eop</link>
      <guid>https://forem.com/wovosoft/wovoui-icons-bootstrap-5-icons-in-vue-3-2eop</guid>
      <description>&lt;h1&gt;
  
  
  Bootstrap Icons
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/wovosoft/wovoui-icons"&gt;wovoui-icons&lt;/a&gt; are imported&lt;br&gt;
from &lt;a href="https://icons.getbootstrap.com"&gt;Bootstrap 5 icons&lt;/a&gt;. There are almost 1522 icons.&lt;br&gt;
And in the future, if Bootstrap provides some more icons, those will be available too as soon as possible.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/wovosoft/wovoui-icons"&gt;wovoui-icons&lt;/a&gt; are wrapped in a separate package so that it's dependency can &lt;br&gt;
be optional.&lt;/p&gt;
&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Of-course You can use the icons using the provided &lt;a href="https://icons.getbootstrap.com/#install"&gt;methods&lt;/a&gt; of &lt;a href="https://icons.getbootstrap.com"&gt;Bootstrap 5&lt;/a&gt;. For example,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="sx"&gt;url("https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css")&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bootstrap-icons&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Using NPM
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @wovosoft/wovoui-icons 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Using yarn
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add @wovosoft/wovoui-icons
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to Use
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Activity&lt;/span&gt; &lt;span class="na"&gt;:size=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Alarm&lt;/span&gt; &lt;span class="na"&gt;:size=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Activity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Alarm&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@wovosoft/wovoui-icons&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;components&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Activity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Alarm&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>bootstrap</category>
      <category>vue</category>
      <category>wovosoft</category>
      <category>wovou</category>
    </item>
    <item>
      <title>Vue Localization Package</title>
      <dc:creator>Narayan Adhikary</dc:creator>
      <pubDate>Fri, 18 Dec 2020 16:10:18 +0000</pubDate>
      <link>https://forem.com/wovosoft/vue-localization-package-5bd7</link>
      <guid>https://forem.com/wovosoft/vue-localization-package-5bd7</guid>
      <description>&lt;p&gt;Earlier I was using my self developed localization package to translate my Vue Applications. From last couple of days I am using &lt;a href="https://kazupon.github.io/vue-i18n/"&gt;https://kazupon.github.io/vue-i18n/&lt;/a&gt; . This package is just awesome. Now I don't need to maintain my own repository, no need to push and pull new updates. That is really a great package for localization. If You are a newbie or professional in Vue Ecosystem, try this package, You will be amazed. &lt;/p&gt;

&lt;h1&gt;
  
  
  Some features:
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;String Localization&lt;/li&gt;
&lt;li&gt;Number Localization&lt;/li&gt;
&lt;li&gt;DateTime Localization&lt;/li&gt;
&lt;li&gt;HMR support during development. &lt;/li&gt;
&lt;li&gt;Can be easily integrated with popular Nuxtjs. &lt;/li&gt;
&lt;li&gt;Translations can be lazy loaded. So, you can integrate server side conditions. &lt;/li&gt;
&lt;li&gt;Custom Directive Localization &lt;/li&gt;
&lt;li&gt;URL localization&lt;/li&gt;
&lt;li&gt;Can be used with transitions&lt;/li&gt;
&lt;li&gt;Supports formatting translation out-of-the-box. Just like sprintf in php and printf in C. &lt;/li&gt;
&lt;li&gt;Component Based Localization. &lt;/li&gt;
&lt;li&gt;Official supports for Nuxtjs, Vue CLI, webpack, ESLint , Jetbrains Intellij platform (Webstorm, Phpstorm etc) ,
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>vue</category>
      <category>frontenddeveloper</category>
      <category>javascriptdevelopers</category>
      <category>nuxt</category>
    </item>
    <item>
      <title>Bootstrap Vue Font-Awesome Icon Picker</title>
      <dc:creator>Narayan Adhikary</dc:creator>
      <pubDate>Wed, 02 Dec 2020 17:12:13 +0000</pubDate>
      <link>https://forem.com/wovosoft/bootstrap-vue-font-awesome-icon-picker-67k</link>
      <guid>https://forem.com/wovosoft/bootstrap-vue-font-awesome-icon-picker-67k</guid>
      <description>&lt;h3&gt;Bootstrap Vue Font-Awesome Icon Picker&lt;/h3&gt;

&lt;p&gt;
  This is a simple vuejs plugin for picking font-awesome 5 Icons. 
  &lt;br&gt;
  It Supports Font Awesome 5 Icons.
&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add bootstrap-vue-font-awesome-picker  
or  
npm install bootstrap-vue-font-awesome-picker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Project setup
&lt;/h2&gt;



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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Compiles and hot-reloads for development
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Compiles and minifies for production
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Lints and fixes files
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Quick start
&lt;/h2&gt;

&lt;p&gt;Several quick start options are available:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/wovosoft/bootstrap-vue-font-awesome-picker/archive/0.1.2.zip"&gt;Download the latest release.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Clone the repo: &lt;code&gt;git clone https://github.com/wovosoft/bootstrap-vue-font-awesome-picker.git&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Install with &lt;a href="https://www.npmjs.com/"&gt;npm&lt;/a&gt;: &lt;code&gt;npm install bootstrap-vue-font-awesome-picker&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Install with &lt;a href="https://yarnpkg.com/"&gt;yarn&lt;/a&gt;: &lt;code&gt;yarn add bootstrap-vue-font-awesome-picker&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Status
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/bootstrap-vue-font-awesome-picker"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IhROY-Bw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img.shields.io/npm/v/bootstrap-vue-font-awesome-picker.svg" alt="npm version" width="80" height="20"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's included
&lt;/h2&gt;

&lt;p&gt;Within the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations. You'll see something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bootstrap-vue-font-awesome-picker
└── dist/
    ├── css/
    │   ├── app.css
    └── js/
        ├── app.js
        ├── app.map
        ├── chunk-vendors.js
        ├── chunk-vendors.js.map
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Documentation
&lt;/h2&gt;

&lt;p&gt;You Can Use the Plugin as a compnent directly to your vuejs application as the example written below.&lt;br&gt;&lt;br&gt;
No need to import additional CSS, the plugin will load the required CSS styles automatically.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;template&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;font-awesome-picker&lt;/span&gt; &lt;span class="na"&gt;v-model=&lt;/span&gt;&lt;span class="s"&gt;"icon"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/font-awesome-picker&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/template&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;FontAwesomePicker&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bootstrap-vue-font-awesome-picker&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;MyComponent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;components&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;FontAwesomePicker&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;

        &lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="na"&gt;icon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fas fa-user-cog&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;};&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;If you want to use it as a global plugin, then in your &lt;code&gt;app.js&lt;/code&gt; use it as written below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Vue&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;FontAwesomePicker&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bootstrap-vue-font-awesome-picker&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;Vue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;FontAwesomePicker&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Vue&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;el&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#main&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;Main/&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;components&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;Main&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Another Method is,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Vue&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;FontAwesomePicker&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bootstrap-vue-font-awesome-picker&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Vue&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;el&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#main&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;Main/&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;components&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;FontAwesomePicker&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Creators
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Narayan Adhikary&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://facebook.com/narayan.adhikary"&gt;https://facebook.com/narayan.adhikary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/narai420"&gt;https://github.com/narai420&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//mailto:narayanadhikary24@gmail.com"&gt;narayanadhikary24@gmail.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//mailto:wovosoft@gmail.com"&gt;wovosoft@gmail.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Copyright and license
&lt;/h2&gt;

&lt;p&gt;Code and documentation copyright 2015-2020 the [Wovosoft Authors] . Code released under the &lt;a href="https://github.com/twbs/bootstrap/blob/master/LICENSE"&gt;MIT License&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>bootstrapvue</category>
      <category>fontawesome</category>
      <category>icon</category>
    </item>
  </channel>
</rss>
