مقدمة
هناك دائمًا أوقات نحتاج فيها إلى تهيئة خوادم جديدة. قد يكون هذا لتوزيع عبء العمل أو إذا كنا ببساطة بحاجة إلى المزيد من الخوادم. عند إعداد خوادم جديدة، يحتاج المستخدمون إلى استخدام أتمتة الخوادم لتهيئتها. يتم ذلك من أجل تقليل التدخل اليدوي. Ansible هي إحدى أدوات إدارة التكوين التي يمكن استخدامها لتهيئة خادم جديد تلقائيًا، مما يقلل من فرص الخطأ البشري عند إعداد الخادم يدويًا.
تعد Ansible أداة غنية بالميزات مع كونها بسيطة في بنيتها الهيكلية. فهي تسهل تهيئة الخوادم من خلال البرامج النصية. ونظراً لبنيتها الموجزة، لا تتطلب Ansible تثبيت أي برامج أخرى عبر العقد.
في هذا البرنامج التعليمي، سنوضح لك كيفية استخدام Ansible لأتمتة تثبيت WordPress مع حزمة LAMP التي تعمل على خادم Ubuntu. WordPress هو نظام إدارة محتوى (CMS) يُستخدم لإنشاء المدونات والمواقع الإلكترونية باستخدام PHP كلغة برمجة وقاعدة بيانات MySQL لتخزين البيانات. بمجرد تثبيت WordPress، يمكن للمستخدمين إدارة الموقع باستخدام واجهة الويب الأمامية.
المتطلبات الأساسية
- بما أن هذا البرنامج التعليمي يعتمد على أوبونتو، ستحتاج إلى أن يكون لديك أحدث إصدار من Ubuntu مثبتًا مع صلاحيات sudo. إذا لم يكن لديك Ubuntu مثبتاً، فيمكنك اتباع الخاص بنا كيفية إعداد خادم Ubuntu الخاص بك.
- سنحتاج أيضًا إلى وجود عقدة تحكم Ansible. يجب أن تحتوي على عقدة تحكم بصلاحيات sudo وتمكين جدار الحماية. تثبيت وإعداد Ansible على Ubuntu 20.04 يحتوي على دليل مفصل حول كيفية تكوين Ansible.
- نحتاج أيضًا إلى مضيفي Ansible البعيدين التي تقوم بتشغيل أحدث إصدار من Ubuntu. المضيفون هم في الأساس العقد المدارة في Ansible.
ملخص إجراءات Ansible Playbook
في هذا القسم، سنرى ما يفعله Ansible Playbook الخاص بنا عند تنفيذه. هذا الإجراء هو بديل للإعداد اليدوي المقدم هنا: كيفية تثبيت WordPress مع LAMP على Ubuntu 20.04.
عندما نقوم بتشغيل Playbook، سيقوم Ansible بما يلي:
- تثبيت aptitude وهو مدير حزم Ansible المفضل.
- تثبيت وتكوين امتدادات PHP وحزم LAMP.
- إنشاء Apache VirtualHost جديد لموقع WordPress الإلكتروني.
- تمكين وحدة mod_rewrite وتعطيل الموقع الافتراضي الذي يقدمه Apache.
- تعيين كلمة المرور لمستخدم root في MySQL.
- إزالة حسابات MySQL المجهولة وقاعدة بيانات الاختبار.
- إنشاء مستخدم جديد وقاعدة بيانات جديدة. سيتم استخدامها بواسطة موقع WordPress الإلكتروني.
- إعداد UFW للسماح بمرور حركة مرور HTTP على المنفذ المكون ( 80 افتراضيًا).
- تنزيل وفك ضغط WordPress.
- إعداد أذونات وملكية الدليل.
- تكوين wp-config.php ملف جديد باستخدام القالب الخاص به.
دليل WordPress على LAMP Ansible Playbook
أولاً، سيتعين علينا الحصول على WordPress على LAMP playbook والتبعيات الخاصة به من do-community/ansible-playbooks مستودع. سنقوم باستنساخ هذا المستودع داخل عقدة التحكم في Ansible.
يمكنك تشغيل أمر git pull كما هو مذكور أدناه:
|
1 2 3 4 5 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
تأكد من حصولك على التحديث الأخير للمستودع المذكور أعلاه. هذا في حال قمت باستنساخ المستودع من قبل. فيما يلي كيفية الحصول على التحديث:
|
1 2 3 |
cd ~/ansible-playbooks git pull |
الآن علينا تحديد موقع الملفات داخل wordpress-lamp_ubuntu مجلد. قد يختلف اسم هذا المجلد اعتمادًا على إصدار Ubuntu الذي تستخدمه. بلمحة سريعة، سترى الهيكل التالي في هذا الدليل:

دعونا نلخص الغرض من هذه الملفات أدناه:
- files/apache.conf.j2: يستخدم Apache VirtualHost. يُستخدم هذا الملف لتحديد إعدادات VirtualHost.
- files/wp-config.php.j2: يحتوي هذا الملف على إعدادات لتكوين WordPress.
- vars/default.yml: يقوم بتكوين إعدادات playbook.
- playbook.yml: إذا كانت هناك مهام تحتاج إلى التنفيذ على خادم بعيد، فيتم استخدام هذا الملف لتكوينها.
- readme.md: دليل استخدام playbook.
يتعين علينا تعديل ملف متغيرات playbook من أجل تخصيص التثبيت. أولاً، افتح vars/default.yaml الملف الموجود داخل الدليل المذكور أعلاه:
|
1 2 3 |
cd wordpress-lamp_ubuntu1804 nano vars/default.yml |
هذا الملف طويل نوعًا ما. يحتوي على عدد من التكوينات لمساعدتنا في التثبيت:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
--- #System Settings php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #MySQL Settings mysql_root_password: "mysql_root_password" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "password" #HTTP Settings http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" |
هنا نحن مهتمون بالمتغيرات التالية:
- php_modules: مصفوفة تحتوي على امتدادات PHP التي يجب تثبيتها لدعم إعداد WordPress الخاص بك. إذا كنت تريد تثبيت المزيد من الوحدات، يمكنك تحديد ذلك هنا.
- mysql_root_password: كلمة المرور لـ root حساب MySQL.
- mysql_db: يحدد هذا اسم قاعدة بيانات MySQL التي سيستخدمها WordPress.
- mysql_user: اسم مستخدم MySQL الذي يجب إنشاؤه لـ WordPress.
- mysql_password: كلمة المرور لمستخدم MySQL الجديد.
- http_host: اسم النطاق أو عنوان IP الخاص بالخادم.
- http_conf: اسم ملف التكوين الذي سيتم إنشاؤه داخل Apache.
- http_port: منفذ HTTP لهذا المضيف الافتراضي. يُستخدم هذا المنفذ للوصول إلى موقع الويب. القيمة الافتراضية هي 80.
بعد ذلك، أدخل القيم في الملف أعلاه ثم احفظه وأغلقه. بالنسبة للمستخدمين الذين يستخدمون محرر nano، اضغط على CTRL+X, Y، واضغط على ENTER.
الآن أنت جاهز لتشغيل playbook هذا. يمكنك تشغيل playbook هذا على خادم واحد أو أكثر. إذا كنت تريد تشغيل playbook هذا على خادم معين، يمكنك استخدام الخيار -l. علاوة على ذلك، إذا كنت بحاجة إلى تحديد المستخدم للاتصال بالخادم البعيد، فحدد المستخدم باستخدام الخيار -u .
افترض أننا نريد تنفيذ playbook الخاص بنا على خادم واحد، srvr1 باستخدام المستخدم u1، يمكننا تشغيل الأمر أدناه:
|
1 |
ansible-playbook playbook.yml -l server1 -u cloudsigma |
بمجرد تشغيل الأمر أعلاه، ستحصل على مخرجات مثل أدناه:
|
1 2 3 4 5 6 7 8 9 |
PLAY [all] ******************************************************************************** TASK [Gathering Facts] ******************************************************************************** ok: [server1] TASK [Install prerequisites] ******************************************************************************** ok: [server1] |
انتظر حتى يكتمل تنفيذ playbook. بعد ذلك، انتقل إلى server_name على متصفح الويب الخاص بك:
|
1 |
http://server_host_or_ip/ |
سترى الشاشة:

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

بعد ذلك، أدخل المعلومات واضغط على تثبيت ووردبريس. سيستغرق الأمر بعض الوقت ثم سترى شاشة مثل أدناه:

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

محتوى Ansible Playbook
تذكر wordpress-lamp_ubuntu مجلد. وهو يحتوي على بعض الملفات بداخله. لذا دعونا نمر عليها واحدًا تلو الآخر:
● vars/default.yml
يحتوي هذا الملف على قيم تُستخدم لتكوين إعدادات موقع WordPress الخاص بك:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#System Settings php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #MySQL Settings mysql_root_password: "mysql_root_password" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "password" #HTTP Settings http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" |
● files/apache.conf.j2
يُستخدم هذا الملف لتكوين Apache VirtualHost:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<VirtualHost *:{{ http_port }}> ServerAdmin webmaster@localhost ServerName {{ http_host }} ServerAlias www.{{ http_host }} DocumentRoot /var/www/{{ http_host }} ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/{{ http_host }}> Options -Indexes </Directory> <IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm </IfModule> </VirtualHost> |
● files/wp-config.php.j2
يُستخدم هذا الملف لتكوين WordPress. وهو يحتوي على مفاتيح فريدة ورموز عشوائية (salts) تم إنشاؤها بواسطة دوال التجزئة (hash functions):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
<?php /** * The base configuration for WordPress * * The wp-config.php creation script uses this file during the * installation. You don't have to use the web site, you can * copy this file to "wp-config.php" and fill in the values. * * This file contains the following configurations: * * * MySQL settings * * Secret keys * * Database table prefix * * ABSPATH * * @link https://codex.wordpress.org/Editing_wp-config.php * * @package WordPress */ // ** MySQL settings - You can get this info from your web host ** // /** The name of the database for WordPress */ define( 'DB_NAME', '{{ mysql_db }}' ); /** MySQL database username */ define( 'DB_USER', '{{ mysql_user }}' ); /** MySQL database password */ define( 'DB_PASSWORD', '{{ mysql_password }}' ); /** MySQL hostname */ define( 'DB_HOST', 'localhost' ); /** Database Charset to use in creating database tables. */ define( 'DB_CHARSET', 'utf8' ); /** The Database Collate type. Don't change this if in doubt. */ define( 'DB_COLLATE', '' ); /** Filesystem access **/ define('FS_METHOD', 'direct'); /**#@+ * Authentication Unique Keys and Salts. * * Change these to different unique phrases! * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service} * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again. * * @since 2.6.0 */ define( 'AUTH_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'SECURE_AUTH_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'LOGGED_IN_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'NONCE_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'AUTH_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'SECURE_AUTH_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'LOGGED_IN_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'NONCE_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); /**#@-*/ /** * WordPress Database Table prefix. * * You can have multiple installations in one database if you give each * a unique prefix. Only numbers, letters, and underscores please! */ $table_prefix = 'wp_'; /** * For developers: WordPress debugging mode. * * Change this to true to enable the display of notices during development. * It is strongly recommended that plugin and theme developers use WP_DEBUG * in their development environments. * * For information on other constants that can be used for debugging, * visit the Codex. * * @link https://codex.wordpress.org/Debugging_in_WordPress */ define( 'WP_DEBUG', false ); /* That's all, stop editing! Happy publishing. */ /** Absolute path to the WordPress directory. */ if ( ! defined( 'ABSPATH' ) ) { define( 'ABSPATH', dirname( __FILE__ ) . '/' ); } /** Sets up WordPress vars and included files. */ require_once( ABSPATH . 'wp-settings.php' ); |
● playbook.yml
يحتوي هذا الملف على جميع المهام المحددة في هذا الإعداد. ويبدأ بسرد مجموعة من الخوادم المستهدفة بواسطة هذا الإعداد. وهو يتضمن vars/default.yml ملف المتغيرات لتحميل خيارات التكوين:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Install prerequisites apt: name=aptitude update_cache=yes state=latest force_apt_get=yes tags: [ system ] - name: Install LAMP Packages apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] tags: [ system ] - name: Install PHP Extensions apt: name={{ item }} update_cache=yes state=latest loop: "{{ php_modules }}" tags: [ system ] # Apache Configuration - name: Create document root file: path: "/var/www/{{ http_host }}" state: directory owner: "www-data" group: "www-data" mode: '0755' tags: [ apache ] - name: Set up Apache VirtualHost template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: Reload Apache tags: [ apache ] - name: Enable rewrite module shell: /usr/sbin/a2enmod rewrite notify: Reload Apache tags: [ apache ] - name: Enable new site shell: /usr/sbin/a2ensite {{ http_conf }} notify: Reload Apache tags: [ apache ] - name: Disable default Apache site shell: /usr/sbin/a2dissite 000-default.conf notify: Restart Apache tags: [ apache ] # MySQL Configuration - name: Set the root password mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock tags: [ mysql, mysql-root ] - name: Remove all anonymous user accounts mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Remove the MySQL test database mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Creates database for WordPress mysql_db: name: "{{ mysql_db }}" state: present login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Create MySQL user for WordPress mysql_user: name: "{{ mysql_user }}" password: "{{ mysql_password }}" priv: "{{ mysql_db }}.*:ALL" state: present login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] # UFW Configuration - name: "UFW - Allow HTTP on port {{ http_port }}" ufw: rule: allow port: "{{ http_port }}" proto: tcp tags: [ system ] # WordPress Configuration - name: Download and unpack latest WordPress unarchive: src: https://wordpress.org/latest.tar.gz dest: "/var/www/{{ http_host }}" remote_src: yes creates: "/var/www/{{ http_host }}/wordpress" tags: [ wordpress ] - name: Set ownership file: path: "/var/www/{{ http_host }}" state: directory recurse: yes owner: www-data group: www-data tags: [ wordpress ] - name: Set permissions for directories shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type d -exec chmod 750 {} \\;" tags: [ wordpress ] - name: Set permissions for files shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type f -exec chmod 640 {} \\;" tags: [ wordpress ] - name: Set up wp-config template: src: "files/wp-config.php.j2" dest: "/var/www/{{ http_host }}/wordpress/wp-config.php" tags: [ wordpress ] handlers: - name: Reload Apache service: name: apache2 state: reloaded - name: Restart Apache service: name: apache2 state: restarted |
يمكنك تعديل هذه الملفات حسب الحاجة لتناسب احتياجاتك الخاصة للموقع الإلكتروني الذي تقوم ببنائه.
الخاتمة
في هذا البرنامج التعليمي، قمنا بشرح كيفية أتمتة تثبيت وإعداد موقع WordPress يعمل على حزمة LAMP على أحدث نظام تشغيل Ubuntu باستخدام Ansible.
لمزيد من الأدلة حول العمل مع Ansible، يمكنك الاطلاع على البرامج التعليمية التالية على مدونتنا:
- استخدام Ansible مع CloudSigma
- أتمتة إعداد الخادم باستخدام Ansible و Ubuntu 20.04
- تثبيت وتكوين LAMP على Ubuntu 20.04 باستخدام Ansible
حوسبة سعيدة!
التعليقات
لا توجد تعليقات بعد. كن أول من يعلق.