اذهب إلى المحتوى

هل سبق أن احتجت إلى أن تنقل موقعك المبني على ووردبريس إلى خادم مضيف جديد؟ سنقدم لك النهج اليسير لتنفيذ ذلك وليس النهج الذي ينصَح به عادةً.

إن عملية النقل (أو التهجير) ليست عمليةً تدميريةً، لذا يسهل الرجوع إلى الخادم الأصلي إذا اضطررت إلى ذلك لأي سبب كان.

اتبع هذا النهج اليسير لتهجير موقعك وضبط إعدادات جدار الحماية.

مكونات الموقع المبني على ووردبريس

يتطلب تشغيل موقع على ووردبريس 3 مكونات رئيسية: نظام ووردبريس، وخادم ويب مثل أباتشي Apache الذي سنستخدمه في هذه المقالة، وقاعدة بيانات MariaDB التي تتفرع عن قواعد البيانات من نوع MySQL وتكافئها وظيفيًا.

في حالة استخدامك لخادم ويب آخر غير أباتشي عليك أن تطبق الإعدادات التي سنضبطها في هذه المقالة بما يتوافق مع أي خادم ويب تستخدمه.

الإعدادات على الخادم الأصلي

لدينا خادمان مضيفان أحدهما خادم يعمل بنظام تشغيل لينوكس يمثل جدار الحماية والموجه router في الشبكة، أما الآخر يستضيف خادم الويب ضمن الشبكة. نستخدم في عنونة الشبكة الداخلية ما كان يسمّى سابقًا مجال عناوين الشبكة الخاصة من الفئة C أو class C private network address range، والذي يشار إليه في منهج التوجيه غير الصنفي بين النطاقات CIDR بالشكل التالي: 192.168.0.0/24 .

أستخدم برنامج جدار الحماية المعروف IPTablesٍ الذي أفضله على برنامج firewalld الأكثر تعقيدًا. ضبطت إحدى الأسطر في إعدادات جدار الحماية ليرسل الحزم Packets التي يتلقاها على المنفذ 80 (منفذ خدمة HTTP) إلى خادم الويب. كما تجد في التعليقات وضعت قواعد لتحويل الاتصالات الأخرى الواردة إلى خادم الويب ذاته على المنافذ المناسبة ضمن ملف ‎/etc/sysconfig/iptables.

# Reroute ports for inbound connections to the appropriate web/email/etc server.
# HTTPD goes to 192.168.0.75
-A PREROUTING -d 45.20.209.41/255.255.255.248 -p tcp -m tcp --dport 80 \

  -j DNAT --to-destination 192.168.0.75:80

ضبطت خادم الويب أباتشي الأصلي باستخدام المضيف الافتراضي القائم على الاسم لأنني أخدّم عدة مواقع من نسخة HTTPD واحدة. يفضل دومًا استخدام أسلوب المضيف الافتراضي القائم على الاسم في ضبط الإعدادات لأنك في حال قررت لاحقًا استضافة مواقع إضافية سيسهل عليك هذا الأسلوب تنفيذ ذلك.

تجد فيما يلي مقطع المضيف الافتراضي ضمن ملف ‎/etc/httpd/conf/httpd.conf لنقل الموقع إلى الخادم الجديد. لا يحتوي هذا المقطع على عناوين شبكية IP addresses لذا ليس عليك إجراء أي تعديل لاستخدامه على الخادم الجديد.

<VirtualHost *:80>
   ServerName www.website1.org
   ServerAlias server.org

DocumentRoot "/var/website1/html"
   ErrorLog "logs/error_log"
   ServerAdmin me@website1.org

<Directory "/var/website1/html">
      Options Indexes FollowSymLinks

AllowOverride None
      Require all granted

</Directory>
</VirtualHost>

تكون تعليمة listen التي نجدها في بداية ملف httpd.conf تقريبًا مثل المقطع أدناه قبل التهجير. إن العنوان الموجود في المقطع هو عنوان الشبكة الخاص Private IP وليس العنوان العام Public IP.

Listen 192.168.0.75:80

يجب تعديل هذا العنوان المذكور بعد listen عند نقل الموقع إلى الخادم الجديد.

تهيئة الخادم الجديد

يمكنك تهيئة الخادم الجديد لنقل الموقع بثلاث خطوات:

  • تثبيت الخدمات.
  • ضبط إعدادات جدار الحماية.
  • ضبط إعدادات خادم الويب.

تثبيت خادم الويب أباتشي وقاعدة البيانات MariaDB

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

dnf -y install httpd mariadb

ضبط إعدادات جدار الحماية على الخادم الجديد

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

ربما ستجد مسبقًا أول سطر في المقتطف أدناه ضمن أسطر برنامج جدار الحماية لديك IPTables أو أي نوع آخر من برامج جدار الحماية التي تعمل وفق نظام Netfilter. فهو يتعرف على الحزم الواردة إلى الخادم التي تعرف مسبقًا بأنها واردة من مصدر يسمح له بالمرور، ويتجاوز تطبيق أية قواعد أخرى على الاتصالات الواردة وبالتالي يوفر في الوقت وفي عدد دورات وحدة المعالجة المركزية CPU cycles. يتعرف آخر سطر في المقتطف على الاتصالات الجديدة الواردة إلى خدمة HTTPD على المنفذ 80 ويسمح لها بالمرور.

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
<snip>
# HTTP
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

تعد العينة التالية من ملف /etc/sysconfig/iptables نموذجًا مصغرًا عن مجموعة قواعد برنامج جدار الحماية IPTables التي تسمح بمرور الاتصالات الواردة إلى خدمتي SSH (منفذ 22) و HTTPD (منفذ 80).

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
# SSHD
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
# HTTP
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

# Final disposition for unmatched packets
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

كان التعديل الوحيد الذي عليّ إضافته إلى قواعد جدار الحماية على الخادم الجديد هو آخر سطر في المقتطف السابق في ملف ‎/etc/sysconfig/iptables ثم إعادة تحميل مجموعة القواعد المعدَّلة.

iptables-restore /etc/sysconfig/iptables

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

قد يختلف جدار الحماية على خادمك وتفاصيل إعداداته عما ذكرنا سابقًا، لكن غايتك هي السماح للاتصالات الواردة إلى خدمة HTTPD على المنفذ 80 على خادم الويب الجديد.

إعدادات خدمة HTTPD

يمكنك ضبط إعدادات خدمة HTTPD في ملف ‎/etc/httpd/conf/httpd.conf. اضبط العنوان IP في سطر Listen كما هو موضّح في المقطع التالي، إذ حددنا فيه عنوان خادم الويب الجديد 192.168.0.125.

Listen 192.168.0.125:80

انسخ مقطع VirtualHost الخاص بالموقع الذي تنقله والصقه في نهاية ملف httpd.conf على الخادم الجديد.

عملية النقل

ستحتاج إلى نقل مجموعتين من البيانات فقط وهما قاعدة البيانات وهيكلية مجلدات الموقع. أنشئ ملفات مضغوطة بصيغة tar للمجلدين.

cd /var ; tar -cvf /tmp/website.tar website1/
cd /var/lib ; tar -cvf /tmp/database.tar mysql/

انسخ هذين الملفين المضغوطين إلى الخادم الجديد. نحفظ الملفات كهذه عادةً في مجلد tmp. نفذ الأوامر التالية على الخادم الجديد لاستخراج الملفات من الملفات المضغوطة إلى المجلدات الصحيحة.

cd /var ; tar -xvf /tmp/website.tar
cd /var/lib ; tar -xvf /tmp/database.tar

تجد جميع ملفات ووردبريس في مجلد ‎/var/website1، لذا لن تضطر إلى تثبيتهم على الخادم الجديد، كما لن تضطر إلى تنفيذ عملية تثبيت نظام ووردبريس عليه.

لن تضطر إلى نقل أي ملف آخر غير هذا المجلد إلى الخادم الجديد.

آخر خطوة عليك اتخاذها قبل التبديل بين الخادمين هي تشغيل (أو إعادة تشغيل) عفاريت daemons خدمتي mysqld و httpd، أما ووردبريس ليست خدمة لذا لا تشغَّل بنفس طريقة تشغيل العفاريت.

systemctl start mysqld ; systemctl start httpd

ينبغي أن تتحقق من حالة هاتين الخدمتين بعد تشغيلهما.

systemctl status mysqld
 mariadb.service - MariaDB 10.5 database server
    Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
    Active: active (running) since Sat 2021-08-21 14:03:44 EDT; 4 days ago
        Docs: man:mariadbd(8)

https://mariadb.com/kb/en/library/systemd/
   Process: 251783 ExecStartPre=/usr/libexec/mariadb-check-socket (code=exited, status=0/SUCCESS)
   Process: 251805 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir mariadb.service (code=exited, status=0/SUCCESS)
   Process: 251856 ExecStartPost=/usr/libexec/mariadb-check-upgrade (code=exited, status=0/SUCCESS)
 Main PID: 251841 (mariadbd)
      Status: "Taking your SQL requests now..."
      Tasks: 15 (limit: 19003)
    Memory: 131.8M
        CPU: 1min 31.793s
    CGroup: /system.slice/mariadb.service
└─251841 /usr/libexec/mariadbd --basedir=/usr

Aug 21 14:03:43 simba.stmarks-ral.org systemd[1]: Starting MariaDB 10.5 database server...
Aug 21 14:03:43 simba.stmarks-ral.org mariadb-prepare-db-dir[251805]: Database MariaDB is probably initialized in /var/lib/mysql already, n>
Aug 21 14:03:43 simba.stmarks-ral.org mariadb-prepare-db-dir[251805]: If this is not the case, make sure the /var/lib/mysql is empty before>
Aug 21 14:03:44 simba.stmarks-ral.org mariadbd[251841]: 2021-08-21 14:03:44 0 [Note] /usr/libexec/mariadbd (mysqld 10.5.11-MariaDB) startin>
Aug 21 14:03:44 simba.stmarks-ral.org systemd[1]: Started MariaDB 10.5 database server.
systemctl status httpd
 httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Drop-In: /usr/lib/systemd/system/httpd.service.d
└─php-fpm.conf
      Active: active (running) since Sat 2021-08-21 14:08:39 EDT; 4 days ago
        Docs: man:httpd.service(8)
   Main PID: 252458 (httpd)
      Status: "Total requests: 10340; Idle/Busy workers 100/0;Requests/sec: 0.0294; Bytes served/sec: 616 B/sec"
        Tasks: 278 (limit: 19003)
      Memory: 44.7M
        CPU: 2min 31.603s
   CGroup: /system.slice/httpd.service
├─252458 /usr/sbin/httpd -DFOREGROUND
├─252459 /usr/sbin/httpd -DFOREGROUND
├─252460 /usr/sbin/httpd -DFOREGROUND
├─252461 /usr/sbin/httpd -DFOREGROUND
├─252462 /usr/sbin/httpd -DFOREGROUND
└─252676 /usr/sbin/httpd -DFOREGROUND

Aug 21 14:08:39 simba.stmarks-ral.org systemd[1]: Starting The Apache HTTP Server...
Aug 21 14:08:39 simba.stmarks-ral.org httpd[252458]: AH00112: Warning: DocumentRoot [/var/teststmarks-ral/html] does not exist
Aug 21 14:08:39 simba.stmarks-ral.org httpd[252458]: Server configured, listening on: port 80
Aug 21 14:08:39 simba.stmarks-ral.org systemd[1]: Started The Apache HTTP Server.

التبديل النهائي بين الخادمين

بعد التأكد من تشغيل الخدمات، عدّل قواعد جدار الحماية المتعلقة بخدمة HTTPD ضمن ملف ‎/etc/sysconfig/iptables إلى ما يلي:

-A PREROUTING -d 45.20.209.41/255.255.255.248 -p tcp -m tcp --dport 80 \
  -j DNAT --to-destination 192.168.0.125:80

ثم أعد تحميل مجموعة قواعد برنامج جدار الحماية IPTables.

iptables-restore /etc/sysconfig/iptables

تغنيك قواعد جدار الحماية في الجهة المضيفة عن تعديل توجيه سجلات خادم DNS الخارجية إلى الخادم الجديد. إذا كنت تستخدم خادم DNS داخلي فعليك أن تعدل عنوان IP لسجل A الخاص باسم الموقع في قاعدة بيانات خادم DNS الداخلي. إذا لم تكن تستخدم خادم DNS داخلي احرص على إضافة العنوان الصحيح للخادم الجديد في ملفات ‎/etc/hosts لحواسيبك المضيفة.

اختبار الموقع وإنهاء عملية التهجير

احرص على اختبار الموقع الجديد الذي نصبته. ابدأ بإيقاف خدمتي mysqld و httpd على الخادم القديم ثم تصفح الموقع على متصفحك، إذا عملت كل روابطه كما يجب يمكنك إبطال خدمتي mysqld و httpd على الخادم القديم. أما إذا واجهتك أية مشكلة يمكنك تغيير قاعدة التوجيه في IPTables لتوجه إلى الخادم القديم مجددًا ريثما تعالج المشكلة.

ثم احذف خدمتي Mysql و HTTPD على الخادم القديم لتضمن ألّا يعاد تشغيلهما عن طريق الخطأ.

الخاتمة

إن العملية بهذه البساطة. لن تحتاج إلى تنفيذ عمليات استيراد أو تصدير على قاعدة البيانات لأن كل البيانات والملفات الضرورية نٌسخَت مع مجلد mysql. لن تحتاج إلى تنفيذ هذه العمليات إلا إذا كان لديك قواعد بيانات أخرى لموقعك الإلكتروني أو مواقعك على نفس نسخة MariaDB لا تريد أن تنسخها إلى الخادم الجديد.

إن تهجير بقية المواقع من الخادم القديم عملية سهلة أيضًا، فكل قواعد البيانات اللازمة لتشغيل المواقع الإضافية نقِلَت مع خدمة MariaDB. لا عليك إلا أن تنقل المجلدات في مجلد ‎/var/website إلى الخادم الجديد، ثم أضف مقطع virtual host المناسب، ثم أعد تشغيل خدمة HTTPD.

اتبعت هذه الطريقة في تهجير المواقع من خادم إلى آخر عدة مرات وكللت العملية دومًا بالنجاح.

ترجمة -وبتصرف- للمقال How I migrated a WordPress website to a new host لصاحبه David Both

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...