স্বয়ংক্রিয় পদ্ধতি: অ্যাকাউন্ট থেকে একটি স্ক্রিপ্ট গোটা সার্ভার প্রস্তুত করে (Apache + PHP ওয়েব-স্ট্যাক, ডেটাবেস, নিরাপত্তা সরঞ্জাম, cron)। এরপর — প্যানেল চালু করুন, SSL ইস্যু করুন এবং লাইসেন্স দিন। এটি Ubuntu/Debian-এ কাজ করে: নতুন VPS-এ সবকিছু শূন্য থেকে সেট করে, আর ইতিমধ্যে কনফিগার করা সার্ভারে — শুধু অতিরিক্তভাবে (প্রোফাইল “কনফিগার করা সার্ভার”, ধাপ ০১)। নিচের সব কমান্ড ক্রমানুসারে — শুধু উপর থেকে নিচে স্ক্রল করুন। নতুন VPS-এ প্রতিটি ধাপ পরপর প্রযোজ্য; সার্ভার যদি ইতিমধ্যে কনফিগার করা থাকে বা তাতে হোস্টিং-প্যানেল বসানো থাকে, কাজের একটি অংশ স্ক্রিপ্ট ইচ্ছাকৃতভাবে আপনার জন্য রেখে দেয় — ঠিক কোনটি, তা সে নিজের কাজের শেষে লিখে জানায় (আউটপুটের বিশ্লেষণ — ধাপ ০১-এ)।
monitor.example.com — আপনার ডোমেন; 203.0.113.10 — সার্ভারের আসল IP; /var/www/monitor — প্যানেলের রুট (যেখানে public/, assets/, config.php থাকে); ডেটাবেসের পাসওয়ার্ড নিজে ঠিক করুন।
jail.local), root-crontab, UFW নিয়ম, Apache কনফিগ। যদি সার্ভার ইতিমধ্যে কনফিগার করা থাকে (চালু প্যানেল, সাইট, মেইল, নিজস্ব jail) — তবে “কনফিগার করা সার্ভার” প্রোফাইল বেছে নিন: এটি শুধু অতিরিক্ত পরিবর্তন আনে এবং আপনার ফায়ারওয়াল, Fail2ban, মেইল, SSH ও sysctl-এ হাত দেয় না। হোস্টিং-প্যানেল শনাক্ত করলে স্ক্রিপ্ট নিজেই এই মোডে চলে যায়। প্রথমবার চালানোর আগে ড্রাই-রান চালু করতে পারেন (অ্যাকাউন্টে চেকবক্স) — এটি কিছু না বদলেই দেখাবে কী করা হবে। চালু সার্ভারে সাবধানতার জন্য একটি স্ন্যাপশট (snapshot) নিয়ে রাখুন।
my.arciveo.com → “সার্ভার সেটআপ” বিভাগে (Arcivéo Security Monitor নেওয়ার পরে উপলব্ধ)। এটি আপনার অ্যাকাউন্টের সাথে যুক্ত এবং ব্যক্তিগত টোকেন ধারণ করে।
স্ক্রিপ্টটি সম্পূর্ণ সার্ভার প্রস্তুত করে: ওয়েব-স্ট্যাক (Apache + PHP), ডেটাবেস, SSL-এর টুল, সুরক্ষার সম্পূর্ণ সেট এবং cron-টাস্ক (Lynis, SMART, debsums, Logwatch, দৈনিক রিপোর্ট, ipsum আপডেট)।
1) সুরক্ষার স্তর বেছে নিন (অ্যাকাউন্টে, কমান্ড কপি করার আগে):
2) সার্ভারে root হিসেবে চালান অ্যাকাউন্টের কমান্ডটি — এটি দেখতে এমন:
3) শেষের আউটপুটটি পড়ুন — সেখানেই লেখা থাকে কী আপনার উপর রয়ে গেল। স্ক্রিপ্ট তার কাজ শেষ করে যাচাইয়ের একটি ব্লক এবং “এরপর — প্যানেল ইনস্টল” তালিকা দিয়ে। কিছু ধাপ সে ইচ্ছাকৃতভাবে করে না: ঠিক কোনগুলো, তা নির্ভর করে নির্বাচিত প্রোফাইলের উপর এবং সার্ভারে সে কী পেয়েছে তার উপর। নিচের তালিকার সাথে মিলিয়ে নিন — শুধু সেই পয়েন্টগুলোই করতে হবে, যাদের লাইন আপনার আউটপুটে এসেছে।
Control panel detected (…) — সাইটটি হোস্টিং-প্যানেলের নিজস্ব উপায়েই তৈরি হয়, স্ক্রিপ্ট vhost বানায় না। ধাপ ০৩, শাখা “হোস্টিং-প্যানেলযুক্ত সার্ভার”।No vhost created (no domain given) — ডোমেন ছাড়া “কনফিগার করা সার্ভার” প্রোফাইল: নামবিহীন vhost ডিফল্ট সাইটে পরিণত হয়ে আপনারই সাইটগুলোর অনুরোধ ধরে ফেলত, তাই এটি তৈরি করা হয়নি। ধাপ ০৩, শাখা “হাতে vhost তৈরি করুন”।sudo rules NOT written — প্যানেল কোন অ্যাকাউন্টের অধীনে চলে, স্ক্রিপ্ট তা নির্ধারণ করতে পারেনি। এটি স্বাভাবিক পরিস্থিতি: প্যানেলের ফাইল স্বয়ংক্রিয় সেটআপের পরেই আপলোড করা হয়, তাই নির্ধারণের মতো কিছুই তখনও ছিল না। এই নিয়মগুলো ছাড়া মডিউলগুলো সিস্টেম ডেটা দেখতে পাবে না। ধাপ ০৪, ব্লক “ওয়েব সার্ভারের জন্য sudo”।! Nginx does not read .htaccess — Apache-এর সামনে Nginx বসানো আছে, আর তার কনফিগে নিষেধাজ্ঞা স্বয়ংক্রিয়ভাবে লেখা যায়নি। এটি অবশ্যই করুন: নইলে data/, keys/, database/ ও config.php .htaccess-কে পাশ কাটিয়ে বাইরে দেওয়া হবে। ধাপ ০৩, ব্লক “যদি Apache-এর সামনে Nginx থাকে”।UFW installed but inactive — ফায়ারওয়াল ইনস্টল করা আছে, কিন্তু বন্ধ: কনফিগার করা সার্ভারে স্ক্রিপ্ট নিজে থেকে সেটি চালু করে না, যাতে আপনার অ্যাক্সেস কেটে না যায়। নিজে চালু করুন, অবশ্যই আপনার SSH পোর্ট অনুমোদন করে:
Fail2ban installed but not running — চালু করুন: sudo systemctl enable --now fail2ban।Database server present … but not running — ধাপ ০৪-এর আগে ডেটাবেস সার্ভার চালু করুন: sudo systemctl enable --now mariadb (অথবা mysql — যেটি ইনস্টল করা আছে)।Certbot skipped — issue SSL in … — সার্টিফিকেট হোস্টিং-প্যানেলের Let's Encrypt সুইচ দিয়েই ইস্যু হয়; ধাপ ০৬ আপনার লাগবে না।All checks passed। ! চিহ্নযুক্ত পয়েন্টগুলোর দিকে নজর দিতে হবে; বিস্তারিত লগে লেখা হয়, তার পথ স্ক্রিপ্ট একদম শেষে ছাপে (Log: …)।
প্যানেলটি monitor.example.com-এর মতো ঠিকানায় খুলতে এবং বিনামূল্যে SSL পেতে হলে ডোমেনটি সার্ভারের দিকে নির্দেশ করতে হবে। DNS নিয়ন্ত্রণ প্যানেলে (রেজিস্ট্রার বা হোস্টারের কাছে) একটি A-রেকর্ড তৈরি করুন:
কয়েক মিনিট পরে (কখনও কখনও এক ঘণ্টা পর্যন্ত) যাচাই করুন যে ডোমেনটি সার্ভারের দিকে নির্দেশ করছে:
/var/www/monitor তৈরি করেছে এবং Apache সাইট সেটআপ করেছে (DocumentRoot প্যানেলের রুটে, PHP-FPM, .htaccess-এর জন্য AllowOverride)। স্ক্রিপ্টের আউটপুটে এটি vhost … → DocumentRoot … লাইনটি। আলাদা করে ডিরেক্টরি ও vhost তৈরি করার দরকার নেই — শুধু ফাইলগুলো আপলোড করুন এবং অনুমতি সেট করুন।
শাখা “হোস্টিং-প্যানেলযুক্ত সার্ভার” (আউটপুটে: Control panel detected (…))। এমন সার্ভারে সাইটগুলো প্যানেলই পরিচালনা করে, তাই স্ক্রিপ্ট ইচ্ছাকৃতভাবে নিজের vhost তৈরি করে না — প্যানেল প্রথমবার কনফিগ পুনরায় তৈরি করলেই সেটি মুছে যেত। ক্রমটি এমন:
public_html-এ আপলোড করুন: index.php, api/, assets/-এর পাশে সার্ভিস ফোল্ডার config.php, includes/, data/, tmp/, logs/, keys/, cron/, database/-ও থাকতে হবে। ওয়েব-রুটের বাইরে কিছু সরানোর দরকার নেই: সার্ভিস ফোল্ডারগুলো ডিস্ট্রিবিউশনের .htaccess ফাইল দিয়ে বন্ধ, আর Nginx-এর অধীনে — স্ক্রিপ্ট ডোমেনের কনফিগে যে নিষেধাজ্ঞা লিখে দিয়েছে তা দিয়ে।config.php (ধাপ ০৫)। কমান্ডের পথগুলো /home/অ্যাকাউন্ট/web/ডোমেন/public_html দিয়ে বদলান, আর মালিক হিসেবে www-data-এর বদলে সেই ডোমেনের ব্যবহারকারী দিন।শাখা “হাতে vhost তৈরি করুন” (আউটপুটে: No vhost created (no domain given))। এটি কেবল “কনফিগার করা সার্ভার” প্রোফাইলেই ঘটে, যখন ডোমেন পাঠানো হয়নি। সবচেয়ে সহজ উপায় — ডোমেন উল্লেখ করে অ্যাকাউন্টের কমান্ডটি আবার চালানো:
পুনরায় চালানো নিরাপদ: যা আগেই হয়ে গেছে তা দ্বিতীয়বার হয় না। আর যদি vhost হাতেই তৈরি করতে হয় — ইনস্টলার যে কনফিগটি লেখে, সেটি এখানে দেওয়া হলো:
ServerName বাধ্যতামূলক। নামবিহীন vhost Apache-এর ডিফল্ট সাইটে পরিণত হয় এবং একই সার্ভারের অন্য ডোমেনগুলোর হয়ে সাড়া দিতে শুরু করে। একই কারণে কনফিগার করা সার্ভারে 000-default.conf নিষ্ক্রিয় করবেন না: সেই সাইটটি কারও চালু সাইটের জন্য পরিবর্তন করা থাকতে পারে — নতুন VPS-এ ইনস্টলার নিজেই সেটি সরিয়ে দেয়, এখানে তা করার দরকার নেই।
! Nginx does not read .htaccess)। Nginx স্ট্যাটিক ফাইল সরাসরি ডিস্ক থেকে দেয় এবং .htaccess পড়ে না — Apache সেগুলো ঠিকমতো বন্ধ করলেও সার্ভিস ফোল্ডারগুলো বাইরে খোলা থেকে যাবে। স্ক্রিপ্ট আগেই নিষেধাজ্ঞাসহ একটি ফাইল প্রস্তুত করে রেখেছে; সেটি আপনার সাইটের server{} ব্লকে যুক্ত করে Nginx পুনরায় লোড করতে হবে:
my.arciveo.com → “ডাউনলোড” থেকে ডাউনলোড করা যায়। সার্ভারে আপলোডের আগে আর্কাইভটি আনপ্যাক করুন।
ডিস্ট্রিবিউশনের বিষয়বস্তু আপলোড করুন /var/www/monitor-এ (যাতে ভেতরে public/, assets/, config.php ইত্যাদি থাকে) — SFTP/SCP (FileZilla / WinSCP) দিয়ে অথবা লোকাল কম্পিউটার থেকে scp কমান্ডে:
ServerName) বসে যায়, তা 01 ধাপেই অটো-কনফিগারেশন কমান্ডে পাঠানো হয়: … | sudo bash -s -- monitor.example.com (অথবা অ্যাকাউন্টের “প্যানেল ডোমেন” ফিল্ডে ডোমেন উল্লেখ করুন)। ডোমেন না পাঠালে — প্যানেল যেকোনো হোস্টে ও IP-তে সাড়া দেয়, আর SSL ইস্যুর সময় (ধাপ 06) certbot নিজেই ServerName বসিয়ে দেবে; কিছু পুনরায় ইনস্টল করার দরকার নেই।
root-এর অধীনে বা SFTP-তে আপলোড করে থাকেন, ফাইলগুলো root-এর মালিকানাধীন হয়, এবং ওয়েব-সার্ভার (www-data) সেগুলো পড়তে পারবে না — প্যানেল খালি বা 403 ত্রুটি নিয়ে খুলবে (লগে: .htaccess unreadable / directory not executable)। নিচের কমান্ডটি এটি ঠিক করে:
নিজের জন্য SFTP-তে ফাইল আপলোড খুলে দিন। উপরের কমান্ডের পর সব ফাইল www-data-এর মালিকানাধীন হয়, অথচ FileZilla / WinSCP আপনার নিজের ব্যবহারকারী দিয়ে সংযোগ করে — তখন আপলোড SSH_FX_PERMISSION_DENIED (Permission denied) দিয়ে ব্যর্থ হবে। দুটি বিকল্পের একটি বেছে নিন।
বিকল্প A — শুধু আপনার ব্যবহারকারীর জন্য ACL (প্রস্তাবিত)। লেখার অনুমতি কেবল আপনিই পান; ওয়েব সার্ভার তখনও প্যানেলের কোড বদলাতে পারে না:
বিকল্প B — www-data গ্রুপের মাধ্যমে। সহজ, তবে প্যানেলের ফাইলে লেখার অনুমতি ওয়েব সার্ভারও পেয়ে যায়: PHP-তে দুর্বলতা থাকলে কোড বদলে দেওয়া সম্ভব হবে। কমান্ডের ক্রম গুরুত্বপূর্ণ — config.php ও কাজের ফোল্ডারগুলো সবশেষে বন্ধ করা হয়:
id deploy — গ্রুপের তালিকায় www-data দেখা যেতে হবে; ls -ld /var/www/monitor — অনুমতি drwxrwsr-x, x-এর জায়গায় s অক্ষরের মানে setgid সেট করা আছে।
একটি ডেটাবেস ও ব্যবহারকারী তৈরি করুন, তারপর স্কিমা ইম্পোর্ট করুন। ডেটাবেস ব্লকটি টার্মিনালে সম্পূর্ণভাবে পেস্ট করা হয় (sudo mysql ইউনিক্স-সকেটের মাধ্যমে root হিসেবে প্রবেশ করে — root পাসওয়ার্ড লাগে না)। monitor_db ও monitor_user উদাহরণের নাম, আপনি নিজের যেকোনো নাম দিতে পারেন; ডেটাবেসের নাম, ব্যবহারকারী ও পাসওয়ার্ড মনে রাখুন — পরের ধাপে সেগুলো config.php-তে লিখবেন:
admin অ্যাকাউন্ট তৈরি করে (database/db.sql থেকে)।
যদি টেবিল তৈরি না হয় (প্যানেল ডেটাবেস সংযোগের ত্রুটি দেখায় বা লগইন ফর্মের বদলে খালি স্ক্রিন) — স্কিমাটি হাতে ইম্পোর্ট করুন। কমান্ডটি প্যানেলের রুটে চালাতে হয়, মানগুলো উপরের ব্লক থেকেই নেওয়া হয়:
$DBNAME / $DBUSER / $DBPASS ভেরিয়েবলগুলো যদি ইতিমধ্যে “হারিয়ে” গিয়ে থাকে (টার্মিনালের নতুন সেশন) — কমান্ডে মানগুলো হাতে বসিয়ে দিন অথবা উপরের ব্লকের সেই তিনটি লাইন দিয়েই সেগুলো আবার নির্ধারণ করুন।
sudo rules NOT written লাইনটি থেকে থাকে — প্যানেলের অ্যাকাউন্ট নির্ধারণের মতো কিছুই ছিল না (ফাইল তখনও আপলোড হয়নি), আর নিয়মগুলো তৈরি হয়নি। সেগুলো ছাড়া ফায়ারওয়াল, Fail2ban ও CrowdSec-এর মতো বিভাগগুলো খালি থাকবে। এখন ফাইল যেহেতু জায়গামতো আছে, অ্যাকাউন্টের নাম স্পষ্ট করে দিয়ে কমান্ডটি আরেকবার চালান:
www-data-এর জায়গায় সেই ব্যবহারকারী দিন, যার অধীনে আপনার সাইটের PHP চলে (হোস্টিং-প্যানেলে সেটি সাধারণত ডোমেনের মালিক)। সেটি এভাবে দেখা যায়:
/etc/sudoers.d/monitor ফাইলটি আছে এবং তাতে আপনার ব্যবহারকারীর নামসহ লাইন রয়েছে।
প্যানেলের রুটে থাকা config.php (/var/www/monitor/config.php) — একমাত্র ফাইল যা হাতে সম্পাদনা করতে হয়। প্যানেলের সব সেটিংস এতে define() ধ্রুবক হিসেবে দেওয়া আছে। এটি এডিটরে খুলুন:
হাইলাইট করা জায়গাগুলোতে আপনার মান বসান; বাকিটা যেমন আছে তেমনই রাখুন:
যা পরিবর্তন করবেন:
DB_NAME, DB_USER, DB_PASS — ধাপ ০৪-এ ডেটাবেস তৈরি করার সময় যে নাম, ব্যবহারকারী ও পাসওয়ার্ড দিয়েছিলেন ঠিক সেগুলোই (উদাহরণ রেখে দিলে — monitor_db / monitor_user)। DB_HOST ও DB_CHARSET স্পর্শ করবেন না।APP_URL — https:// সহ প্যানেলের পূর্ণ ঠিকানা, শেষে স্ল্যাশ ছাড়া এবং www ছাড়া। যে ডোমেনে লাইসেন্স অ্যাক্টিভেট করবেন (ধাপ ০৭) তার সাথে মিলতে হবে, নাহলে কী প্রত্যাখ্যাত হবে।TIMEZONE — আপনার টাইমজোন (তালিকা — timedatectl list-timezones)। এটি শুধু প্যানেল কীভাবে তারিখ দেখায় তা নির্ধারণ করে; cron কাজ চালুর সময়ে এর কোনো প্রভাব নেই (সেখানে সিস্টেমের টাইমজোন কার্যকর)।SESSION_LIFETIME — কত সেকেন্ড নিষ্ক্রিয়তার পর প্যানেল পুনরায় লগইন চাইবে (ডিফল্ট ৮ ঘণ্টা)। যেমন 3600 = ১ ঘণ্টা, 86400 = এক দিন।display_errors, log_errors, error_log) — ডিফল্ট রেখে দিন।ফাইলটি সংরক্ষণ করুন (Ctrl+O, Enter, তারপর Ctrl+X) এবং PHP-FPM পুনরায় চালু করুন — নাহলে OPcache-এর কারণে পরিবর্তন কার্যকর হবে না:
640 অনুমতি (ধাপ ০৩-এ সেট করা) এবং রুট .htaccess-এ স্পষ্ট নিষেধাজ্ঞা। এটি পাবলিক রিপোজিটরিতে আপলোড করবেন না এবং প্রকৃত পাসওয়ার্ডসহ সাপোর্টে পাঠাবেন না।
http:// দিয়ে আপনি লগইন করতে পারবেন না।
Certbot skipped — issue SSL in …)। সার্টিফিকেট ইস্যু হয় প্যানেলের ভেতরেই ওয়েব-ডোমেনের Let's Encrypt সুইচ দিয়ে — এভাবে তার নবায়নও প্যানেলই সামলায়।
certbot এবং Apache-র প্লাগইন স্বয়ংক্রিয় কনফিগারেশনে ইতিমধ্যেই ইনস্টল হয়ে গেছে। ডোমেনের DNS ইতিমধ্যেই সার্ভারের দিকে নির্দেশ করা উচিত (ধাপ 02)। এক কমান্ডে ইস্যু:
প্যানেলটি যদি www. দিয়েও খুলতে হয় — একই কমান্ডে দুটি নামই উল্লেখ করুন, নইলে দ্বিতীয় ঠিকানায় ব্রাউজার সার্টিফিকেট নিয়ে সতর্কবার্তা দেখাবে:
Y।<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://-এ রিডাইরেক্ট করে।
https://monitor.example.com খুলুন, admin / useradmin দিয়ে লগইন করুন এবং চেকলিস্টটি সম্পন্ন করুন:
ARCIVEO-… অ্যাক্টিভেশন কোডটি আপনার ডোমেনে সক্রিয় করুন এবং কী-টি “সেটিংস” → “লাইসেন্স”-এ বসান। বিস্তারিত।public/start_db.php, যদি থেকে থাকে: এটি অনুমোদন ছাড়াই ডেটাবেস পুনর্গঠন করতে দেয়। ফাইলটি প্যানেলের মূলে বা public/-এ থাকা পর্যন্ত প্যানেল লাল ব্যানার দিয়ে এ সম্পর্কে সতর্ক করবে।sudo /usr/local/bin/clamav-scan.sh) ডিস্ক ও প্রসেসরে বড় চাপ ফেলে এবং এক ঘণ্টা বা তারও বেশি চলতে পারে — চালু সার্ভারে ০১:৩০-এর রাতের রানের জন্য অপেক্ষা করাই ভালো। “ডিস্ক (SMART)”, “পারফরম্যান্স” ও “নিরাপত্তা আপডেট” বিভাগগুলো নিজে থেকেই ভরে ওঠে: যথাক্রমে প্রতি ৩০ মিনিট, ৫ মিনিট ও ঘণ্টায় একবার।