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 và 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
hostslà 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}} và {{ 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 gittrên server từ xa. Điều này là cần thiết vì ta sẽ sử dụng modulegitcủa Ansible
-  Sử dụng module  gitcủa Ansible để sao chép version ổn định mới nhất của Drupal từ repository của nó tạihttp://git.drupal.org/project/drupal.git. Các file đã download được đặt trong/var/www/html/drupal
-  Tạo các file  settings.phpvàservices.ymltừ các file mặc định
-  Cập nhật các quyền của settings.php,services.ymlvàsites/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 sudosẽ đượ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'sauthorized_keysfile 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ờ
-knế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/ . 

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.
Các tin liên quan
Cách cài đặt Thư viện ảnh Piwigo trên Ubuntu 14.042014-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 Magento trên Ubuntu 14.04
2014-12-02
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 MEAN.JS Stack trên server Ubuntu 14.04
2014-11-26
Cách nâng cấp Ubuntu 12.04 LTS lên Ubuntu 14.04 LTS
2014-11-17
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á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
 

