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
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}}
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
git
trên server từ xa. Điều này là cần thiết vì ta sẽ sử dụng modulegit
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ạihttp://git.drupal.org/project/drupal.git
. Các file đã download được đặt trong/var/www/html/drupal
- Tạo các file
settings.php
vàservices.yml
từ các file mặc định - Cập nhật các quyền của
settings.php
,services.yml
và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
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/
.
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 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