Bài viết trước chúng ta đã tìm hiểu về cách viết playbook trong Ansible. Ở bài này, chúng ta sẽ áp dụng những kiến thức đã học để triển khai một dự án nhỏ, tạo nên một môi trường hoàn chỉnh cho việc chạy website thông qua cài đặt LAMP Stack và WordPress trên máy chủ Linux, cụ thể là Ubuntu 24.
Tổng Quan về LAMP Stack
LAMP Stack là một bộ công nghệ phần mềm mã nguồn mở phổ biến trong việc xây dựng và triển khai các ứng dụng web động. LAMP là viết tắt của bốn thành phần chính:
Linux: Hệ điều hành, nền tảng ổn định và bảo mật cho các ứng dụng web.
Apache: Máy chủ web chịu trách nhiệm xử lý các yêu cầu HTTP và cung cấp các trang web cho người dùng.
MySQL: Hệ quản trị cơ sở dữ liệu (RDBMS) lưu trữ và quản lý dữ liệu cho ứng dụng web.
PHP: Ngôn ngữ lập trình phía máy chủ, giúp tạo ra các trang web động, kết nối với cơ sở dữ liệu MySQL.
LAMP Stack cung cấp một nền tảng vững chắc và linh hoạt, đặc biệt phù hợp với các ứng dụng web từ đơn giản đến phức tạp. Vì tất cả các thành phần đều là mã nguồn mở, LAMP không chỉ miễn phí mà còn dễ dàng tùy chỉnh và mở rộng.
→ remote_src: yes: Chỉ ra rằng tệp nguồn (src) là một URL trên Internet, không phải một tệp tin đã có sẵn trên máy chủ. Mặc định nếu không khai báo parameter này thì giá trị remote_src sẽ được gán là no, đồng nghĩa với việc Ansible sẽ tìm tệp trong máy chủ local.
extra_opts: [--strip-components=1]: Tùy chọn này dùng để loại bỏ thư mục gốc của tệp nén trong quá trình giải nén. Khi giải nén tệp .tar.gz, WordPress thường được chứa trong một thư mục con (ví dụ: wordpress). Thêm tùy chọn này sẽ giúp bạn bỏ qua thư mục con đó và giải nén trực tiếp nội dung vào thư mục /var/www/html/.
Thiết lập quyền cho thư mục Wordpress với module file:
Module file trong Ansible được sử dụng để quản lý tệp và thư mục trên máy chủ từ xa. Nó cho phép bạn:
Tạo hoặc xóa thư mục/tệp
Thiết lập quyền (permissions), chủ sở hữu (owner) và nhóm (group)
Tạo symlink (liên kết tượng trưng)
- name: Set permissions for the WordPress directory file: path: /var/www/html/ owner: www-data group: www-data mode: '0755' recurse: yes
→ Gán quyền sở hữu thư mục /var/www/html/ cho www-data và thiết lập quyền 0755.
recurse: yes: áp dụng đệ quy cho tất cả tệp và thư mục con.
Cấu hình VirtualHost cho Apache với module copy kết hợp module shell:
Module copy dùng để sao chép tệp hoặc thư mục đến remote servers từ nội dung hoặc từ tệp/thư mục có sẵn control server.
→ Ở đây mình sử dụng content tức nội dung của tệp cấu hình VirtualHost sẽ được sao chép vào đường dẫn /etc/apache2/sites-available/000-default.conf trên remote servers.
Cài đặt MariaDB:
- name: Ensure Mariadb is installed apt: name: - mariadb-server - mariadb-client state: present - name: Ensure Mariadb is running service: name: mariadb state: started enabled: yes
→ Biến môi trường DEBIAN_FRONTEND: noninteractive sẽ được thiết lập, giúp quá trình cài đặt phpMyAdmin không yêu cầu người dùng tương tác, tự động trả lời “yes” cho các câu hỏi trong quá trình cài đặt.
→ python3-pymysql là thư viện để làm việc với cơ sở dữ liệu MySQL trong Python. Nếu không cài đặt thư viện này trên remote servers, module liên quan đến mysql ở bước tiếp theo sẽ không hoạt động.
Tạo database cho website wordpress với module mysql_db và mysql_user:
mysql_db và mysql_user: cả hai module này đều thuộc nhóm Ansible MySQL và được sử dụng để quản lý MySQL/MariaDB.
→ path: khai báo đường dẫn đến file cần chỉnh sửa.
regexp: tìm từ khoá cần thay thế.
replace: thay thế thành giá trị ứng với từ khoá tìm được.
Trong Ansible, loop cho phép chạy một task nhiều lần với các giá trị khác nhau. Khi sử dụng loop, biến item đại diện cho từng phần tử trong danh sách mà loop duyệt qua.
Phần cuối:
Nếu cấu hình Apache bị thay đổi, handler sẽ được gọi để khởi động lại Apache.
Truy cập URL http://<IP>/wp-admin để vào giao diện thiết lập Wordpress.
→ Wordpress đã được cài đặt thành công trên 2 remote servers.
Kết luận
Sau khi cài đặt thành công WordPress và LAMP stack bằng Ansible Playbook, quy trình triển khai tự động đã được thực hiện hiệu quả. Bài viết cũng giới thiệu thêm một số module của Ansible, giúp bạn hiểu rõ hơn về cách sử dụng chúng để tối ưu hóa các bước cài đặt và cấu hình hệ thống.