نصب خودکار

روش خودکار: یک اسکریپت از حساب کاربری کل سرور را آماده می‌کند (پشتهٔ وب 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).

۱) سطح محافظت را انتخاب کنید (در حساب کاربری، پیش از کپی فرمان):

  • محافظت کامل (توصیه‌شده) — 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، به‌روزرسانی‌های خودکار امنیتی.
  • سبک — برای VPS با حافظه RAM کم: مجموعه پایه بدون مؤلفه‌های سنگین.
  • سرور پیکربندی‌شده (پنل هاستینگ) — برای سروری که از پیش فعال است و پنل (HestiaCP و مانند آن)، سایت‌ها و ایمیل دارد: فقط تغییرات افزودنی (نصب ابزارهای تکمیلی، cron، قواعد sudo) و فایروال، Fail2ban، ایمیل، SSH و sysctl همان‌طور که هستند باقی می‌مانند. روی سروری با پنل، اسکریپت خودش این حالت را انتخاب می‌کند.
اجرای آزمایشی. در حساب کاربری می‌توانید گزینه «اجرای آزمایشی» را علامت بزنید — در این صورت فرمان فقط نشان می‌دهد اسکریپت چه چیزی نصب و تغییر می‌دهد و بدون دست‌زدن به چیزی پایان می‌یابد. روی سرور از پیش پیکربندی‌شده مفید است: نخست اجرای آزمایشی، سپس اجرای واقعی بدون علامت.

۲) روی سرور با کاربر 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 و AllowOverride برای .htaccess). ساختن جداگانهٔ دایرکتوری و 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 پاسخ می‌دهد و certbot هنگام صدور SSL (گام 06) مقدار 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 (بیت ۲): فایل‌های بارگذاری‌شده با 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 و حرف s به‌جای x یعنی setgid تنظیم شده است.

04. پایگاه داده

پایگاه داده و کاربر را بسازید، سپس شِما را وارد کنید. بلوک مربوط به پایگاه داده را به‌طور کامل در ترمینال بچسبانید (sudo mysql با کاربر root از طریق unix-socket وارد می‌شود — رمز root لازم نیست). monitor_db و monitor_user فقط نمونه هستند و می‌توانید هر نامی که خواستید بگذارید؛ نام پایگاه داده، کاربر و رمز را به خاطر بسپارید — در مرحله بعد آن‌ها را در config.php وارد می‌کنید:

# 1. پایگاه داده. رمز فقط یک بار در DBPASS تعیین می‌شود و در همه خطوط جایگزین می‌شود. # بلوک را به‌طور کامل در ترمینال بچسبانید؛ sudo mysql با کاربر root از unix-socket وارد می‌شود # (رمز 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/Tehran'); // منطقهٔ زمانی شما // --- زمان نشست --- define('SESSION_LIFETIME', 28800); // بی‌کاری تا ورود مجدد، ثانیه (28800 = 8 ساعت)

چه چیزی را تغییر دهید:

  • 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 تغییرات اعمال نمی‌شوند:

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 — ایمیل شما (اعلان‌های انقضای گواهی به آنجا می‌آید).
  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