كيفية إعداد قاعدة بيانات بعيدة لتحسين أداء الموقع باستخدام MySQL على Ubuntu 18.04

0 الأسهم
0
0
0
0

مقدمة

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

في هذا الدليل، سنتناول كيفية تهيئة خادم قاعدة بيانات MySQL بعيد ليتصل به تطبيق الويب الخاص بك. سنستخدم WordPress كمثال للعمل معه، ولكن هذه التقنية قابلة للتطبيق بشكل عام على أي تطبيق يدعم MySQL.

المتطلبات الأساسية
  • خادمان يعملان بنظام أوبونتو 18.04. كما هو موضح في دليل الإعداد الأولي للخادم مع أوبونتو 18.04، يجب أن يكون لكل منهما مستخدم غير جذر يتمتع بصلاحيات sudo وجدار حماية UFW مُفعّل. سيستضيف أحد هذين الخادمين خادم MySQL الخلفي، وسنشير إليه بخادم قاعدة البيانات في هذا الدليل. سيتصل الخادم الآخر بخادم قاعدة البيانات عن بُعد ويعمل كخادم الويب. وبالمثل، سنشير إليه بخادم الويب في هذا الدليل.
  • تم تثبيت Nginx وPHP على خادم الويب لديك. سيرشدك دليلنا التعليمي حول كيفية تثبيت Linux وNginx وMySQL وPHP (حزمة LEMP) على Ubuntu 18.04 خلال العملية، ولكن يُرجى ملاحظة أنه يُنصح بتخطي الخطوة الثانية من هذا الدليل، والتي تُركز على تثبيت MySQL، لأنك ستقوم بتثبيت MySQL على خادم قاعدة البيانات لديك.
  • تم تثبيت MySQL على خادم قاعدة البيانات لديك. اتبع دليلنا حول كيفية تثبيت MySQL على Ubuntu 18.04 لإعداده.
  • اختياريًا (ولكن يُنصح بشدة)، يتم تثبيت شهادات TLS/SSL من Let's Encrypt على خادم الويب الخاص بك. ستحتاج إلى شراء اسم نطاق وإعداد سجلات DNS لخادمك، ولكن الشهادات نفسها مجانية. يوضح لك دليلنا "كيفية تأمين Nginx باستخدام Let's Encrypt على Ubuntu 18.04" كيفية الحصول على هذه الشهادات.

الخطوة 1 - تكوين MySQL للاستماع إلى الاتصالات عن بعد

بمجرد وصولك إلى الحد الأقصى لأداء جهاز واحد، يُعد تخزين بياناتك على خادم منفصل طريقة جيدة للتوسع بسلاسة. كما يوفر البنية الأساسية اللازمة لموازنة الأحمال وتوسيع بنيتك التحتية لاحقًا. بعد تثبيت MySQL باتباع البرنامج التعليمي الأساسي، ستحتاج إلى تغيير بعض قيم التكوين للسماح بالاتصالات من أجهزة كمبيوتر أخرى.

يمكن إجراء معظم تغييرات تكوين خادم MySQL في ملف mysqld.cnf، المُخزَّن افتراضيًا في مجلد /etc/mysql/mysql.conf.d/. افتح هذا الملف على خادم قاعدة البيانات لديك بصلاحيات الجذر باستخدام مُحرِّر النصوص المُفضَّل لديك. سنستخدم nano هنا:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

هذا الملف مُقسّم إلى أقسام، مُعلّمة بعلامات بين قوسين مربعين ([ و ]). ابحث عن القسم المعنون بـ mysqld:

. . .
[mysqld]
. . .

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

افتراضيًا، يتم ضبط هذا الإعداد على 127.0.0.1، مما يعني أن MySQL مُهيأ للبحث عن الاتصالات المحلية فقط. ستحتاج إلى تغيير هذا الإعداد ليشير إلى عنوان IP خارجي يُمكن الوصول إليه من خادمك.

إذا كان كلا خادميك في مركز بيانات مزود بإمكانيات شبكة خاصة، فاستخدم عنوان IP الخاص بشبكة خادم قاعدة البيانات. وإلا، يمكنك استخدام عنوان IP العام الخاص به:

[mysqld]
. . .
bind-address = db_server_ip

بما أنك ستتصل بقاعدة بياناتك عبر الإنترنت، يُنصح باستخدام اتصالات مشفرة للحفاظ على أمان بياناتك. إذا لم تُشفّر اتصال MySQL، يُمكن لأي شخص على الشبكة اعتراض معلومات حساسة بين خوادم الويب وقواعد البيانات. لتشفير اتصالات MySQL، أضف السطر التالي بعد سطر عنوان الربط الذي حدّثته:

[mysqld]
. . .
require_secure_transport = on
. . .

عند الانتهاء، احفظ الملف وأغلقه. إذا كنت تستخدم برنامج nano، فاضغط على CTRL+X، Y، ثم ENTER.

لكي تعمل اتصالات SSL، عليك إنشاء بعض المفاتيح والشهادات. يأتي MySQL مزودًا بأمر يُعِدّها تلقائيًا. شغّل الأمر التالي، الذي يُنشئ الملفات اللازمة. كما يُتيح قراءتها بواسطة خادم MySQL بتحديد مُعرّف مستخدم MySQL:

sudo mysql_ssl_rsa_setup --uid=mysql

لإجبار MySQL على تحديث التكوين وقراءة معلومات SSL الجديدة، أعد تشغيل قاعدة البيانات:

sudo systemctl restart mysql

للتحقق من أن الخادم يستمع الآن على الواجهة الخارجية، قم بتشغيل الأمر netstat التالي:

sudo netstat -plunt | grep mysqld
Output
tcp 0 0 db_server_ip:3306 0.0.0.0:* LISTEN 27328/mysqld

يعرض الأمر netstat إحصائيات حول نظام شبكة خادمك. يوضح لنا هذا الناتج أن العملية mysqld متصلة بـ db_server_ip على المنفذ 3306، وهو منفذ MySQL القياسي، ويؤكد أن الخادم يستمع على الواجهة المناسبة.

بعد ذلك، افتح هذا المنفذ على جدار الحماية للسماح بمرور البيانات عبر:

sudo ufw allow mysql

هذه هي جميع تغييرات التكوين التي تحتاج إلى إجرائها في MySQL. بعد ذلك، سنتناول كيفية إعداد قاعدة البيانات وبعض ملفات تعريف المستخدمين، والتي ستستخدم أحدها للوصول إلى الخادم عن بُعد.

الخطوة 2 - إعداد قاعدة بيانات WordPress وبيانات الاعتماد عن بُعد

على الرغم من أن MySQL يستمع حاليًا إلى عنوان IP خارجي، إلا أنه لا يوجد حاليًا أي مستخدمين أو قواعد بيانات مُفعّلة عن بُعد. لنُنشئ قاعدة بيانات لـ WordPress، ونُعيّن بعض المستخدمين الذين يمكنهم الوصول إليها.

ابدأ بالاتصال بـ MySQL باعتبارك مستخدم الجذر في MySQL:

sudo mysql

من موجه أوامر MySQL، أنشئ قاعدة بيانات سيستخدمها ووردبريس. قد يكون من المفيد تسمية قاعدة البيانات هذه باسم يسهل عليك التعرف عليها لاحقًا. هنا، سنسميها ووردبريس:

CREATE DATABASE wordpress;

بعد إنشاء قاعدة البيانات، الخطوة التالية هي إنشاء زوج من المستخدمين. سننشئ مستخدمًا محليًا فقط، بالإضافة إلى مستخدم بعيد مرتبط بعنوان IP لخادم الويب.

أولاً، قم بإنشاء المستخدم المحلي الخاص بك، wpuser، وقم بمطابقة هذا الحساب مع محاولات الاتصال المحلية فقط، باستخدام localhost في الإعلان:

CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'password';

ثم قم بمنح هذا الحساب حق الوصول الكامل إلى قاعدة بيانات WordPress:

GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';

يمكن لهذا المستخدم الآن إجراء أي عملية على قاعدة بيانات ووردبريس، ولكن لا يمكن استخدام هذا الحساب عن بُعد، لأنه يتوافق فقط مع الاتصالات من الجهاز المحلي. لذا، أنشئ حسابًا مرافقًا يتوافق حصريًا مع الاتصالات من خادم الويب الخاص بك. ستحتاج إلى عنوان IP الخاص بخادم الويب الخاص بك لهذا الغرض.

يرجى ملاحظة أنه يجب استخدام عنوان IP يستخدم نفس الشبكة التي قمت بتكوينها في ملف mysqld.cnf. هذا يعني أنه إذا حددت عنوان IP لشبكة خاصة في ملف mysqld.cnf، فيجب عليك إدخال عنوان IP الخاص لخادم الويب الخاص بك في الأمرين أدناه. إذا قمت بتكوين MySQL لاستخدام الإنترنت العام، فيجب عليك مطابقته مع عنوان IP العام لخادم الويب.

CREATE USER 'remotewpuser'@'web_server_ip' IDENTIFIED BY 'password';

بعد إنشاء حسابك البعيد، امنحه نفس الامتيازات التي يتمتع بها المستخدم المحلي لديك:

GRANT ALL PRIVILEGES ON wordpress.* TO 'remotewpuser'@'web_server_ip';

أخيرًا، قم بإلغاء تحديد الامتيازات حتى يعرف MySQL كيفية البدء في استخدامها:

FLUSH PRIVILEGES;

ثم قم بالخروج من أمر MySQL عن طريق الكتابة:

exit

الآن بعد أن قمت بإنشاء قاعدة بيانات جديدة وإعداد مستخدم عن بعد نشط، يمكنك اختبار ما إذا كان بإمكانك الاتصال بقاعدة البيانات من خادم الويب الخاص بك.

الخطوة 3 – اختبار الاتصالات البعيدة والمحلية

قبل المتابعة، من الجيد التأكد من إمكانية الاتصال بقاعدة البيانات الخاصة بك من جهازك المحلي - خادم قاعدة البيانات - وخادم الويب الخاص بك.

أولاً، اختبر الاتصال المحلي من خادم قاعدة البيانات لديك عن طريق محاولة تسجيل الدخول إلى حسابك الجديد:

mysql -u wpuser -p

عند المطالبة بذلك، أدخل كلمة المرور التي قمت بتعيينها لهذا الحساب.

إذا طُلب منك استخدام MySQL، فهذا يعني أن الاتصال المحلي كان ناجحًا. يمكنك الخروج مرة أخرى بكتابة:

exit

ثم قم بتسجيل الدخول إلى خادم الويب الخاص بك لاختبار الاتصالات عن بعد:

ssh sammy@web_server_ip

للوصول إلى قاعدة البيانات البعيدة، عليك تثبيت بعض أدوات عميل MySQL على خادم الويب. أولًا، حدّث ذاكرة التخزين المؤقت للحزمة المحلية إذا لم تكن قد فعلت ذلك مؤخرًا:

sudo apt update

ثم قم بتثبيت أدوات عميل MySQL:

sudo apt install mysql-client

بعد ذلك، قم بالاتصال بخادم قاعدة البيانات الخاص بك باستخدام الأمر التالي:

mysql -u remotewpuser -h db_server_ip -p

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

سيُطلب منك إدخال كلمة مرور حساب remotewpuser. بعد إدخالها، وإذا سارت الأمور كما هو متوقع، ستظهر لك رسالة MySQL. تأكد من أن الاتصال يستخدم SSL باستخدام الأمر التالي:

status

إذا كان الاتصال يستخدم SSL بالفعل، فسوف يشير خط SSL: إلى ذلك، كما هو موضح هنا:

Output
--------------
mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper
Connection id: 52
Current database:
Current user: [email protected]
SSL: Cipher in use is DHE-RSA-AES256-SHA
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.18-0ubuntu0.16.04.1 (Ubuntu)
Protocol version: 10
Connection: 203.0.113.111 via TCP/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
TCP port: 3306
Uptime: 3 hours 43 min 40 sec
Threads: 1 Questions: 1858 Slow queries: 0 Opens: 276 Flush tables: 1 Open tables: 184 Queries per second avg: 0.138
--------------

بعد التأكد من إمكانية الاتصال عن بعد، انتقل إلى الخروج من الأمر:

exit

بذلك، تكون قد تحققت من الوصول المحلي والوصول من خادم الويب، ولكنك لم تتأكد من رفض الاتصالات الأخرى. لمزيد من التحقق، كرر العملية من خادم ثالث لم تُهيئ له حساب مستخدم محددًا للتأكد من عدم منح الخادم الآخر حق الوصول.

لاحظ أنه قد يتعين عليك تثبيت تطبيقات عميل MySQL كما فعلت أعلاه قبل تشغيل الأمر التالي لمحاولة الاتصال:

mysql -u wordpressuser -h db_server_ip -p

لا ينبغي أن يكتمل هذا بنجاح، ويجب أن يُرجع خطأً مشابهًا لهذا:

Output
ERROR 1130 (HY000): Host '203.0.113.12' is not allowed to connect to this MySQL server

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

بعد اختبار اتصالك عن بعد بنجاح، يمكنك المتابعة لتثبيت WordPress على خادم الويب الخاص بك.

الخطوة 4 – تثبيت ووردبريس

لتوضيح إمكانيات خادم MySQL الجديد مع إمكانية التحكم عن بُعد، سنشرح لك خطوات تثبيت وتكوين نظام إدارة المحتوى الشهير WordPress على خادم الويب. للقيام بذلك، ستحتاج إلى تنزيل البرنامج وفك ضغطه، وتكوين معلومات الاتصال، ثم تشغيله عبر مُثبّت WordPress على الويب.

على خادم الويب الخاص بك، قم بتنزيل الإصدار الأحدث من WordPress إلى الدليل الجذر الخاص بك:

cd ~
curl -O https://wordpress.org/latest.tar.gz

استخرج الملفات، مما سيؤدي إلى إنشاء دليل يسمى wordpress في الدليل الجذر الخاص بك:

tar xzvf latest.tar.gz

يتضمن ووردبريس ملف تهيئة نموذجيًا سنستخدمه كنقطة بداية. انسخ هذا الملف، مع إزالة "النموذج" من اسمه ليتمكن ووردبريس من تحميله:

cp ~/wordpress/wp-config-sample.php ~/wordpress/wp-config.php

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

للحصول على قيم آمنة من مولد مفتاح سري WordPress، اكتب:

curl -s https://api.wordpress.org/secret-key/1.1/salt/

سيؤدي هذا إلى طباعة عدد من المفاتيح في المخرجات. ستضيفها إلى ملف wp-config.php فورًا:

Output
define('AUTH_KEY', 'L4|2Yh(giOtMLHg3#] DO NOT COPY THESE VALUES %G00o|te^5YG@)');
define('SECURE_AUTH_KEY', 'DCs-k+MwB90/-E(=!/ DO NOT COPY THESE VALUES +WBzDq:7U[#Wn9');
define('LOGGED_IN_KEY', '*0kP!|VS.K=;#fPMlO DO NOT COPY THESE VALUES +&[%8xF*,18c @');
define('NONCE_KEY', 'fmFPF?UJi&(j-{8=$- DO NOT COPY THESE VALUES CCZ?Q+_~1ZU~;G');
define('AUTH_SALT', '@qA7f}2utTEFNdnbEa DO NOT COPY THESE VALUES t}Vw+8=K%20s=a');
define('SECURE_AUTH_SALT', '%BW6s+d:7K?-`C%zw4 DO NOT COPY THESE VALUES 70U}PO1ejW+7|8');
define('LOGGED_IN_SALT', '-l>F:-dbcWof%4kKmj DO NOT COPY THESE VALUES 8Ypslin3~d|wLD');
define('NONCE_SALT', '4J(<`4&&F (WiK9K#] DO NOT COPY THESE VALUES ^ZikS`es#Fo:V6');

انسخ الناتج المستلم إلى الحافظة الخاصة بك، ثم افتح ملف التكوين في محرر النصوص الخاص بك:

nano ~/wordpress/wp-config.php

ابحث عن القسم الذي يحتوي على القيم الافتراضية لتلك الإعدادات. سيبدو كالتالي:

. . .
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');
. . .

احذف تلك الأسطر وألصق القيم التي قمت بنسخها من سطر الأوامر.

بعد ذلك، أدخل معلومات اتصال قاعدة البيانات البعيدة. توجد أسطر التكوين هذه أعلى الملف، أعلى مكان لصق مفاتيحك مباشرةً. تذكر استخدام عنوان IP نفسه الذي استخدمته سابقًا في اختبار قاعدة البيانات البعيدة:

. . .
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');
/** MySQL database username */
define('DB_USER', 'remotewpuser');
/** MySQL database password */
define('DB_PASSWORD', 'password');
/** MySQL hostname */
define('DB_HOST', 'db_server_ip');
. . .

وأخيرًا، في أي مكان في الملف، أضف السطر التالي الذي يخبر WordPress باستخدام اتصال SSL بقاعدة بيانات MySQL الخاصة بنا:

define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);

احفظ الملف وأغلقه.

بعد ذلك، انسخ الملفات والمجلدات الموجودة في مجلد ~/wordpress إلى جذر مستند Nginx. لاحظ أن هذا الأمر يتضمن علامة -a لضمان نقل جميع الأذونات الموجودة:

sudo cp -a ~/wordpress/* /var/www/html

بعد ذلك، كل ما عليك فعله هو تغيير ملكية الملف. غيّر ملكية جميع الملفات في جذر المستند إلى www-data، وهو مستخدم خادم ويب أوبونتو الافتراضي:

sudo chown -R www-data:www-data /var/www/html

وبهذا، يتم تثبيت WordPress وتصبح جاهزًا لتشغيله من خلال إجراء الإعداد المستند إلى الويب.

الخطوة 5 – إعداد WordPress عبر واجهة الويب

يتم إعداد ووردبريس عبر الويب. أثناء تنفيذك لهذه العملية، يطرح عليك بعض الأسئلة ويُثبّت جميع الجداول التي يحتاجها في قاعدة بياناتك. سنشرح لك هنا الخطوات الأساسية لإعداد ووردبريس، والتي يمكنك استخدامها كنقطة انطلاق لبناء موقعك الإلكتروني المخصص الذي يستخدم قاعدة بيانات بعيدة.

انتقل إلى اسم المجال (أو عنوان IP العام) المرتبط بخادم الويب الخاص بك:

http://example.com

ستظهر لك صفحة اختيار لغة مُثبّت ووردبريس. اختر اللغة المناسبة وانقر على صفحة التثبيت الرئيسية.

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

نتيجة

باتباع هذا الدليل، تكون قد أعددت قاعدة بيانات MySQL لقبول اتصالات محمية ببروتوكول SSL من تثبيت ووردبريس عن بُعد. الأوامر والتقنيات المستخدمة في هذا الدليل قابلة للتطبيق على أي تطبيق ويب مكتوب بأي لغة برمجة، ولكن تفاصيل التنفيذ تختلف. راجع وثائق قاعدة بيانات تطبيقك أو لغتك لمزيد من المعلومات.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

قد يعجبك أيضاً