Cách sử dụng Ansible để cài đặt và thiết lập WordPress với LAMP trên Ubuntu 18.04
Tự động hóa server hiện nay đóng một role thiết yếu trong quản trị hệ thống, do tính chất dùng một lần của các môi trường ứng dụng hiện đại. Các công cụ quản lý cấu hình như Ansible thường được sử dụng để hợp lý hóa quá trình tự động hóa cài đặt server bằng cách cài đặt các quy trình tiêu chuẩn cho các server mới đồng thời giảm lỗi do con người liên quan đến cài đặt thủ công.Ansible cung cấp một kiến trúc đơn giản không yêu cầu cài đặt phần mềm đặc biệt trên các node . Nó cũng cung cấp một bộ tính năng mạnh mẽ và các module tích hợp giúp tạo điều kiện thuận lợi cho việc viết các tập lệnh tự động hóa.
Hướng dẫn này giải thích cách sử dụng Ansible để tự động hóa các bước có trong hướng dẫn của ta về Cách cài đặt WordPress với LAMP trên Ubuntu 18.04 . WordPress là CMS (hệ thống quản lý nội dung) phổ biến nhất trên internet, cho phép user cài đặt các blog và trang web linh hoạt trên nền backend MySQL với PHP processor . Sau khi cài đặt , hầu hết tất cả các quản trị có thể được thực hiện thông qua giao diện user web.
Yêu cầu
Để thực hiện cài đặt tự động được cung cấp bởi playbook mà ta đang thảo luận trong hướng dẫn này, bạn cần:
- Một nút điều khiển Ansible : máy Ubuntu 18.04 được cài đặt và cấu hình Ansible để kết nối với các server Ansible của bạn bằng các SSH key . Đảm bảo rằng nút điều khiển có regular user có quyền sudo và đã bật firewall , như được giải thích trong hướng dẫn Cài đặt Server Ban đầu của ta . Để cài đặt Ansible, hãy làm theo hướng dẫn của ta về Cách cài đặt và cấu hình Ansible trên Ubuntu 18.04 .
- Một hoặc nhiều Server Ansible : một hoặc nhiều server Ubuntu 18.04 từ xa đã được cài đặt trước đó theo hướng dẫn về Cách sử dụng Ansible để Tự động hóa Cài đặt Server Ban đầu trên Ubuntu 18.04 .
Trước khi tiếp tục, trước tiên bạn cần đảm bảo nút điều khiển Ansible của bạn có thể kết nối và thực thi các lệnh trên (các) server Ansible của bạn. Để kiểm tra kết nối, vui lòng kiểm tra bước 3 của Cách cài đặt và cấu hình Ansible trên Ubuntu 18.04 .
Playbook này làm được gì?
Playbook Ansible này cung cấp một giải pháp thay thế cho việc chạy thủ công theo quy trình được nêu trong hướng dẫn của ta về Cách cài đặt WordPress với LAMP trên Ubuntu 18.04 .
Chạy playbook này sẽ thực hiện các việc sau trên server Ansible của bạn:
- Cài đặt
aptitude
, được Ansible ưa thích như một giải pháp thay thế cho trình quản lý góiapt
. - Cài đặt các gói LAMP và phần mở rộng PHP cần thiết.
- Tạo và kích hoạt Apache
VirtualHost
cho trang web WordPress. - Bật module ghi lại Apache (
mod_rewrite
). - Vô hiệu hóa trang web Apache mặc định.
- Đặt password cho user gốc MySQL.
- Loại bỏ các account MySQL ẩn danh và database thử nghiệm.
- Tạo database MySQL và user mới cho trang web WordPress.
- Cài đặt UFW để cho phép truy cập HTTP trên cổng đã cấu hình (
80
theo mặc định). - Download và extract WordPress.
- Cài đặt quyền sở hữu và quyền của folder chính xác.
- Cài đặt file
wp-config.php
bằng cách sử dụng mẫu được cung cấp.
Sau khi playbook chạy xong, bạn sẽ có một cài đặt WordPress chạy trên môi trường LAMP, dựa trên các tùy chọn bạn đã xác định trong các biến cấu hình của bạn .
Cách sử dụng Playbook này
Điều đầu tiên ta cần làm là download WordPress trên playbook LAMP và các phụ thuộc của nó từ repository do-community / ansible-playbooks . Ta cần sao chép repository này vào một folder local bên trong Ansible Control Node.
Trong trường hợp bạn đã sao chép repository này trước đó trong khi làm theo một hướng dẫn khác, hãy truy cập bản sao ansible-playbooks
hiện có của bạn và chạy git pull
đảm bảo bạn có nội dung cập nhật:
- cd ~/ansible-playbooks
- git pull
Nếu đây là lần đầu tiên bạn sử dụng repository do-community/ansible-playbooks
, bạn nên bắt đầu bằng cách sao chép repository vào folder chính của bạn với:
- cd ~
- git clone https://github.com/do-community/ansible-playbooks.git
- cd ansible-playbooks
Các file ta quan tâm nằm bên trong folder wordpress-lamp_ubuntu1804
, có cấu trúc như sau:
wordpress-lamp_ubuntu1804 ├── files │ ├── apache.conf.j2 │ └── wp-config.php.j2 ├── vars │ └── default.yml ├── playbook.yml └── readme.md
Đây là nội dung của từng file này:
-
files/apache.conf.j2
: Tệp mẫu để cài đặt Apache VirtualHost. -
files/wp-config.php.j2
: Tệp mẫu để cài đặt file cấu hình của WordPress. -
vars/default.yml
: Tệp biến để tùy chỉnh cài đặt sách vở. -
playbook.yml
: Tệp playbook, chứa các việc sẽ được thực thi trên (các) server từ xa. -
readme.md
: Tệp văn bản chứa thông tin về sách chơi này.
Ta sẽ chỉnh sửa file biến của playbook để tùy chỉnh các tùy chọn của nó. Truy cập folder wordpress-lamp_ubuntu1804
và mở file vars/default.yml
bằng editor dòng lệnh mà bạn chọn:
- cd wordpress-lamp_ubuntu1804
- nano vars/default.yml
Tệp này chứa một số biến cần bạn chú ý:
--- #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"
Danh sách sau đây chứa giải thích ngắn gọn về từng biến này và cách bạn có thể cần thay đổi chúng:
-
php_modules
: Một mảng chứa các phần mở rộng PHP cần được cài đặt để hỗ trợ cài đặt WordPress của bạn. Bạn không cần phải thay đổi biến này, nhưng bạn có thể cần bao gồm các tiện ích mở rộng mới vào danh sách nếu cài đặt cụ thể của bạn yêu cầu. -
mysql_root_password
: Mật khẩu mong muốn cho account MySQL gốc . -
mysql_db
: Tên của database MySQL sẽ được tạo cho WordPress. -
mysql_user
: Tên của user MySQL sẽ được tạo cho WordPress. -
mysql_password
: Mật khẩu cho user MySQL mới. -
http_host
: Tên domain của bạn. -
http_conf
: Tên của file cấu hình sẽ được tạo trong Apache. -
http_port
: Cổng HTTP cho server ảo này, trong đó80
là mặc định.
Khi bạn đã cập nhật xong các biến bên trong vars/default.yml
, hãy lưu file này. Nếu bạn đã sử dụng nano
, hãy làm như vậy bằng cách nhấn CTRL + X
, Y
, sau đó ENTER
.
Đến đây bạn đã sẵn sàng để chạy playbook này trên một hoặc nhiều server . Theo mặc định, hầu hết các sách chơi đều được cấu hình để chạy trên mọi server trong repository của bạn. Ta có thể sử dụng cờ -l
đảm bảo rằng chỉ một tập hợp con các server hoặc một server duy nhất bị ảnh hưởng bởi playbook. Ta cũng có thể sử dụng cờ -u
để chỉ định user nào trên server từ xa mà ta đang sử dụng để kết nối và thực hiện các lệnh playbook trên server từ xa.
Để thực thi playbook chỉ trên server1
, kết nối với quyền sammy
, bạn có thể sử dụng lệnh sau:
- ansible-playbook playbook.yml -l server1 -u sammy
Bạn sẽ nhận được kết quả tương tự như sau:
OutputPLAY [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
Lưu ý : Để biết thêm thông tin về cách chạy sách chơi Ansible, hãy xem Hướng dẫn Trang tính Cheat Ansible của ta .
Khi playbook chạy xong, bạn có thể truy cập trình duyệt web của bạn để hoàn tất quá trình cài đặt WordPress từ đó.
Điều hướng đến domain hoặc địa chỉ IP công cộng của server của bạn:
http://server_host_or_IP
Bạn sẽ thấy một trang như thế này:
Sau khi chọn ngôn ngữ bạn muốn sử dụng cho cài đặt WordPress của bạn , bạn sẽ thấy bước cuối cùng để cài đặt user và password WordPress của bạn để bạn có thể đăng nhập vào console của bạn :
Khi bạn nhấp vào phía trước, bạn sẽ được đưa đến một trang nhắc bạn đăng nhập:
Sau khi đăng nhập, bạn sẽ được đưa đến console quản trị WordPress:
Một số bước tiếp theo phổ biến để tùy chỉnh cài đặt WordPress của bạn bao gồm chọn cài đặt liên kết cố định cho bài đăng của bạn (có thể tìm thấy trong Settings > Permalinks
) và chọn chủ đề mới (trong Giao Appearance > Themes
).
Nội dung Playbook
Bạn có thể tìm thấy cài đặt server WordPress trên LAMP được nêu trong hướng dẫn này trong folder wordpress-lamp_ubuntu1804
bên trong repository lưu trữ Playbooks Cộng đồng DigitalOcean . Để sao chép hoặc download trực tiếp nội dung tập lệnh, hãy nhấp vào nút Raw ở đầu mỗi tập lệnh.
Toàn bộ nội dung của playbook cũng như các file liên quan cũng được đưa vào đây để bạn tiện theo dõi.
vars / default.yml
Tệp biến default.yml
chứa các giá trị sẽ được sử dụng trong các việc playbook, chẳng hạn như cài đặt database và domain để cấu hình trong Apache.
#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
Tệp apache.conf.j2
là file mẫu Jinja 2 cấu hình Apache VirtualHost mới. Các biến được sử dụng trong mẫu này được xác định trong file biến vars/default.yml
.
<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
Tệp wp-config.php.j2
là một mẫu Jinja khác, được sử dụng để cài đặt file cấu hình chính được sử dụng bởi WordPress. Các biến được sử dụng trong mẫu này được xác định trong file biến vars/default.yml
. Các khóa và muối xác thực duy nhất được tạo bằng hàm băm.
<?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
Tệp playbook.yml
là nơi xác định tất cả các việc từ cài đặt này. Nó bắt đầu bằng cách xác định group server nên là mục tiêu của cài đặt này ( all
), sau đó nó sử dụng hàm become: true
để xác định rằng các việc phải được thực thi với sự leo thang quyền ( sudo
) theo mặc định. Sau đó, nó bao gồm file biến vars/default.yml
để tải các tùy chọn cấu hình.
--- - 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
Vui lòng sửa đổi các file này để phù hợp nhất với nhu cầu cá nhân của bạn trong quy trình làm việc của bạn .
Kết luận
Trong hướng dẫn này, ta đã sử dụng Ansible để tự động hóa quá trình cài đặt và cài đặt trang web WordPress với LAMP trên server Ubuntu 18.04.
Nếu bạn muốn bao gồm các việc khác trong playbook này để tùy chỉnh thêm cài đặt server của bạn , vui lòng tham khảo hướng dẫn giới thiệu về Quản lý cấu hình của Ansible 101: Viết Playbook Ansible .
Các tin liên quan
Cách cài đặt WordPress với OpenLiteSpeed trên Ubuntu 18.042019-12-18
Cách sử dụng Ansible để cài đặt và thiết lập LAMP trên Ubuntu 18.04
2019-12-17
Cách sử dụng Ansible để cài đặt và thiết lập LEMP trên Ubuntu 18.04
2019-12-05
Cách cài đặt và sử dụng TimescaleDB trên Ubuntu 18.04
2019-12-04
Cách lấy chứng chỉ Let's Encrypt bằng Ansible trên Ubuntu 18.04
2019-11-14
Cách cài đặt MongoDB trên Ubuntu 16.04
2019-10-13
Cách thêm và xóa người dùng trên Ubuntu 18.04
2019-09-12
Cách cài đặt và bảo mật Grafana trên Ubuntu 18.04
2019-09-05
Cách nhúng một ứng dụng React vào WordPress trên Ubuntu 18.04
2019-08-27
Cách cài đặt và cấu hình Laravel với LEMP trên Ubuntu 18.04
2019-08-01