الطريقة التلقائية: سكربت واحد من الحساب الشخصي يجهّز السيرفر بالكامل (حزمة الويب 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)؛ وابتكر كلمة مرور خاصة بك لقاعدة البيانات.
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. الخطوة 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 الخاص بك إلزاميًا:
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: …).
لفتح لوحة التحكم عبر عنوان مثل 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 (الخطوة 05). استبدل المسارات في الأوامر بـ/home/account/web/domain/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، وسيكتب certbot قيمة ServerName عند إصدار SSL (الخطوة 06)؛ ولا حاجة لإعادة أي تثبيت.
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 — لا حاجة لكلمة مرور 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 — نفس اسم قاعدة البيانات والمستخدم وكلمة المرور التي حددتها عند إنشاء القاعدة في الخطوة 04 (إن أبقيت الأمثلة — monitor_db / monitor_user). لا تلمس DB_HOST وDB_CHARSET.APP_URL — العنوان الكامل للوحة مع https://، دون شرطة مائلة في النهاية ودون www. يجب أن يطابق النطاق الذي تُفعّل عليه الترخيص (الخطوة 07)، وإلا سيُرفض المفتاح.TIMEZONE — منطقتك الزمنية (القائمة — timedatectl list-timezones). يؤثر فقط على كيفية عرض اللوحة للتواريخ؛ ولا يؤثر على وقت تشغيل مهام cron (هناك تعمل منطقة النظام).SESSION_LIFETIME — بعد كم ثانية من الخمول تطلب اللوحة تسجيل الدخول من جديد (افتراضيًا 8 ساعات). مثلًا 3600 = ساعة، 86400 = يوم.display_errors, log_errors, error_log) — اتركها على الوضع الافتراضي.احفظ الملف (Ctrl+O، Enter، ثم Ctrl+X) وأعد تشغيل PHP-FPM — وإلا فلن تُطبَّق التغييرات بسبب OPcache:
640 (مضبوطة في الخطوة 03) ومنع صريح في .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) يُحمّل القرص والمعالج بشدة وقد يستغرق ساعة أو أكثر — وعلى سيرفر يعمل من الأفضل انتظار التشغيل الليلي في 01:30. أما أقسام «الأقراص (SMART)» و«الأداء» و«تحديثات الأمان» فتمتلئ تلقائيًا: كل 30 دقيقة، و5 دقائق، ومرة كل ساعة على الترتيب.