Cách sử dụng Ansible để cài đặt và thiết lập Apache 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 Server Web Apache trên Ubuntu 18.04 . Server Apache HTTP là web server được sử dụng rộng rãi nhất trên thế giới. Nó cung cấp nhiều tính năng mạnh mẽ bao gồm các module có thể tải động, hỗ trợ phương tiện truyền thông mạnh mẽ và tích hợp rộng rãi với các phần mềm phổ biến khác.
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 theo quy trình được nêu trong hướng dẫn của ta về Cách cài đặt Server Web Apache 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 Apache.
- Tạo một folder root tài liệu tùy chỉnh cho Apache VirtualHost mới và cài đặt trang thử nghiệm.
- Bật Apache VirtualHost mới.
- Vô hiệu hóa trang web Apache mặc định khi biến
disable_default
được đặt thànhtrue
. - Cài đặt UFW để cho phép truy cập HTTP trên cổng đã cấu hình (
80
theo mặc định).
Sau khi playbook chạy xong, bạn sẽ có một web server chạy trên nút đích của bạn , 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 Apache 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 trong folder apache_ubuntu1804
, có cấu trúc sau:
apache_ubuntu1804 ├── files │ ├── apache.conf.j2 │ └── index.html.j2 ├── vars │ └── default.yml ├── playbook.yml └── readme.md
Đây là nội dung của từng file này:
-
files/apache.conf.j2
: Tệp mẫu để cài đặt Server ảo Apache. -
files/index.html.j2
: Tệp mẫu để cài đặt trang thử nghiệm trên folder root của web server . -
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 một số tùy chọn. Truy cập folder apache_ubuntu1804
và mở file vars/default.yml
bằng editor dòng lệnh mà bạn chọn:
- cd apache_ubuntu1804
- nano vars/default.yml
Tệp này chứa một số biến cần bạn chú ý:
--- 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:
-
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 [Install Apache] ****************************************************************************************************************** changed: [server1] TASK [Create document root] ************************************************************************************************************ changed: [server1] TASK [Copy index test page] ************************************************************************************************************ changed: [server1] TASK [Set up Apache virtualhost] ******************************************************************************************************* changed: [server1] TASK [Enable new site] ***************************************************************************************************************** changed: [server1] TASK [Disable default Apache site] ***************************************************************************************************** changed: [server1] TASK [UFW - Allow HTTP on port 80] ***************************************************************************************************** changed: [server1] RUNNING HANDLER [Reload Apache] ******************************************************************************************************** changed: [server1] PLAY RECAP ***************************************************************************************************************************** server1 : ok=10 changed=8 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:
http://server_host_or_IP
Bạn sẽ thấy một trang như thế này:
Điều đó nghĩa là quá trình tự động hóa đã được thực thi hoàn toàn trên server của bạn và Apache hiện đã sẵn sàng cung cấp các trang và nội dung HTML tĩnh được đặt trong folder root của tài liệu mà bạn đã cài đặt trong các biến cấu hình playbook.
Nội dung Playbook
Bạn có thể tìm thấy cài đặt server Apache được nêu trong hướng dẫn này trong folder apache_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ư cổng HTTP và domain để cấu hình trong Apache VirtualHost của bạn.
--- 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
.
<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 </VirtualHost>
files / index.html.j2
Tệp index.html.j2
là một mẫu Jinja khác, được sử dụng để cài đặt trang HTML thử nghiệm trong folder root của server Apache mới được cấu hình .
<html> <head> <title>Welcome to {{ http_host }} !</title> </head> <body> <h1>Success! The {{ http_host }} virtual host is working!</h1> </body> </html>
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 Apache apt: name=apache2 update_cache=yes state=latest - name: Create document root file: path: "/var/www/{{ http_host }}" state: directory owner: "{{ app_user }}" mode: '0755' - name: Copy index test page template: src: "files/index.html.j2" dest: "/var/www/{{ http_host }}/index.html" - name: Set up Apache virtuahHost template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" - 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 - name: "UFW - Allow HTTP on port {{ http_port }}" ufw: rule: allow port: "{{ http_port }}" proto: tcp 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ấu hình Apache trên Ubuntu 18.04.
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 bảo mật Apache bằng Let's Encrypt trên FreeBSD 12.02019-11-08
Cách cài đặt Apache Tomcat 9 trên Debian 10
2019-10-24
Cách cấu hình báo cáo MTA-STS và TLS cho miền của bạn bằng Apache trên Ubuntu 18.04
2019-09-06
Cách viết lại URL bằng mod_rewrite cho Apache trên Debian 10
2019-08-22
Cách tạo chứng chỉ SSL tự ký cho Apache trong Debian 10
2019-07-22
Cách cài đặt web server Apache trên Debian 10
2019-07-19
Cách cấu hình Apache HTTP với Sự kiện MPM và PHP-FPM trên FreeBSD 12.0
2019-07-12
Cách cài đặt một Apache, MySQL và PHP (FAMP) trên FreeBSD 12.0
2019-06-28
Cách cài đặt web server Apache trên CentOS 7
2019-05-29
Cách bảo mật Apache bằng Let's Encrypt trên CentOS 7
2019-05-23