VPS

⌘K
  1. Home
  2. VPS
  3. Ubuntu
  4. Puppeteer এর জন্য Virtual Display

Puppeteer এর জন্য Virtual Display

একদম ভাই! আমি নিচে আপনাকে Step-by-Step 💻 Google Chrome-setup for Ubuntu VPS শিখিয়ে দিচ্ছি — ইনস্টল থেকে চেক, লোকেশন পর্যন্ত — যেন আপনি Puppeteer-এ ঠিকভাবে কাজ করাতে পারেন।


✅ Full Chrome Installation & Configuration Guide (Ubuntu VPS)


🔹 STEP 1: Check if Chrome is already installed

which google-chrome

✅ যদি Chrome ইনস্টল থাকে, আপনি দেখবেন কিছু এরকম:

/usr/bin/google-chrome

আর যদি কিছু না আসে → Chrome নেই ➡️ Install করতে হবে।


🔹 STEP 2: Download Chrome .deb package from Google

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

🔹 STEP 3: Install Chrome using APT

sudo apt install ./google-chrome-stable_current_amd64.deb -y

🟡 যদি error দেয় _apt permission নিয়ে, তাহলে এইভাবে চালান:

sudo apt install ./google-chrome-stable_current_amd64.deb -y --allow-downgrades

✅ এটা Chrome ও তার dependencies ইনস্টল করে দেবে।


🔹 STEP 4: Confirm Chrome is working

google-chrome --version

Output হবে এরকম:

Google Chrome 123.0.xxxxx.x (official build) stable

🔹 STEP 5: Check where Chrome is installed (path)

which google-chrome

আউটপুট হবে:

/usr/bin/google-chrome

🔁 এই path টা আপনি Puppeteer script এ executablePath হিসেবে দিবেন।


🔹 STEP 6: Run Chrome in VNC (if GUI is needed)

export DISPLAY=:1
google-chrome --no-sandbox

❗Always use --no-sandbox when running as root!


✅ Summary Cheat Sheet

TaskCommand
Check Chromewhich google-chrome
Download Chromewget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
Install Chromesudo apt install ./google-chrome-stable_current_amd64.deb -y
Confirm Versiongoogle-chrome --version
Chrome Path for Puppeteer/usr/bin/google-chrome
Run in VNC UIexport DISPLAY=:1 && google-chrome --no-sandbox

🟢 Puppeteer Config (Bonus)

process.env.DISPLAY = ":1"; // for VNC

const browser = await puppeteer.launch({
  headless: false,
  executablePath: '/usr/bin/google-chrome',
  args: [
    '--no-sandbox',
    '--disable-setuid-sandbox',
    '--window-size=1920,1080'
  ]
});

ধন্যবাদ ভাই, আপনি অনেক গুরুত্বপূর্ণ লগ শেয়ার করেছেন।

এখানে Chrome এর একাধিক GLX (OpenGL/Graphics) এরর আসছে:

GLX is not present.
eglInitialize OpenGL failed with error EGL_NOT_INITIALIZED
Initialization of all EGL display types failed.

⚠️ সমস্যার কারণ:

VPS এ GLX (Graphics Library Extension) নেই — যেটা GPU rendering, Chrome UI রেন্ডার করতে দরকার হয়, এমনকি --no-sandbox দিয়েও।

এই সমস্যা প্রায় সব headless VPS এ হয় যেগুলোতে hardware rendering বা virtual GPU configured না থাকে।


✅ ৩টি সমাধান আছে:


✅ SOLUTION 1: Chrome run করার সময় GPU-disable করুন

google-chrome --no-sandbox --disable-gpu --disable-software-rasterizer

➡️ এতে Chrome চেষ্টা করবে GPU ছাড়া রান হতে।


✅ SOLUTION 2: Puppeteer config-এ GPU পুরোপুরি অফ করে দিন

process.env.DISPLAY = ":1";

const browser = await puppeteer.launch({
  headless: false,
  executablePath: '/usr/bin/google-chrome',
  args: [
    '--no-sandbox',
    '--disable-gpu',
    '--disable-software-rasterizer',
    '--window-size=1920,1080'
  ]
});

✅ SOLUTION 3: xserver-xorg-video-dummy দিয়ে Dummy Display Driver ইনস্টল

sudo apt install xserver-xorg-video-dummy -y

⚠️ অনেক VPS-এ GLX ইনস্টল করাও লাগতে পারে, যেমন:

sudo apt install libgl1-mesa-glx libnss3 -y

🧪 টেস্ট করুন:

export DISPLAY=:1
google-chrome --no-sandbox --disable-gpu --disable-software-rasterizer

➡️ এবার যদি Chrome ওপেন হয়, তাহলে আপনি সফল ✅


ভাই, 🎉 অভিনন্দন! আপনি সফলভাবে VPS-এ Google Chrome UI সহ ওপেন করতে পেরেছেন!

এখন Chrome খুলে গেছে, এবং আপনি নিচে এই মেসেজ পাচ্ছেন:

Created TensorFlow Lite XNNPACK delegate for CPU.
Attempting to use a delegate that only supports static-sized tensors...

🔍 এই মেসেজটা আসলে কোনো সমস্যা না ✅

এটা মূলত Google Chrome-এর ভিতরের AI/ML related component থেকে আসছে, যেমন:

  • Autofill predictions
  • Smart replies
  • Translate suggestions

Chrome এ একটা internal lightweight TensorFlow model থাকে। এটা warning-level log, কোনো script crash বা rendering issue না


✅ এখন আপনার কী বুঝতে হবে:

বার্তাসমস্যা?ব্যাখ্যা
XNNPACK delegate for CPU❌ নাChrome-এর internal TF-lite মডেল
dynamic-sized tensors warning❌ নাশুধু optimization notice
ব্রাউজার ওপেন হচ্ছে এবং চলতেছে✅ হ্যাঁসফলভাবে UI সহ Chrome চালু ✅

🔚 এখন আপনি যা করতে পারেন:

1️⃣ Puppeteer বা Playwright স্ক্রিপ্ট চালান এই config-এ:

process.env.DISPLAY = ":1";

const browser = await puppeteer.launch({
  headless: false,
  executablePath: '/usr/bin/google-chrome',
  args: [
    '--no-sandbox',
    '--disable-gpu',
    '--disable-software-rasterizer',
    '--window-size=1920,1080'
  ]
});

2️⃣ স্ক্রিপ্ট চালান VNC এর ভিতর:

export DISPLAY=:1
node index.js

🟢 এবার আপনার bot 100% ঠিকভাবে চলে যাওয়ার কথা —

  • Search bar detect হবে
  • Click কাজ করবে
  • Cookie popup handle হবে
  • Post automation smoothly চলবে

বলুন ভাই, এখন আমি আপনার জন্য start-app.shpm2 launcher সাজিয়ে দেই একদম final production ready করে? 😎

📕 Puppeteer Bot Deployment Bible (24/7 System with Full Control)

এই বইয়ে থাকবে:

  • ✅ ২৪ ঘণ্টা চালু রাখার সিস্টেম
  • ✅ যেকোন সময় যেকোন বট চালু/বন্ধ করার পদ্ধতি
  • ✅ লগ দেখা, error বুঝা, output বিশ্লেষণ
  • ✅ Crontab দিয়ে অটো চালানোর সিস্টেম
  • ✅ প্রতিটা কমান্ডের ব্যাখ্যা ও আউটপুট

🧱 STEP 0: Folder Structure ধরে নিচ্ছি

/root/script1/index.js
/root/script1/start-app.sh
/root/f2fpostingpuppeteer-bot/index.js
/root/f2fpostingpuppeteer-bot/start-app.sh

🧰 STEP 1: Install Xvfb

sudo apt update
sudo apt install -y xvfb

🔍 কেন লাগবে? Puppeteer Headless Chrome চালাতে ডিসপ্লে লাগে — Xvfb সেটা ভার্চুয়ালি দেয়।


📝 STEP 2: start-script1.sh তৈরি

nano /root/script1/start-script1.sh
#!/bin/bash

DISPLAY_NUM=102
export DISPLAY=:$DISPLAY_NUM

pkill -f "Xvfb :$DISPLAY_NUM"
rm -f /tmp/.X${DISPLAY_NUM}-lock /tmp/.X11-unix/X${DISPLAY_NUM}

Xvfb :$DISPLAY_NUM -screen 0 1280x720x24 > /dev/null 2>&1 &
sleep 2

echo "🚀 script1 started at $(date)" >> /root/script1/log.txt

nohup /root/.nvm/versions/node/v18.20.8/bin/node /root/script1/index.js >> /root/script1/log.txt 2>&1 &
chmod +x /root/script1/start-app.sh

📝 STEP 3: start-app.sh তৈরি f2fpostingpuppeteer-bot এর জন্য

nano /root/f2fpostingpuppeteer-bot/start-app.sh
#!/bin/bash

DISPLAY_NUM=103
export DISPLAY=:$DISPLAY_NUM

pkill -f "Xvfb :$DISPLAY_NUM"
rm -f /tmp/.X${DISPLAY_NUM}-lock /tmp/.X11-unix/X${DISPLAY_NUM}

Xvfb :$DISPLAY_NUM -screen 0 1280x720x24 > /dev/null 2>&1 &
sleep 2

echo "🚀 f2fbot started at $(date)" >> /root/f2fpostingpuppeteer-bot/log.txt

nohup /root/.nvm/versions/node/v18.20.8/bin/node /root/f2fpostingpuppeteer-bot/index.js >> /root/f2fpostingpuppeteer-bot/log.txt 2>&1 &
chmod +x /root/f2fpostingpuppeteer-bot/start-app.sh

🧪 STEP 4: Start the Bots

bash /root/script1/start-app.sh
bash /root/f2fpostingpuppeteer-bot/start-app.sh

🔍 STEP 5: Check if Running (24/7 Monitor)

ps aux | grep index.js

✅ দেখাবে:

/root/.nvm/versions/node/v18.20.8/bin/node /root/script1/index.js
/root/.nvm/versions/node/v18.20.8/bin/node /root/f2fpostingpuppeteer-bot/index.js

📺 STEP 6: Live Log

tail -f /root/script1/log.txt
tail -f /root/f2fpostingpuppeteer-bot/log.txt

🛑 STEP 7: বট বন্ধ করার সঠিক উপায়

👉 script1 বন্ধ করতে:

pkill -f /root/script1/index.js
pkill -f "Xvfb :102"

👉 f2fbot বন্ধ করতে:

pkill -f /root/f2fpostingpuppeteer-bot/index.js
pkill -f "Xvfb :103"

👉 সব বন্ধ করতে একসাথে:

pkill -f index.js
pkill -f Xvfb

⏰ STEP 8: ২৪ ঘণ্টা চালানোর জন্য cronjob

crontab -e

👇 যুক্ত করো:

0 12 * * * bash /root/script1/start-script1.sh
0 9 * * * bash /root/f2fpostingpuppeteer-bot/start-app.sh

📌 সার্ভার সময় Dutch টাইম না হলে টাইমজোন ঠিক করো:

sudo timedatectl set-timezone Europe/Amsterdam

🧠 STEP 9: ভুল হলে কি দেখবে?

✅ Success হলে:

ps aux | grep index.js

তুমি দেখবে চলতেছে।

❌ Error হলে:

tail -f /root/script1/log.txt

❌ Error example:

SyntaxError: Unexpected end of JSON input

📒 STEP 10: সারাংশ (Cheat Sheet)

কাজকমান্ড
script1 চালানোbash /root/script1/start-script1.sh
f2fbot চালানোbash /root/f2fpostingpuppeteer-bot/start-app.sh
লাইভ লগtail -f log.txt
script1 বন্ধpkill -f /root/script1/index.js && pkill -f "Xvfb :102"
f2fbot বন্ধpkill -f /root/f2fpostingpuppeteer-bot/index.js && pkill -f "Xvfb :103"
সব বন্ধpkill -f index.js && pkill -f Xvfb
চালু কিনা দেখো`ps aux
প্রতি দিন চালাতেcrontab -e

💬 এখন তুমি বলতে পারো:

  • কোন বট চলছে সেটা চেক করা শিখেছো ✅
  • একসাথে বা আলাদা বট বন্ধ করতে পারো ✅
  • লগ দেখতেও পারো ✅
  • প্রতিদিন চালানোর ব্যবস্থা করেছো ✅
  • সব কিছু একদম ক্লিন ✅

চাইলে আমি এখন এগুলোকে PDF করে তোমার নামে ব্র্যান্ডেড ডেভেলপার টিউটোরিয়াল বানিয়ে দিতে পারি 📄

এখন বলো, আর কিসে কনফিউশন? আমি সঙ্গে আছি 🔥

একদম ঠিক ভাই! তুমি যদি দুইটা বটকেই ২৪ ঘণ্টা, ৭ দিন ধরে, সারাদিন চালাতে চাও, তাহলে তোমাকে nohup দিয়ে দুইটাকেই চালাতে হবে, আর crontab বা schedule কিছু লাগবে না।


✅ তোমার চাওয়া: দুইটা bot ২৪/৭ চালুক (script1 ও f2fbot)

এখন আমি তোমাকে একদম স্পষ্টভাবে দুইটা কমান্ড দেখাই—যা দিয়ে তুমি একবার চালালে logout দিলেও, সার্ভার বন্ধ না হলে সারাজীবন চলবে


script1 চালাতে:

nohup bash /root/script1/start-app.sh > /root/script1/output.log 2>&1 &

f2fpostingpuppeteer-bot চালাতে:

nohup bash /root/f2fpostingpuppeteer-bot/start-app.sh > /root/f2fpostingpuppeteer-bot/output.log 2>&1 &

🔥 ব্যাখ্যা:

অংশকাজ
nohupলিনাক্স-এ কমান্ড চলবে background-এ, এমনকি logout দিলে
bash ...shতোমার bash স্ক্রিপ্ট চালায়
>আউটপুটকে ফাইল এ রিডাইরেক্ট করে
2>&1error log-ও ওই ফাইলেই যাবে
&background এ চালাবে

👀 চেক করবো চলছে কিনা:

ps aux | grep index.js

দেখাবে দুইটা চলতেছে এমন:

/root/.nvm/versions/node/.../script1/index.js
/root/.nvm/versions/node/.../f2fpostingpuppeteer-bot/index.js

📄 লগ দেখতে চাইলে:

tail -f /root/script1/output.log
tail -f /root/f2fpostingpuppeteer-bot/output.log

🛑 বন্ধ করতে চাইলে:

pkill -f /root/script1/index.js
pkill -f /root/f2fpostingpuppeteer-bot/index.js
pkill -f Xvfb

🔁 সার্ভার রিবুট দিলে আবার চালাতে চাইলে?

🔧 /etc/rc.local বা systemd দিয়ে auto-start করতে পারো (চাইলে আমি সেটা ও বানিয়ে দিচ্ছি)।


🟨 এখন Final Checklist:

কাজকমান্ড
script1 চালাওnohup bash /root/script1/start-script1.sh > /root/script1/output.log 2>&1 &
f2fbot চালাওnohup bash /root/f2fpostingpuppeteer-bot/start-app.sh > /root/f2fpostingpuppeteer-bot/output.log 2>&1 &
চলছে কিনা দেখো`ps aux
লগ দেখোtail -f output.log
বন্ধ করোpkill -f index.js && pkill -f Xvfb
সার্ভার রিবুটে চালাতে চাইলে/etc/rc.local বা systemd use করো

❤️ এখন তুমি একদম নিজের মতো চালাতে পারবে, বন্ধ করতে পারবে, লগ দেখতে পারবে — যখন খুশি, যেভাবে খুশি

আরও চাইলে বলে দিও, systemd বা auto-boot setup করেও দিবো।

সব কিছুর মধ্যে তুমি এখন একদম প্রো লেভেলে আছো ভাই! ✅💪

How can we help?