Thứ tư, 27/11/2019 | 00:00 GMT+7

Cách sử dụng Ansible để tự động thiết lập server ban đầu 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ài đặt server ban đầu cho server Ubuntu 18.04 của ta .

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.

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ài đặt server ban đầu Ubuntu 18.04 và hướng dẫn cài đặt SSH key 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. Tạo bánh xe group quản trị và cấu hình nó cho sudo không password .
  3. Tạo user sudo mới.
  4. Sao chép public key SSH local và đưa khóa đó vào file authorized_keys quyền_key cho admin-user mới trên server từ xa.
  5. Tắt xác thực dựa trên password cho user gốc .
  6. Cài đặt các gói hệ thống.
  7. Cấu hình firewall UFW để chỉ cho phép các kết nối SSH và từ chối bất kỳ yêu cầu nào khác.

Sau khi playbook chạy xong, bạn sẽ có một user mới mà bạn có thể sử dụng để đăng nhập vào server .

Cách sử dụng Playbook này

Điều đầu tiên bạn cần làm là lấy playbook cài đặt server ban đầu và các phụ thuộc của nó từ repository do-community / ansible-playbooks . Ta sẽ sao chép repository này vào một folder local bên trong nút điều khiển Ansible.

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 nút điều khiển của bạn bằng:

  • cd ~
  • git clone https://github.com/do-community/ansible-playbooks.git
  • cd ansible-playbooks

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

Các file ta quan tâm nằm bên trong folder setup_ubuntu1804 , có cấu trúc sau:

setup_ubuntu1804 ├── playbook.yml └── vars     └── default.yml 

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

  • 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.

Ta sẽ chỉnh sửa file biến của playbook để tùy chỉnh các giá trị của nó. Truy cập folder setup_ubuntu1804 và mở file vars/default.yml bằng editor dòng lệnh mà bạn chọn:

  • cd setup_ubuntu1804
  • nano vars/default.yml

Tệp này chứa một số biến cần bạn chú ý:

vars / default.yml
--- create_user: sammy copy_local_key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}" sys_packages: [ 'curl', 'vim', 'git', 'ufw'] 

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:

  • create_user : Tên của user sudo sẽ được tạo. Trong ví dụ này, ta sẽ sử dụng sammy .
  • copy_local_key : Đường dẫn đến một SSH local file public key cần được sao chép vào server từ xa và thêm vào như authorized_key cho người sử dụng sudo mới. Giá trị mặc định sử dụng plugin lookup để có được đường dẫn đầy đủ đến public key mặc định cho user hệ thống hiện tại tại nút điều khiển Ansible.
  • sys_packages : Một mảng chứa danh sách các gói bạn muốn cài đặt trên server của bạn như một phần của cài đặt server ban đầu của bạn. Trong ví dụ này, ta sẽ đảm bảo các gói curl , vim , gitufw đều có mặt.

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 dưới dạng root , bạn có thể sử dụng lệnh sau:

  • ansible-playbook playbook.yml -l server1 -u root

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] TASK [Make sure we have a 'wheel' group] *********************************************************************************************** changed: [server1] TASK [Allow 'wheel' group to have passwordless sudo] *********************************************************************************** changed: [server1] TASK [Create a new regular user with sudo privileges] ********************************************************************************** changed: [server1] TASK [Set authorized key for remote user] ********************************************************************************************** changed: [server1] TASK [Disable password authentication for root] **************************************************************************************** changed: [server1] TASK [Update apt] ********************************************************************************************************************** changed: [server1] TASK [Install required system packages] ************************************************************************************************ ok: [server1] TASK [UFW - Allow SSH connections] ***************************************************************************************************** changed: [server1] TASK [UFW - Deny all other incoming traffic by default] ******************************************************************************** changed: [server1] PLAY RECAP ***************************************************************************************************************************** server1 : ok=11 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 .

Sau khi quá trình thực thi playbook kết thúc, bạn có thể đăng nhập vào server bằng:

  • ssh sammy@server_host_or_IP

Nhớ thay sammy với người sử dụng định nghĩa bởi create_user biến, và server_host_or_IP với hostname của server hoặc địa chỉ IP.

Trong trường hợp bạn đã thay đổi biến copy_local_key để trỏ đến SSH key tùy chỉnh (không phải của user hệ thống hiện tại của bạn), bạn cần cung cấp thêm một tham số chỉ định vị trí của đối tác private key của nó khi kết nối qua SSH với quyền là user mới:

  • ssh sammy@server_host_or_IP -i ~/.ssh/ansible_controller_key

Sau khi đăng nhập vào server , bạn có thể kiểm tra các luật hoạt động của firewall UFW để xác nhận nó được cấu hình đúng:

  • sudo ufw status

Bạn sẽ nhận được kết quả tương tự như sau:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)

Điều này nghĩa là firewall UFW đã được kích hoạt thành công. Vì đây là tác vụ cuối cùng trong playbook nên nó xác nhận playbook đã được thực thi đầy đủ trên server này.

Nội dung Playbook

Bạn có thể tìm thấy playbook cài đặt server ban đầu được giới thiệu trong hướng dẫn này trong kho lưu trữ ansible-playbooks , trong DigitalOcean Community Playbooks . Để 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ư tên của user sẽ được tạo và các gói sẽ được cài đặt như một phần của cài đặt server ban đầu.

vars / default.yml
--- create_user: sammy copy_local_key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}" sys_packages: [ 'curl', 'vim', 'git', 'ufw'] 

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=aptitude update_cache=yes state=latest force_apt_get=yes    # Sudo Group Setup     - name: Make sure we have a 'wheel' group       group:         name: wheel         state: present      - name: Allow 'wheel' group to have passwordless sudo      lineinfile:         path: /etc/sudoers         state: present         regexp: '^%wheel'         line: '%wheel ALL=(ALL) NOPASSWD: ALL'         validate: '/usr/sbin/visudo -cf %s'    # User + Key Setup     - name: Create a new regular user with sudo privileges       user:         name: "{{ create_user }}"         state: present         groups: wheel         append: true         create_home: true         shell: /bin/bash      - name: Set authorized key for remote user       authorized_key:         user: "{{ create_user }}"         state: present         key: "{{ copy_local_key }}"      - name: Disable password authentication for root       lineinfile:         path: /etc/ssh/sshd_config         state: present         regexp: '^#?PermitRootLogin'         line: 'PermitRootLogin prohibit-password'    # Install Packages     - name: Update apt       apt: update_cache=yes      - name: Install required system packages       apt: name={{ sys_packages }} state=latest   # UFW Setup     - name: UFW - Allow SSH connections       ufw:         rule: allow         name: OpenSSH      - name: UFW - Deny all other incoming traffic by default       ufw:         state: enabled         policy: deny         direction: incoming   

Vui lòng sửa đổi playbook này hoặc bao gồm các nhiệm vụ mới để 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

Tự động hóa cài đặt server ban đầu có thể giúp bạn tiết kiệm thời gian, đồng thời đảm bảo server của bạn sẽ tuân theo cấu hình tiêu chuẩn có thể được cải thiện và tùy chỉnh theo nhu cầu của bạn. Với bản chất phân tán của các ứng dụng hiện đại và nhu cầu về tính nhất quán hơn giữa các môi trường dàn dựng khác nhau, tự động hóa như thế này trở thành một điều cần thiết.

Trong hướng dẫn này, ta đã trình bày cách sử dụng Ansible để tự động hóa các việc ban đầu sẽ được thực thi trên server mới, chẳng hạn như tạo user không phải root có quyền truy cập sudo, bật UFW và tắt đăng nhập root dựa trên password từ xa.

Nếu bạn muốn bao gồm các nhiệm vụ mới trong playbook này để tùy chỉnh thêm cài đặt server ban đầu 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 . Bạn cũng có thể xem hướng dẫn của ta về Cách sử dụng Role Ansible để Tóm tắt Môi trường Cơ sở hạ tầng của bạn .


Tags:

Các tin liên quan

Cách sử dụng Ansible để tự động thiết lập server ban đầu trên Ubuntu 18.04
2019-11-27
Cách sử dụng Ansible để tự động thiết lập server ban đầu trên Ubuntu 18.04
2019-11-27
Sử dụng Sự kiện do server gửi trong Node.js để tạo ứng dụng thời gian thực
2019-11-18
Cách thiết lập front-end server PageKite trên Debian 9
2019-10-25
Cách thiết lập server trang kết thúc phía trước PageKite trên Debian 9
2019-10-25
Cách cài đặt Linux, Apache, MariaDB, PHP (LAMP) trên Debian 10
2019-07-15
Thiết lập server ban đầu với Debian 10
2019-07-08
Cách cài đặt và cấu hình Postfix làm server SMTP chỉ gửi trên Debian 10
2019-07-08
Cách xây dựng và triển khai server GraphQL với Node.js và MongoDB trên Ubuntu 18.04
2019-04-18
Cách thiết lập thủ công server Prisma trên Ubuntu 18.04
2019-01-11