إنشاء قالب VPS باستخدام Drupal 9 على Centos 8

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

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

إنشاء قالب VPS باستخدام Drupal 9 على Centos 8

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

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

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

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

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

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

يمكن لدروبال استخدام 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).
للقيام بذلك، قم بإضافة مستودع 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”. دعنا نشير إلى اسم مستخدم قاعدة البيانات الجذر وكلمة المرور المعطاة له عند تشغيل 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