স্বয়ংক্রিয় ইনস্টলেশন

স্বয়ংক্রিয় পদ্ধতি: অ্যাকাউন্ট থেকে একটি স্ক্রিপ্ট গোটা সার্ভার প্রস্তুত করে (Apache + PHP ওয়েব-স্ট্যাক, ডেটাবেস, নিরাপত্তা সরঞ্জাম, cron)। এরপর — প্যানেল চালু করুন, SSL ইস্যু করুন এবং লাইসেন্স দিন। এটি Ubuntu/Debian-এ কাজ করে: নতুন VPS-এ সবকিছু শূন্য থেকে সেট করে, আর ইতিমধ্যে কনফিগার করা সার্ভারে — শুধু অতিরিক্তভাবে (প্রোফাইল “কনফিগার করা সার্ভার”, ধাপ ০১)। নিচের সব কমান্ড ক্রমানুসারে — শুধু উপর থেকে নিচে স্ক্রল করুন।

কমান্ডের প্লেসহোল্ডার মানগুলো নিজেরটা দিয়ে বদলান: monitor.example.com — আপনার ডোমেন; 203.0.113.10 — সার্ভারের আসল IP; /var/www/monitor — প্যানেলের রুট (যেখানে public/, assets/, config.php থাকে); ডেটাবেসের পাসওয়ার্ড নিজে ঠিক করুন।
সম্পূর্ণ সেট (“সম্পূর্ণ সুরক্ষা”) নতুন VPS-এর জন্য তৈরি। পরিষ্কার Ubuntu/Debian-এ এটি নিরাপত্তা ব্যবস্থা শূন্য থেকে সেট করে — Fail2ban (jail.local), root-crontab, UFW নিয়ম, Apache কনফিগ। যদি সার্ভার ইতিমধ্যে কনফিগার করা থাকে (চালু প্যানেল, সাইট, মেইল, নিজস্ব jail) — তবে “কনফিগার করা সার্ভার” প্রোফাইল বেছে নিন: এটি শুধু অতিরিক্ত পরিবর্তন আনে এবং আপনার ফায়ারওয়াল, Fail2ban, মেইল, SSH ও sysctl-এ হাত দেয় না। হোস্টিং-প্যানেল শনাক্ত করলে স্ক্রিপ্ট নিজেই এই মোডে চলে যায়। প্রথমবার চালানোর আগে ড্রাই-রান চালু করতে পারেন (অ্যাকাউন্টে চেকবক্স) — এটি কিছু না বদলেই দেখাবে কী করা হবে। চালু সার্ভারে সাবধানতার জন্য একটি স্ন্যাপশট (snapshot) নিয়ে রাখুন।

01. অ্যাকাউন্ট থেকে স্বয়ংক্রিয় সেটআপ কমান্ড

কমান্ডটি নিন আপনার অ্যাকাউন্ট my.arciveo.com“সার্ভার সেটআপ” বিভাগে (Arcivéo Monitor নেওয়ার পরে উপলব্ধ)। এটি আপনার অ্যাকাউন্টের সাথে যুক্ত এবং ব্যক্তিগত টোকেন ধারণ করে।

স্ক্রিপ্টটি সম্পূর্ণ সার্ভার প্রস্তুত করে: ওয়েব-স্ট্যাক (Apache + PHP), ডেটাবেস, SSL-এর টুল, সুরক্ষার সম্পূর্ণ সেট এবং cron-টাস্ক (Lynis, SMART, debsums, Logwatch, দৈনিক রিপোর্ট, ipsum আপডেট)।

1) সুরক্ষার স্তর বেছে নিন (অ্যাকাউন্টে, কমান্ড কপি করার আগে):

  • সম্পূর্ণ সুরক্ষা (প্রস্তাবিত) — UFW (ফায়ারওয়াল), Fail2ban, CrowdSec + bouncer, ipsum (IP ব্লক-তালিকা), Suricata (IDS/IPS), Falco, ModSecurity + OWASP CRS (WAF), PSAD, mod_evasive (অ্যান্টি-DoS), AIDE (ফাইল ইন্টিগ্রিটি), debsums, ClamAV + maldet (অ্যান্টিভাইরাস), Auditd, AppArmor, Monit, Lynis (অডিট), Logwatch, স্বয়ংক্রিয় নিরাপত্তা আপডেট।
  • হালকা সংস্করণ — কম RAM-এর VPS-এর জন্য: ভারী কম্পোনেন্ট ছাড়া মৌলিক সেট।
  • কনফিগার করা সার্ভার (হোস্টিং-প্যানেল) — প্যানেল (HestiaCP প্রভৃতি), সাইট ও মেইলসহ ইতিমধ্যে চালু সার্ভারের জন্য: শুধু সংযোজনমূলক পরিবর্তন (টুল অতিরিক্ত ইনস্টল, cron, sudo-নিয়ম), আর ফায়ারওয়াল, Fail2ban, মেইল, SSH ও sysctl যেমন আছে তেমনই থাকে। প্যানেলযুক্ত সার্ভারে স্ক্রিপ্ট নিজেই এই মোড বেছে নেয়।
শুকনো রান। অ্যাকাউন্টে “শুকনো রান” চেকবক্স দেওয়া যায় — তখন কমান্ড শুধু দেখাবে স্ক্রিপ্ট কী ইনস্টল ও পরিবর্তন করবে, এবং কিছু না ছুঁয়ে শেষ হবে। ইতিমধ্যে কনফিগার করা সার্ভারে উপযোগী: প্রথমে রান, তারপর চেকবক্স ছাড়া প্রকৃত লঞ্চ।

2) সার্ভারে root হিসেবে চালান অ্যাকাউন্টের কমান্ডটি — এটি দেখতে এমন:

curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN" | sudo bash
কমান্ডটি গোপন রাখুন — এটি আপনার অ্যাকাউন্টের সাথে যুক্ত। লিঙ্কের মেয়াদ সীমিত; মেয়াদ শেষ হলে অ্যাকাউন্টে “নতুন লিঙ্ক নিন” চাপুন।
স্বয়ংক্রিয় সেটআপের পরে ওয়েব-সার্ভার — Apache + PHP-FPM, আর নিরাপত্তা টুল ও cron-টাস্ক ইতিমধ্যে ইনস্টল করা ও “বাক্স থেকেই” চালু — অতিরিক্ত কিছু কনফিগার করার প্রয়োজন নেই।

02. ডোমেন এবং DNS

প্যানেলটি monitor.example.com-এর মতো ঠিকানায় খুলতে এবং বিনামূল্যে SSL পেতে হলে ডোমেনটি সার্ভারের দিকে নির্দেশ করতে হবে। DNS নিয়ন্ত্রণ প্যানেলে (রেজিস্ট্রার বা হোস্টারের কাছে) একটি A-রেকর্ড তৈরি করুন:

টাইপ: A নাম: monitor (সাবডোমেন → monitor.example.com) বা @ (ডোমেন রুট → example.com) মান: 203.0.113.10 ← আপনার সার্ভারের IP TTL: 3600

কয়েক মিনিট পরে (কখনও কখনও এক ঘণ্টা পর্যন্ত) যাচাই করুন যে ডোমেনটি সার্ভারের দিকে নির্দেশ করছে:

dig +short monitor.example.com # আপনার IP ফেরত দেওয়া উচিত # অথবা, যদি dig না থাকে: getent hosts monitor.example.com
SSL সার্টিফিকেট (ধাপ 06) কেবল ডোমেনের জন্যই ইস্যু করা হয় — তাই সার্টিফিকেট ইস্যুর আগেই DNS সার্ভারের দিকে নির্দেশ করতে হবে।

03. প্যানেলের ফাইল আপলোড করুন

অটো-কনফিগারেশন ইতিমধ্যেই প্যানেলের ডিরেক্টরি /var/www/monitor তৈরি করেছে এবং Apache সাইট সেটআপ করেছে (DocumentRoot প্যানেলের রুটে, PHP-FPM, .htaccess-এর জন্য AllowOverride)। আলাদা করে ডিরেক্টরি ও vhost তৈরি করার দরকার নেই — শুধু ফাইলগুলো আপলোড করুন এবং অনুমতি সেট করুন।
প্যানেলের ফাইল (ডিস্ট্রিবিউশন আর্কাইভ) ক্রয়ের পর my.arciveo.com“ডাউনলোড” থেকে ডাউনলোড করা যায়। সার্ভারে আপলোডের আগে আর্কাইভটি আনপ্যাক করুন।

ডিস্ট্রিবিউশনের বিষয়বস্তু আপলোড করুন /var/www/monitor-এ (যাতে ভেতরে public/, assets/, config.php ইত্যাদি থাকে) — SFTP/SCP (FileZilla / WinSCP) দিয়ে অথবা লোকাল কম্পিউটার থেকে scp কমান্ডে:

scp -r ./monitor/* deploy@203.0.113.10:/var/www/monitor/
vhost-এ যাতে সরাসরি আপনার ডোমেন (ServerName) বসে যায়, তা 01 ধাপেই অটো-কনফিগারেশন কমান্ডে পাঠানো হয়: … | sudo bash -s -- monitor.example.com (অথবা অ্যাকাউন্টের “প্যানেল ডোমেন” ফিল্ডে ডোমেন উল্লেখ করুন)। ডোমেন না পাঠালে — প্যানেল যেকোনো হোস্টে ও IP-তে সাড়া দেয়, আর SSL ইস্যুর সময় (ধাপ 06) certbot নিজেই ServerName বসিয়ে দেবে; কিছু পুনরায় ইনস্টল করার দরকার নেই।
ফাইলের অনুমতি সেট করুন — এটি একটি বাধ্যতামূলক ধাপ। যদি root-এর অধীনে বা SFTP-তে আপলোড করে থাকেন, ফাইলগুলো root-এর মালিকানাধীন হয়, এবং ওয়েব-সার্ভার (www-data) সেগুলো পড়তে পারবে না — প্যানেল খালি বা 403 ত্রুটি নিয়ে খুলবে (লগে: .htaccess unreadable / directory not executable)। নিচের কমান্ডটি এটি ঠিক করে:
# পুরো ওয়েবরুটের অনুমতি স্বাভাবিক করি: root দ্বারা তৈরি ডিরেক্টরি # ওয়েব-সার্ভারের (www-data) কাছে দুর্গম — এটি ছাড়া প্যানেল খালি পেজ বা 403 দেয়। cd /var/www/monitor # কাজের ফোল্ডার chown-এর আগে তৈরি করি — নইলে নতুন ডিরেক্টরি root:root থেকে যাবে # এবং chmod 750-এ ওয়েব-সার্ভার (www-data) সেগুলোতে লিখতে পারবে না। sudo mkdir -p data/lynis data/logwatch tmp logs sudo chown -R www-data:www-data /var/www/monitor sudo find /var/www/monitor -type d -exec chmod 755 {} \; sudo find /var/www/monitor -type f -exec chmod 644 {} \; sudo chmod 640 /var/www/monitor/config.php sudo chmod 750 data tmp logs

নিজের জন্য SFTP-তে ফাইল আপলোড খুলে দিন। উপরের কমান্ডের পর সব ফাইল www-data-এর মালিকানাধীন হয়, অথচ FileZilla / WinSCP আপনার নিজের ব্যবহারকারী দিয়ে সংযোগ করে — তখন আপলোড SSH_FX_PERMISSION_DENIED (Permission denied) দিয়ে ব্যর্থ হবে। দুটি বিকল্পের একটি বেছে নিন।

বিকল্প A — শুধু আপনার ব্যবহারকারীর জন্য ACL (প্রস্তাবিত)। লেখার অনুমতি কেবল আপনিই পান; ওয়েব সার্ভার তখনও প্যানেলের কোড বদলাতে পারে না:

sudo apt install -y acl # প্যানেলের পুরো ডিরেক্টরিতে আপনার ব্যবহারকারীর জন্য লেখার অনুমতি: sudo setfacl -R -m u:deploy:rwX /var/www/monitor # একই নিয়ম ডিফল্ট হিসেবে — পরে তৈরি হওয়া ফাইল ও ফোল্ডারের জন্য: sudo setfacl -R -d -m u:deploy:rwX /var/www/monitor

বিকল্প B — www-data গ্রুপের মাধ্যমে। সহজ, তবে প্যানেলের ফাইলে লেখার অনুমতি ওয়েব সার্ভারও পেয়ে যায়: PHP-তে দুর্বলতা থাকলে কোড বদলে দেওয়া সম্ভব হবে। কমান্ডের ক্রম গুরুত্বপূর্ণ — config.php ও কাজের ফোল্ডারগুলো সবশেষে বন্ধ করা হয়:

sudo usermod -aG www-data deploy # গ্রুপের জন্য লেখার অনুমতি + setgid (বিট 2): SFTP-তে আপলোড করা ফাইল # www-data গ্রুপেই থাকে — নইলে প্যানেল সেগুলো পুনরায় লিখতে পারবে না। sudo find /var/www/monitor -type d -exec chmod 2775 {} \; sudo find /var/www/monitor -type f -exec chmod 664 {} \; sudo chmod 640 /var/www/monitor/config.php sudo chmod 2750 /var/www/monitor/data /var/www/monitor/tmp /var/www/monitor/logs
বিকল্প B-এর পরে FileZilla-তে আবার সংযোগ করুন (সার্ভার → সংযোগ বিচ্ছিন্ন করুন, তারপর নতুন করে লগইন) — নতুন গ্রুপ কেবল নতুন লগইনেই কার্যকর হয়, তার আগে অনুমতি তবুও থাকবে না। যাচাই: id deploy — গ্রুপের তালিকায় www-data দেখা যেতে হবে; ls -ld /var/www/monitor — অনুমতি drwxrwsr-x, x-এর জায়গায় s অক্ষরের মানে setgid সেট করা আছে।

04. ডেটাবেস

একটি ডেটাবেস ও ব্যবহারকারী তৈরি করুন, তারপর স্কিমা ইম্পোর্ট করুন। ডেটাবেস ব্লকটি টার্মিনালে সম্পূর্ণভাবে পেস্ট করা হয় (sudo mysql ইউনিক্স-সকেটের মাধ্যমে root হিসেবে প্রবেশ করে — root পাসওয়ার্ড লাগে না)। monitor_dbmonitor_user উদাহরণের নাম, আপনি নিজের যেকোনো নাম দিতে পারেন; ডেটাবেসের নাম, ব্যবহারকারী ও পাসওয়ার্ড মনে রাখুন — পরের ধাপে সেগুলো config.php-তে লিখবেন:

# 1. ডেটাবেস। পাসওয়ার্ড DBPASS-এ একবারই সেট হয় এবং সব লাইনে বসে যায়। # ব্লকটি টার্মিনালে সম্পূর্ণভাবে পেস্ট করুন; sudo mysql ইউনিক্স-সকেটে root হিসেবে প্রবেশ করে # (root পাসওয়ার্ড লাগে না)। ইন্টারঅ্যাক্টিভ `sudo mysql -u root -p` # কপিপেস্টে ব্যবহার করবেন না — পেস্টের সময় SQL লাইনগুলো পাসওয়ার্ড প্রম্পটে চলে গিয়ে হারিয়ে যাবে। DBPASS='CHOOSE_A_PASSWORD' # ← শুধু এই লাইনটি পরিবর্তন করুন sudo mysql <<SQL CREATE DATABASE IF NOT EXISTS monitor_db CHARACTER SET utf8mb4; CREATE USER IF NOT EXISTS 'monitor_user'@'localhost' IDENTIFIED BY '$DBPASS'; GRANT ALL ON monitor_db.* TO 'monitor_user'@'localhost'; FLUSH PRIVILEGES; SQL # যাচাই (monitor_db দেখানো উচিত): mysql -u monitor_user -p"$DBPASS" -e "SHOW DATABASES;" # এই একই পাসওয়ার্ড config.php → DB_PASS-এ লিখুন।
স্কিমা ইম্পোর্ট করার দরকার নেই — ডেটাবেস খালি থাকলে ব্রাউজারে প্রথমবার প্রবেশ করার সময় প্যানেল নিজেই টেবিল ও admin অ্যাকাউন্ট তৈরি করে (database/db.sql থেকে)।
ওয়েব সার্ভারের জন্য sudo অটো-কনফিগারেশন ইতিমধ্যে সেট করে দিয়েছে — মডিউলগুলো সিস্টেম ডেটা সাথে সাথেই দেখে। sudo আলাদাভাবে কনফিগার করার দরকার শুধু তখনই, যখন PHP অ-প্রমিত ব্যবহারকারী (www-data নয়) হিসেবে চলে।

05. config.php কনফিগার করা

প্যানেলের রুটে থাকা config.php (/var/www/monitor/config.php) — একমাত্র ফাইল যা হাতে সম্পাদনা করতে হয়। প্যানেলের সব সেটিংস এতে define() ধ্রুবক হিসেবে দেওয়া আছে। এটি এডিটরে খুলুন:

sudo nano /var/www/monitor/config.php

হাইলাইট করা জায়গাগুলোতে আপনার মান বসান; বাকিটা যেমন আছে তেমনই রাখুন:

// --- ডেটাবেস (ধাপ ০৪ থেকে) --- define('DB_HOST', 'localhost'); // অপরিবর্তিত রাখুন define('DB_NAME', 'db_name'); // ধাপ ০৪-এ যা তৈরি করেছেন define('DB_USER', 'user'); // ধাপ ০৪-এ যা তৈরি করেছেন define('DB_PASS', 'db_password'); // ধাপ ০৪-এ যা দিয়েছেন define('DB_CHARSET', 'utf8mb4'); // অপরিবর্তিত রাখুন // --- অ্যাপ্লিকেশন --- define('APP_URL', 'https://monitor.example.com'); // প্যানেলের ঠিকানা, শেষে স্ল্যাশ ছাড়া define('TIMEZONE', 'Asia/Dhaka'); // আপনার টাইমজোন // --- সেশনের মেয়াদ --- define('SESSION_LIFETIME', 28800); // পুনরায় লগইনের আগে নিষ্ক্রিয়তার সময়, সেকেন্ড (28800 = 8 ঘণ্টা)

যা পরিবর্তন করবেন:

  • DB_NAME, DB_USER, DB_PASS — ধাপ ০৪-এ ডেটাবেস তৈরি করার সময় যে নাম, ব্যবহারকারী ও পাসওয়ার্ড দিয়েছিলেন ঠিক সেগুলোই (উদাহরণ রেখে দিলে — monitor_db / monitor_user)। DB_HOSTDB_CHARSET স্পর্শ করবেন না।
  • APP_URLhttps:// সহ প্যানেলের পূর্ণ ঠিকানা, শেষে স্ল্যাশ ছাড়া এবং www ছাড়া। যে ডোমেনে লাইসেন্স অ্যাক্টিভেট করবেন (ধাপ ০৭) তার সাথে মিলতে হবে, নাহলে কী প্রত্যাখ্যাত হবে।
  • TIMEZONE — আপনার টাইমজোন (তালিকা — timedatectl list-timezones)। এটি শুধু প্যানেল কীভাবে তারিখ দেখায় তা নির্ধারণ করে; cron কাজ চালুর সময়ে এর কোনো প্রভাব নেই (সেখানে সিস্টেমের টাইমজোন কার্যকর)।
  • SESSION_LIFETIME — কত সেকেন্ড নিষ্ক্রিয়তার পর প্যানেল পুনরায় লগইন চাইবে (ডিফল্ট ৮ ঘণ্টা)। যেমন 3600 = ১ ঘণ্টা, 86400 = এক দিন।
  • ত্রুটি লগিং ব্লক (display_errors, log_errors, error_log) — ডিফল্ট রেখে দিন।

ফাইলটি সংরক্ষণ করুন (Ctrl+O, Enter, তারপর Ctrl+X) এবং PHP-FPM পুনরায় চালু করুন — নাহলে OPcache-এর কারণে পরিবর্তন কার্যকর হবে না:

sudo systemctl restart php*-fpm
config.php — একটি গোপন ফাইল (এতে ডেটাবেসের পাসওয়ার্ড আছে)। এটি প্যানেলের রুটে থাকে, যা ওয়েব-রুটও বটে, তবে সুরক্ষিত: 640 অনুমতি (ধাপ ০৩-এ সেট করা) এবং রুট .htaccess-এ স্পষ্ট নিষেধাজ্ঞা। এটি পাবলিক রিপোজিটরিতে আপলোড করবেন না এবং প্রকৃত পাসওয়ার্ডসহ সাপোর্টে পাঠাবেন না।
সব প্যারামিটারের বিস্তারিত বিশ্লেষণ — FAQ-তে: “config.php ফাইল — প্যানেলের সব সেটিংস”

06. SSL (HTTPS) ইস্যু করুন

ড্যাশবোর্ড শুধু HTTPS-এ কাজ করে। লগইন সেশন একটি সুরক্ষিত কুকি ব্যবহার করে, আর WebAuthn (2FA) স্ট্যান্ডার্ড অনুযায়ী শুধু HTTPS-এ চলে। http:// দিয়ে আপনি লগইন করতে পারবেন না।

certbot এবং Apache-র প্লাগইন স্বয়ংক্রিয় কনফিগারেশনে ইতিমধ্যেই ইনস্টল হয়ে গেছে। ডোমেনের DNS ইতিমধ্যেই সার্ভারের দিকে নির্দেশ করা উচিত (ধাপ 02)। এক কমান্ডে ইস্যু:

sudo certbot --apache -d monitor.example.com
certbot যা জিজ্ঞাসা করবে:
  1. Enter email address — আপনার e-mail (সার্টিফিকেট মেয়াদ শেষের নোটিফিকেশন সেখানে আসবে)।
  2. Terms of Service … (Y)es/(N)oY
  3. Share email with the EFF … (Y)es/(N)o — আপনার ইচ্ছামতো।
এরপর certbot নিজেই সার্টিফিকেট ইস্যু করবে, <VirtualHost *:443> লিখবে, http→https রিডাইরেক্ট ও স্বয়ংক্রিয় নবায়ন সেট করবে। শেষে — Successfully enabled HTTPS
ইস্যু ব্যর্থ হলে — যাচাই করুন যে dig +short monitor.example.com সার্ভারের IP ফেরত দিচ্ছে এবং 80/443 পোর্ট খোলা আছে (sudo ufw allow 80,443/tcp)।

ইস্যুর পরে: https://monitor.example.com তালার চিহ্ন সহ খোলে, http:// https://-এ রিডাইরেক্ট করে।

07. লগইন ও প্রাথমিক কনফিগারেশন

https://monitor.example.com খুলুন, admin / useradmin দিয়ে লগইন করুন এবং চেকলিস্টটি সম্পন্ন করুন:

  1. admin পাসওয়ার্ড পরিবর্তন করুন — মেনুর “ব্যবহারকারী” বিভাগ।
  2. WebAuthn (2FA) চালু করুন — “WebAuthn কী” → কী/passkey নিবন্ধন করুন (HTTPS প্রয়োজন)। একসঙ্গে দুটি নিবন্ধন করুন: একমাত্র কী হারিয়ে গেলে সেটির মাধ্যমে লগইন করা সম্ভব হবে না। বিস্তারিত
  3. IP অনুযায়ী অ্যাক্সেস সীমিত করুন — “সেটিংস” → “IP অনুযায়ী অ্যাক্সেস সীমাবদ্ধতা” (চালু করার আগে নিজের IP লিখে দিন, নইলে নিজের অ্যাক্সেস বন্ধ করে ফেলবেন)।
  4. লাইসেন্স প্রবেশ করান — অ্যাকাউন্ট থেকে ARCIVEO-… অ্যাক্টিভেশন কোডটি আপনার ডোমেনে সক্রিয় করুন এবং কী-টি “সেটিংস” → “লাইসেন্স”-এ বসান। বিস্তারিত
  5. বিজ্ঞপ্তি কনফিগার করুন — “সেটিংস”-এ Telegram এবং/অথবা Email। বিস্তারিত
  6. ইনস্টলার মুছে ফেলুন public/start_db.php, যদি থেকে থাকে: এটি অনুমোদন ছাড়াই ডেটাবেস পুনর্গঠন করতে দেয়। ফাইলটি প্যানেলের মূলে বা public/-এ থাকা পর্যন্ত প্যানেল লাল ব্যানার দিয়ে এ সম্পর্কে সতর্ক করবে।
সম্পন্ন। নিরাপত্তা সরঞ্জামগুলো ইতিমধ্যেই কাজ করছে — ড্যাশবোর্ড সঙ্গে সঙ্গেই তাদের স্ট্যাটাস ও নিরাপত্তা স্কোর দেখাবে। প্রতিটি সরঞ্জামের নির্দেশিকা রয়েছে FAQ-এ।
Arcivéo - Security Monitor © 2026