إنشاء قالب خادم افتراضي خاص (VPS) باستخدام Drupal 9 في Centos 8

نحن نواصل توسيع سوقنا. لقد أخبرناك مؤخرًا كيف صنع صورة Gitlabوقد ظهر هذا الأسبوع في سوقنا Drupal.

نخبرك لماذا اخترناه وكيف تم إنشاء الصورة.

إنشاء قالب خادم افتراضي خاص (VPS) باستخدام Drupal 9 في Centos 8

Drupal - منصة مريحة وقوية لإنشاء أي نوع من مواقع الويب: بدءًا من المواقع الصغيرة والمدونات وحتى المشاريع الاجتماعية الكبيرة، وتستخدم أيضًا كأساس لتطبيقات الويب، المكتوبة بلغة PHP وتستخدم قواعد البيانات العلائقية كمخزن للبيانات.

Drupal يتضمن الإصدار 9 جميع الميزات المُطبقة في الإصدار 8.9. ويكمن الاختلاف الرئيسي بين الإصدار 9 والإصدار 8 في أن المنصة ستستمر في تلقي التحديثات والتصحيحات الأمنية بعد نوفمبر 2021. كما يُبسّط الإصدار 9 عملية التحديث، مما يجعل الترقية من الإصدار 8 أسهل.

متطلبات الخادم

للاستخدام Drupal يوصى باستخدام ذاكرة وصول عشوائي (RAM) بسعة 2 جيجابايت ومعالج ثنائي النواة.

الملفات الأساسية Drupal سيشغل حوالي 100 ميجابايت، وستحتاج أيضًا إلى مساحة لتخزين الصور وقاعدة البيانات والقوالب والوحدات الإضافية والنسخ الاحتياطية، والتي ستعتمد على حجم موقعك.

إلى Drupal يتطلب الإصدار 9 من PHP الإصدار 7.4 أو أعلى مع حد أدنى من المتطلبات (memory_limit) لذاكرة سعة 64 ميجابايت؛ إذا تم استخدام وحدات إضافية، فمن المستحسن تثبيت 128 ميجابايت.

كخادم ويب Drupal يمكن استخدام Apache أو Nginx، وMySQL أو PostgreSQL أو SQLite كقاعدة بيانات.

سنقوم بالتركيب Drupal باستخدام Nginx و MySQL.

تركيب

لنقم بتحديث الحزم المثبتة إلى الإصدار الأحدث:

sudo dnf update -y

دعونا نضيف إذنًا دائمًا لحركة المرور الواردة إلى منافذ http/80 وhttps/443:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

دعونا نطبق قواعد جدار الحماية الجديدة:

sudo systemctl reload firewalld

لنقم بتثبيت Nginx:

sudo dnf install nginx -y

لنبدأ ونقوم بتمكين خادم Nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

بما أن المستودع الرئيسي موجود حاليًا Centos يتم استخدام إصدار PHP 7.2، فلنضف مستودع REMI باستخدام PHP 7.4 (الحد الأدنى للإصدار المطلوب). Drupal (متّى 9، XNUMX).
للقيام بذلك، قم بإضافة مستودع EPEL (المطلوب بواسطة مستودع REMI):

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

دعونا نضيف مستودع REMI:

sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm

لنقم بتفعيل الوحدة php:remi-7.4 لتثبيت php 7.4:

sudo dnf module enable php:remi-7.4 -y

تثبيت php-fpm و php-cli:

sudo dnf install -y php-fpm php-cli

سنقوم بتثبيت وحدات PHP المطلوبة للعمل. Drupal:

sudo dnf install -y php-mysqlnd php-date php-dom php-filter php-gd php-hash php-json php-pcre php-pdo php-session php-simplexml php-spl php-tokenizer php-xml

سنقوم أيضًا بتثبيت وحدات PHP mbstring opcache الموصى بها:

sudo dnf install -y php-mbstring php-opcache

لنقم بتثبيت خادم MySQL:

sudo dnf install mysql-server -y

فلنقم بتشغيل خادم MySQL وبدء تشغيله:

sudo systemctl start mysqld
sudo systemctl enable mysqld

نظرًا لأننا نقوم بإنشاء قالب لـ VDS، ويمكن أن يكون بطيئًا، فسنضيف تأخير بدء mysqld لمدة 30 ثانية، وإلا فقد تكون هناك مشاكل في بدء تشغيل الخادم أثناء التمهيد الأولي للنظام:

sudo sed -i '/Group=mysql/a 
ExecStartPre=/bin/sleep 30
' /usr/lib/systemd/system/mysqld.service

لنغير المجموعة والمستخدم الذي سيتم تشغيل nginx ضمنه عن طريق إجراء تغييرات على /etc/php-fpm.d/www.conf:

sudo sed -i --follow-symlinks 's/user = apache/user = nginx/g' /etc/php-fpm.d/www.conf
sudo sed -i --follow-symlinks 's/group = apache/group = nginx/g' /etc/php-fpm.d/www.conf

دعنا نغير مالك دليل جلسات PHP إلى nginx وفقًا لذلك:

sudo chown -R nginx. /var/lib/php/session

لنقم بإزالة الأسطر التي تحتوي على التعليقات من ملف التكوين /etc/nginx/nginx.conf (حتى لا يكون هناك مشغلات مزدوجة لـ sed):

sudo sed -i -e '/^[ t]*#/d'  /etc/nginx/nginx.conf

أضف إعدادات ضغط gzip إلى /etc/nginx/nginx.conf

sudo sed -i '/types_hash_max_size 2048;/a 

    gzip on;
    gzip_static on;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/x-icon image/svg+xml application/x-font-ttf;
    gzip_comp_level 9;
    gzip_proxied any;
    gzip_min_length 1000;
    gzip_disable "msie6";
    gzip_vary on; 
' /etc/nginx/nginx.conf

لنضيف إعدادات ملف الفهرس Index.php إلى /etc/nginx/nginx.conf:

sudo sed -i '/        root         /usr/share/nginx/html;/a 
        index index.php index.html index.htm;
' /etc/nginx/nginx.conf

دعونا نضيف إعدادات الخادم الافتراضي: معالجة PHP عبر مقبس php-fpm، وتعطيل سجل الملفات الثابتة، وزيادة وقت انتهاء الصلاحية، وتعطيل سجل الوصول والأخطاء لـ favicon.ico وrobots.txt، ورفض الوصول إلى .ht ملفات للجميع:

sudo sed -i '/        location / {/a 
		try_files $uri $uri/ /index.php?q=$uri&$args;
        }
    
        location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
        access_log off;
        expires max;
        }
    
        location ~ .php$ {
        try_files  $uri =404;
        fastcgi_pass   unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_intercept_errors on;
        fastcgi_ignore_client_abort off;
        fastcgi_connect_timeout 60;
        fastcgi_send_timeout 180;
        fastcgi_read_timeout 180;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
        }
    
        location = /favicon.ico {
        log_not_found off;
        access_log off;
        }
    
        location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
        }
    
        location ~ /.ht {
        deny all;' /etc/nginx/nginx.conf

تثبيت wget مطلوب لتثبيت certbot:

sudo dnf install wget -y

قم بتنزيل الملف القابل للتنفيذ certbot من خارج الموقع:

cd ~
wget https://dl.eff.org/certbot-auto

انقل certbot إلى /usr/local/bin/:

mv certbot-auto /usr/local/bin/certbot-auto

ودعنا نعين الحقوق كمالك للجذر:

chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-auto

لنقم بتثبيت تبعيات certbot وفي هذه المرحلة نوقف عمله (الإجابات: Y، c):

certbot-auto

قم بتنزيل الأرشيف الذي يحتوي على أحدث إصدار من الموقع الرسمي. Drupal 9:

cd ~
wget https://www.drupal.org/download-latest/tar.gz

قم بتثبيت tar لفك ضغط الأرشيف:

sudo dnf install tar -y

لنحذف الملفات الافتراضية الموجودة في الدليل /usr/share/nginx/html/:

rm -rf /usr/share/nginx/html/*

لنقم بفك ضغط الملفات في دليل خادم الويب:

tar xf tar.gz -C /usr/share/nginx/html/

لننقل الملفات من الدليل الفرعي إلى الدليل الجذر لخادم الويب:

mv /usr/share/nginx/html/drupal-9.0.7/* /usr/share/nginx/html/

دعونا نحذف الدليل الفرعي:

rm -rf /usr/share/nginx/html/drupal-9.0.7

لنحذف الأرشيف الذي يحتوي على ملفات التثبيت:

rm -f ./tar.gz

لنقم بتعيين مالك ملفات nginx:

chown -R nginx. /usr/share/nginx/html

في هذه المرحلة سنقوم بإيقاف تشغيل الخادم وأخذ لقطة:

shutdown -h now

بعد إطلاق VDS من اللقطة، سنقوم بإجراء الإعداد الأولي لخادم MySQL عن طريق تشغيل البرنامج النصي:

mysql_secure_installation

دعونا نقوم بتمكين أداة التحقق من كلمة المرور:

Would you like to setup VALIDATE PASSWORD component? : y

لنقم بتعيين كلمة المرور للمستخدم الجذر لـ MySQL:

New password:
Re-enter new password:

دعونا نزيل المستخدمين المجهولين:

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y

دعونا نمنع الجذر من الاتصال عن بعد:

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y

دعونا نحذف قاعدة بيانات الاختبار:

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y

لنعد تحميل جداول الامتيازات:

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

بعد ذلك، لإكمال التثبيت، يمكننا الذهاب إلى vps_ip_address
سنرى صفحة التثبيت على هذا العنوان Drupal.

دعونا نختار اللغة التي سنستخدمها. على سبيل المثال: الروسية. انقر فوق "حفظ ومتابعة"

دعنا نختار ملف تعريف التثبيت (يتم استخدام العرض التوضيحي فقط للتعرف على النظام). في حالتنا، فليكن "قياسي".

في الصفحة التالية سنعطي اسمًا لقاعدة البيانات، على سبيل المثال “drupal”. دعنا نشير إلى اسم مستخدم قاعدة البيانات الجذر وكلمة المرور المعطاة له عند تشغيل mysql_secure_installation. انقر فوق "حفظ ومتابعة".

دعنا ننتظر حتى يكتمل تثبيت الترجمات وتحديثها (قد تستغرق العملية عدة دقائق).

سنحدد اسم الموقع، ونُعيّن البريد الإلكتروني الخاص بالموقع (الذي ستُرسل منه إشعارات الموقع)، واسم المستخدم، وكلمة المرور، والبريد الإلكتروني لحساب المسؤول. Drupalسنقوم أيضاً بتحديد البلد والمنطقة الزمنية في الإعدادات الإقليمية. ثم أكمل التثبيت بالنقر على "حفظ ومتابعة".

بعد ذلك، يمكنك الانتقال إلى لوحة التحكم باستخدام اسم المستخدم وكلمة المرور اللذين أنشأتهما كمسؤول. Drupal.

إعداد HTTPS (اختياري)

لتكوين HTTPS، يجب أن يكون لـ VDS اسم DNS صالح، حدده

/etc/nginx/nginx.conf

في قسم الخادم اسم الخادم (على سبيل المثال):

server_name  domainname.ru;

لنعد تشغيل nginx:

service nginx restart

لنبدأ تشغيل certbot:

sudo /usr/local/bin/certbot-auto --nginx

أدخل بريدك الإلكتروني، وافق على شروط الخدمة (أ)، اشترك في النشرة الإخبارية (اختياري) (ن)، حدد أسماء النطاقات التي تريد إصدار شهادة لها (أدخل للجميع).

إذا سار كل شيء دون أخطاء، فسنرى رسالة حول الإصدار الناجح للشهادات وتكوين الخادم:

Congratulations! You have successfully enabled ...

بعد ذلك، سيتم إعادة توجيه الاتصالات بالمنفذ 80 إلى 443 (https).

أضف إلى /etc/crontab لتحديث الشهادات تلقائيًا:

# Cert Renewal
30 2 * * * root /usr/local/bin/certbot-auto renew --post-hook "nginx -s reload"

إعداد أمان المضيف الموثوق (مستحسن)

يهدف هذا الإعداد إلى أن يكون حلاً للمشكلة المرتبطة بتحديد base_url الديناميكي، وهو مصمم لمنع هجمات رأس HTTP HOST (عندما يعتقد موقعك أنه شخص آخر).

للقيام بذلك، تحتاج إلى تحديد أسماء النطاقات الموثوقة للموقع في ملف الإعدادات.

في ملف

/usr/share/nginx/html/sites/default/settings.php دعنا نزيل التعليق أو نضيف إعدادًا يحتوي على أنماط لأسماء المواقع الفعلية، على سبيل المثال:

$settings['trusted_host_patterns'] = [
  '^www.mydomain.ru$',
];

تثبيت PHP APCu (موصى به)

Drupal يدعم هذا الإصدار APCu (ذاكرة التخزين المؤقت البديلة لمستخدم PHP). يستخدم الإصداران 8 و9 تقنية APCu بشكل مكثف كذاكرة تخزين مؤقت محلية قصيرة الأجل مقارنةً بالإصدارات السابقة. حجم ذاكرة التخزين المؤقت الافتراضي (32 ميجابايت) مناسب لمعظم المواقع ولا يمكن أن يتجاوز 512 ميجابايت.

للتنشيط، قم بتثبيت وحدة PHP APCu:

dnf -y install php-pecl-apcu

أعد تشغيل nginx وphp-fpm:

service nginx restart
service php-fpm restart

إذا كنت تستخدم اللغة الروسية وAPCu مع حجم الذاكرة الموصى به لذاكرة التخزين المؤقت، فقد ترى تحذيرًا في لوحة التحكم بأن حجم الذاكرة المخصصة لذاكرة التخزين المؤقت يختلف عن الموصى به، ولكن في الواقع كل شيء يعمل بشكل صحيح. ومن المرجح أن يتم تصحيح التحذير غير الصحيح في التحديثات القادمة.

أو إذا كان التحذير يؤذي عينيك، يمكنك استخدامه التصحيح المقابل من خارج الموقع.

نود أن نذكرك أنه يمكنك أيضًا إنشاء صورة لنا

هناك ثلاثة خيارات لكيفية المشاركة.

قم بإعداد الصورة بنفسك واحصل على 3000 روبل لرصيدك

إذا كنت مستعدًا للاندفاع فورًا إلى المعركة وإنشاء الصورة التي تفتقدها، فسنضيف لك 3000 روبل إلى رصيدك الداخلي، والتي يمكنك إنفاقها على الخوادم.

كيفية إنشاء الصورة الخاصة بك:

  1. قم بإنشاء حساب معنا على على الانترنت
  2. أخبر الدعم أنك ستقوم بإنشاء الصور واختبارها
  3. سنضيف لك 3000 روبل ونمنحك القدرة على إنشاء لقطات
  4. اطلب خادمًا افتراضيًا بنظام تشغيل نظيف
  5. قم بتثبيت البرنامج على VPS هذا وقم بتكوينه
  6. اكتب التعليمات أو البرنامج النصي لنشر البرنامج
  7. قم بإنشاء لقطة للخادم الذي تم تكوينه
  8. اطلب خادمًا افتراضيًا جديدًا عن طريق تحديد اللقطة التي تم إنشاؤها مسبقًا في القائمة المنسدلة "قالب الخادم".
  9. إذا تم إنشاء الخادم بنجاح، قم بنقل المواد المستلمة في المرحلة 6 إلى الدعم الفني
  10. إذا كان هناك خطأ، يمكنك التحقق من الدعم عن السبب وتكرار الإعداد

لأصحاب الأعمال: اعرض برنامجك

إذا كنت مطور برامج يتم نشره واستخدامه على VPS، فيمكننا إدراجك في السوق. هذه هي الطريقة التي يمكننا من خلالها مساعدتك في جلب عملاء جدد وحركة مرور ووعي. اكتب لنا

أخبرنا في التعليقات ما هي الصورة التي تفتقدها؟

وسوف نقوم بإعداده بأنفسنا

إنشاء قالب خادم افتراضي خاص (VPS) باستخدام Drupal 9 في Centos 8

إنشاء قالب خادم افتراضي خاص (VPS) باستخدام Drupal 9 في Centos 8

المصدر: www.habr.com

شراء استضافة موثوقة للمواقع مع حماية DDoS وخوادم VPS VDS 🔥 اشترِ استضافة مواقع ويب موثوقة مع حماية من هجمات DDoS، وخوادم VPS وVDS | ProHoster