خودکار انسٹالیشن

خودکار طریقہ: ذاتی اکاؤنٹ سے ایک اسکرپٹ پورا سرور تیار کر دیتا ہے (ویب اسٹیک Apache + PHP، ڈیٹابیس، سیکیورٹی ٹولز، cron)۔ اس کے بعد — پینل تعینات کریں، SSL جاری کریں اور لائسنس درج کریں۔ یہ Ubuntu/Debian پر چلتا ہے: نئے VPS پر سب کچھ صفر سے سیٹ کرتا ہے، پہلے سے سیٹ سرور پر — صرف اضافی طور پر (پروفائل “سیٹ شدہ سرور”، مرحلہ 01)۔ نیچے دی گئی تمام کمانڈز ترتیب سے ہیں، بس اوپر سے نیچے اسکرول کریں۔ نئے VPS پر ہر مرحلہ یکے بعد دیگرے موزوں ہے؛ اگر سرور پہلے سے سیٹ ہے یا اس پر ہوسٹنگ پینل لگا ہوا ہے، تو کچھ کام اسکرپٹ جان بوجھ کر آپ کے لیے چھوڑ دیتا ہے — کون سا، یہ وہ اپنے کام کے اختتام پر لکھ دیتا ہے (آؤٹ پٹ کی تفصیل — مرحلہ 01 میں)۔

کمانڈز میں پلیس ہولڈر اقدار اپنی اقدار سے بدل دیں: 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 Security 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-جابز پہلے سے انسٹال اور “آؤٹ آف دی باکس” چل رہے ہوتے ہیں۔

3) اختتام پر آنے والا آؤٹ پٹ پڑھیں — وہاں لکھا ہوتا ہے کہ آپ کے ذمے کیا رہ گیا ہے۔ اسکرپٹ اپنا کام جانچوں کے ایک بلاک اور “آگے — پینل کی تنصیب” کی فہرست پر ختم کرتا ہے۔ کچھ مراحل وہ جان بوجھ کر نہیں کرتا: کون سے، یہ منتخب کردہ پروفائل پر اور اس پر منحصر ہے کہ اسے سرور پر کیا ملا۔ نیچے دی گئی فہرست سے ملائیں — صرف وہی نکات کرنے ہیں جن کی سطریں آپ کے آؤٹ پٹ میں ظاہر ہوئی ہوں۔

  • Control panel detected (…) — سائٹ خود ہوسٹنگ پینل کے ذرائع سے بنتی ہے، اسکرپٹ vhost نہیں بناتا۔ مرحلہ 03، شاخ “ہوسٹنگ پینل والا سرور”۔
  • No vhost created (no domain given) — ڈومین کے بغیر “سیٹ شدہ سرور” پروفائل: بغیر نام کا vhost طے شدہ سائٹ بن جاتا اور آپ ہی کی سائٹس کی درخواستیں روک لیتا، اس لیے وہ نہیں بنایا گیا۔ مرحلہ 03، شاخ “vhost دستی طور پر بنائیں”۔
  • sudo rules NOT written — اسکرپٹ یہ طے نہ کر سکا کہ پینل کس اکاؤنٹ کے تحت چلتا ہے۔ یہ عام صورتِ حال ہے: پینل کی فائلیں خودکار سیٹ اپ کے بعد اپلوڈ ہوتی ہیں، اس لیے طے کرنے کے لیے ابھی کچھ تھا ہی نہیں۔ ان قواعد کے بغیر ماڈیول سسٹم ڈیٹا نہیں دیکھ پائیں گے۔ مرحلہ 04، بلاک “ویب سرور کے لیے sudo”۔
  • ! Nginx does not read .htaccess — Apache کے سامنے Nginx ہے، اور اس کے کانفیگ میں ممانعت خودکار طور پر درج نہیں ہو سکی۔ یہ لازماً کریں: ورنہ data/، keys/، database/ اور config.php — .htaccess کو نظرانداز کرتے ہوئے باہر فراہم ہوتے رہیں گے۔ مرحلہ 03، بلاک “اگر Apache کے سامنے Nginx ہو”۔
  • UFW installed but inactive — فائر وال انسٹال ہے مگر بند ہے: سیٹ شدہ سرور پر اسکرپٹ اسے خود آن نہیں کرتا تاکہ آپ کی رسائی نہ کٹ جائے۔ اسے خود آن کریں، اپنے SSH پورٹ کی اجازت لازماً دے کر:
    sudo ufw allow OpenSSH # غیر معیاری SSH پورٹ: sudo ufw allow 2222/tcp sudo ufw allow 80,443/tcp sudo ufw enable
  • Fail2ban installed but not running — چلائیں: sudo systemctl enable --now fail2ban۔
  • Database server present … but not running — مرحلہ 04 سے پہلے ڈیٹابیس سرور چلائیں: sudo systemctl enable --now mariadb (یا mysql — جو انسٹال ہو)۔
  • Certbot skipped — issue SSL in … — سرٹیفکیٹ ہوسٹنگ پینل میں Let's Encrypt کے سوئچ سے جاری ہوتا ہے؛ مرحلہ 06 آپ کو درکار نہیں۔
اگر جانچوں کے بلاک میں سب ٹھیک ہو، تو آخری سطر All checks passed ہوتی ہے۔ ! والے نکات توجہ چاہتے ہیں؛ تفصیلات لاگ میں لکھی جاتی ہیں، جس کا راستہ اسکرپٹ بالکل آخر میں چھاپتا ہے (Log: …)۔

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. پینل کی فائلیں اپلوڈ کریں

عام صورت (نیا VPS)۔ خودکار سیٹ اپ پہلے ہی پینل کی ڈائریکٹری /var/www/monitor بنا چکا ہے اور Apache سائٹ ترتیب دے چکا ہے (DocumentRoot پینل کے روٹ پر، PHP-FPM، .htaccess کے لیے AllowOverride)۔ اسکرپٹ کے آؤٹ پٹ میں یہ سطر vhost … → DocumentRoot … ہے۔ الگ سے ڈائریکٹری اور vhost بنانے کی ضرورت نہیں — بس فائلیں اپلوڈ کریں اور اجازتیں سیٹ کریں۔
دو صورتیں جن میں vhost نہیں بنایا جاتا — اسکرپٹ اپنے کام کے اختتام پر صاف طور پر اس کی اطلاع دیتا ہے۔ ایسی صورت میں پہلے نیچے دی گئی متعلقہ شاخ مکمل کریں، اور اس کے بعد ہی فائلیں اپلوڈ کریں۔

شاخ “ہوسٹنگ پینل والا سرور” (آؤٹ پٹ میں: Control panel detected (…))۔ ایسے سرور پر سائٹس کا انتظام پینل کرتا ہے، اور اسکرپٹ جان بوجھ کر اپنا vhost نہیں بناتا — پینل کے کانفیگ دوبارہ بناتے ہی وہ مٹ جاتا۔ ترتیب یہ ہے:

  1. ہوسٹنگ پینل (HestiaCP وغیرہ) میں ویب ڈومین بنائیں — اس کا DocumentRoot جوں کا توں رہتا ہے۔
  2. ڈسٹری بیوشن مکمل طور پر اس ڈومین کے public_html میں اپلوڈ کریں: index.php، api/، assets/ کے ساتھ ساتھ خدماتی config.php، includes/، data/، tmp/، logs/، keys/، cron/، database/ بھی وہیں ہونے چاہئیں۔ ویب روٹ سے اوپر کچھ منتقل کرنے کی ضرورت نہیں: خدماتی فولڈر ڈسٹری بیوشن کی .htaccess فائل سے بند ہیں، اور Nginx کے تحت اُس ممانعت سے جو اسکرپٹ نے ڈومین کے کانفیگ میں درج کی ہے۔
  3. SSL خود پینل میں Let's Encrypt کے سوئچ سے جاری ہوتا ہے — مرحلہ 06 چھوڑ دیں۔
  4. آگے — اجازتیں (اسی مرحلے میں نیچے)، ڈیٹابیس (مرحلہ 04) اور config.php (مرحلہ 05)۔ کمانڈز میں راستے /home/اکاؤنٹ/web/ڈومین/public_html سے بدل دیں، اور مالک — www-data کے بجائے اس ڈومین کا صارف۔

شاخ “vhost دستی طور پر بنائیں” (آؤٹ پٹ میں: No vhost created (no domain given))۔ ایسا صرف “سیٹ شدہ سرور” پروفائل پر ہوتا ہے، جب ڈومین نہ دیا گیا ہو۔ سب سے آسان طریقہ — اکاؤنٹ والی کمانڈ ڈومین بتاتے ہوئے دوبارہ چلانا:

curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN&profile=existing" | sudo bash -s -- monitor.example.com

دوبارہ چلانا محفوظ ہے: جو کام ہو چکا ہے وہ دہرایا نہیں جاتا۔ اور اگر vhost ہاتھ سے بنانا ہو — تو یہ وہی کانفیگ ہے جو انسٹالر لکھتا ہے:

sudo mkdir -p /var/www/monitor # PHP-FPM ساکٹ خودکار طور پر معلوم کرتے ہیں — سرورز پر PHP کا ورژن مختلف ہوتا ہے۔ PHPSOCK=$(ls -1 /run/php/php*-fpm.sock 2>/dev/null | head -1) sudo tee /etc/apache2/sites-available/arciveo-monitor.conf > /dev/null <<'EOF' <VirtualHost *:80> ServerName monitor.example.com DocumentRoot /var/www/monitor <Directory /var/www/monitor> Options -Indexes +FollowSymLinks AllowOverride All Require all granted </Directory> <FilesMatch "\.php$"> SetHandler "proxy:unix:__PHPSOCK__|fcgi://localhost" </FilesMatch> ErrorLog ${APACHE_LOG_DIR}/arciveo-monitor_error.log CustomLog ${APACHE_LOG_DIR}/arciveo-monitor_requests.log combined </VirtualHost> EOF sudo sed -i "s#__PHPSOCK__#${PHPSOCK}#" /etc/apache2/sites-available/arciveo-monitor.conf sudo a2ensite arciveo-monitor.conf sudo apache2ctl configtest sudo systemctl reload apache2
یہاں ServerName لازمی ہے۔ بغیر نام کا vhost، Apache کی طے شدہ سائٹ بن جاتا ہے اور اسی سرور پر موجود دوسرے ڈومینز کے لیے جواب دینے لگتا ہے۔ اسی وجہ سے سیٹ شدہ سرور پر 000-default.conf بند نہ کریں: ممکن ہے یہ سائٹ کسی کے کام کے لیے تبدیل کی گئی ہو — نئے VPS پر انسٹالر اسے خود ہٹا دیتا ہے، یہاں ایسا کرنے کی ضرورت نہیں۔
اگر Apache کے سامنے Nginx ہو (آؤٹ پٹ میں: ! Nginx does not read .htaccess)۔ Nginx جامد فائلیں براہِ راست ڈسک سے دیتا ہے اور .htaccess نہیں پڑھتا — خدماتی فولڈر باہر کھلے رہ جائیں گے، حالانکہ Apache انہیں درست طور پر بند کرتا ہے۔ اسکرپٹ ممانعتوں والی فائل پہلے ہی تیار کر چکا ہے؛ اسے آپ کی سائٹ کے server{} بلاک میں شامل کر کے Nginx دوبارہ لوڈ کرنا ہے:
include /etc/nginx/snippets/arciveo-deny.conf;
sudo nginx -t && sudo systemctl reload nginx # جانچ: 403 آنا چاہیے، فائل کا مواد نہیں curl -sI https://monitor.example.com/config.php | head -1
پینل کی فائلیں (ڈسٹری بیوشن آرکائیو) خریداری کے بعد 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 جاری کرتے وقت certbot خود ServerName درج کر دے گا (مرحلہ 06)؛ دوبارہ کچھ انسٹال کرنے کی ضرورت نہیں۔
فائلوں پر اجازتیں سیٹ کریں — یہ لازمی مرحلہ ہے۔ اگر آپ نے 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 unix-socket کے ذریعے root کے طور پر داخل ہوتا ہے — root پاس ورڈ کی ضرورت نہیں)۔ monitor_db اور monitor_user مثال کے نام ہیں، آپ اپنی مرضی کے کوئی بھی رکھ سکتے ہیں؛ ڈیٹابیس کا نام، صارف اور پاس ورڈ یاد رکھیں — اگلے مرحلے میں انہیں config.php میں درج کریں گے:

# 1. ڈیٹابیس۔ ڈیٹابیس کا نام، صارف اور پاس ورڈ نیچے ایک ہی بار طے ہوتے ہیں اور تمام سطروں میں لگ جاتے ہیں۔ # بلاک ٹرمینل میں مکمل طور پر پیسٹ ہوتا ہے؛ sudo mysql unix-socket کے ذریعے root کے طور پر داخل ہوتا ہے # (root پاس ورڈ کی ضرورت نہیں)۔ انٹرایکٹو `sudo mysql -u root -p` # کاپی پیسٹ کے ساتھ استعمال نہ کریں — پیسٹ پر SQL سطریں پاس ورڈ کے پرامپٹ میں چلی جائیں گی اور ضائع ہو جائیں گی۔ DBNAME='monitor_db' # ← ڈیٹابیس کا نام، ویسا ہی رہ سکتا ہے DBUSER='monitor_user' # ← ڈیٹابیس صارف، ویسا ہی رہ سکتا ہے DBPASS='CHOOSE_A_PASSWORD' # ← پاس ورڈ، اپنا مقرر کریں sudo mysql <<SQL CREATE DATABASE IF NOT EXISTS $DBNAME CHARACTER SET utf8mb4; CREATE USER IF NOT EXISTS '$DBUSER'@'localhost' IDENTIFIED BY '$DBPASS'; GRANT ALL ON $DBNAME.* TO '$DBUSER'@'localhost'; FLUSH PRIVILEGES; SQL # تصدیق ($DBNAME دکھانا چاہیے): mysql -u "$DBUSER" -p"$DBPASS" -e "SHOW DATABASES;" # یہی تینوں اقدار config.php → DB_NAME, DB_USER, DB_PASS میں درج کریں۔
عام طور پر اسکیما امپورٹ کرنے کی ضرورت نہیں — براؤزر میں پہلی بار داخلے پر پینل خود ہی ٹیبلز اور admin اکاؤنٹ بناتا ہے (database/db.sql سے)، اگر ڈیٹابیس خالی ہو۔

اگر ٹیبلز نہ بنیں (پینل ڈیٹابیس کنکشن کی خرابی دکھائے یا لاگ اِن فارم کے بجائے خالی اسکرین) — تو اسکیما دستی طور پر امپورٹ کریں۔ کمانڈ پینل کے روٹ میں چلائی جاتی ہے، اقدار اوپر والے بلاک سے لی جاتی ہیں:

# اسکیما کا امپورٹ: cd /var/www/monitor && mysql -u "$DBUSER" -p"$DBPASS" "$DBNAME" < database/db.sql # جانچ — ٹیبلز کی فہرست ظاہر ہونی چاہیے: mysql -u "$DBUSER" -p"$DBPASS" "$DBNAME" -e "SHOW TABLES;"
اگر $DBNAME / $DBUSER / $DBPASS متغیرات “بھول” چکے ہوں (ٹرمینل کا نیا سیشن) — تو کمانڈ میں اقدار ہاتھ سے ڈالیں یا اوپر والے بلاک کی وہی تین سطریں دوبارہ چلا کر انہیں پھر سے مقرر کر لیں۔
ویب سرور کے لیے sudo۔ عام طور پر قواعد خودکار سیٹ اپ پہلے ہی لکھ چکا ہوتا ہے، اور ماڈیول سسٹم ڈیٹا فوراً دیکھ لیتے ہیں۔ لیکن اگر اسکرپٹ کے آؤٹ پٹ میں sudo rules NOT written کی سطر تھی — تو پینل کا اکاؤنٹ طے کرنے کے لیے کچھ تھا ہی نہیں (فائلیں ابھی اپلوڈ نہیں ہوئی تھیں)، اور قواعد نہیں بنائے گئے۔ ان کے بغیر فائر وال، Fail2ban اور CrowdSec جیسے سیکشن خالی رہیں گے۔ اب جب فائلیں اپنی جگہ ہیں، اکاؤنٹ صراحتاً بتاتے ہوئے اکاؤنٹ والی کمانڈ ایک بار پھر چلائیں:
curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN&profile=existing" | sudo ARCIVEO_USER=www-data bash -s -- monitor.example.com
www-data کی جگہ وہ صارف لکھیں جس کے تحت آپ کی سائٹ کا PHP چلتا ہے (ہوسٹنگ پینل پر یہ عموماً ڈومین کا مالک ہوتا ہے)۔ اسے یوں دیکھا جا سکتا ہے:
ps -o user= -C php-fpm8.3 | sort -u # ورژن اپنا ڈالیں # یا: ps aux | grep -m3 '[p]hp-fpm'
دوبارہ چلانے کے بعد جانچ: فائل /etc/sudoers.d/monitor موجود ہو اور اس میں آپ کے صارف والی سطریں ہوں۔

05. config.php کی ترتیب

config.php پینل کی جڑ میں (/var/www/monitor/config.php) — واحد فائل ہے جسے ہاتھ سے ترمیم کرنا ضروری ہے۔ پینل کی تمام ترتیبات اس میں define() constants کے ذریعے دی گئی ہیں۔ اسے کسی ایڈیٹر میں کھولیں:

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

اپنی قدریں نمایاں جگہوں پر ڈالیں؛ باقی جوں کا توں رہنے دیں:

// --- ڈیٹابیس (مرحلہ 04 سے) --- define('DB_HOST', 'localhost'); // برقرار رکھیں define('DB_NAME', 'db_name'); // جو مرحلہ 04 میں بنایا define('DB_USER', 'user'); // جو مرحلہ 04 میں بنایا define('DB_PASS', 'db_password'); // جو مرحلہ 04 میں مقرر کیا define('DB_CHARSET', 'utf8mb4'); // برقرار رکھیں // --- ایپلیکیشن --- define('APP_URL', 'https://monitor.example.com'); // پینل کا پتہ، آخر میں سلیش کے بغیر define('TIMEZONE', 'Asia/Karachi'); // آپ کا ٹائم زون // --- سیشن کا دورانیہ --- define('SESSION_LIFETIME', 28800); // دوبارہ لاگ اِن تک بلا حرکت وقت، سیکنڈ (28800 = 8 گھنٹے)

کیا تبدیل کرنا ہے:

  • DB_NAME، DB_USER، DB_PASS — بالکل وہی ڈیٹابیس نام، صارف اور پاس ورڈ جو آپ نے مرحلہ 04 میں ڈیٹابیس بناتے وقت مقرر کیے (اگر مثالیں رہنے دیں تو — monitor_db / monitor_user)۔ DB_HOST اور DB_CHARSET کو نہ چھیڑیں۔
  • APP_URL — پینل کا مکمل پتہ https:// کے ساتھ، آخر میں سلیش کے بغیر اور www کے بغیر۔ اسے اُس ڈومین سے مطابقت رکھنی چاہیے جس پر آپ لائسنس فعال کرتے ہیں (مرحلہ 07)، ورنہ کلید مسترد ہو جائے گی۔
  • TIMEZONE — آپ کا ٹائم زون (فہرست — timedatectl list-timezones)۔ یہ صرف اس پر اثر ڈالتا ہے کہ پینل تاریخیں کیسے دکھاتا ہے؛ cron کاموں کے شروع ہونے کے وقت پر اثر نہیں ڈالتا (وہاں سسٹم کا ٹائم زون لاگو ہوتا ہے)۔
  • SESSION_LIFETIME — کتنے سیکنڈ کی بے عملی کے بعد پینل دوبارہ لاگ اِن کرنے کو کہے گا (طے شدہ 8 گھنٹے)۔ مثلاً 3600 = 1 گھنٹہ، 86400 = ایک دن۔
  • خرابیوں کی لاگنگ کا بلاک (display_errors، log_errors، error_log) — طے شدہ حالت میں رہنے دیں۔

فائل محفوظ کریں (Ctrl+O، Enter، پھر Ctrl+X) اور PHP-FPM دوبارہ چالو کریں — ورنہ OPcache کی وجہ سے تبدیلیاں لاگو نہیں ہوں گی:

sudo systemctl restart php*-fpm
config.php — خفیہ فائل ہے (اس میں ڈیٹابیس کا پاس ورڈ ہے)۔ یہ پینل کی جڑ میں ہے، جو ویب روٹ بھی ہے، مگر محفوظ ہے: اجازتیں 640 (مرحلہ 03 میں مقرر) اور جڑ کے .htaccess میں واضح ممانعت۔ اسے عوامی repositories میں نہ رکھیں اور اصل پاس ورڈ کے ساتھ سپورٹ کو نہ بھیجیں۔
تمام پیرامیٹرز کی تفصیلی وضاحت — FAQ میں: “فائل config.php — پینل کی تمام ترتیبات”۔

06. SSL جاری کریں (HTTPS)

ڈیش بورڈ صرف HTTPS پر کام کرتا ہے۔ لاگ اِن سیشن ایک محفوظ کوکی استعمال کرتا ہے، اور WebAuthn (2FA) معیار کے مطابق صرف HTTPS پر کام کرتا ہے۔ http:// پر آپ لاگ اِن نہیں کر سکیں گے۔
ہوسٹنگ پینل والے سرور پر یہ مرحلہ درکار نہیں (اسکرپٹ کے آؤٹ پٹ میں: Certbot skipped — issue SSL in …)۔ سرٹیفکیٹ خود پینل میں ویب ڈومین پر Let's Encrypt کے سوئچ سے جاری ہوتا ہے — اس طرح اس کی تجدید بھی پینل ہی کرتا ہے۔

certbot اور Apache کا پلگ اِن آٹو سیٹ اپ کے ذریعے پہلے ہی انسٹال ہو چکے ہیں۔ ڈومین کا DNS پہلے ہی سرور کی طرف اشارہ کر رہا ہونا چاہیے (مرحلہ 02)۔ ایک ہی کمانڈ سے اجرا:

sudo certbot --apache -d monitor.example.com

اگر پینل www. کے ساتھ بھی کھلنا چاہیے — تو دونوں نام ایک ہی کمانڈ میں گنوا دیں، ورنہ دوسرے پتے پر براؤزر سرٹیفکیٹ کے بارے میں انتباہ دکھائے گا:

sudo certbot --apache -d monitor.example.com -d www.monitor.example.com
دوسرا نام صرف اسی صورت میں شامل کریں جب اس کے لیے بھی اسی سرور کی طرف اشارہ کرنے والا A-ریکارڈ موجود ہو (مرحلہ 02)۔ ورنہ Let's Encrypt اسے جانچ نہیں سکے گا اور پورا سرٹیفکیٹ جاری نہیں کرے گا — بشمول بنیادی ڈومین۔
certbot کیا پوچھے گا:
  1. Enter email address — آپ کا e-mail (سرٹیفکیٹ کی میعاد ختم ہونے کی اطلاعات وہیں آئیں گی)۔
  2. Terms of Service … (Y)es/(N)o — Y۔
  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/ میں موجود ہے، پینل سرخ بینر کے ذریعے اس کے بارے میں خبردار کرتا ہے۔
  7. پہلی جانچیں دستی طور پر چلائیں — ورنہ کچھ سیکشن رات تک خالی رہیں گے (نیچے دیا گیا بلاک دیکھیں)۔
“Lynis آڈٹ” اور “Logwatch” فوراً خالی کیوں ہوتے ہیں۔ خودکار سیٹ اپ نے اوزار انسٹال کیے اور cron-جابز بنا دیے، مگر خود جانچیں نہیں چلائیں — وہ شیڈول کے مطابق چلیں گی: Lynis 03:00 پر، Logwatch 06:00 پر، debsums 04:30 پر، ClamAV 01:30 پر۔ اُس وقت تک سیکشن سچائی سے دکھاتے ہیں کہ ابھی کوئی رپورٹ نہیں۔ ایک دن انتظار نہ کرنا ہو تو انہیں ایک بار ہاتھ سے چلا لیں:
# Lynis آڈٹ — پہلی رپورٹ (چند منٹ): sudo /usr/local/bin/lynis-scan.sh # ایک دن کی Logwatch رپورٹ: sudo /usr/local/bin/logwatch_daily.sh # پیکجز کی سالمیت (debsums) — بڑے سرور پر کافی وقت لیتی ہے: sudo /usr/local/bin/debsums-scan.sh
Lynis کو سیدھا پینل سے بھی چلایا جا سکتا ہے — “Lynis آڈٹ” صفحے پر “آڈٹ چلائیں” کا بٹن: یہ وہی اسکرپٹ پس منظر میں چلاتا ہے اور رپورٹ خود اپ ڈیٹ کر دیتا ہے۔ اس کے بعد سب کچھ شیڈول کے مطابق چلتا ہے، ہاتھ سے چلانے کی مزید ضرورت نہیں۔
پہلا اینٹی وائرس اسکین (sudo /usr/local/bin/clamav-scan.sh) ڈسک اور پروسیسر پر بھاری بوجھ ڈالتا ہے اور ایک گھنٹہ یا اس سے زیادہ چل سکتا ہے — کام کرتے سرور پر بہتر ہے کہ 01:30 والے رات کے رن کا انتظار کریں۔ “ڈسکیں (SMART)”، “کارکردگی” اور “سیکیورٹی اپ ڈیٹس” کے سیکشن خود بھرتے ہیں: بالترتیب ہر 30 منٹ، 5 منٹ اور گھنٹے میں ایک بار۔
تیار۔ ہر ٹول کے لیے رہنمائی FAQ میں ہے۔
اگر اس سرور پر اپنے ڈومین کے ساتھ ایک اور ویب سائٹ درکار ہو — FAQ دیکھیں: “اس سرور پر دوسری ویب سائٹ (ایک اور ڈومین)”۔