Thứ ba, 23/12/2014 | 00:00 GMT+7

Cách tạo một Playbook Ansible để tự động cài đặt Drupal trên Ubuntu 14.04

Ansible là một công cụ quản lý cấu hình mà người quản trị hệ thống sử dụng để tự động hóa các hoạt động quản lý cơ sở hạ tầng.

Ansible chỉ sử dụng SSH để chạy các lệnh từ xa và do đó không cần tác nhân trên server từ xa. Điều này làm cho Ansible được ưa chuộng hơn các công cụ phổ biến khác như Puppet hoặc Chef khi bạn không muốn cài đặt các tác nhân trên các server được quản lý.

Hơn nữa, bắt đầu với Ansible dễ dàng hơn nhiều vì nó sử dụng YAML (Yet Another Markup Language) đơn giản hơn các ngôn ngữ lập trình mạnh mẽ hơn mà các công cụ khác sử dụng.

Drupal là một CMS phổ biến, việc cài đặt tốn nhiều thời gian nhưng dễ tự động hóa. Trong hướng dẫn này, ta sẽ tạo một Ansible Playbook tự động hóa cài đặt và cấu hình Drupal và tất cả các phụ thuộc của nó trên các hệ thống chạy Ubuntu 14.04.

Yêu cầu

Bạn cần những thứ sau:

  • Server Ubuntu 14.04 (có thể truy cập qua SSH); server này sẽ chạy Ansible và một bản sao local của Drupal
  • Tùy chọn: Server Ubuntu 14.04 bổ sung nơi bạn muốn cài đặt Drupal
  • Một user sudo trên mỗi server ; bạn nên sử dụng cùng một tên user cùng một password cho mỗi server mà bạn muốn cài đặt Drupal
  • Hiểu biết cơ bản về cách cài đặt Drupal hoạt động. Bạn có thể tham khảo Cách cài đặt Drupal trên Server Ubuntu 14.04 với Apache , mặc dù bạn không cần cài đặt trước Drupal

Bước 1 - Cài đặt Ansible

Ansible không có sẵn trong repository lưu trữ mặc định mà apt-get sử dụng. Do đó, hãy thêm repository ppa:rquillo/ansible .

sudo add-apt-repository ppa:rquillo/ansible 

Nhấn ENTER khi được yêu cầu .

Cập nhật danh sách gói.

sudo apt-get update 

Cài đặt Ansible.

sudo apt-get install ansible 

Bước 2 - Tạo folder cho Playbook

Các bộ hướng dẫn của Ansible được gọi là playbook. Bạn nên lưu trữ tất cả sách vở của bạn trong một folder duy nhất. Tạo một folder có tên MyPlaybooks .

mkdir ~/MyPlaybooks 

Hãy để ta đặt tên cho playbook là drupal_setup . Tạo một folder mới có tên là drupal_setup .

mkdir ~/MyPlaybooks/drupal_setup 

Bước 3 - Tạo file server lưu trữ

Mỗi playbook thường có một file hosts chứa tên của các server mà nó sẽ sử dụng.

Trong hướng dẫn này, ta sẽ cài đặt Drupal trên localhost và một server khác, drupal_server . Bạn có thể tự do thêm nhiều server hơn vào file này. Lưu ý mọi server bạn thêm phải có thể truy cập qua SSH.

Sử dụng nano để tạo và chỉnh sửa file có tên là hosts .

nano ~/MyPlaybooks/drupal_setup/hosts 

Hãy để nó có các nội dung sau:

[drupal_hosts] localhost drupal_server_ip 

Bạn nên thay thế ip server drupal bằng địa chỉ IP server thứ hai của bạn. Bạn có thể liệt kê bao nhiêu địa chỉ IP ở đây tùy thích; bạn có thể sử dụng playbook này để cài đặt Drupal trên bất kỳ số lượng server Ubuntu 14.04 nào.

Lưu ý: Tệp hosts là file bạn nên cập nhật nếu bạn muốn sử dụng lại playbook này trong tương lai để cấu hình nhiều server Drupal hơn. Lưu ý bạn nên xóa các server đã được cấu hình khỏi danh sách và thêm IP server mới của bạn trước khi chạy lại playbook.

Lưu và đóng file .

Bước 4 - Tạo role để apt-get cập nhật

Tạo một folder mới để lưu trữ tất cả các role của Playbook.

mkdir ~/MyPlaybooks/drupal_setup/roles 

Ta cần apt-get cập nhật các server trước khi làm bất kỳ điều gì khác, vì vậy hãy tạo một folder cho update role .

mkdir ~/MyPlaybooks/drupal_setup/roles/update 

Mỗi role có một hoặc nhiều nhiệm vụ. Tạo một folder có tên tasks để chứa tất cả các việc được liên kết với role này.

mkdir ~/MyPlaybooks/drupal_setup/roles/update/tasks 

Sử dụng nano để tạo và chỉnh sửa file tác vụ mới có tên main.yml . Đây là file cho Ansible biết phải làm gì khi nó thực thi role này.

nano ~/MyPlaybooks/drupal_setup/roles/update/tasks/main.yml 

Trong file này, sử dụng module apt của Ansible để cập nhật hệ thống:

---  - name: apt-get update the server   apt: update_cache=yes 

Đảm bảo rằng file của bạn không có thêm bất kỳ khoảng trắng nào; Ansible là cầu kỳ về điều này. Lưu và đóng file .

Bước 5 - Tạo role để cài đặt PHP

Tạo một folder cho role php .

mkdir ~/MyPlaybooks/drupal_setup/roles/php 

Tạo folder tasks cho role này:

mkdir ~/MyPlaybooks/drupal_setup/roles/php/tasks 

Drupal cần một web server được cấu hình để sử dụng PHP. Trong hướng dẫn này, ta sử dụng Apache. Khi ta cài đặt PHP, Apache được cài đặt tự động, vì vậy ta không cần thêm bất kỳ lệnh nào cho nó.

Sử dụng nano để tạo và chỉnh sửa main.yml cho role php.

nano ~/MyPlaybooks/drupal_setup/roles/php/tasks/main.yml 

Sử dụng module apt của Ansible để cài đặt PHP5 (và các gói phụ thuộc vào nó) và thư viện GD PHP5. Thêm phần sau vào file :

---  - name: Install PHP and associated packages   apt: name=php5 state=latest  - name: Install PHP GD library   apt: name=php5-gd state=latest   notify:     - Restart Apache 

Apache phải được khởi động lại sau khi cài đặt thư viện PHP GD. Vì vậy, role này cũng cần người xử lý.

Tất cả các trình xử lý của một role được lưu trữ trong một folder riêng biệt. Tạo một folder có tên handlers cho role hiện tại.

mkdir ~/MyPlaybooks/drupal_setup/roles/php/handlers 

Sử dụng nano để tạo và chỉnh sửa file main.yml .

nano ~/MyPlaybooks/drupal_setup/roles/php/handlers/main.yml 

Thêm mã sau vào nó:

---  - name: Restart Apache   service: name=apache2 state=restarted 

Bạn đã hoàn thành cài đặt PHP và Apache.

Bước 6 - Tạo role để cài đặt MySQL

Drupal cần một database để lưu trữ các cài đặt và nội dung. Trong hướng dẫn này, ta sử dụng MySQL.

Tạo folder cho role này và các nhiệm vụ của nó.

mkdir -p ~/MyPlaybooks/drupal_setup/roles/mysql/tasks 

Nhiệm vụ đầu tiên của role này là cài đặt MySQL và các phụ thuộc của nó. Sử dụng nano để tạo và chỉnh sửa file có tên setup.yml .

nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/setup.yml 

Trong file này, ta sẽ yêu cầu Ansible sử dụng lại module apt để cài đặt:

  • server mysql
  • libapache2-mod-auth-mysql
  • php5-mysql

Vì vậy, hãy thêm phần sau vào file :

---  - name: Install MySQL server   apt: name=mysql-server state=latest  - name: Install Apache module for MySQL authentication   apt: name=libapache2-mod-auth-mysql state=latest  - name: Install MySQL module for PHP   apt: name=php5-mysql state=latest  

Role của ta có một file nhiệm vụ nữa. Vì Drupal cần database MySQL và user database của riêng mình, ta sẽ tạo một file tác vụ riêng để tạo chúng. Sử dụng nano để tạo và chỉnh sửa file có tên create_db.yml .

nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/create_db.yml 

Ansible có các module cho phép bạn quản lý MySQL. Trong nhiệm vụ này, ta sẽ sử dụng các module sau:

  • mysql_db - Để tạo database mới cho Drupal.
  • mysql_user Để tạo user mới và cho phép user đó truy cập database .

Trước khi sử dụng mysql_db hoặc mysql_user ta nên đảm bảo gói Python MySQLdb được cài đặt trên server từ xa. Sử dụng module apt để cài đặt nó.

Thêm các nội dung sau vào file :

--- - name: Install Python MySQLdb   apt: name=python-mysqldb state=latest  - name: Create the Drupal database   mysql_db: db={{ db_name }} state=present  - name: Create the Drupal user   mysql_user: >     name={{ db_user }}     password={{ db_password }}     priv={{ db_name }}.*:ALL     host=localhost 

Lưu ý các chuỗi trong {{}} biểu thị các biến. Trong tác vụ này, ta có các biến {{ db_user }} , {{ db_password}}{{ db_name }} . Ta sẽ đặt giá trị của các biến này trong bước sau.

Tiếp theo, ta cần cho Ansible biết rằng role này có hai nhiệm vụ. Để làm điều này, ta tạo một file main.yml .

nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/main.yml 

Thêm mã sau vào file này:

---  - include: setup.yml - include: create_db.yml 

Bước 7 - Tạo role để cài đặt Drupal

Bây giờ là lúc chuyển sang cài đặt Drupal.

Tạo folder cho role này và các nhiệm vụ của nó.

mkdir -p ~/MyPlaybooks/drupal_setup/roles/drupal/tasks 

Sử dụng nano để tạo và chỉnh sửa file tác vụ có tên main.yml .

nano ~/MyPlaybooks/drupal_setup/roles/drupal/tasks/main.yml 

Trong tác vụ này, ta sẽ yêu cầu Ansible thực hiện các hành động sau:

  • Cài đặt git trên server từ xa. Điều này là cần thiết vì ta sẽ sử dụng module git của Ansible
  • Sử dụng module git của Ansible để sao chép version ổn định mới nhất của Drupal từ repository của nó tại http://git.drupal.org/project/drupal.git . Các file đã download được đặt trong /var/www/html/drupal
  • Tạo các file settings.phpservices.yml từ các file mặc định
  • Cập nhật các quyền của settings.php , services.ymlsites/default/files

Thêm mã sau vào file :

---  - name: Install git   apt: name=git state=latest  - name: Clone Drupal   git: >     repo=http://git.drupal.org/project/drupal.git     dest=/var/www/html/drupal/     update=no  - name: Create settings.php   command: cp /var/www/html/drupal/sites/default/default.settings.php /var/www/html/drupal/sites/default/settings.php  - name: Create services.yml   command: cp /var/www/html/drupal/sites/default/default.services.yml /var/www/html/drupal/sites/default/services.yml  - name: Update permissions of settings.php   file: path=/var/www/html/drupal/sites/default/settings.php mode=777  - name: Update permissions of services.yml   file: path=/var/www/html/drupal/sites/default/services.yml mode=777  - name: Update permissions of files directory   file: >     path=/var/www/html/drupal/sites/default/files     mode=777     state=directory     recurse=yes 

Bạn cần cập nhật quyền cho các file này sau khi hoàn tất cài đặt trình duyệt trên mỗi server (trên mỗi server , thay vì thông qua Ansible).

Bước 8 - Tạo file để sử dụng tất cả các role

Đến đây, tất cả các role của ta đã sẵn sàng. Bây giờ ta cần sử dụng chúng.

Sử dụng nano để tạo file có tên site.yml . Đây là file ta thực sự sẽ chạy với Ansible.

nano ~/MyPlaybooks/drupal_setup/site.yml 

Trong file này, ta thực hiện các hoạt động sau:

  • Chỉ định server mà Playbook này sẽ chạy trên đó
  • Chỉ định rằng sudo sẽ được sử dụng để chạy tất cả các việc của Playbook này
  • Đặt giá trị mặc định cho các biến được sử dụng trong các role khác nhau
  • Chạy tất cả các role

Thêm mã sau vào nó:

---  - hosts: drupal_hosts    sudo: yes    vars:     - db_name: drupal     - db_user: drupal_user     - db_password: drupal_db_pass    roles:     - update     - php     - mysql     - drupal 

Đảm bảo rằng bạn thay đổi giá trị của biến db_password thành một thứ khác không phải là drupal_db_pass . Bạn có thể tự do thay đổi giá trị của hai biến còn lại để phù hợp với sở thích của bạn .

Bước 9 - Cài đặt kết nối SSH

Trước khi bạn chạy Playbook, file ~/.ssh/known_hosts bạn phải có một mục nhập cho từng server được đề cập trong file hosts .

Một cách dễ dàng để thực hiện việc này là kết nối một lần với mỗi server được liệt kê trong ~/MyPlaybooks/drupal_setup/hosts từ server này, sử dụng SSH.

Kết nối với localhost qua SSH bằng lệnh:

ssh localhost 

Nếu đây là lần đầu tiên bạn kết nối với server theo cách này, bạn sẽ được yêu cầu với một thông báo cho biết:

The authenticity of host 'localhost (127.0.0.1)' can't be established. ECDSA key fingerprint is b1:18:3d:19:15:21:39:5a:f7:9f:3c:37:68:ba:62:01. Are you sure you want to continue connecting (yes/no)? 

Khi bạn nói yes , bạn sẽ nhận được thông báo:

Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts. 

Kết nối với bất kỳ server nào khác được liệt kê trong file hosts :

ssh drupal_sudo_user@drupal_server_ip 

Đảm bảo rằng bạn thay thế tên user và địa chỉ IP bằng thông tin thực cho mỗi server . Xin lưu ý tên user sudo (trong ví dụ là drupal_sudo_user ) và password phải giống nhau cho mỗi server , bao gồm cả localhost .

Lưu ý: Thay vì sử dụng password , bạn có thể sao chép chìa SSH key công cộng cho user sudo server Ansible để các drupal_sudo_user's authorized_keys file trên mỗi server quản lý.

Khi bạn đã kết nối với từng server , bạn đã sẵn sàng chạy playbook.

Bước 10 - Chạy Playbook

Playbook hiện đã sẵn sàng để thử nghiệm. ansible-playbook nó bằng lệnh ansible-playbook . Tùy chọn -k buộc Ansible yêu cầu password SSH và không cần thiết nếu bạn đã cài đặt xác thực không cần password . Tùy chọn -K buộc Ansible yêu cầu password sudo .

cd ~/MyPlaybooks/drupal_setup/ ansible-playbook -i hosts site.yml -kK 

Nhập password SSH và đợi khi Playbook chạy. Khi quá trình chạy hoàn tất, bạn sẽ có một bản cài đặt Drupal mới trên server của bạn .

Lưu ý: Bạn có thể bỏ cờ -k nếu bạn đã thêm SSH key từ user sudo của server Ansible vào mỗi server được quản lý.

Quá trình này sẽ mất vài phút để chạy và Ansible sẽ cho bạn biết nó đang làm gì ở mỗi bước.

Quan trọng: Nếu bạn muốn chạy tập lệnh này để cài đặt nhiều server hơn trong tương lai, bạn phải xóa địa chỉ IP của các server đã được cài đặt khỏi ~/MyPlaybooks/drupal_setup/hosts , nếu không Ansible sẽ overrides lên Drupal tùy chỉnh của bạn các trang web.

Bước 11 - Cài đặt Drupal

Bây giờ, bạn có thể sử dụng trình duyệt để truy cập Drupal và hoàn tất quá trình cài đặt dựa trên trình duyệt, tại http:// your_server_ip /drupal/ .

Trang  cài đặt  Drupal

Nếu bạn cần trợ giúp để hoàn thành trình cài đặt trình duyệt cho Drupal, hãy làm theo hướng dẫn trong bài viết này .

Cài đặt database của bạn sẽ là các biến bạn đặt trong phần vars của ~/MyPlaybooks/drupal_setup/site.yml .

Kiểm tra kỹ xem mỗi server có cài đặt Drupal thành công hay không.

Bước 12 - Dọn dẹp danh sách server lưu trữ

Bây giờ là thời điểm tốt để xóa các server khỏi ~/MyPlaybooks/drupal_setup/hosts . Bằng cách đó, nếu bạn chạy lại playbook, bạn sẽ không vô tình overrides lên các server mà bạn đã cài đặt .

Xử lý sự cố

Lưu ý YAML phân biệt khoảng trắng. Nếu bạn đang gặp sự cố với playbook của bạn , có thể bạn đã thụt lề không đúng hoặc thừa khoảng trắng trong file .yml của bạn .

Nếu bạn thấy một lỗi giống như sau:

fatal: [server-name] => Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host. 

Điều này nghĩa là bạn đã bỏ lỡ thêm một mục nhập cho một hoặc nhiều server trong file ~/.ssh/known_hosts .

Trước tiên, bạn cần tạo kết nối SSH thủ công với server localhost hoặc server từ xa mục tiêu. Sau đó, hãy thử chạy lại playbook.

Kết luận

Với hướng dẫn này, bạn đã học cách tạo một playbook Ansible cài đặt Drupal cho bạn, cùng với Apache và MySQL. Trước khi sử dụng playbook này trong các hệ thống production , bạn sẽ phải xây dựng thêm trên nó để làm cho việc cài đặt an toàn hơn. Bạn cũng có thể sử dụng các lệnh Drush trong playbook để quản lý cài đặt Drupal.


Tags:

Các tin liên quan

Cách cài đặt Thư viện ảnh Piwigo trên Ubuntu 14.04
2014-12-18
Cách cài đặt Hệ thống thông tin sinh viên SchoolTool trên Ubuntu 14.04
2014-12-18
Cách thiết lập ứng dụng Node.js để sản xuất trên Ubuntu 14.04
2014-12-03
Cách cài đặt và cấu hình PowerDNS với MariaDB Backend trên Ubuntu 14.04
2014-12-02
Cách cài đặt và cấu hình Magento trên Ubuntu 14.04
2014-12-02
Cách cài đặt MEAN.JS Stack trên server Ubuntu 14.04
2014-11-26
Cách tăng tốc trang web Drupal 7 của bạn với Varnish 4 trên Ubuntu 14.04 và Debian 7
2014-11-17
Cách nâng cấp Ubuntu 12.04 LTS lên Ubuntu 14.04 LTS
2014-11-17
Các bước được đề xuất bổ sung cho server Ubuntu 14.04 mới
2014-11-04
Cơ bản về quản lý gói Ubuntu và Debian
2014-11-03