<?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: SWAPNIL AHMMED SHISHIR</title>
    <description>The latest articles on DEV Community by SWAPNIL AHMMED SHISHIR (@swapnil-ahmmed-shishir).</description>
    <link>https://dev.to/swapnil-ahmmed-shishir</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%2F2887341%2Fee1708d5-7f5a-4ab7-970c-dd2a59c08d7d.jpeg</url>
      <title>DEV Community: SWAPNIL AHMMED SHISHIR</title>
      <link>https://dev.to/swapnil-ahmmed-shishir</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/swapnil-ahmmed-shishir"/>
    <language>en</language>
    <item>
      <title>FULL PROFESSIONAL ROADMAP WEB APLLICATION</title>
      <dc:creator>SWAPNIL AHMMED SHISHIR</dc:creator>
      <pubDate>Sat, 04 Apr 2026 07:30:42 +0000</pubDate>
      <link>https://dev.to/swapnil-ahmmed-shishir/full-professional-roadmap-web-apllication-135l</link>
      <guid>https://dev.to/swapnil-ahmmed-shishir/full-professional-roadmap-web-apllication-135l</guid>
      <description>&lt;p&gt;🚀 FULL PROFESSIONAL ROADMAP (Step-by-step)&lt;br&gt;
🟢 Phase 0 — Setup (Week 1)&lt;/p&gt;

&lt;p&gt;✔ Already done&lt;/p&gt;

&lt;p&gt;VS Code / Cursor&lt;br&gt;
GitHub&lt;br&gt;
Project template&lt;br&gt;
🟡 Phase 1 — Backend + DB (Weeks 2–6)&lt;/p&gt;

&lt;p&gt;👉 Focus: Core developer skill&lt;/p&gt;

&lt;p&gt;Learn:&lt;br&gt;
Node.js (Express / NestJS)&lt;br&gt;
REST API&lt;br&gt;
Auth (JWT)&lt;br&gt;
PostgreSQL / MongoDB&lt;/p&gt;

&lt;p&gt;👉 Build:&lt;/p&gt;

&lt;p&gt;CRUD API&lt;br&gt;
Auth system&lt;br&gt;
🟠 Phase 2 — Testing (Weeks 5–7) ✅ (IMPORTANT)&lt;/p&gt;

&lt;p&gt;👉 এখানেই আসবে:&lt;/p&gt;

&lt;p&gt;🧪 Jest&lt;br&gt;
Learn:&lt;br&gt;
Unit test&lt;br&gt;
API test&lt;br&gt;
Basic integration test&lt;/p&gt;

&lt;p&gt;👉 কেন এখানে?&lt;br&gt;
👉 কারণ early testing habit = senior mindset&lt;/p&gt;

&lt;p&gt;🔵 Phase 3 — Caching + Performance (Weeks 7–9)&lt;/p&gt;

&lt;p&gt;👉 এখানেই আসবে:&lt;/p&gt;

&lt;p&gt;⚡ Redis&lt;br&gt;
Learn:&lt;br&gt;
Cache API response&lt;br&gt;
Session store&lt;br&gt;
Rate limiting&lt;/p&gt;

&lt;p&gt;👉 Build:&lt;/p&gt;

&lt;p&gt;Slow API → Redis দিয়ে fast করো&lt;br&gt;
🟣 Phase 4 — Queue System (Weeks 9–11)&lt;/p&gt;

&lt;p&gt;👉 এখানেই আসবে:&lt;/p&gt;

&lt;p&gt;📩 Queue (BullMQ / RabbitMQ)&lt;br&gt;
Learn:&lt;br&gt;
Background jobs&lt;br&gt;
Email sending&lt;br&gt;
Image processing&lt;/p&gt;

&lt;p&gt;👉 Build:&lt;/p&gt;

&lt;p&gt;Email queue system&lt;br&gt;
🔴 Phase 5 — Advanced Messaging (Weeks 11–14)&lt;/p&gt;

&lt;p&gt;👉 এখানেই আসবে:&lt;/p&gt;

&lt;p&gt;🚀 Apache Kafka&lt;/p&gt;

&lt;p&gt;👉 IMPORTANT:&lt;br&gt;
👉 Kafka beginner না — advanced&lt;/p&gt;

&lt;p&gt;Use case:&lt;br&gt;
Microservices communication&lt;br&gt;
Event-driven system&lt;/p&gt;

&lt;p&gt;👉 Skip করতে পারো initially&lt;br&gt;
👉 পরে শিখলেও problem নাই&lt;/p&gt;

&lt;p&gt;🟤 Phase 6 — System Design (Weeks 12–16)&lt;/p&gt;

&lt;p&gt;👉 এখন তুমি বুঝতে পারবে:&lt;/p&gt;

&lt;p&gt;Load balancing&lt;br&gt;
Scaling&lt;br&gt;
Caching strategy&lt;br&gt;
DB optimization&lt;br&gt;
⚫ Phase 7 — Architecture (Weeks 16–20)&lt;br&gt;
Modular monolith&lt;br&gt;
Clean architecture&lt;br&gt;
Code structure&lt;br&gt;
🟢 Phase 8 — DevOps (Weeks 20–26)&lt;br&gt;
Docker&lt;br&gt;
CI/CD&lt;br&gt;
Nginx&lt;br&gt;
VPS / AWS&lt;br&gt;
🧪 Phase 9 — Advanced Testing (Weeks 24–28)&lt;br&gt;
Integration test&lt;br&gt;
E2E (Playwright)&lt;br&gt;
📊 Phase 10 — Monitoring (Weeks 28–32)&lt;br&gt;
Logging&lt;br&gt;
Sentry&lt;br&gt;
Grafana&lt;br&gt;
🎨 Phase 11 — Frontend Scaling (Parallel)&lt;br&gt;
Next.js&lt;br&gt;
State management&lt;br&gt;
Optimization&lt;br&gt;
🤖 Phase 12 — AI Integration (Last)&lt;br&gt;
OpenAI API&lt;br&gt;
LangChain&lt;/p&gt;

</description>
    </item>
    <item>
      <title>একটা Dedicated Server এ অনেকগুলো আলাদা domain চালানো</title>
      <dc:creator>SWAPNIL AHMMED SHISHIR</dc:creator>
      <pubDate>Thu, 05 Mar 2026 06:20:54 +0000</pubDate>
      <link>https://dev.to/swapnil-ahmmed-shishir/ekttaa-dedicated-server-e-anekgulo-aalaadaa-domain-caalaano-61b</link>
      <guid>https://dev.to/swapnil-ahmmed-shishir/ekttaa-dedicated-server-e-anekgulo-aalaadaa-domain-caalaano-61b</guid>
      <description>&lt;h2&gt;
  
  
  1️⃣ মূল আইডিয়া (Concept)
&lt;/h2&gt;

&lt;p&gt;একটা server এর &lt;strong&gt;একটাই IP থাকে&lt;/strong&gt;, কিন্তু সেই IP তে &lt;strong&gt;অনেকগুলো domain point করতে পারে&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Domain&lt;/th&gt;
&lt;th&gt;Server IP&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;example1.com&lt;/td&gt;
&lt;td&gt;103.xxx.xxx.xxx&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;example2.com&lt;/td&gt;
&lt;td&gt;103.xxx.xxx.xxx&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;example3.com&lt;/td&gt;
&lt;td&gt;103.xxx.xxx.xxx&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;সব domain একই server এ আসবে, তারপর &lt;strong&gt;web server (Nginx বা Apache)&lt;/strong&gt; দেখে ঠিক করবে কোন domain এর request কোন folder থেকে serve হবে।&lt;/p&gt;




&lt;h2&gt;
  
  
  2️⃣ Step 1: Domain DNS Server এ Point করা
&lt;/h2&gt;

&lt;p&gt;প্রথমে domain এর DNS এ গিয়ে &lt;strong&gt;A Record&lt;/strong&gt; add করতে হবে।&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Type: A
Name: @
Value: 103.163.xxx.xxx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example domains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example1.com → 103.xxx.xxx.xxx
example2.com → 103.xxx.xxx.xxx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;সবগুলো একই server এ যাবে।&lt;/p&gt;




&lt;h2&gt;
  
  
  3️⃣ Step 2: Server এ আলাদা Folder বানানো
&lt;/h2&gt;

&lt;p&gt;Server এ প্রতিটা domain এর জন্য আলাদা folder রাখা ভালো।&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

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

example1.com
example2.com
example3.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/var/www/example1.com
/var/www/example2.com
/var/www/example3.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4️⃣ Step 3: Nginx Virtual Host Setup
&lt;/h2&gt;

&lt;p&gt;Nginx ব্যবহার করলে প্রতিটা domain এর জন্য &lt;strong&gt;server block&lt;/strong&gt; বানাতে হয়।&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/etc/nginx/sites-available/example1.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;example1.com&lt;/span&gt; &lt;span class="s"&gt;www.example1.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;root&lt;/span&gt; &lt;span class="n"&gt;/var/www/example1.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;index&lt;/span&gt; &lt;span class="s"&gt;index.html&lt;/span&gt; &lt;span class="s"&gt;index.php&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;try_files&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আরেকটা domain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/etc/nginx/sites-available/example2.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;server {
    listen 80;
    server_name example2.com www.example2.com;

    root /var/www/example2.com;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5️⃣ Step 4: Enable Site
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ln -s /etc/nginx/sites-available/example1.com /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/example2.com /etc/nginx/sites-enabled/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর reload&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl reload nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  6️⃣ SSL Add করা (HTTPS)
&lt;/h2&gt;

&lt;p&gt;Let's Encrypt দিয়ে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo certbot --nginx -d example1.com -d www.example1.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  7️⃣ Final Result
&lt;/h2&gt;

&lt;p&gt;একই server এ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example1.com → /var/www/example1.com
example2.com → /var/www/example2.com
example3.com → /var/www/example3.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;সবগুলো &lt;strong&gt;একই server কিন্তু আলাদা website&lt;/strong&gt;।&lt;/p&gt;




&lt;p&gt;💡 &lt;strong&gt;Real Example (Production)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;একটা dedicated server এ এমন হতে পারে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/var/www
   ecommerce.com
   blog.com
   companysite.com
   api.companysite.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔥 MERN Project হলে কিভাবে হবে
&lt;/h2&gt;

&lt;p&gt;যদি Node.js app হয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pm2 start app.js --name ecommerce
pm2 start app.js --name blog
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর nginx দিয়ে reverse proxy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com → localhost:3000
blog.com → localhost:4000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>devops</category>
      <category>networking</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Complete Guide to Fix Node.js, Apache, Passenger, and Deployment Issues on cPanel and Dedicated Servers</title>
      <dc:creator>SWAPNIL AHMMED SHISHIR</dc:creator>
      <pubDate>Mon, 09 Feb 2026 07:38:14 +0000</pubDate>
      <link>https://dev.to/swapnil-ahmmed-shishir/complete-guide-to-fix-nodejs-apache-passenger-and-deployment-issues-on-cpanel-and-dedicated-380a</link>
      <guid>https://dev.to/swapnil-ahmmed-shishir/complete-guide-to-fix-nodejs-apache-passenger-and-deployment-issues-on-cpanel-and-dedicated-380a</guid>
      <description>&lt;p&gt;Running Node.js applications on a cPanel or CloudLinux server can sometimes become complicated, especially when dealing with CageFS, Apache modules, Passenger configuration, permissions, and Git deployments. This guide provides a structured, beginner-friendly approach to installing Node.js, configuring SSH, fixing Passenger errors, resolving permission issues, and deploying applications properly.&lt;/p&gt;

&lt;p&gt;The steps below follow a professional server workflow so that even beginners can diagnose and resolve common server problems without confusion.&lt;/p&gt;

&lt;h1&gt;
  
  
  Table of Contents
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Server Preparation&lt;/li&gt;
&lt;li&gt;Generate SSH Keys and Connect GitHub&lt;/li&gt;
&lt;li&gt;Install Node.js Properly&lt;/li&gt;
&lt;li&gt;Fix CageFS Issues&lt;/li&gt;
&lt;li&gt;Install Apache Modules&lt;/li&gt;
&lt;li&gt;Fix Passenger Errors&lt;/li&gt;
&lt;li&gt;Resolve Permission Problems&lt;/li&gt;
&lt;li&gt;Deploy Node Application Correctly&lt;/li&gt;
&lt;li&gt;Restart Application Safely&lt;/li&gt;
&lt;li&gt;Check Logs and Debug Errors&lt;/li&gt;
&lt;li&gt;Best Practices for Production Servers&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  1. Server Preparation
&lt;/h1&gt;

&lt;p&gt;Always start by connecting to your server via SSH.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh username@server-ip &lt;span class="nt"&gt;-p&lt;/span&gt; PORT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check that SSH is running on the expected port:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ss &lt;span class="nt"&gt;-tulpn&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;ssh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you see a port such as &lt;code&gt;1157&lt;/code&gt;, always use that port when connecting or configuring CI/CD.&lt;/p&gt;

&lt;h1&gt;
  
  
  2. Generate SSH Key and Connect GitHub
&lt;/h1&gt;

&lt;p&gt;Secure Git access is required for automated deployments.&lt;/p&gt;

&lt;p&gt;Generate a new SSH key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; ed25519 &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"server"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Press Enter three times to accept defaults.&lt;/p&gt;

&lt;p&gt;Now display the public key:&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;cat&lt;/span&gt; ~/.ssh/id_ed25519.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy this and add it to your Git provider under &lt;strong&gt;SSH Keys&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure SSH for GitHub
&lt;/h2&gt;

&lt;p&gt;Create or edit the SSH config file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.ssh/config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Test the connection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-T&lt;/span&gt; git@github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If authentication succeeds, Git is ready.&lt;/p&gt;

&lt;h1&gt;
  
  
  3. Install Node.js Correctly
&lt;/h1&gt;

&lt;p&gt;Many Node issues occur because Node is installed for root but not available to cPanel users.&lt;/p&gt;

&lt;p&gt;The safest approach is installing Node with NVM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install NVM
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-o-&lt;/span&gt; https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify installation:&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;command&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; nvm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Install Node LTS
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--lts&lt;/span&gt;
nvm use &lt;span class="nt"&gt;--lts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Confirm:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Ensure Node Loads Automatically
&lt;/h2&gt;

&lt;p&gt;Edit bash configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add:&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;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;:/usr/local/bin:/usr/bin:/bin

&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;NVM_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.nvm"&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/nvm.sh"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/nvm.sh"&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/bash_completion"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/bash_completion"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reload:&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;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check Node location:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;which node
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Typical output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/usr/local/bin/node
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  4. Fix CageFS Issues (CloudLinux)
&lt;/h1&gt;

&lt;p&gt;CageFS isolates users for security. Sometimes Node or Passenger is installed but invisible inside the cage.&lt;/p&gt;

&lt;p&gt;Rebuild CageFS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cagefsctl &lt;span class="nt"&gt;--force-update&lt;/span&gt;
cagefsctl &lt;span class="nt"&gt;-M&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enable CageFS for a user:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cagefsctl &lt;span class="nt"&gt;--enable&lt;/span&gt; username
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If Node is not available inside CageFS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cagefsctl &lt;span class="nt"&gt;--addrpm&lt;/span&gt; nodejs
cagefsctl &lt;span class="nt"&gt;--force-update&lt;/span&gt;
cagefsctl &lt;span class="nt"&gt;-M&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  5. Install Apache Proxy Modules
&lt;/h1&gt;

&lt;p&gt;Required when routing traffic to Node apps.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yum &lt;span class="nb"&gt;install &lt;/span&gt;ea-apache24-mod_proxy ea-apache24-mod_proxy_http &lt;span class="nt"&gt;-y&lt;/span&gt;
systemctl restart httpd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  6. Install and Fix Passenger
&lt;/h1&gt;

&lt;p&gt;Passenger allows Node apps to run through Apache.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify Module
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;httpd &lt;span class="nt"&gt;-M&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;passenger
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If missing, install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yum &lt;span class="nb"&gt;install &lt;/span&gt;ea-apache24-mod-passenger &lt;span class="nt"&gt;-y&lt;/span&gt;
yum &lt;span class="nb"&gt;install &lt;/span&gt;ea-apache24-mod_env &lt;span class="nt"&gt;-y&lt;/span&gt;
/scripts/restartsrv_httpd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Validate Passenger Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;passenger-config validate-install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Common Passenger Error Fix
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Error:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SpawnEnvSetupperShell:
/usr/libexec/passenger/PassengerAgent: No such file or directory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;First verify the file exists:&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;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; /usr/libexec/passenger
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If missing or corrupted:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yum remove ea-apache24-mod-passenger &lt;span class="nt"&gt;-y&lt;/span&gt;
yum &lt;span class="nb"&gt;install &lt;/span&gt;ea-apache24-mod-passenger &lt;span class="nt"&gt;-y&lt;/span&gt;
/scripts/restartsrv_httpd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then rebuild CageFS again:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cagefsctl &lt;span class="nt"&gt;--force-update&lt;/span&gt;
cagefsctl &lt;span class="nt"&gt;-M&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Confirm inside CageFS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cagefsctl &lt;span class="nt"&gt;--enter&lt;/span&gt; username
&lt;span class="nb"&gt;ls&lt;/span&gt; /usr/libexec/passenger
&lt;span class="nb"&gt;exit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  If Apache Config Needs Rebuild
&lt;/h2&gt;

&lt;p&gt;Check configuration files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano /etc/apache2/conf.modules.d/130_mod_passenger.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano /etc/apache2/conf.d/passenger.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then rebuild:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/scripts/rebuildhttpdconf
/scripts/restartsrv_httpd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  7. Fix Permission Problems
&lt;/h1&gt;

&lt;p&gt;Permission errors are extremely common when root installs dependencies.&lt;/p&gt;

&lt;p&gt;Set ownership:&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;chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; username:username /home/username
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Correct directory permissions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find /home/username &lt;span class="nt"&gt;-type&lt;/span&gt; d &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;chmod &lt;/span&gt;755 &lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="se"&gt;\;&lt;/span&gt;
find /home/username &lt;span class="nt"&gt;-type&lt;/span&gt; f &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;chmod &lt;/span&gt;644 &lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="se"&gt;\;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fix logs:&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;chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; username:username /home/username/logs
&lt;span class="nb"&gt;chmod&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; 755 /home/username/logs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  8. Deploy Node Application Properly
&lt;/h1&gt;

&lt;p&gt;Navigate to your project:&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;cd&lt;/span&gt; /home/username/project-folder
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When new code arrives:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git fetch origin
git reset &lt;span class="nt"&gt;--hard&lt;/span&gt; origin/main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ensures the server matches Git exactly.&lt;/p&gt;

&lt;p&gt;Install dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm ci
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build production app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  9. Restart Application Safely (Passenger)
&lt;/h1&gt;

&lt;p&gt;Create restart trigger:&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;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; tmp
&lt;span class="nb"&gt;touch &lt;/span&gt;tmp/restart.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Passenger automatically reloads the app.&lt;/p&gt;

&lt;p&gt;No server restart required.&lt;/p&gt;

&lt;h1&gt;
  
  
  10. Monitor Logs and Debug Errors
&lt;/h1&gt;

&lt;p&gt;Apache error log:&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;tail&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /usr/local/apache/logs/error_log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Search for Passenger binary:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find / &lt;span class="nt"&gt;-name&lt;/span&gt; PassengerAgent 2&amp;gt;/dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check installed RPM packages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cagefsctl &lt;span class="nt"&gt;--list-rpm&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;passenger
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Validate directory:&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;ls&lt;/span&gt; &lt;span class="nt"&gt;-ld&lt;/span&gt; /usr/libexec/passenger
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  11. Critical Production Best Practices
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Never Edit Code on the Server
&lt;/h2&gt;

&lt;p&gt;Always follow this workflow:&lt;/p&gt;

&lt;p&gt;Local Machine → Git → Server Pull&lt;/p&gt;

&lt;p&gt;Avoid committing directly on production servers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use npm ci Instead of npm install
&lt;/h2&gt;

&lt;p&gt;Benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster installs&lt;/li&gt;
&lt;li&gt;Clean dependency tree&lt;/li&gt;
&lt;li&gt;No version mismatch&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Avoid Running Node as Root
&lt;/h2&gt;

&lt;p&gt;Always use a standard user.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep Permissions Consistent
&lt;/h2&gt;

&lt;p&gt;Incorrect permissions cause build failures and runtime crashes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Always Reset Instead of Pull on Production
&lt;/h2&gt;

&lt;p&gt;Use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git fetch origin
git reset &lt;span class="nt"&gt;--hard&lt;/span&gt; origin/main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Avoid merge commits on servers.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Managing Node.js applications on cPanel or CloudLinux servers requires understanding how Apache, Passenger, CageFS, permissions, and Git deployments interact. Most production issues arise from incorrect installations, missing CageFS mounts, or permission conflicts.&lt;/p&gt;

&lt;p&gt;By following this structured approach, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install Node properly&lt;/li&gt;
&lt;li&gt;Fix Passenger errors&lt;/li&gt;
&lt;li&gt;Resolve permission issues&lt;/li&gt;
&lt;li&gt;Deploy applications safely&lt;/li&gt;
&lt;li&gt;Debug server problems quickly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once configured correctly, your server becomes stable, predictable, and production-ready.&lt;/p&gt;

&lt;p&gt;A well-configured server is not just about running code — it is about creating an environment where deployments are repeatable, secure, and free from unexpected failures.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>linux</category>
      <category>node</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Biggner pm2, nginx, GitHub action setup dedicated server</title>
      <dc:creator>SWAPNIL AHMMED SHISHIR</dc:creator>
      <pubDate>Sun, 08 Feb 2026 17:06:34 +0000</pubDate>
      <link>https://dev.to/swapnil-ahmmed-shishir/biggner-pm2-nginx-github-action-setup-dedicated-server-2ki</link>
      <guid>https://dev.to/swapnil-ahmmed-shishir/biggner-pm2-nginx-github-action-setup-dedicated-server-2ki</guid>
      <description>&lt;p&gt;👉 GitHub password allow করে না .&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Solution → SSH Key (BEST &amp;amp; STANDARD)
&lt;/h2&gt;

&lt;p&gt;HTTPS use করা = beginner mistake 😄&lt;br&gt;
Production server always uses SSH.&lt;/p&gt;


&lt;h1&gt;
  
  
  ✅ STEP 1 — Generate SSH Key (Server)
&lt;/h1&gt;

&lt;p&gt;Server এ run করো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; ed25519 &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"server"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Press Enter → Enter → Enter&lt;br&gt;
(no password)&lt;/p&gt;

&lt;p&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="nb"&gt;cat&lt;/span&gt; ~/.ssh/id_ed25519.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output copy করো.&lt;/p&gt;




&lt;h1&gt;
  
  
  ✅ STEP 2 — Add SSH Key to GitHub
&lt;/h1&gt;

&lt;p&gt;Go to:&lt;/p&gt;

&lt;p&gt;👉 GitHub → Settings&lt;br&gt;
👉 SSH and GPG Keys&lt;br&gt;
👉 New SSH Key&lt;/p&gt;

&lt;p&gt;Paste key.&lt;/p&gt;

&lt;p&gt;Save.&lt;/p&gt;


&lt;h1&gt;
  
  
  ✅ STEP 3 — Clone Again (IMPORTANT)
&lt;/h1&gt;

&lt;p&gt;Now use SSH:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone git@github.com:url.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 DONE ✅&lt;br&gt;
আর username/password চাইবে না.&lt;/p&gt;


&lt;h1&gt;
  
  
  🔥 STEP 4 — Install Node (If not installed)
&lt;/h1&gt;

&lt;p&gt;Check:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;If missing:&lt;/p&gt;

&lt;p&gt;👉 Install Node 20 (recommended)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VERY IMPORTANT:&lt;/strong&gt;&lt;br&gt;
Use &lt;strong&gt;NVM&lt;/strong&gt; (never install Node globally on production)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-o-&lt;/span&gt; https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;reload:&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;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install node:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm &lt;span class="nb"&gt;install &lt;/span&gt;20
nvm use 20
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🔥 STEP 5 — Install PM2 (Production Manager)
&lt;/h1&gt;

&lt;p&gt;PM2 keeps the app alive.&lt;/p&gt;

&lt;p&gt;Install:&lt;br&gt;
&lt;/p&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; &lt;span class="nt"&gt;-g&lt;/span&gt; pm2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;






&lt;h1&gt;
  
  
  🔥 STEP 6 — First Build (Manual One Time)
&lt;/h1&gt;

&lt;p&gt;Go project:&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;cd &lt;/span&gt;landing-page-katsana
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install:&lt;br&gt;
&lt;/p&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;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pm2 start npm &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"demo"&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pm2 list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If running → perfect ✅&lt;/p&gt;

&lt;p&gt;Auto start after reboot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pm2 startup
pm2 save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;VERY IMPORTANT — don’t skip.&lt;/p&gt;




&lt;h1&gt;
  
  
  🔥 STEP 7 — Setup NGINX (Reverse Proxy)
&lt;/h1&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;👉 Port 3000 expose করা is dangerous&lt;br&gt;
👉 Nginx handles domain + SSL + speed.&lt;/p&gt;

&lt;p&gt;Install:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Start:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl start nginx
systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ✅ Create Config
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano /etc/nginx/conf.d/fileName.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;example.com.bd&lt;/span&gt; &lt;span class="s"&gt;www.example.com.bd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://localhost:3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Upgrade&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;'upgrade'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt; &lt;span class="nv"&gt;$host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_cache_bypass&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save.&lt;/p&gt;

&lt;p&gt;Test:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Reload:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl reload nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Now site LIVE 🎉&lt;/p&gt;




&lt;h1&gt;
  
  
  🔥 MOST IMPORTANT PART (AUTO DEPLOY)
&lt;/h1&gt;

&lt;p&gt;Now আমরা automation করবো.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⭐ Best Method → GitHub Action + SSH Deploy
&lt;/h2&gt;

&lt;p&gt;No FTP needed.&lt;br&gt;
Real DevOps style.&lt;/p&gt;


&lt;h1&gt;
  
  
  ✅ STEP 8 — Create GitHub Secrets
&lt;/h1&gt;

&lt;p&gt;GitHub repo → Settings → Secrets → Actions&lt;/p&gt;

&lt;p&gt;Create:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HOST = server ip
USERNAME = root
SSH_KEY = your private key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To get the private key:&lt;/p&gt;

&lt;p&gt;On your PC:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat ~/.ssh/id_ed25519
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy the full key.&lt;/p&gt;




&lt;h1&gt;
  
  
  ✅ STEP 9 — GitHub Action (AUTO DEPLOY)
&lt;/h1&gt;

&lt;p&gt;Create:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.github/workflows/deploy.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deploy to Dedicated Server&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deploy via SSH&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;appleboy/ssh-action@v1.0.3&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.HOST }}&lt;/span&gt;
          &lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.USERNAME }}&lt;/span&gt;
          &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.SSH_KEY }}&lt;/span&gt;
          &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
            &lt;span class="s"&gt;cd /home/katsan/landing-page/landing-page&lt;/span&gt;

            &lt;span class="s"&gt;git pull origin main&lt;/span&gt;

            &lt;span class="s"&gt;npm install&lt;/span&gt;

            &lt;span class="s"&gt;npm run build&lt;/span&gt;

            &lt;span class="s"&gt;pm2 restart katsan&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🔥 RESULT (Now Your Flow)
&lt;/h1&gt;

&lt;p&gt;You push code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👇&lt;/p&gt;

&lt;p&gt;GitHub Action runs&lt;br&gt;
👇&lt;br&gt;
SSH into the server&lt;br&gt;
👇&lt;br&gt;
git pull&lt;br&gt;
👇&lt;br&gt;
build&lt;br&gt;
👇&lt;br&gt;
PM2 restart&lt;/p&gt;

&lt;p&gt;🔥 ZERO manual work.&lt;/p&gt;


&lt;h1&gt;
  
  
  ⭐ PRO TIP (Senior Secret)
&lt;/h1&gt;

&lt;p&gt;Use this instead of &lt;code&gt;npm install&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;👉 faster&lt;br&gt;
👉 cleaner&lt;br&gt;
👉 production safe&lt;/p&gt;


&lt;h1&gt;
  
  
  🚨 VERY IMPORTANT SECURITY WARNING
&lt;/h1&gt;

&lt;p&gt;👉 NEVER use root for deployment long term.&lt;/p&gt;

&lt;p&gt;Later create user:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Give sudo.&lt;/p&gt;

&lt;p&gt;More secure.&lt;/p&gt;




&lt;h1&gt;
  
  
  🔥 Architecture You Just Built
&lt;/h1&gt;

&lt;p&gt;This is used by:&lt;/p&gt;

&lt;p&gt;👉 SaaS companies&lt;br&gt;
👉 production startups&lt;br&gt;
👉 high traffic apps&lt;/p&gt;

&lt;p&gt;You are no longer a beginner after this 😄&lt;/p&gt;




&lt;p&gt;If you want — next level setup আমি তোমাকে দিতে পারি:&lt;/p&gt;

&lt;p&gt;🔥 ZERO downtime deploy&lt;br&gt;
🔥 Blue-green deployment&lt;br&gt;
🔥 Docker setup&lt;br&gt;
🔥 CI/CD pro pipeline&lt;br&gt;
🔥 Auto SSL&lt;br&gt;
🔥 Server hardening&lt;br&gt;
🔥 Fail2ban&lt;br&gt;
🔥 Redis cache&lt;br&gt;
🔥 5x Next.js speed&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>devops</category>
      <category>github</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>তুমি কি cPanel থেকে ইমেইল তোমার Android ফোনে কনফিগার করতে চাও।</title>
      <dc:creator>SWAPNIL AHMMED SHISHIR</dc:creator>
      <pubDate>Thu, 02 Oct 2025 17:54:51 +0000</pubDate>
      <link>https://dev.to/swapnil-ahmmed-shishir/tumi-ki-cpanel-theke-imeil-tomaar-android-phone-knphigaar-krte-caao--5395</link>
      <guid>https://dev.to/swapnil-ahmmed-shishir/tumi-ki-cpanel-theke-imeil-tomaar-android-phone-knphigaar-krte-caao--5395</guid>
      <description>&lt;p&gt;আমি নিচে স্টেপ বাই স্টেপ বাংলায় গাইড দিলাম ।&lt;/p&gt;

&lt;p&gt;📌 Android এ cPanel ইমেইল (&lt;a href="mailto:info@example.com"&gt;info@example.com&lt;/a&gt;&lt;br&gt;
) সেটআপ করার নিয়ম ।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Android ফোনে Gmail App (অথবা Mail App) খুলো&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gmail App ওপেন করো → উপরের ডানদিকে প্রোফাইল আইকন চাপো → Add another account সিলেক্ট করো।&lt;/p&gt;

&lt;p&gt;“Other” (Google/Yahoo কিছু দেয়া জাবে না) অপশন সিলেক্ট করো।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. তোমার ইমেইল অ্যাড্রেস দাও&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;লিখো: &lt;a href="mailto:info@example.com"&gt;info@example.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;তারপর Next চাপো।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. অ্যাকাউন্ট টাইপ সিলেক্ট করো&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;এখানে দুইটা অপশন আসবে:&lt;/p&gt;

&lt;p&gt;IMAP (Recommended ✅ – একাধিক ডিভাইসে ইমেইল সিঙ্ক থাকে)&lt;/p&gt;

&lt;p&gt;POP3 (ইমেইল শুধু এক ডিভাইসে ডাউনলোড হবে, অন্য কোথাও থাকবে না)&lt;br&gt;
👉 তুমি IMAP বেছে নাও।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Incoming Mail Server (IMAP) Settings&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Username: &lt;a href="mailto:info@exapmle.com"&gt;info@exapmle.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Password: (তোমার ইমেইল পাসওয়ার্ড)&lt;/p&gt;

&lt;p&gt;Server: mail.example.com (সাধারণত cPanel এ এটা দেওয়া থাকে)&lt;/p&gt;

&lt;p&gt;Port: 993&lt;/p&gt;

&lt;p&gt;Security Type: SSL/TLS&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Outgoing Mail Server (SMTP) Settings&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SMTP Server: mail.jsebd.com&lt;/p&gt;

&lt;p&gt;Port: 465 (কখনো কখনো 587)&lt;/p&gt;

&lt;p&gt;Security Type: SSL/TLS&lt;/p&gt;

&lt;p&gt;Require Sign-in: ✅ টিক দাও&lt;/p&gt;

&lt;p&gt;Username: &lt;a href="mailto:info@example.com"&gt;info@example.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Password: (তোমার ইমেইল পাসওয়ার্ড)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Account Options&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sync Frequency → 15 min / 30 min রাখতে পারো&lt;/p&gt;

&lt;p&gt;Notifications → On&lt;/p&gt;

&lt;p&gt;Auto Download Attachments → চাইলে On করতে পারো&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Done চাপো&lt;/strong&gt;   ✅&lt;/p&gt;

&lt;p&gt;এখন থেকে তোমার &lt;a href="mailto:info@example.com"&gt;info@example.com&lt;/a&gt;  মেইল সরাসরি Android ফোনে Gmail/Mail App এ আসবে।&lt;/p&gt;

</description>
      <category>android</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Best Seo Practice in the React.js project</title>
      <dc:creator>SWAPNIL AHMMED SHISHIR</dc:creator>
      <pubDate>Wed, 01 Oct 2025 07:15:14 +0000</pubDate>
      <link>https://dev.to/swapnil-ahmmed-shishir/best-seo-practice-in-the-reactjs-project-11n1</link>
      <guid>https://dev.to/swapnil-ahmmed-shishir/best-seo-practice-in-the-reactjs-project-11n1</guid>
      <description>&lt;p&gt;&lt;strong&gt;১. Crawled – Currently not Indexed&lt;/strong&gt;&lt;br&gt;
Google আপনার পেজগুলো ক্রল করেছে, কিন্তু এখনো ইনডেক্স করেনি। মানে, Search Engine-এ পেজগুলো দেখা যাচ্ছে না।&lt;/p&gt;

&lt;p&gt;কারণ হতে পারে:&lt;br&gt;
Thin content (কম তথ্য)।&lt;br&gt;
Low value content (গুগল মনে করছে গুরুত্বপূর্ণ না)।&lt;br&gt;
অন্য পেজের সাথে অনেক বেশি মিল আছে।&lt;br&gt;
ডুপ্লিকেট কনটেন্ট (প্রোডাক্ট/ক্যাটাগরি একরকম টেক্সট)।&lt;br&gt;
Google এখনো কিউতে রেখেছে (Time delay)।&lt;br&gt;
Proper internal linking নেই ।&lt;br&gt;
টেকনিক্যাল সমস্যা (JS rendering, robots.txt, noindex tag)&lt;/p&gt;

&lt;p&gt;সমাধান:&lt;br&gt;
প্রতিটি পেজে 100% ইউনিক এবং ভালো কনটেন্ট যোগ করুন&lt;br&gt;
মেটা ট্যাগ, টাইটেল, মেটা ডিসক্রিপশন , H1 ,ইউনিক রাখুন&lt;br&gt;
Internal linking বাড়ান  ।&lt;br&gt;
Internal Linking ব্যবহার করুন, যেমন "Related Products", "You may also like"।&lt;br&gt;
কনটেন্টে কিছুটা ডিটেইল (যেমন প্রোডাক্টের ফিচার, FAQ, টেবিল, দাম, ইমেজ Alt Text ইত্যাদি) যোগ করুন।&lt;br&gt;
Robots.txt ও noindex tag ঠিক আছে কিনা চেক করুন&lt;br&gt;
React.js ওয়েবসাইটে সার্ভার সাইড রেন্ডারিং (SSR) বা Static Site Generation (SSG) ব্যবহার করুন (Next.js, Gatsby ইত্যাদি)&lt;br&gt;
sitemap.xml এ সব লিংক দিন এবং GSC এ রি-সাবমিট করুন।&lt;br&gt;
Search Console থেকে “Request Indexing” দিন।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;২. Duplicate without user-selected Canonical&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Google পেয়েছে একাধিক পেজে একই/মিল কনটেন্ট আছে, এবং আপনি কোনটা canonical (মূল) তা Google-কে বলেননি।&lt;/p&gt;

&lt;p&gt;কারণ হতে পারে:&lt;/p&gt;

&lt;p&gt;/total-station/topcon&lt;br&gt;&lt;br&gt;
/category/total-station&lt;br&gt;&lt;br&gt;
/catalog?subcategory=Topcon&lt;/p&gt;

&lt;p&gt;Google কে কনফিউজ করছে – কোনটা আসল লিংক (canonical) বুঝতে পারছে না।&lt;/p&gt;

&lt;p&gt;সমাধান:&lt;/p&gt;

&lt;p&gt;প্রতিটি ডুপ্লিকেট কনটেন্ট পেজে  দিন।&lt;br&gt;
যেমন /catalog?subcategory=Topcon → canonical হবে /total-station/topcon।&lt;br&gt;
React.js-এ  (react-helmet) বা Next.js-এ  ব্যবহার করে canonical tag দিন।&lt;/p&gt;

&lt;p&gt;ডুপ্লিকেট/ফিল্টার URL (যেমন ?subcategory=, ?brand=) Google থেকে hide করতে robots.txt বা noindex ব্যবহার করুন।&lt;/p&gt;

&lt;p&gt;নিশ্চিত করুন, মেটা ট্যাগ, টাইটেল ও ডিসক্রিপশন প্রতিটি পেজে আলাদা।&lt;/p&gt;

&lt;p&gt;Canonical সবসময় কনসিসটেন্ট রাখুন (www vs non-www, slash vs non-slash)।&lt;/p&gt;

&lt;p&gt;ডুপ্লিকেট URL গুলো redirect (301) করে দিন একটিতে।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;৩. Discovered - currently not indexed&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Google আপনার পেজের লিঙ্ক পেয়েছে, কিন্তু এখনো ক্রল করেনি।&lt;/p&gt;

&lt;p&gt;সম্ভব কারণ:&lt;br&gt;
নতুন পেজ বা সাইটম্যাপে লিস্টেড হয়েছে, কিন্তু এখনো ক্রল করেনি।&lt;br&gt;
Server slow বা বেশি পেজ একসাথে সাবমিট করছেন।&lt;br&gt;
Internal linking কম ।&lt;br&gt;
খুব বেশি ডুপ্লিকেট কন্টেন্ট।&lt;br&gt;
পেজে ভ্যালু কম (thin content)।&lt;/p&gt;

&lt;p&gt;সমাধান:&lt;br&gt;
প্রতিটি পেজে Unique Content দিন।&lt;br&gt;
GSC থেকে "Request Indexing" করুন।&lt;br&gt;
সাইটম্যাপ আপডেট করে Google Search Console-এ সাবমিট করুন।&lt;br&gt;
Robots.txt ঠিক আছে কিনা দেখুন।&lt;br&gt;
যদি নতুন সাইট হয়, সময় দিন ।&lt;/p&gt;

&lt;p&gt;React.js ওয়েবসাইটে SEO বাড়াতে সাধারণ টিপস:&lt;/p&gt;


&lt;p&gt;React SPA হলে Server-Side Rendering (SSR) বা Static Site Generation (SSG) ব্যবহার করুন। Google অনেক সময় JS-rendered কনটেন্ট ঠিকমতো ইনডেক্স করে না।&lt;br&gt;&lt;br&gt;
প্রতিটি পেজে ইউনিক (Title, Meta Description, Canonical Tag, OG Tags) &lt;/p&gt;, ,  ট্যাগ দিন।&lt;br&gt;&lt;br&gt;
Canonical tag প্রতি পেজে দিন।&lt;br&gt;&lt;br&gt;
Sitemap.xml ও robots.txt ঠিকভাবে তৈরি করুন ।&lt;br&gt;&lt;br&gt;
Internal linking বাড়ান।&lt;br&gt;&lt;br&gt;
Image গুলোতে Alt Attribute দিন।&lt;br&gt;&lt;br&gt;
Google Search Console-এ রেগুলার মনিটর করুন ।

</description>
      <category>javascript</category>
      <category>react</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Mastering the Art of Project Management 🚀 From Idea to Delivery</title>
      <dc:creator>SWAPNIL AHMMED SHISHIR</dc:creator>
      <pubDate>Sun, 31 Aug 2025 17:33:55 +0000</pubDate>
      <link>https://dev.to/swapnil-ahmmed-shishir/mastering-the-art-of-project-management-from-idea-to-delivery-525n</link>
      <guid>https://dev.to/swapnil-ahmmed-shishir/mastering-the-art-of-project-management-from-idea-to-delivery-525n</guid>
      <description>&lt;p&gt;🚀 নতুন একটা প্রজেক্ট হাতে আসলেই আসল খেলা শুরু!&lt;/p&gt;

&lt;p&gt;আইটি প্রজেক্ট ম্যানেজ করা মানে কিন্তু শুধু কোড আর ডিজাইন না—এটা পুরো একটা Journey।&lt;/p&gt;

&lt;p&gt;🔹 Requirement নেওয়া থেকে শুরু করে&lt;br&gt;
🔹 Planning, Execution, Testing&lt;br&gt;
🔹 আর শেষে Delivery + Support &lt;/p&gt;

&lt;p&gt;প্রজেক্ট ম্যানেজমেন্ট আসলে একধরনের Team Game – যেখানে সঠিক সময়, সঠিক সিদ্ধান্ত আর টিমওয়ার্ক-ই সাফল্যের চাবিকাঠি। 💡&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fkwrykxnnc3ow96vejszy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fkwrykxnnc3ow96vejszy.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;১. Project Initiation (প্রজেক্ট শুরু)&lt;/p&gt;

&lt;p&gt;Client Requirement Collection: ক্লায়েন্টের সাথে মিটিং করে তাদের চাহিদা, উদ্দেশ্য, লক্ষ্য এবং বাজেট বোঝা।&lt;/p&gt;

&lt;p&gt;Feasibility Study: প্রযুক্তিগতভাবে এটা সম্ভব কি না, বাজেট/সময় অনুযায়ী করা যাবে কি না, সেটা যাচাই।&lt;/p&gt;

&lt;p&gt;Scope Definition: প্রজেক্টে কী কী থাকবে আর কী কী থাকবে না তা লিখিতভাবে নির্ধারণ।&lt;/p&gt;

&lt;p&gt;Project Charter তৈরি: প্রজেক্টের নাম, উদ্দেশ্য, টিম, বাজেট, টাইমলাইন – এগুলা ডকুমেন্ট করা।&lt;/p&gt;

&lt;p&gt;২. Project Planning (প্রজেক্ট পরিকল্পনা)&lt;/p&gt;

&lt;p&gt;Work Breakdown Structure (WBS): পুরো প্রজেক্টকে ছোট ছোট টাস্কে ভাগ করা।&lt;/p&gt;

&lt;p&gt;Timeline &amp;amp; Milestones: প্রতিটি টাস্কের সময় নির্ধারণ, কোন তারিখে কী ডেলিভার হবে সেটার পরিকল্পনা।&lt;/p&gt;

&lt;p&gt;Resource Planning: কতজন ডেভেলপার, ডিজাইনার, টেস্টার লাগবে, তাদের রোল এবং দায়িত্ব নির্ধারণ।&lt;/p&gt;

&lt;p&gt;Risk Management: সম্ভাব্য রিস্ক (যেমন: ডেডলাইন মিস, ক্লায়েন্টের পরিবর্তিত চাহিদা, টেকনিক্যাল ইস্যু) আগে থেকে লিস্ট করা এবং সমাধানের পরিকল্পনা।&lt;/p&gt;

&lt;p&gt;Budgeting: খরচের হিসাব রাখা – ডেভেলপমেন্ট খরচ, সার্ভার খরচ, রিসোর্স খরচ।&lt;/p&gt;

&lt;p&gt;Tools নির্বাচন: (Jira, Trello, Asana, ClickUp, GitHub, Slack, Notion ইত্যাদি)&lt;/p&gt;

&lt;p&gt;৩. Project Execution (প্রজেক্ট বাস্তবায়ন)&lt;/p&gt;

&lt;p&gt;Kick-off Meeting: টিমকে প্রজেক্টের লক্ষ্য ও দায়িত্ব বোঝানো।&lt;/p&gt;

&lt;p&gt;Design Phase: UI/UX ডিজাইন, ওয়্যারফ্রেম, প্রোটোটাইপ তৈরি।&lt;/p&gt;

&lt;p&gt;Development Phase: ব্যাকএন্ড, ফ্রন্টএন্ড, ডাটাবেজ ডেভেলপমেন্ট।&lt;/p&gt;

&lt;p&gt;Agile / Scrum Method: প্রজেক্টকে ছোট ছোট Sprint এ ভাগ করে কাজ করা (প্রতি ১–২ সপ্তাহে ইনক্রিমেন্টাল ডেলিভারি)।&lt;/p&gt;

&lt;p&gt;Daily Stand-up Meetings: প্রতিদিন ছোট মিটিং – কে কী কাজ করছে, কোনো ব্লক আছে কি না।&lt;/p&gt;

&lt;p&gt;Version Control: Git/GitHub ব্যবহার করে কোড ম্যানেজমেন্ট।&lt;/p&gt;

&lt;p&gt;৪. Monitoring &amp;amp; Controlling (পর্যবেক্ষণ ও নিয়ন্ত্রণ)&lt;/p&gt;

&lt;p&gt;Progress Tracking: Jira/Trello তে টাস্কের স্ট্যাটাস ট্র্যাক করা।&lt;/p&gt;

&lt;p&gt;Quality Assurance (QA Testing): প্রতিটি মডিউল টেস্টিং – বাগ, সিকিউরিটি, পারফরম্যান্স।&lt;/p&gt;

&lt;p&gt;Client Feedback Loop: প্রতিটি Sprint শেষে ক্লায়েন্টকে দেখানো ও তাদের ফিডব্যাক নেওয়া।&lt;/p&gt;

&lt;p&gt;Risk Monitoring: নতুন রিস্ক উঠলে সমাধান বের করা।&lt;/p&gt;

&lt;p&gt;Performance Report: টিমের পারফরম্যান্স, ডেডলাইন ট্র্যাক রাখা।&lt;/p&gt;

&lt;p&gt;৫. Project Delivery &amp;amp; Closure (ডেলিভারি ও সমাপ্তি)&lt;/p&gt;

&lt;p&gt;Final Testing &amp;amp; UAT (User Acceptance Testing): ক্লায়েন্টকে টেস্ট করার সুযোগ দেওয়া।&lt;/p&gt;

&lt;p&gt;Deployment: লাইভ সার্ভারে প্রজেক্ট ডেপ্লয়মেন্ট।&lt;/p&gt;

&lt;p&gt;Training: ক্লায়েন্টের টিমকে সফটওয়্যার/ওয়েবসাইট ব্যবহার শেখানো।&lt;/p&gt;

&lt;p&gt;Documentation Handover: ইউজার ম্যানুয়াল, টেকনিক্যাল ডকুমেন্ট, সোর্স কোড হস্তান্তর।&lt;/p&gt;

&lt;p&gt;Sign-off: ক্লায়েন্ট থেকে প্রজেক্ট অনুমোদন (Acceptance Letter)।&lt;/p&gt;

&lt;p&gt;Project Retrospective Meeting: কী ভালো হয়েছে, কী উন্নতি করা দরকার, টিমের অভিজ্ঞতা আলোচনা।&lt;/p&gt;

&lt;p&gt;৬. Post-Delivery Support (পরবর্তী সাপোর্ট)&lt;/p&gt;

&lt;p&gt;Maintenance &amp;amp; Bug Fixing : নির্দিষ্ট সময় পর্যন্ত সাপোর্ট দেওয়া।&lt;/p&gt;

&lt;p&gt;Update &amp;amp; Enhancement: ক্লায়েন্ট চাইলে নতুন ফিচার যোগ করা।&lt;/p&gt;

&lt;p&gt;Monitoring: সার্ভার ও অ্যাপ্লিকেশনের হেলথ মনিটর করা।&lt;/p&gt;

</description>
    </item>
    <item>
      <title>My Frist portfolio</title>
      <dc:creator>SWAPNIL AHMMED SHISHIR</dc:creator>
      <pubDate>Sun, 31 Aug 2025 17:31:24 +0000</pubDate>
      <link>https://dev.to/swapnil-ahmmed-shishir/my-frist-portfolio-2eop</link>
      <guid>https://dev.to/swapnil-ahmmed-shishir/my-frist-portfolio-2eop</guid>
      <description>&lt;p&gt;I kicked off this year by creating my portfolio, which showcases my coding journey so far. It highlights my skills and projects in HTML, CSS, JavaScript, React.js, and more. As I start searching for my first developer job, I’d love to hear from fellow developers who have been in this position before.&lt;/p&gt;

&lt;p&gt;Live site: &lt;a href="https://louise.codes/" rel="noopener noreferrer"&gt;https://louise.codes/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub repository: &lt;a href="https://github.com/louiseka/portfolio" rel="noopener noreferrer"&gt;https://github.com/louiseka/portfolio&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Questions for you reading this post:&lt;br&gt;
Is there anything important missing from my portfolio?&lt;/p&gt;

&lt;p&gt;Is it easy to navigate?&lt;/p&gt;

&lt;p&gt;What are your overall thoughts on the site?&lt;/p&gt;

</description>
      <category>portfolio</category>
      <category>career</category>
      <category>react</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Install n8n on Windows with Docker (Step-by-Step)</title>
      <dc:creator>SWAPNIL AHMMED SHISHIR</dc:creator>
      <pubDate>Thu, 28 Aug 2025 18:51:32 +0000</pubDate>
      <link>https://dev.to/swapnil-ahmmed-shishir/install-n8n-on-windows-with-docker-step-by-step-3dc3</link>
      <guid>https://dev.to/swapnil-ahmmed-shishir/install-n8n-on-windows-with-docker-step-by-step-3dc3</guid>
      <description>&lt;h2&gt;
  
  
  1) Install Docker Desktop (once)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Download and install &lt;strong&gt;Docker Desktop for Windows&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;During install, keep &lt;strong&gt;WSL 2&lt;/strong&gt; enabled if prompted.&lt;/li&gt;
&lt;li&gt;After install, open Docker Desktop and ensure it says &lt;strong&gt;Running&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;In PowerShell run:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--version&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;compose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;version&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see version numbers.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tip: If Docker says virtualization is disabled, enable it from BIOS and ensure &lt;strong&gt;Windows Subsystem for Linux&lt;/strong&gt; + &lt;strong&gt;Virtual Machine Platform&lt;/strong&gt; are turned on in Windows Features.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  2) Quick test run (optional)
&lt;/h2&gt;

&lt;p&gt;This runs n8n temporarily (data won’t persist). Good to verify everything works.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;n8n-test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--rm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;5678:5678&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;n8nio/n8n:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;a href="http://localhost:5678" rel="noopener noreferrer"&gt;http://localhost:5678&lt;/a&gt; — if it loads, you’re good. Press &lt;code&gt;Ctrl+C&lt;/code&gt; to stop.&lt;/p&gt;

&lt;h2&gt;
  
  
  3) Persistent setup with Docker Compose (recommended)
&lt;/h2&gt;

&lt;p&gt;This makes your data persist and lets you start/stop easily.&lt;/p&gt;

&lt;h3&gt;
  
  
  A) Create a project folder
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;mkdir&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;$HOME&lt;/span&gt;&lt;span class="nx"&gt;\n8n&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;$HOME&lt;/span&gt;&lt;span class="nx"&gt;\n8n&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  B) Create a &lt;code&gt;.env&lt;/code&gt; file (settings)
&lt;/h3&gt;

&lt;p&gt;Create a file named &lt;strong&gt;.env&lt;/strong&gt; in this folder with these lines (edit as you like):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# n8n basic settings
GENERIC_TIMEZONE=Asia/Dhaka
N8N_HOST=localhost
N8N_PORT=5678
WEBHOOK_URL=http://localhost:5678/

# Optional: protect your local n8n with basic auth
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=ChangeThisStrongPassword123!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  C) Create &lt;code&gt;docker-compose.yml&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Create a file named &lt;strong&gt;docker-compose.yml&lt;/strong&gt; in the same folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;n8n&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;n8nio/n8n:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;n8n&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;${N8N_PORT:-5678}:5678"&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;GENERIC_TIMEZONE=${GENERIC_TIMEZONE}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;N8N_HOST=${N8N_HOST}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;WEBHOOK_URL=${WEBHOOK_URL}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;N8N_BASIC_AUTH_ACTIVE=${N8N_BASIC_AUTH_ACTIVE}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;n8n_data:/home/node/.n8n&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;

&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;n8n_data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Notes&lt;br&gt;
• Using a &lt;strong&gt;named volume&lt;/strong&gt; (&lt;code&gt;n8n_data&lt;/code&gt;) is the easiest on Windows—no path issues.&lt;br&gt;
• Change the password/user in &lt;code&gt;.env&lt;/code&gt; to something strong.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  D) Start n8n
&lt;/h3&gt;

&lt;p&gt;From the same folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;compose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-d&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open: &lt;strong&gt;&lt;a href="http://localhost:5678" rel="noopener noreferrer"&gt;http://localhost:5678&lt;/a&gt;&lt;/strong&gt; 🎉&lt;/p&gt;

&lt;h3&gt;
  
  
  E) View logs / stop / restart
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;compose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-f&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;compose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;stop&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;compose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;compose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;down&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c"&gt;# stops and removes the container (keeps volume/data)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  F) Update n8n later
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;compose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pull&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;compose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-d&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Common fixes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Port already in use (5678):&lt;/strong&gt; Change &lt;code&gt;N8N_PORT&lt;/code&gt; in &lt;code&gt;.env&lt;/code&gt; (e.g., 5680) and run &lt;code&gt;docker compose up -d&lt;/code&gt; again.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Can’t access in browser:&lt;/strong&gt; Ensure Docker Desktop is running; check logs with &lt;code&gt;docker compose logs -f&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reset admin auth:&lt;/strong&gt; Edit &lt;code&gt;.env&lt;/code&gt; values and restart: &lt;code&gt;docker compose up -d&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>🖥 Install n8n Locally on Windows – Step by Step</title>
      <dc:creator>SWAPNIL AHMMED SHISHIR</dc:creator>
      <pubDate>Thu, 28 Aug 2025 18:50:27 +0000</pubDate>
      <link>https://dev.to/swapnil-ahmmed-shishir/install-n8n-locally-on-windows-step-by-step-5aj2</link>
      <guid>https://dev.to/swapnil-ahmmed-shishir/install-n8n-locally-on-windows-step-by-step-5aj2</guid>
      <description>&lt;h3&gt;
  
  
  1. ✅ Install Node.js
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go to 👉 &lt;a href="https://nodejs.org" rel="noopener noreferrer"&gt;https://nodejs.org&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Download the &lt;strong&gt;LTS version&lt;/strong&gt; (Recommended for most users).&lt;/li&gt;
&lt;li&gt;Install with all default settings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To check if it installed correctly, open &lt;strong&gt;Command Prompt (cmd)&lt;/strong&gt; and run:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;You should see version numbers (e.g., &lt;code&gt;v20.x.x&lt;/code&gt; and &lt;code&gt;10.x.x&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  2. ✅ Install n8n Globally
&lt;/h3&gt;

&lt;p&gt;In Command Prompt, run:&lt;br&gt;
&lt;/p&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;n8n &lt;span class="nt"&gt;-g&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will install n8n globally on your system.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. ✅ Start n8n
&lt;/h3&gt;

&lt;p&gt;Now run:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;After a few seconds, you’ll see output like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;n8n ready on http://localhost:5678/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open your browser and go to 👉 &lt;a href="http://localhost:5678" rel="noopener noreferrer"&gt;http://localhost:5678&lt;/a&gt;&lt;br&gt;
🎉 n8n is now running locally!&lt;/p&gt;
&lt;h3&gt;
  
  
  4. ✅ Keep n8n Running
&lt;/h3&gt;

&lt;p&gt;By default, n8n stops when you close Command Prompt.&lt;br&gt;
To keep it running, use &lt;strong&gt;npx pm2&lt;/strong&gt; or &lt;strong&gt;start it in background&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx pm2 start n8n
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. ⚡ (Optional) Auto Start on Boot
&lt;/h3&gt;

&lt;p&gt;If you want n8n to start every time you restart your PC:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx pm2 startup
npx pm2 save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🚀 That’s it — you’ve installed n8n locally, the &lt;strong&gt;easy way&lt;/strong&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🚀 Say Goodbye to the Hassle – Add Signatures or Stamps to Images and Documents in Just One Click!</title>
      <dc:creator>SWAPNIL AHMMED SHISHIR</dc:creator>
      <pubDate>Thu, 24 Jul 2025 11:40:48 +0000</pubDate>
      <link>https://dev.to/swapnil-ahmmed-shishir/say-goodbye-to-the-hassle-add-signatures-or-stamps-to-images-and-documents-in-just-one-click-2gka</link>
      <guid>https://dev.to/swapnil-ahmmed-shishir/say-goodbye-to-the-hassle-add-signatures-or-stamps-to-images-and-documents-in-just-one-click-2gka</guid>
      <description>&lt;p&gt;There are many times when we need to add a seal or signature to an image or document —&lt;br&gt;
✍️ But doing that without Photoshop or other complex software is difficult!&lt;br&gt;
Now, the solution is right at your fingertips.&lt;/p&gt;

&lt;p&gt;🔧 The Problem&lt;br&gt;
Many of us work in fields where:&lt;br&gt;
📄 We need to place a signature or official seal on documents&lt;br&gt;
📷 Or digitally verify an image or file&lt;br&gt;
These tasks often take time, and it's hard to find the right tools quickly.&lt;/p&gt;

&lt;p&gt;✅ The Solution&lt;br&gt;
I’ve developed a smart web tool –&lt;br&gt;
👉 &lt;a href="https://documentstamping.vercel.app" rel="noopener noreferrer"&gt;documentstamping.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With this, you can easily:&lt;br&gt;
🔹 Upload your document or image&lt;br&gt;
🔹 Add a separate signature or seal image&lt;br&gt;
🔹 Drag and drop to position it exactly where you want&lt;br&gt;
🔹 And generate a ready-to-use final image with just one click ✅&lt;/p&gt;

&lt;p&gt;🎯 Mission &amp;amp; Future Plan:&lt;br&gt;
This tool is still in its development stage.&lt;br&gt;
With your valuable feedback, I plan to roll out new features very soon, InshaAllah:&lt;br&gt;
🔜 PDF file support&lt;br&gt;
🔜 Free &amp;amp; Paid versions&lt;br&gt;
🔜 Built-in payment system&lt;br&gt;
🔜 Mobile-friendly interface&lt;br&gt;
🔜 Cloud saving feature&lt;br&gt;
... and much more!&lt;/p&gt;

&lt;p&gt;🌟 The Vision — To become a reliable, lightweight, and efficient solution for those who work remotely or digitally.&lt;/p&gt;

&lt;p&gt;📬 Your feedback means a lot!&lt;br&gt;
Please check it out 👉&lt;br&gt;
🔗 &lt;a href="https://documentstamping.vercel.app" rel="noopener noreferrer"&gt;documentstamping.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NB:&lt;/strong&gt; Currently not supported on mobile devices.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>react</category>
    </item>
    <item>
      <title>🚀 Say Goodbye to the Hassle – Add Signatures or Stamps to Images and Documents in Just One Click!</title>
      <dc:creator>SWAPNIL AHMMED SHISHIR</dc:creator>
      <pubDate>Thu, 24 Jul 2025 11:21:41 +0000</pubDate>
      <link>https://dev.to/swapnil-ahmmed-shishir/say-goodbye-to-the-hassle-add-signatures-or-stamps-to-images-and-documents-in-just-one-click-1f31</link>
      <guid>https://dev.to/swapnil-ahmmed-shishir/say-goodbye-to-the-hassle-add-signatures-or-stamps-to-images-and-documents-in-just-one-click-1f31</guid>
      <description>&lt;p&gt;There are many times when we need to add a seal or signature to an image or document —&lt;br&gt;
✍️ But doing that without Photoshop or other complex software is difficult!&lt;br&gt;
Now, the solution is right at your fingertips.&lt;/p&gt;

&lt;p&gt;🔧 The Problem&lt;br&gt;
Many of us work in fields where:&lt;br&gt;
📄 We need to place a signature or official seal on documents&lt;br&gt;
📷 Or digitally verify an image or file&lt;br&gt;
These tasks often take time, and it's hard to find the right tools quickly.&lt;/p&gt;

&lt;p&gt;✅ The Solution&lt;br&gt;
I’ve developed a smart web tool –&lt;br&gt;
👉 &lt;a href="https://documentstamping.vercel.app" rel="noopener noreferrer"&gt;documentstamping.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With this, you can easily:&lt;br&gt;
🔹 Upload your document or image&lt;br&gt;
🔹 Add a separate signature or seal image&lt;br&gt;
🔹 Drag and drop to position it exactly where you want&lt;br&gt;
🔹 And generate a ready-to-use final image with just one click ✅&lt;/p&gt;

&lt;p&gt;🎯 Mission &amp;amp; Future Plan:&lt;br&gt;
This tool is still in its development stage.&lt;br&gt;
With your valuable feedback, I plan to roll out new features very soon, InshaAllah:&lt;br&gt;
🔜 PDF file support&lt;br&gt;
🔜 Free &amp;amp; Paid versions&lt;br&gt;
🔜 Built-in payment system&lt;br&gt;
🔜 Mobile-friendly interface&lt;br&gt;
🔜 Cloud saving feature&lt;br&gt;
... and much more!&lt;/p&gt;

&lt;p&gt;🌟 The Vision — To become a reliable, lightweight, and efficient solution for those who work remotely or digitally.&lt;/p&gt;

&lt;p&gt;📬 Your feedback means a lot!&lt;br&gt;
Please check it out 👉&lt;br&gt;
🔗 &lt;a href="https://documentstamping.vercel.app" rel="noopener noreferrer"&gt;documentstamping.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NB:&lt;/strong&gt; Currently not supported on mobile devices.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>digitalstamping</category>
      <category>signaturetool</category>
    </item>
  </channel>
</rss>
