Cách sử dụng Ansible để cài đặt và thiết lập LEMP 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, Nginx, MySQL và PHP (LEMP) trên Ubuntu 18.04 . Phần mềm LEMP là một group phần mềm được dùng để phục vụ các trang web động và ứng dụng web. Đây là viết tắt của hệ điều hành L inux, với một web server Nginx (phát âm như “ E ngine-X”). Dữ liệu backend được lưu trữ trong database M ySQL và 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:
- Một nút điều khiển Ansible : máy Ubuntu 18.04 được cài đặt và cấu hình Ansible để kết nối với các server Ansible của bạn bằng các SSH key . Đảm bảo rằng nút điều khiển có regular user có quyền sudo và đã bật firewall , như được giải thích trong hướng dẫn Cài đặt Server Ban đầu của ta . Để cài đặt Ansible, hãy làm theo hướng dẫn của ta về Cách cài đặt và cấu hình Ansible trên Ubuntu 18.04 .
- Một hoặc nhiều Server Ansible : một hoặc nhiều server Ubuntu 18.04 từ xa đã được cài đặt trước đó theo hướng dẫn về Cách sử dụng Ansible để Tự động hóa Cài đặt Server Ban đầu trên Ubuntu 18.04 .
 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 thông qua quy trình được nêu trong hướng dẫn của ta về Cách cài đặt Linux, Nginx, MySQL, PHP ( LEMP ) 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:
-  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óiapt.
- Cài đặt các gói LEMP cần thiết.
- Cài đặt file cấu hình Nginx bằng cách sử dụng mẫu được cung cấp.
- Bật cấu hình Nginx mới và tắt cấu hình mặc định.
- Đặt password cho user gốc MySQL.
- Loại bỏ các account MySQL ẩn danh và database thử nghiệm.
-   Cài đặt  UFW để cho phép  truy cập HTTP  trên cổng đã  cấu hình  ( 80theo mặc định).
- 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 Nginx, 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 playbook LEMP 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  mà  ta  quan tâm nằm bên trong folder  lemp_ubuntu1804 , có cấu trúc sau:
lemp_ubuntu1804 ├── files │   ├── info.php.j2 │   └── nginx.conf.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/nginx.conf.j2: Tệp mẫu để cài đặt server Nginx. danh mục.
-  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à Nginx. Truy cập folder  lemp_ubuntu1804 và mở file  vars/default.yml bằng  editor  dòng lệnh mà bạn chọn:
- cd lemp_ubuntu1804 
- nano vars/default.yml 
Tệp này chứa một số biến cần bạn chú ý:
--- mysql_root_password: "mysql_root_password" 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:
-  mysql_root_password: Mật khẩu mong muốn cho account MySQL gốc .
-  http_host: Tên server hoặc địa chỉ IP cho web server này.
-  http_conf: Tên của file cấu hình sẽ được tạo bên trong/etc/nginx/sites-available, thường được đặt thành tên server hoặc ứng dụng để dễ nhận dạng hơn.
-  http_port: Cổng Nginx sẽ sử dụng để phục vụ trang web này. Đây là cổng80theo mặc định, nhưng nếu bạn muốn phân phát trang web hoặc ứng dụng của bạn trên một cổng khác, hãy nhập cổng đó vào đây.
 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 in your inventory, by default. We can use the flag to make sure that only a subset of servers, or a single server, is affected by the playbook. We can also use the -l flag to make sure that only a subset of servers, or a single server, is affected by the playbook. We can also use the 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] *********************************************************************************************************** changed: [server1] => (item=aptitude)  ...  TASK [UFW - Allow HTTP on port 80] ***************************************************************************************************** changed: [server1]  TASK [Sets Up PHP Info Page] *********************************************************************************************************** changed: [server1]  RUNNING HANDLER [Reload Nginx] ********************************************************************************************************* changed: [server1]  PLAY RECAP ***************************************************************************************************************************** server1         : ok=12   changed=9    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:
 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  LEMP có trong hướng dẫn này trong folder  lemp_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 Nginx.
--- mysql_root_password: "mysql_root_password" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" files / nginx.conf.j2
 Tệp nginx.conf.j2 là file  mẫu Jinja 2  cấu hình   web server  Nginx. Các biến được sử dụng trong mẫu này được xác định trong file  biến vars/default.yml .
server {        listen {{ http_port }};        root /var/www/html;        index index.php index.html index.htm index.nginx-debian.html;        server_name {{ http_host }};         location / {                try_files $uri $uri/ =404;        }         location ~ \.php$ {                include snippets/fastcgi-php.conf;                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;        }         location ~ /\.ht {                deny all;        } }  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  LEMP mới được  cấu hình .
<?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.
--- - 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' ]     - name: Install LEMP Packages      apt: name={{ item }} update_cache=yes state=latest      loop: [ 'nginx', 'mysql-server', 'python3-pymysql', 'php-fpm', 'php-mysql' ]  # Nginx Configuration     - name: Sets Nginx conf file      template:        src: "files/nginx.conf.j2"        dest: "/etc/nginx/sites-available/{{ http_conf }}"     - name: Enables new site      file:        src: "/etc/nginx/sites-available/{{ http_conf }}"        dest: "/etc/nginx/sites-enabled/{{ http_conf }}"        state: link      notify: Reload Nginx     - name: Removes "default" site      file:        path: "/etc/nginx/sites-enabled/default"        state: absent      notify: Reload Nginx  # 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  # Sets Up PHP Info Page     - name: Sets Up PHP Info Page      template:        src: "files/info.php.j2"        dest: "/var/www/html/info.php"  # Handlers   handlers:    - name: Reload Nginx      service:        name: nginx        state: reloaded     - name: Restart Nginx      service:        name: nginx        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 LEMP 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 .
Các tin liên quan
Cách cài đặt và sử dụng TimescaleDB trên Ubuntu 18.042019-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
Cách triển khai và quản lý DNS của bạn bằng DNSControl trên Ubuntu 18.04
2019-06-26
 

