كيفية نشر مواقع Wordpress متعددة باستخدام Virtualmin و Ansible على Ubuntu 16.04

الاستخدام الشائع لخادم Vultr الظاهري هو استضافة مواقع Wordpress. يوضح لك هذا الدليل كيفية أتمتة تكوين خادم افتراضي من البداية (باستخدام Ansible) ونشر العديد من مواقع Wordpress المستقلة (باستخدام Webmin / Virtualmin). Virtualmin / Webmin هي واجهة مستخدم رسومية تسمح لك بإدارة نشر العديد من حسابات الخادم الظاهري على نفس الجهاز (كاملة مع مكدس LAMP / LEMP). Virtualmin مشابه جدًا لـ cPanel و Plesk ، وفي هذا البرنامج التعليمي سنستخدم إصدار GPL المجاني. بعد الإعداد الأولي لخادم Vultr وتثبيت Virtualmin ، يمكنك إعداد خوادم ظاهرية متعددة بسرعة كبيرة من داخل واجهة Virtualmin وتثبيت Wordpress مباشرة على هذا الخادم الظاهري الكامل باسم المجال الخاص به.

في هذا البرنامج التعليمي ، بدلاً من إدخال قائمة طويلة من الأوامر يدويًا ، سنستخدم بدلاً من ذلك Ansible. Ansible هي أداة الأتمتة القائمة على الثعبان والتي تتيح لك أتمتة مهام الخادم بشكل موثوق به وبشكل متكرر. هذا يعني أنه بمجرد اتباعك لهذا البرنامج التعليمي ، ستتمكن من نشر خادم آخر بنفس الطريقة باستخدام أمرين فقط.

المتطلبات الأساسية

  • اسم مجال مؤهل واحد على الأقل وإمكانية الوصول إلى سجلات DNS
  • حساب Vultr

الخطوة 1 - تثبيت Ansible على جهازك المحلي

قم بتثبيت Ansible على جهازك المحلي أو خادم آخر.

mkdir ansible
cd ansible
virtualenv env
source env/bin/activate
pip install ansible

الخطوة 2 - إنشاء مفاتيح SSH ونشر الخادم

يعمل Ansible بتسجيل الدخول إلى الخادم الخاص بك عبر SSH. يعد وصول SSH أكثر أمانًا إذا استخدمنا المفاتيح بدلاً من كلمة المرور. دعنا أولاً ننشئ زوج مفاتيح عام وخاص.

mkdir ssh_keys
ssh-keygen -t rsa -b 2048 -f ./ssh_keys

في ssh_keysالدليل سيكون هناك ملفان ، ssh_keysو ssh_keys.pub. ssh_keysهو ملف المفتاح الخاص بك ويجب الحفاظ عليه آمنًا. يمكنك الآن فتح ssh_keys.pubالمفتاح الذي يحتوي على المفتاح العمومي.

قم بتسجيل الدخول إلى لوحة تحكم الويب Vultr وانقر Deploy New Server.

حدد منطقة ، نوع الخادم (Ubuntu 16.04) ، حجم الخادم ، ثم في الجزء 6 ( SSH keys) ، انقر فوق Add New. في الصفحة التالية ، الصق مفتاحك العام وأعطه اسمًا ، وانقر Add SSH key. أخيرًا ، تأكد من تحديد المفتاح وانقر عليه Deploy now.
بمجرد انتهاء الخادم من النشر ، سيظهر لك عنوان IP الخاص به. ستحتاج إلى تسجيل الدخول إلى خادم DNS لاسم المجال الخاص بك وتوجيهه إلى هذا العنوان.

الخطوة 3 - إنشاء تكوين Ansible أساسي

تسمى ملفات الأتمتة في Ansible roles. سنقوم أولاً بإعداد بنية الدليل (داخل ansibleالدليل الذي أنشأته للتو في الخطوة 1) ، والملفات الأساسية.

mkdir -p group_vars roles/common/tasks/ roles/common/handlers
touch hosts group_vars/all deploy.yml roles/common/handlers/main.yml

قم بتحرير hostsالملف ليحتوي على ما يلي ، مع استبدال ip addressالخادم الذي أنشأته للتو. يستخدم Ansible python 2 ، الذي لم يتم تثبيت Ubuntu 16.04 بشكل افتراضي. في hostsالملف نقول Ansible لاستخدام الثعبان 3.

[common]  
192.0.2.1 ansible_python_interpreter=/usr/bin/python3

قم بتحرير deploy.ymlالملف ليتضمن ما يلي. سنستخدم rootالمستخدم.

- name: apply common configuration to server
  hosts: all
  user: root
  roles:
    - common

قم بتحرير /group_vars/allالملف ليتضمن ما يلي. تخبر هذه المتغيرات Ansible بموقع مفاتيح SSH ومعلمات ملف المبادلة واسم المجال المؤهل بالكامل وكلمة المرور الجذر. يرجى تذكر عدم تضمين الملف في التحكم بالمصادر لأنه يحتوي على كلمة المرور الخاصة بك في نص واضح.

ssh_dir: ./ssh_keys
swap_file_path: /swapfile
swap_file_size: 1G
swappiness: 1
hostname: example.com
new_password: YOUR_PASSWORD_HERE

قم بتحرير common/handlers/main.ymlالملف ليتضمن ما يلي.

- name: restart sshd
  service: name=ssh state=restarted

الخطوة 4 - إنشاء مهام Ansible لإعداد الخادم الأساسي

من السهل فهم الأتمتة الخفية إذا قسمناها إلى مهام. لنقم بإنشاء ملفات لكل مهمة من مهامنا في هذه العملية.

cd roles/common/tasks
touch hosts main.yml setup.yml users.yml ufw.yml swap.yml virtualmin.yml

main.yml يجب أن يشير إلى كل ملف يحتوي على أوامر Ansible ، لذا قم بتحريره ليتضمن ما يلي.

- include: setup.yml
- include: users.yml
- include: ufw.yml
- include: swap.yml
- include: virtualmin.yml

الخطوة الأولى في إعداد خادم جديد هي تحديث ذاكرة التخزين المؤقت الريبو وتعيين المنطقة الزمنية. قم بتحرير common/handlers/setup.ymlالملف ليتضمن ما يلي.

- apt: update_cache=yes
  sudo: yes

- name: set timezone to Europe/London
  timezone:
    name: Europe/London

الآن ، سنمنح المستخدم الجذر كلمة مرور (والتي سنحتاجها للوصول إلى واجهة الويب Virtualmin) ، ولكن نقوم بتعطيل تسجيلات كلمة المرور عبر SSH (نظرًا لأننا نستخدم طريقة المصادقة الأكثر أمانًا). تحرير users.ymlلاحتواء ما يلي.

- name: Change passwd
  user: name=root password={{ new_password | password_hash('sha512') }} update_password=always

- name: Disable SSH password login
  lineinfile: dest=/etc/ssh/sshd_config regexp="^#?PasswordAuthentication" line="PasswordAuthentication no"
  notify: restart sshd

من أجل الأمن ، نحن بحاجة إلى جدار حماية. سنستخدم جدار الحماية غير المعقد للسماح بوصول SSH على المنفذ 22والوصول إلى الويب على المنفذ 80والوصول الآمن إلى الويب على المنفذ 443. قم بتحرير ufw.ymlالملف ليتضمن ما يلي.

- name: Set default firewall policy to deny all
  become: True
  ufw: state=enabled direction=incoming policy=deny
  tags: firewall

- name: enable SSH in firewall
  ufw: rule=allow port=22
  sudo: yes

- name: enable HTTP connections for web server
  ufw: rule=allow port=80
  sudo: yes

- name: enable HTTPS connections for web server
  ufw: rule=allow port=443
  sudo: yes

- name: enable firewall
  ufw: state=enabled
  sudo: yes

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

- name: Set swap_file variable
  set_fact:
    swap_file: "{{swap_file_path}}"
  tags:
    - swap.set.file.path

- name: Check if swap file exists
  stat:
    path: "{{swap_file}}"
  register: swap_file_check
  tags:
    - swap.file.check

- name: Create swap file
  command: fallocate -l {{swap_file_size}} {{swap_file}}
  when: not swap_file_check.stat.exists
  tags:
    - swap.file.create

- name: Change swap file permissions
  file: path="{{swap_file}}"
        owner=root
        group=root
        mode=0600
  tags:
    - swap.file.permissions

- name: Format swap file
  sudo: yes
  command: "mkswap {{swap_file}}"
  when: not swap_file_check.stat.exists
  tags:
    - swap.file.mkswap

- name: Write swap entry in fstab
  mount: name=none
         src={{swap_file}}
         fstype=swap
         opts=sw
         passno=0
         dump=0
         state=present
  tags:
    - swap.fstab

- name: Turn on swap
  sudo: yes
  command: swapon -a
  when: not swap_file_check.stat.exists
  tags:
    - swap.turn.on

- name: Set swappiness
  sudo: yes
  sysctl:
    name: vm.swappiness
    value: "{{swappiness}}"
  tags:
    - swap.set.swappiness

الخطوة 5 - إضافة مهمة Ansible لإعداد Virtualmin

يحتوي Virtualmin على ملف التثبيت الخاص به والذي يمكن تنزيله وتشغيله بواسطة Ansible. هنا نستخدم الحد الأدنى من التثبيت ( LINK). العناصر الإضافية هي تكوين كلمة مرور خادم MySQL التي لم يتم تعيينها عند تثبيتها بواسطة Virtualmin. نحتاج إلى إيقاف MySQL مؤقتًا وإضافة دليل المصادقة قبل تغيير كلمة المرور. تحرير virtualmin.ymlلاحتواء ما يلي.

- name: download virtualmin install script
  get_url: >
    url=http://software.virtualmin.com/gpl/scripts/install.sh
    dest=/root/install.sh
    mode=0755

- name: virtualmin install (takes around 10 mins) you can see progress using $ sudo tail -f /root/virtualmin-install.log
  tags: non-idem
  shell: ~/install.sh --force --hostname {{ hostname }} --minimal --yes
  args:
    chdir: /root

- name: temp stop mysql
  service:
    name: mysql
    state: stopped

- name: change owner (and group) of mysqld dir
  file:
    path: "/var/run/mysqld"
    state: directory
    owner: mysql
    group: mysql

- name: virtualmin set mysql password
  shell: virtualmin set-mysql-pass --user root --pass {{ new_password }}

- name: restart mysql
  service:
    name: mysql
    state: started

انتهى دور Ansible الآن ونحن على استعداد للنشر.

الخطوة 6 - إجراء التثبيت باستخدام Ansible

من المجلد ansible ، يمكننا الآن ببساطة تشغيل الأمر التالي ، وسيقوم Ansible بتنفيذ جميع المهام التي أنشأناها تلقائيًا. في المرة الأولى التي تتصل فيها ستحصل على تحذير مفتاح SSH ، فقط اكتب " yes" في الموجه.

ansible-playbook deploy.yml --private-key=ssh_keys/ssh_keys -i hosts

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

الخطوة 7 - معالج Virtualmin بعد التثبيت

اكتمل التثبيت ويمكننا الآن الانتقال إلى https://192.0.2.1:10000(استخدام عنوان IP لخادمك). سيصدر متصفحك تحذيرًا أمنيًا لأن الشهادة موقعة ذاتيًا ، لذا انقر فوق advancedوأضف استثناء. ستظهر لك صفحة تسجيل دخول. اسم المستخدم هو root، وكلمة المرور هي التي أدخلتها في group_vars/allالملف في الخطوة 3. في المرة الأولى التي تدخل فيها Virtualmin ، سيتم تقديمك لمعالج ما بعد التثبيت. يمكنك إما الذهاب عبر هذه الإعدادات يدويًا أو النقر cancelلقبول الإعدادات الافتراضية.

الخطوة 8 - إنشاء خادم وتثبيت WordPress

للحصول على أول خادم وورد الخاص بك وتشغيله ، من لوحة تحكم Virtualmin انقر فوق Create Virtual Server. ستحتاج إلى إدخال اسم المجال والوصف وكلمة مرور المسؤولين. يجب أن يكون اسم النطاق مختلفًا عن اسم المجال المؤهل بالكامل لـ Virtualmin ، وستحتاج إلى توجيه سجل DNS إلى عنوان IP الخاص بخادمك.

انقر Create Server. بمجرد انتهاء Virtualmin من إنشاء الخادم الخاص بك ، انقر فوق Install Scriptsالقائمة اليمنى. حدد Wordpress، وانقر فوق Show install options، وفي الصفحة التالية اختر موقع تثبيت Wordpress. فقط اختر At top levelوانقر Install Now.

هذا كل ما عليك القيام به - يمكنك إكمال تثبيت Wordpress عن طريق زيارة http://example.net/wp-admin/install.php(أين example.netهو اسم مجال الخوادم الافتراضية). إذا لم يتم نشر سجلات DNS الخاصة بك حتى الآن ، يمكنك الانتقال Services > Preview Websiteمن قائمة Virtualmin.

يمكنك تكرار هذه الخطوة عدة مرات لإنشاء مواقع Wordpress متعددة على نفس خادم Vultr.

اترك تعليقاً

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

وظائف طبقات معمارية مرجعية للبيانات الضخمة

وظائف طبقات معمارية مرجعية للبيانات الضخمة

اقرأ المدونة لمعرفة الطبقات المختلفة في بنية البيانات الضخمة ووظائفها بأبسط طريقة.

6 أشياء شديدة الجنون حول نينتندو سويتش

6 أشياء شديدة الجنون حول نينتندو سويتش

يعرف الكثير منكم أن Switch سيصدر في مارس 2017 وميزاته الجديدة. بالنسبة لأولئك الذين لا يعرفون ، قمنا بإعداد قائمة بالميزات التي تجعل "التبديل" "أداة لا غنى عنها".

وعود التكنولوجيا التي لم يتم الوفاء بها بعد

وعود التكنولوجيا التي لم يتم الوفاء بها بعد

هل تنتظر عمالقة التكنولوجيا للوفاء بوعودهم؟ تحقق من ما تبقى دون تسليم.

كيف يمكن للذكاء الاصطناعي نقل أتمتة العمليات إلى المستوى التالي؟

كيف يمكن للذكاء الاصطناعي نقل أتمتة العمليات إلى المستوى التالي؟

اقرأ هذا لمعرفة مدى انتشار الذكاء الاصطناعي بين الشركات الصغيرة وكيف أنه يزيد من احتمالات نموها ومنح منافسيها القدرة على التفوق.

التفرد التكنولوجي: مستقبل بعيد للحضارة الإنسانية؟

التفرد التكنولوجي: مستقبل بعيد للحضارة الإنسانية؟

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

CAPTCHA: ما هي المدة التي يمكن أن تظل تقنية قابلة للتطبيق للتميز بين الإنسان والذكاء الاصطناعي؟

CAPTCHA: ما هي المدة التي يمكن أن تظل تقنية قابلة للتطبيق للتميز بين الإنسان والذكاء الاصطناعي؟

لقد أصبح حل CAPTCHA صعبًا جدًا على المستخدمين في السنوات القليلة الماضية. هل ستكون قادرة على أن تظل فعالة في اكتشاف البريد العشوائي والروبوتات في المستقبل القريب؟

التطبيب عن بعد والرعاية الصحية عن بعد: المستقبل هنا

التطبيب عن بعد والرعاية الصحية عن بعد: المستقبل هنا

ما هو التطبيب عن بعد والرعاية الصحية عن بعد وأثره على الأجيال القادمة؟ هل هو مكان جيد أم لا في حالة الوباء؟ اقرأ المدونة لتجد طريقة عرض!

هل تساءلت يومًا كيف يربح المتسللون الأموال؟

هل تساءلت يومًا كيف يربح المتسللون الأموال؟

ربما سمعت أن المتسللين يكسبون الكثير من المال ، لكن هل تساءلت يومًا كيف يجنون هذا النوع من المال؟ دعنا نناقش.

يتسبب التحديث الإضافي لنظام macOS Catalina 10.15.4 في حدوث مشكلات أكثر من حلها

يتسبب التحديث الإضافي لنظام macOS Catalina 10.15.4 في حدوث مشكلات أكثر من حلها

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