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

Cách sử dụng Ansible để cài đặt và thiết lập 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 Linux, Apache, MySQL và PHP (LAMP) trên Ubuntu 18.04 . LAMP là một group phần mềm nguồn mở thường được cài đặt cùng nhau để cho phép server lưu trữ các trang web động và ứng dụng web. Thuật ngữ này thực sự là một từ viết tắt đại diện cho hệ điều hành L inux, với web server A pache. Dữ liệu trang web được lưu trữ trong database M ySQL và nội dung động được xử lý bởi P HP.

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 Linux, Apache, MySQL và PHP (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 cần thiết.
  3. Tạo một Apache VirtualHost và cài đặt một root tài liệu chuyên dụng cho việc đó.
  4. Bật VirtualHost mới.
  5. Vô hiệu hoá trang web Apache mặc định, khi biến disable_default được đặt thành true .
  6. Đặt password cho user gốc MySQL.
  7. Loại bỏ các account MySQL ẩn danh và database thử nghiệm.
  8. Cài đặt UFW để cho phép truy cập HTTP trên cổng đã cấu hình ( 80 theo mặc định).
  9. Cài đặt tập lệnh thử nghiệm 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 môi trường web PHP chạy trên Apache, 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à lấy LAMP playbook 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 lamp_ubuntu1804 , có cấu trúc như sau:

lamp_ubuntu1804 ├── files │   ├── apache.conf.j2 │   └── info.php.j2 ├── vars │   └── default.yml ├── playbook.yml └── readme.md 

Đây là nội dung của từng file này:

  • files/info.php.j2 : Tệp mẫu để cài đặt trang thử nghiệm PHP trên web server root
  • files/apache.conf.j2 : Tệp mẫu để cài đặt Apache VirtualHost.
  • 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ấu hình của cả MySQL và Apache. Truy cập folder lamp_ubuntu1804 và mở file vars/default.yml bằng editor dòng lệnh mà bạn chọn:

  • cd 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
--- mysql_root_password: "mysql_root_password" app_user: "sammy" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true 

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:

  • mysql_root_password : Mật khẩu mong muốn cho account MySQL gốc .
  • app_user : User không phải root từ xa trên server Ansible sẽ được đặt làm chủ sở hữu của các file ứng dụng.
  • 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.
  • disable_default : Có vô hiệu hóa trang web mặc định đi kèm với Apache hay không.

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] => (item=aptitude) ... TASK [UFW - Allow HTTP on port 80] ********************************************************************************************************* changed: [server1] TASK [Sets Up PHP Info Page] ********************************************************************************************************* changed: [server1] RUNNING HANDLER [Reload Apache] ********************************************************************************************************* changed: [server1] RUNNING HANDLER [Restart Apache] ********************************************************************************************************* changed: [server1] PLAY RECAP ********************************************************************************************************* server1 : ok=15 changed=11 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, hãy truy cập trình duyệt web và truy cập server lưu trữ hoặc địa chỉ IP của server , như được cấu hình trong các biến playbook, theo sau là /info.php :

http://server_host_or_IP/info.php 

Bạn sẽ thấy một trang như thế này:

trang phpinfo

Vì trang này chứa thông tin nhạy cảm về môi trường PHP của bạn, bạn nên xóa nó khỏi server bằng cách chạy lệnh rm -f /var/www/info.php sau khi bạn đã cài đặt xong.

Nội dung Playbook

Bạn có thể tìm thấy cài đặt server LAMP có trong hướng dẫn này trong folder 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ư password cho account gốc MySQL và domain để cấu hình trong Apache.

vars / default.yml
--- mysql_root_password: "mysql_root_password" app_user: "sammy" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true 

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

Tệp info.php.j2 là một mẫu Jinja khác, được sử dụng để cài đặt tập lệnh PHP thử nghiệm trong folder root của server LAMP mới được cấu hình .

files / info.php.j2
<?php phpinfo();  

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={{ item }} update_cache=yes state=latest force_apt_get=yes       loop: [ 'aptitude' ]    #Apache Configuration     - name: Install LAMP Packages       apt: name={{ item }} update_cache=yes state=latest       loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ]      - name: Create document root       file:         path: "/var/www/{{ http_host }}"         state: directory         owner: "{{ app_user }}"         mode: '0755'      - name: Set up Apache virtualhost       template:         src: "files/apache.conf.j2"         dest: "/etc/apache2/sites-available/{{ http_conf }}"       notify: Reload Apache      - name: Enable new site       shell: /usr/sbin/a2ensite {{ http_conf }}       notify: Reload Apache      - name: Disable default Apache site       shell: /usr/sbin/a2dissite 000-default.conf       when: disable_default       notify: Reload Apache    # MySQL Configuration     - name: Sets the root password       mysql_user:         name: root         password: "{{ mysql_root_password }}"         login_unix_socket: /var/run/mysqld/mysqld.sock      - name: Removes all anonymous user accounts       mysql_user:         name: ''         host_all: yes         state: absent         login_user: root         login_password: "{{ mysql_root_password }}"      - name: Removes the MySQL test database       mysql_db:         name: test         state: absent         login_user: root         login_password: "{{ mysql_root_password }}"    # UFW Configuration     - name: "UFW - Allow HTTP on port {{ http_port }}"       ufw:         rule: allow         port: "{{ http_port }}"         proto: tcp    # PHP Info Page     - name: Sets Up PHP Info Page       template:         src: "files/info.php.j2"         dest: "/var/www/{{ http_host }}/info.php"    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 môi trường LAMP trên server từ xa. Bởi vì mỗi cá nhân thường có nhu cầu khác nhau khi làm việc với database MySQL và người sử dụng, ta khuyên bạn kiểm tra tài liệu Ansible chính thức để biết thêm thông tin và sử dụng trường hợp của mysql_user module Ansible.

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 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
Cách triển khai và quản lý DNS của bạn bằng OctoDNS trên Ubuntu 18.04
2019-07-23
Cách thiết lập hệ thống bàn trợ giúp với OTRS trên Ubuntu 18.04
2019-06-28