روش خودکار: یک اسکریپت از حساب کاربری کل سرور را آماده میکند (پشتهٔ وب 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).
۱) سطح محافظت را انتخاب کنید (در حساب کاربری، پیش از کپی فرمان):
۲) روی سرور با کاربر root فرمان موجود در حساب کاربری را اجرا کنید — اینگونه است:
۳) خروجی پایان کار را بخوانید — آنجا نوشته شده چه چیزی بر عهدهٔ شما مانده است. اسکریپت کار خود را با یک بلوک بررسیها و فهرست «گام بعدی — نصب پنل» به پایان میرساند. بخشی از گامها را عمداً انجام نمیدهد: اینکه دقیقاً کدامها، به نمایهٔ انتخابی و به آنچه روی سرور یافته است بستگی دارد. با فهرست زیر مقایسه کنید — تنها بندهایی را انجام دهید که خط مربوط به آنها در خروجی شما ظاهر شده باشد.
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 و AllowOverride برای .htaccess). در خروجی اسکریپت این همان خط 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{} سایت خود include کنید و 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 پاسخ میدهد و certbot هنگام صدور SSL (گام 06) مقدار 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 و حرف s بهجای x یعنی setgid تنظیم شده است.
پایگاه داده و کاربر را بسازید، سپس شِما را وارد کنید. بلوک مربوط به پایگاه داده را بهطور کامل در ترمینال بچسبانید (sudo mysql با کاربر root از طریق unix-socket وارد میشود — رمز 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)»، «کارایی» و «بهروزرسانیهای امنیتی» خودشان پر میشوند: بهترتیب هر ۳۰ دقیقه، هر ۵ دقیقه و ساعتی یک بار.