השיטה האוטומטית: סקריפט אחד מהאזור האישי מכין את כל השרת (מחסנית ווב 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). היא משויכת לחשבון שלכם ומכילה טוקן אישי.
הסקריפט מכין את השרת כולו: מחסנית ה-web (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 עבור שרת ה-web”.! 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/אקאונט/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, ואת ServerName ירשום certbot בעת הנפקת 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-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 — בדיוק אותם שם מסד, משתמש וסיסמה שהגדרתם ביצירת מסד הנתונים בשלב 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 דקות ופעם בשעה בהתאמה.