NỘI DUNG

Hướng dẫn sử dụng Ansible thiết lập tự động khởi tạo Server trên Ubuntu 20.04

Ngày đăng:21/03/2025
Cập nhật cuối:24/03/2025
Lượt xem

Đánh giá

5/5 - (188 bình chọn)

Ansible là một công cụ mạnh mẽ giúp tự động hóa việc cấu hình và quản lý máy chủ, trong khi Ubuntu 20.04 là một hệ điều hành phổ biến, được sử dụng rộng rãi cho các máy chủ. Kết hợp Ansible để thiết lập tự động khởi tạo máy chủ trên Ubuntu 20.04 sẽ giúp tối ưu thời gian và công sức quản trị. Bài viết này sẽ hướng dẫn bạn cách sử dụng Ansible thiết lập tự động khởi tạo Server trên Ubuntu 20.04 chi tiết.

Những điểm chính

  • Sử dụng Ansible để tự động thiết lập máy chủ Ubuntu 20.04, giúp giảm thiểu lỗi do thiết lập thủ công, tận dụng kiến trúc đơn giản và các module mạnh mẽ của Ansible.
  • Cần một máy chủ Ubuntu 20.04 làm Ansible control node (đã cài Ansible, SSH key, sudo user, tường lửa) và một máy chủ Ubuntu 20.04 khác làm remote server (truy cập SSH được từ control node).
  • Playbook Ansible tự động hóa việc thiết lập máy chủ Ubuntu 20.04, bao gồm cài đặt gói, tạo user, cấu hình SSH, vô hiệu hóa đăng nhập root bằng mật khẩu và thiết lập firewall.
  • Bài viết hướng dẫn 9 bước sử dụng Ansible để tự động thiết lập máy chủ Ubuntu 20.04, từ chuẩn bị control node, viết playbook đến chạy playbook.
  • Vietnix là nhà cung cấp VPS hàng đầu, uy tín, tốc độ cao, ổn định (99.9% uptime) và bảo mật, hỗ trợ 24/7 với đa dạng gói dịch vụ.

Giới thiệu về Ansible

Tự động hóa server hiện đang đóng một vai trò trọng yếu trong việc quản trị các hệ thống do ứng dụng ngày càng tăng lên về số lượng các môi trường hoạt động của các ứng dụng hiện đại ngày nay. Những công cụ quản trị cấu hình như Ansible đang được sử dụng phổ biến để giúp tổ chức quy trình tự động setup server bằng việc thiết lập các tiêu chuẩn về thủ tục thực hiện cho các server mới. Từ đó có thể giúp giảm thiểu được các lỗi liên quan đến thiết lập thủ công gây ra.

Hướng dẫn sử dụng Ansible thiết lập tự động khởi tạo Server trên Ubuntu 20.04
Hướng dẫn sử dụng Ansible thiết lập tự động khởi tạo Server trên Ubuntu 20.04

Ansible với kiến trúc đơn giản, không cần phải có các phần mềm chuyên dụng phải cài đặt trên các nodes. Ngoài ra, nó còn mang lại những tính năng và các modules được dựng sẵn rất mạnh mẽ tạo điều kiện thuận lợi cho việc viết các scripts tự động hóa.

Bài hướng dẫn này sẽ giải thích về cách sử dụng Ansible để tự động hóa các bước setup server trên Ubuntu phiên bản 20.04.

Yêu cầu cần đáp ứng

Để bắt đầu bài hướng dẫn này bạn cần đáp ứng được các yêu cầu sau:

  • Một Ansible control node: Máy chủ Ubuntu 20.04 của bạn phải cài đặt Ansible và đã được cấu hình để kết nối đến các hosts của Ansible bằng SSH key. Control node phải có một user thông thường có đặc quyền sudotường lửa được bật.
  • Một remote server đã được cài đặt Ubuntu 20.04: Bạn không cần phải setup trước trên server này nhưng phải truy cập được bằng SSH đến server từ Ansible control node đề cập ở trên. Server này sẽ trở thành một host cho Ansible remote server – nơi được Ansible control node thực hiện các tác vụ động.

Tác dụng của Playbook

Playbook Ansible mang đến một giải pháp thay thế cho việc tự tay setup server trên Ubuntu 20.04 và cài đặt SSH keys trên đó. Bạn chỉ cần setup một lần cho playbook và có thể sử dụng lại cho các server khác.

Khi chạy, playbook sẽ thực hiện các tác vụ sau trên các máy chủ Ansible:

  1. Cài đặt aptitude – là một package manager được dùng bởi Ansible thay thế cho apt.
  2. Tạo một user mới với quyền sudo và thiết lập không mật khẩu sudo.
  3. Copy SSH public key và include key đó vào file authorized_keys cho user admin mới ở trên remote host.
  4. Vô hiệu hóa phương thức xác thực bằng mật khẩu cho root user.
  5. Cài đặt các packages của hệ thống.
  6. Cấu hình firewall UFW sao cho chỉ cho phép các kết nối bằng SSH và từ chối các kết nối khác.

Khi playbook đã chạy xong, bạn sẽ có được một user mới có thể đăng nhập vào server.

Bước 1: Chuẩn bị Ansible Control Node

Trên Ansible control node của mình, bạn hãy thêm IP của Ansible host remote server vào trong file inventory của Ansible bằng text editor tùy ý, ở đây sử dụng nano:

sudo nano /etc/ansible/hosts

Sau khi mở file inventory của Ansible, thêm IP của remote server vào khối [servers]:

[servers]
server1 ansible_host=your_remote_server_ip

. . .

Sau đó, bạn cần kiểm tra và xác thực kết nối SSH giữa Ansible control node và remote server bằng lệnh sau:

ssh root@your_remote_server_ip

Chấp nhận yêu cầu xác thực và nhập mật khi được hỏi. Khi đã xác minh được kết nối SSH, nhấn CTRL+D để đóng kết nối lại và trở về control node.

Bước 2: Chuẩn bị Playbook

File playbook.yml là nơi tất cả các tác vụ của bạn được định nghĩa. Tác vụ là đơn vị hành động nhỏ nhất mà bạn có thể tự động hóa được bằng Ansible playbook. Đầu tiên hãy tạo playbook bằng text editor tùy ý:

nano playbook.yml

Lệnh trên sẽ mở môt file YAML trống. Trước khi đi tiến hành thêm các tác vụ vào playbook của bạn, hãy bắt đầu bằng cách thêm các mục sau:

---
- hosts: all
  become: true
  vars:
    created_username: sammy

Nếu muốn, bạn có thể thay đổi tên user sẽ được tạo ở chỉ thị created_username.

Hầu hết mỗi playbook đều sẽ có cách khai báo ban đầu tương tự như trên. hosts khai báo các servers mà Ansible control node để playbook chạy trên đó. become nêu ra tất cả các lệnh sẽ được thực hiện dưới quyền root.

vars cho phép lưu dữ liệu vào các biến. Nếu trong tương lai, bạn muốn thay đổi thì chỉ cần chỉnh sửa những dòng này trong file là được. Dưới đây là giải thích ngắn gọn về các biến trên:

Chú ý: Nếu bạn muốn xem file hoàn chỉnh của playbook, hãy tham khảo ở bước 8. Các files định dạng YAML có thể gặp lỗi với việc thụt đầu dòng trong cấu trúc file nên bạn cần kiểm tra lại sau khi hoàn thành các tác vụ.

Bước 3: Thêm tác vụ cài đặt Aptitude vào Playbook

Mặc định, các tác vụ sẽ được thực thi đồng bộ bởi Ansible lần lượt từ trên xuống dưới theo playbook. Điều này dẫn đến việc thứ tự định nghĩa các tác vụ là rất quan trọng, và bạn có thể ngầm hiểu rằng mỗi tác vụ sẽ được thực thi sau khi tác vụ trước đã xong.

Tất cả các tác vụ trong playbook của bài hướng dẫn đều có thể chạy độc lập và có thể sử dụng lại cho các playbooks khác.

Đầu tiên, thêm tác vụ cài đặt aptitue – là một công cụ để giao tiếp với package manager của Linux:

tasks:
    - name: Install aptitude
      apt:
        name: aptitude
        state: latest
        update_cache: true

Bài viết đang sử dụng module apt được dựng sẵn của Ansible để ra lệnh cho Ansible cài đặt aptitude. Các modules trong Ansible là các lối tắt để thực thi thay cho những thao tác mà bạn cần phải chạy bằng các lệnh như trên bash.

Để an toàn, Ansible sẽ chọn apt để cài đặt các packages trong trường hợp aptitude có vấn đề không thể dùng được. Về mặt kĩ thuật, bước này không hoàn bắt buộc do Ansible sẽ thường dùng aptitude hơn.

Bước 4: Thêm tác vụ Setup Sudo User vào Playbook

Tuy nhiên bạn nên tránh lạm dụng root user do nhiều nguyên nhân khác nhau. Do đó, bạn có thể tự động hóa việc tạo ra một user mới được cấp quyền sudo bằng cách thêm các dòng sau vào playbook:

- name: Setup passwordless sudo
      lineinfile:
        path: /etc/sudoers
        state: present
        regexp: '^%sudo'
        line: '%sudo ALL=(ALL) NOPASSWD: ALL'
        validate: '/usr/sbin/visudo -cf %s' 

    - name: Create a new regular user with sudo privileges
      user:
        name: "{{ created_username }}"
        state: present
        groups: sudo
        append: true
        create_home: true

Ở đây đang dùng module lineinfile của Ansible để xác định và thay thế một dòng cụ thể nào đó trong một file. Trong trường hợp này, người dùng cần sử dụng regexfile (regular expression – biểu thức chính quy) để chỉ định một dòng trong file sudoers, sau đó chỉnh sửa để cho phép quyền sử dụng sudo không cần password.

Ngoài ra, bạn có thể dùng visudo để xác thực lại tính hợp lệ của file sau khi thay đổi, để phòng những lỗi có thể xảy ra.

Để tận dụng điều này, bạn thêm một user mới với module user. Ansible sẽ đảm bảo rằng user này được tạo ra nếu chưa tồn tại, đồng thời đảm bảo rằng user thuộc về group sudo sẽ không bị loại ra khỏi các group khác và cùng đó là tạo ra một thư mục home.

iconLưu ý

Đảm bảo là bạn có để dấu trích dẫn “” vào xung quanh dấu ngoặc cong {} nơi chỉ thị một biến. Thiếu dấu trích dẫn trên là một lỗi cú pháp rất thường gặp trong Ansible.

Bước 5: Thêm SSH Key để Setup và vô hiệu hóa các tác vụ Root Password vào Playbook

Ansible khuyến khích nên kết hợp sử dụng SSH key với việc vô hiệu hóa xác thực bằng mật khẩu cho root. Để thực hiện, thêm tác vụ sau vào playbook:

- name: Set authorized key for remote user
      ansible.posix.authorized_key:
        user: "{{ created_username }}"
        state: present
        key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}"

    - name: Disable password authentication for root
      lineinfile:
        path: /etc/ssh/sshd_config
        state: present
        regexp: '^#?PermitRootLogin'
        line: 'PermitRootLogin prohibit-password'

Module authorize_key có thể được sử dụng bằng cách cung cấp tên user và vị trí của SSH key. Ở đây, đường dẫn vào key được tạo ra nhờ vào hàm lookup của Ansible.

Moule lineinlife sẽ tìm và thay thế một dòng khai báo trong file sshd_config để vô hiệu hóa chức năng xác thực mật khẩu cho root và hạn chế quyền truy cập vào một số các đặc quyền nhằm tăng tính bảo mật.

Bước 6: Thêm tác vụ cài đặt Package vào Playbook

Ansible có thể đảm rằng các packages sẽ luôn được cài đặt trên Server của bạn. Và để cài đặt các packages, thay vì định nghĩa từng tác vụ riêng và gọi apt install trên từng cái, bạn có thể liệt kê một danh sách các packages mong muốn như dưới đây:

- name: Update apt and install required system packages
      apt:
        pkg:
          - curl
          - vim
          - git
          - ufw
        state: latest
        update_cache: true

Bạn có thể thêm hoặc xóa các packages tùy ý. Điều này sẽ không những đảm bảo rằng các packages được cài đặt mà còn là với phiên bản mới nhất và được hoàn thành sau khi lệnh update của apt được gọi.

Bước 7: Thêm tác vụ Setup Firewall vào Playbook

Firewall là một yếu tố không thể thiếu được đối với bất kì một server nào trên internet. Bạn có thể dùng Ansible để cài đặt và cấu hình cho UFW (Uncomplicated Firewall) như sau:

- name: UFW - Allow SSH connections
      community.general.ufw:
        rule: allow
        name: OpenSSH

    - name: UFW - Enable and deny by default
      community.general.ufw:
        state: enabled
        default: deny

Đầu tiên module ufw đảm bảo rằng truy cập bằng SSH được phép thông qua. Sau đó, module này sẽ kích hoạt Firewall và mặc định sẽ từ chối tất cả các lưu lượng khác vào server.

Bước 8: Kiểm tra lại bản hoàn chỉnh của Playbook

Bạn có thể kiểm tra lại bản hoàn chỉnh của playbook như bên dưới. Tùy thuộc cách customize của bạn mà có thể sẽ khác một chút với playbook của bài.

---
- hosts: all
  become: true
  vars:
    created_username: sammy

  tasks:
    - name: Install aptitude
      apt:
        name: aptitude
        state: latest
        update_cache: true

    - name: Setup passwordless sudo
      lineinfile:
        path: /etc/sudoers
        state: present
        regexp: '^%sudo'
        line: '%sudo ALL=(ALL) NOPASSWD: ALL'
        validate: '/usr/sbin/visudo -cf %s'

    - name: Create a new regular user with sudo privileges
      user:
        name: "{{ created_username }}"
        state: present
        groups: sudo
        append: true
        create_home: true

    - name: Set authorized key for remote user
      ansible.posix.authorized_key:
        user: "{{ created_username }}"
        state: present
        key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}"

    - name: Disable password authentication for root
      lineinfile:
        path: /etc/ssh/sshd_config
        state: present
        regexp: '^#?PermitRootLogin'
        line: 'PermitRootLogin prohibit-password'

    - name: Update apt and install required system packages
      apt:
        pkg:
          - curl
          - vim
          - git
          - ufw
        state: latest
        update_cache: true

    - name: UFW - Allow SSH connections
      community.general.ufw:
        rule: allow
        name: OpenSSH

    - name: UFW - Enable and deny by default
      community.general.ufw:
        state: enabled
        default: deny

iconLưu ý

Hãy để ý đến các thụt đầu dòng trong file YAML của mình. Nếu có lỗi xảy ra, thì rất có thể là do chúng. YAML khuyến khích nên sử dụng 2 khoảng trắng để thụt đầu dòng – giống như trong playbook của bài này.

Khi đã hoàn thành playbook của mình, bạn có thể lưu và thoát khỏi text editor để tiến hành khởi chạy playbook ở bước tiếp theo sau đây.

Bước 9: Khởi chạy Playbook

Bây giờ bạn đã có thể chạy playbook của mình trên một hoặc nhiều server. Hầu hết các playbook mặc định được cấu hình để thực thi trên mỗi server bên trong inventory của bạn, do đó ở đây bạn nên chỉ định server cần chạy.

Để chạy playbook trên server1 cũng như kết nối như là root, bạn dùng lệnh như sau:

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

Flag -l chỉ định server và flag -u chỉ định user để đăng nhập vào remote server. Bởi vì, bạn chưa setup remote server nên root là lựa chọn duy nhất. Còn flag -k là rất quan trọng đối với lần chạy playbook đầu tiên để có thể nhập mật khẩu SSH.

Bạn sẽ nhận được output tương tự như dưới dây:

Output

. . .

TASK [UFW - Allow SSH connections] ***************************************************************************************************************************************************************************************************************************
changed: [server1]

TASK [UFW - Enable and deny by default] **********************************************************************************************************************************************************************************************************************
changed: [server1]

PLAY RECAP ***************************************************************************************************************************************************************************************************************************************************
server1                    : ok=9    changed=8    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Theo output trên, server đã được set up thành công. Output của bạn không cần phải hoàn toàn giống như trên, chỉ cần không xuất hiện lỗi là được.

Sau khi đã hoàn thành bước setup đầu tiên cho playbook, tất cả lần gọi ansible tiếp theo có thể được sử dụng với user sammy và không cần flag -k:

ansible-playbook playbook.yml -l server1 -u sammy

Bạn cũng có thể đăng nhập vào server với lệnh sau bằng SSH:

ssh sammy@your_remote_server_ip

Hãy nhớ thay thế sammy bằng user của bạn đã định nghĩa trong biến created_usernameserver_host_or_IP bằng địa chỉ IP của hostname server tương ứng.

Sau khi đăng nhập vào server, bạn có thể kiểm tra các quy tắc đang bật của UFW để xác nhận Firewall đã được cấu hình chính xác hay chưa:

sudo ufw status

Output sẽ tương tự như dưới đây:

Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             

Điều này cho thấy Firewall UFW đã được bật thành công. Và vì đây là tác vụ cuối cùng cài đặt cho playbook nên cũng đồng thời nói lên rằng playbook đã được thực thi thành công trên server này.

Như vậy, việc tự động hóa bằng playbook thật sự đã tiết kiệm được rất nhiều thời gian và đồng thời cũng cho phép server tuân theo một cấu hình tiêu chuẩn mà có thể được tùy chỉnh theo nhu cầu. Do đó, đây là một thành phần rất thiết yếu mà bất kì một team phát triển nào cũng cần phải có.

Vietnix – Nhà cung cấp VPS uy tín, ổn định, tốc độ cao

Vietnix là nhà cung cấp dịch vụ VPS top đầu thị trường hiện nay, nổi bật với hiệu năng vượt trội, độ ổn định cao với uptime lên đến 99.9% và bảo mật tòan diện. Bằng kinh nghiệm 12 năm hoạt động và sở hữu hạ tầng máy chủ vững chắc, Vietnix đã xây dựng 1 hệ thống hỗ trợ khách hàng 24/7, luôn sẵn sàng giải quyết mọi sự cố một cách nhanh chóng.

Cho dù bạn cần VPS cho website cá nhân, ứng dụng di động hay hệ thống doanh nghiệp quy mô lớn, Vietnix đều có giải pháp phù hợp với danh mục gói dịch vụ đa dạng như VPS AMD, VPS NVMe, VPS SSD,… Hãy lựa chọn Vietnix để trải nghiệm dịch vụ VPS chất lượng hàng đầu, xứng đáng với sự tin tưởng của bạn ngay hôm nay!

Thông tin liên hệ:

  • Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh
  • Hotline: 1800 1093
  • Email: sales@vietnix.com.vn
  • Website: https://vietnix.vn/ 

Qua bài viết này, bạn đã nắm được cách sử dụng Ansible thiết lập tự động khởi tạo Server trên Ubuntu 20.04, từ việc chuẩn bị môi trường, viết playbook đến thực thi các tác vụ tự động hóa. Hy vọng rằng những kiến thức này sẽ giúp bạn tiết kiệm thời gian và công sức trong việc quản trị hệ thống, đồng thời tạo nền tảng vững chắc để bạn xây dựng và triển khai các ứng dụng một cách hiệu quả và chuyên nghiệp. Ansible với khả năng tự động hóa mạnh mẽ không chỉ giúp tối ưu hóa quy trình quản lý server mà còn cho phép bạn linh hoạt mở rộng hệ thống một cách dễ dàng và đáng tin cậy trên nền tảng Ubuntu 20.04.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Đánh giá mức độ hữu ích của bài viết

Thất vọng

Chưa hữu ích

Bình thường

Hữu ích

Rất hữu ích

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Banner group
Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

Icon tab

MAXSPEED HOSTING

TĂNG TỐC WEBSITE TOÀN DIỆN

CÔNG NGHỆ ĐỘC QUYỀN

Vector

PHẦN CỨNG MẠNH MẼ

Vector

HỖ TRỢ 24/7

Vector
ĐĂNG KÝ NGAYGroup icon
khuyến mãi 30 tháng 4
Khi mua Hosting/VPS
16/04/2025 - 16/05/2025
Pattern

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

CẢM ƠN BẠN ĐÃ ĐÁNH GIÁ BÀI VIẾT

Vietnix sẽ luôn cố gắng cải thiện chất lượng dịch vụ mỗi ngày

ĐÓNG

Đánh giá mức độ hữu ích của bài viết

Thất vọng

Chưa hữu ích

Bình thường

Hữu ích

Rất hữu ích

Icon
ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1
Icon
XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG