Thứ ba, 31/12/2019 | 00:00 GMT+7

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:

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:

  1. 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ói apt .
  2. Cài đặt các gói LAMP và phần mở rộng PHP cần thiết.
  3. Tạo và kích hoạt Apache VirtualHost cho trang web WordPress.
  4. Bật module ghi lại Apache ( mod_rewrite ).
  5. Vô hiệu hóa trang web Apache mặc định.
  6. Đặt password cho user gốc MySQL.
  7. Loại bỏ các account MySQL ẩn danh và database thử nghiệm.
  8. Tạo database MySQL và user mới cho trang web WordPress.
  9. Cài đặt UFW để cho phép truy cập HTTP trên cổng đã cấu hình ( 80 theo mặc định).
  10. Download và extract WordPress.
  11. Cài đặt quyền sở hữu và quyền của folder chính xác.
  12. 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ú ý:

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" 

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:

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

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:

Trang lựa chọn ngôn ngữ WordPress

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 :

 Cài đặt  WordPress

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:

 Dấu nhắc  đăng nhập WP

Sau khi đăng nhập, bạn sẽ được đưa đến console quản trị WordPress:

 Control panel  quản trị WP

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.

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

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 .

files / apache.conf.j2
<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.

files / info.php.j2
<?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.

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 

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 .


Tags:

Các tin liên quan

Cách cài đặt WordPress với OpenLiteSpeed trên Ubuntu 18.04
2019-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