نحوه استفاده از Ansible براي نصب و راه اندازي وردپرس با LAMP در اوبونتو 18.04

۱۲ بازديد

مقدمه
اتوماسيون سرور مجازي اكنون به دليل ماهيت يكبار مصرف محيط هاي كاربردي مدرن ، نقش اساسي در مديريت سيستم ها ايفا مي كند. ابزارهاي مديريت پيكربندي مانند Ansible معمولاً براي ساده سازي فرايند خودكار سازي تنظيم سرور مجازي با تعيين مراحل استاندارد براي سرور مجازي جديد استفاده مي شود و در عين حال خطاي انساني مرتبط با تنظيمات دستي را نيز كاهش مي دهد.
Ansible يك معماري ساده را ارائه مي دهد كه نيازي به نصب نرم افزار ويژه روي گره ها ندارد. همچنين مجموعه اي از ويژگي ها و ماژول هاي داخلي را فراهم مي كند كه نوشتن اسكريپت هاي اتوماسيون را تسهيل مي كند.
در اين راهنما نحوه استفاده از Ansible براي خودكارسازي مراحل موجود در راهنماي ما درباره نحوه نصب وردپرس با LAMP در اوبونتو 18.04 توضيح داده شده است. وردپرس محبوب ترين CMS (سيستم مديريت محتوا) در اينترنت است كه به كاربران امكان مي دهد وبلاگ ها و وب سايتهاي قابل انعطاف را فراتر از MySQL با پردازش PHP تنظيم كنند. پس از راه اندازي ، تقريباً تمام مراحل اجرا از طريق web frontend قابل انجام است.
پيش نيازها
براي اجراي تنظيم خودكار ارائه شده توسط playbook  كه در اين راهنما در مورد آن صحبت مي كنيم ، به اين موارد نياز داريد:
• يك گره كنترل Ansible : يك دستگاه اوبونتو 18.04 كه داراي Ansible نصب شده و تنظيم شده است تا با استفاده از كليدهاي SSH به ميزبان هاي Ansible شما متصل شود. اطمينان حاصل كنيد كه گره كنترل داراي يك كاربر معمولي با مجوزهاي sudo باشد و فايروال فعال نيز داشته باشد ، همانطور كه در راهنماي راه اندازي سرور مجازي اوليه ما توضيح داده شده است. براي تنظيم Ansible ، لطفا راهنماي ما در مورد نحوه نصب و پيكربندي Ansible در اوبونتو 18.04 را دنبال كنيد.
• يك يا چند هاست Ansible: يك يا چند سرور مجازي از راه دور Ubuntu 18.04 كه قبلاً به كمك راهنماي نحوه استفاده از Ansible براي خودكارسازي تنظيمات اوليه سرور مجازي در اوبونتو 18.04 تنظيم شده اند.
قبل از ادامه كار ، ابتدا بايد اطمينان حاصل كنيد كه گره كنترل Ansible شما قادر به اتصال و اجراي دستورات در هاست (هاي) Ansible باشد. براي بررسي اتصال ، لطفاً مرحله 3 نحوه نصب و پيكربندي Ansible در اوبونتو 18.04 را بررسي كنيد.

اين Playbook چه كاري انجام مي دهد؟
اين playbook  Ansible از طريق روشي كه در راهنماي ما در مورد نحوه نصب وردپرس با LAMP در اوبونتو 18.04 ارائه شده است ، جايگزيني براي اجراي دستي فراهم مي كند.
اجراي اين playbook اقدامات زير را در هاست Ansible شما انجام خواهد داد:
1) aptitude را نصب ميكند ، كه توسط Ansible به عنوان جايگزيني براي مدير بسته apt ارجحيت داده ميشود.
2)بسته هاي LAMP مورد نياز و پسوندهاي PHP را نصب ميكند.
3) يك Apache VirtualHost جديد براي وب سايت وردپرس ايجاد و فعال مينمايد.
4) ماژول بازنويسي Apache (mod_rewrite) را فعال ميكند.
5) وب سايت پيش فرض Apache را غيرفعال ميكند.
6) رمز ورود را براي كاربر root MySQL تنظيم ميكند.
7) حساب هاي MySQL ناشناس را حذف و پايگاه داده را آزمايش ميكند.
8) براي وب سايت وردپرس يك بانك اطلاعاتي MySQL و كاربر جديد ايجاد ميكند.
9)UFW را تنظيم ميكند تا ترافيك HTTP روي درگاه پيكربندي شده انجام شود (به طور پيش فرض 80).
10) وردپرس را دانلود و باز ميكند.
11) مالكيت و مجوزهاي صحيح دايركتوري را تنظيم ميكند.
12) با استفاده از الگوي ارائه شده ، فايل wp-config.php را تنظيم كنيد.
پس از پايان كار playbook ، بر اساس گزينه هايي كه در متغيرهاي پيكربندي خود تعريف كرده ايد ، يك نصب وردپرس در يك محيط LAMP اجرا مي شود.
نحوه استفاده از اين Playbook
اولين كاري كه ما بايد انجام دهيم اين است كه وردپرس را در playbook LAMP و متعلقات آن از منبع do-community / ansible-playbooks را دريافت كنيم. ما بايد اين منبع را به يك پوشه محلي در داخل گره كنترل Ansible تبديل كنيم.
اگر قبلا با دنبال كردن راهنماي ديگري ، اين منبع را كلون كرده ايد ، به كپيansible-playbooks موجود خود دسترسي پيدا كنيد و يك دستور git pull را اجرا كنيد تا مطمئن شويد كه مطالب به روز شده را داريد:
⦁ $ cd ~/ansible-playbooks

⦁ $ git pull
اگر اين اولين بار است كه از منابع do-community / ansible-playbooks استفاده مي كنيد ، بايد با كلون كردن منبع در پوشه هوم فولدر خود شروع كنيد:
⦁ $ cd ~

⦁ $ git clone https://github.com/do-community/ansible-playbooks.git

⦁ $ cd ansible-playbooks

فايل هاي مورد علاقه ما در داخل پوشه wordpress-lamp_ubuntu1804 قرار گرفته اند كه داراي ساختار زير است:
wordpress-lamp_ubuntu1804
├── files
│ ├── apache.conf.j2
│ └── wp-config.php.j2
├── vars
│ └── default.yml
├── playbook.yml
└── readme.md

در اينجا در مورد هر يك از اين فايل ها آمده است:
files / apache.conf.j2: فايل الگو براي تنظيم Apache VirtualHost.
files / wp-config.php.j2: فايل الگو براي تنظيم فايل پيكربندي WordPress.
vars / default.yml: فايل متغير براي شخصي سازي تنظيمات playbook.
playbook.yml: فايل playbook ، شامل كارهايي كه بايد روي سرور مجازي راه دور اجرا شود.
readme.md: فايل متني حاوي اطلاعات مربوط به اين playbook .
ما براي سفارشي سازي گزينه هاي playbook ، فايل متغيرهاي آن را ويرايش خواهيم كرد. به دايركتوري wordpress-lamp_ubuntu1804 دسترسي پيدا كنيد و فايل vars / default.yml را با استفاده از ويرايشگر خط فرمان مورد نظر خود باز كنيد:
⦁ $ cd wordpress-lamp_ubuntu1804

⦁ $ nano vars/default.yml
اين فايل شامل چند متغير است كه بايد به آن توجه كنيد:
vars/default.yml

#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 كه بايد براي پشتيباني از راه اندازي وردپرس شما نصب شوند. شما نيازي به تغيير اين متغير نداريد ، اما در صورت نياز براي ستاپ خاص شما، بايد افزودنه هاي جديد به ليست اضافه كنيد.
mysql_root_password: كلمه عبور مورد نظر براي حساب MySQL ريشه
mysql_db: نام پايگاه داده MySQL كه بايد براي وردپرس ايجاد شود.
mysql_user: نام كاربر MySQL كه بايد براي وردپرس ايجاد شود.
mysql_password: رمز عبور براي كاربر جديد MySQL.
http_host: نام دامنه شما.
http_conf: نام فايل پيكربندي كه در Apache ايجاد مي شود.
http_port: درگاه HTTP براي اين هاست مجازي ، كه به طور پيش فرض 80 است.
پس از اتمام به روزرساني متغيرهاي داخل vars / default.yml ، اين فايل را ذخيره كنيد و ببنديد. اگر از nano استفاده كرده ايد ، اين كار را با فشار دادن CTRL + X ، Y انجام دهيد. سپس enter را بزنيد.
اكنون آماده اجراي اين playbook در يك يا چند سرور مجازي هستيد. بيشتر playbook ها به گونه پيش فرض تنظيم شده اند كه در هر سرور مجازي موجود شما اجرا مي شود. ما مي توانيم از فلگ -l استفاده كنيم تا مطمئن شويم كه فقط يك زير مجموعه از سرور مجازي ها يا يك سرور مجازي منفرد تحت تأثير Playbook قرار گرفته است. ما همچنين مي توانيم از فلگ -u استفاده كنيم تا مشخص كنيم از كدام كاربر روي سرور مجازي از راه دور استفاده مي كنيم تا دستورات playbook را روي ميزبان از راه دور متصل كنيم.
براي اجراي playbook فقط در server1 ، با اتصال به عنوان sammy ، مي توانيد از دستور زير استفاده كنيد:
⦁ $ ansible-playbook playbook.yml -l server1 -u sammy

خروجي مشابه اين دريافت خواهيد كرد:
Output
PLAY [all] *****************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************
ok: [server1]

TASK [Install prerequisites] ***********************************************************************************************************
ok: [server1]

TASK [Download and unpack latest WordPress] ********************************************************************************************
changed: [server1]

TASK [Set ownership] *******************************************************************************************************************
changed: [server1]

TASK [Set permissions for directories] *************************************************************************************************
changed: [server1]

TASK [Set permissions for files] *******************************************************************************************************
changed: [server1]

TASK [Set up wp-config] ****************************************************************************************************************
changed: [server1]

RUNNING HANDLER [Reload Apache] ********************************************************************************************************
changed: [server1]

RUNNING HANDLER [Restart Apache] *******************************************************************************************************
changed: [server1]

PLAY RECAP *****************************************************************************************************************************
server1 : ok=22 changed=18 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

توجه: براي كسب اطلاعات بيشتر در مورد نحوه اجراي Ansible playbooks ، راهنماي Ansible Cheat Sheet Guide را بررسي كنيد.
پس از پايان راه اندازي Playbook ، مي توانيد به مرورگر وب خود برويد تا نصب وردپرس را از همانجا به پايان برسانيد.
به نام دامنه يا آدرس IP عمومي سرور مجازي خود برويد:
http: // server_host_or_IP
صفحه اي مانند اين را مشاهده خواهيد كرد:

پس از انتخاب زباني كه مي خواهيد براي نصب وردپرس خود استفاده كنيد ، مرحله نهايي براي تنظيم كاربر و رمزعبور وردپرس به شما ارائه مي شود تا بتوانيد وارد كنترل پنل شويد:

با كليك بر روي صفحه ، شما به صفحه اي منتقل مي شويد كه از شما خواسته مي شود وارد شويد:

پس از ورود به سيستم ، شما به داشبورد مديريت وردپرس منتقل مي شويد:

برخي از مراحل بعدي رايج براي سفارشي سازي نصب وردپرس شامل انتخاب تنظيمات permalinks  براي پست هاي شما (مي توانيد در Settings > Permalinks بيابيد) و انتخاب تم جديد (در Appearance > Themes) ميباشد.
محتواي Playbook
مي توانيد تنظيمات سرور LAMP وردپرس را كه در اين آموزش مشاهده شده است ، در پوشه wordpress-lamp_ubuntu1804 در داخل منبع DigitalOcean Community Playbooks مشاهده كنيد. براي كپي يا دانلود مستقيم محتواي اسكريپت ، روي دكمه Raw به سمت بالاي هر اسكريپت كليك كنيد.
محتويات كامل Playbook و همچنين فايل هاي مرتبط با آن نيز براي راحتي شما در اينجا گنجانده شده است.
vars / default.yml
فايل متغير default.yml حاوي مقاديري است كه در وظايف playbook از جمله تنظيمات بانك اطلاعاتي و نام دامنه براي پيكربندي در Apache استفاده خواهد شد.
vars/default.yml
#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.conf.j2 يك فايل الگوي Jinja 2 است كه يك آپشن جديد Apache VirtualHost را پيكربندي مي كند. متغيرهاي مورد استفاده در اين الگو در فايل متغير vars / default.yml تعريف شده اند.
files/apache.conf.j2

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


Options -Indexes


DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm

files/wp-config.php.j2
فايل wp-config.php.j2 يكي ديگر از الگوهاي Jinja است كه براي تنظيم فايل اصلي پيكربنديWordPress استفاده مي شود. متغيرهاي مورد استفاده در اين الگو در فايل متغير vars / default.yml تعريف شده اند. كليدهاي احراز هويت منحصر به فرد با استفاده از يك عملكرد تركيبي ايجاد مي شوند.
files/info.php.j2
/**
* 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’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘SECURE_AUTH_KEY’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘LOGGED_IN_KEY’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘NONCE_KEY’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘AUTH_SALT’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘SECURE_AUTH_SALT’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘LOGGED_IN_SALT’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘NONCE_SALT’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );

/**#@-*/

/**
* 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
فايل playbook.yml جايي است كه كليه وظايف اين مجموعه تعريف شده است. اين كار با تعريف گروه سرور مجازي هايي كه بايد هدف اين مجموعه باشند (all) شروع مي شود ، و پس از آن براي تعريف اينكه وظايف بايد بصورت پيش فرض با افزايش امتياز (sudo) انجام شود يا خير، از become: true استفاده مي كند. سپس ، فايل متغير vars / default.yml را براي بارگذاري گزينه هاي پيكربندي شامل مي شود.
playbook.yml

– 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

با خيال راحت اين فايل ها را به بهترين وجه متناسب با نيازهاي فردي خود در گردش كارتان تغيير دهيد.
نتيجه
در اين راهنما ، ما از Ansible براي خودكارسازي روند نصب و راه اندازي وب سايت وردپرس با LAMP روي سرور مجازي اوبونتو 18.04 استفاده كرده ايم.
اگر مي خواهيد كارهاي ديگري در اين playbook  را براي سفارشي سازي تنظيمات سرور مجازي خود انجام دهيد ، لطفاً به راهنماي مقدماتي Ansible ( پيكربندي مديريت 101: نوشتن Ansible Playbooks) مراجعه كنيد.

تا كنون نظري ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در مونوبلاگ ثبت نام کرده اید می توانید ابتدا وارد شوید.