← study index

study note

Vagrant và Linux servers

An English translation is not available yet. Showing the original article.
On this page (8)
  1. Vagrant và Linux servers
  2. Vagrant-vms
  3. Lệnh ip addr show dùng để làm gì và kết quả hiển thị thông số nào?
  4. Provisioning
  5. Pratice Linux servers
  6. WordPress Setup
  7. Multi-vm
  8. systemctl và apache tomcat

Vagrant và Linux servers

Vagrant-vms

vagrantAndLinuxServers.zip

Bên trong file zip này chứa các thư mục mã nguồn và file cấu hình mẫu (Vagrantfile)

image.webp

  • Vagrant là một công cụ mã nguồn mở (do công ty HashiCorp phát triển) dùng để tự động hóa việc khởi tạo, cấu hình và quản lý các môi trường máy ảo (Virtual Machines - VMs) thông qua các file cấu hình bằng mã (Code).
code
# -*- mode: ruby -*-
# vi: set ft=ruby :

# 1. Khởi tạo cấu hình Vagrant với phiên bản API 2
Vagrant.configure("2") do |config|

  # 2. Khai báo Hệ điều hành (OS Image) sẽ tải về và cài đặt cho máy ảo
  # Ở đây dùng hệ điều hành Ubuntu 22.04 LTS (64-bit)
  config.vm.box = "ubuntu/jammy64"


  # 3. Cấu hình Card mạng riêng (Private Network - IP tĩnh)
  # Cho phép máy tính thật ping/truy cập vào máy ảo qua địa chỉ IP này.
  # Bạn có thể giữ nguyên địa chỉ 192.168.56.17 giống như trong video.
  config.vm.network "private_network", ip: "192.168.56.17"


  # 4. Cấu hình Card mạng công cộng (Public Network / Bridged)
  # Giúp máy ảo nối trực tiếp vào cục Router Wi-Fi/LAN nhà bạn như một máy thật.
  # LƯU Ý: Thêm dấu # ở đầu dòng bên dưới để ẩn đi nếu bạn không muốn Vagrant
  # hỏi chọn Card mạng mỗi khi bật máy ảo.
  # config.vm.network "public_network"


  # 5. Cấu hình phần cứng riêng cho phần mềm quản lý máy ảo VirtualBox
  config.vm.provider "virtualbox" do |vb|
    
    # Cấp phát dung lượng RAM cho máy ảo (đơn vị: MB) -> 1024 MB = 1 GB RAM
    vb.memory = 1024

    # Cấp phát số lượng nhân CPU cho máy ảo xử lý -> 2 nhân CPU
    vb.cpus = 2

  end

end

Tại sao chỉ cần gõ vagrant ssh là vào được luôn? Vagrant đã tự động cấu hình Cặp khóa xác thực SSH (SSH Key Pair) riêng cho bạn ngay khi tạo máy ảo

Lệnh ip addr show dùng để làm gì và kết quả hiển thị thông số nào?

ệnh ip addr show (hoặc viết tắt là ip a) trong Linux dùng để liệt kê danh sách tất cả các Card mạng (Network Interfaces) và địa chỉ IP đang được gán cho máy. image.webp

  • 1: lo (Loopback Interface):

Đây là card mạng ảo nội bộ của máy (địa chỉ 127.0.0.1). Máy tính tự dùng card này để giao tiếp nội bộ với chính nó.

  • 2: enp0s3 (Card mạng NAT):

Địa chỉ IP: 10.0.2.15

Chức năng: Đây là card mặc định mà VirtualBox cấp để máy ảo đi ra ngoài Internet (tải package, update phần mềm) thông qua kết nối mạng của máy thật.

  • 3: enp0s8 (Card mạng Private Network / IP tĩnh):

Địa chỉ IP: 192.168.56.17

Chức năng: Đây chính là địa chỉ IP bạn vừa cấu hình trong file Vagrantfile (config.vm.network "private_network", ip: "192.168.56.17"). Nó giúp máy thật của bạn có thể gọi thẳng đến máy ảo qua IP này.

Provisioning

Khái niệm: Provisioning là quá trình tự động hóa việc chạy các câu lệnh/kịch bản (scripts) ngay sau khi máy ảo khởi động xong.

Mục đích: Giúp bạn cài đặt và cấu hình phần mềm (như Web Server Apache/Nginx, MySQL, PHP, Java...) một cách tự động hoàn toàn mà không cần phải dùng vagrant ssh vào máy ảo để gõ từng lệnh thủ công.

Pratice Linux servers

image.webp h-298.953125px

CentOS => httpd & HTML template

  • Cài đặt Web Server tên là httpd (đây là tên dịch vụ Apache trên CentOS).

  • Tải một giao diện mẫu HTML/CSS có sẵn (HTML template) về máy.

  • Đưa file HTML đó vào thư mục web (/var/www/html/) để khi gõ IP máy ảo lên trình duyệt, bạn sẽ thấy giao diện trang web hiển thị ra.

Cột 2: Ubuntu => LAMP Apache2, Mysql, PHP Wordpress template

  • Chuyển sang máy ảo Ubuntu để dựng bộ trang web phức tạp hơn (trang tin tức/blog).
  • Thực hành cài đặt bộ LAMP Stack:

Linux: Hệ điều hành Ubuntu.

Apache2: Web server xử lý yêu cầu trang web.

MySQL: Cơ sở dữ liệu để lưu bài viết, tài khoản.

PHP: Ngôn ngữ xử lý mã nguồn.

  • Sau đó, bạn cài đặt nguồn mở WordPress lên bộ LAMP này để dựng thành một trang web bán hàng hoặc blog hoàn chỉnh.

Cột 3: Automation vagrant provisioning

  • Ở 2 cột trước, bạn phải gõ từng lệnh thủ công để cài đặt (yum install httpd, apt install php,...).
  • Bạn sẽ viết toàn bộ các lệnh cài đặt đó vào file kịch bản Vagrant Provisioning. Khi đó, lần sau chỉ cần gõ đúng 1 lệnh vagrant up, máy ảo sẽ tự động cài từ A đến Z (Apache, MySQL, PHP, WordPress) mà bạn không cần gõ thêm lệnh nào nữa.

--

Lệnh vagrant box list dùng để liệt kê danh sách tất cả các "Box" (ảnh đĩa/template máy ảo) đã được tải về và lưu sẵn trên máy tính của bạn.

WordPress Setup

WordPress là một Hệ quản trị nội dung (CMS - Content Management System) mã nguồn mở hoàn toàn miễn phí, được viết bằng ngôn ngữ PHP và sử dụng cơ sở dữ liệu MySQL/MariaDB.

Hiểu một cách đơn giản nhất: WordPress giúp bạn tạo ra một trang web hoàn chỉnh mà không cần phải biết viết code HTML, CSS hay PHP từ đầu.

Thực chất httpd và apache2 là cùng một phần mềm Web Server (Apache HTTP Server), nhưng được gọi bằng hai tên gọi khác nhau tùy thuộc vào Hệ điều hành Linux mà bạn sử dụng.

Install and configure WordPress

Sử dụng: focal64 là tên mã của Ubuntu 20.04 LTS

Đường dẫn /etc/apache2/sites-available/ và /etc/apache2/sites-enabled/ xuất hiện tự động khi bạn cài đặt Apache Web Server trên hệ điều hành dòng Debian / Ubuntu (chẳng hạn như bản ubuntu/focal64 hoặc ubuntu/jammy64). image.webp h-108.296875px

Multi-vm

code
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

  # --------------------------------------------------
  # Máy ảo 1: web01 (Ubuntu)
  # --------------------------------------------------
  config.vm.define "web01" do |web01|
    web01.vm.box = "ubuntu/focal64"
    web01.vm.hostname = "web01"
    web01.vm.network "private_network", ip: "192.168.56.41"

    web01.vm.provider "virtualbox" do |vb|
      vb.memory = "1024"
      vb.cpus = 1
    end
  end

  # --------------------------------------------------
  # Máy ảo 2: web02 (Ubuntu)
  # --------------------------------------------------
  config.vm.define "web02" do |web02|
    web02.vm.box = "ubuntu/focal64"
    web02.vm.hostname = "web02"
    web02.vm.network "private_network", ip: "192.168.56.42"

    web02.vm.provider "virtualbox" do |vb|
      vb.memory = "1024"
      vb.cpus = 1
    end
  end

  # --------------------------------------------------
  # Máy ảo 3: db01 (CentOS / MariaDB)
  # --------------------------------------------------
  config.vm.define "db01" do |db01|
    db01.vm.box = "centos/7"
    db01.vm.hostname = "db01"
    db01.vm.network "private_network", ip: "192.168.56.43"

    # Kịch bản Provisioning tự động cài MariaDB cho db01
    db01.vm.provision "shell", inline: <<-SHELL
      yum install -y wget unzip mariadb-server -y
      systemctl start mariadb
      systemctl enable mariadb
    SHELL

    db01.vm.provider "virtualbox" do |vb|
      vb.memory = "1024"
      vb.cpus = 1
    end
  end

end

vagrant halt là shutdown an toàn nha.

systemctl và apache tomcat

Apache Tomcat là gì?

  • Là một Java Servlet Container mã nguồn mở và hoàn toàn miễn phí.

  • Nói một cách đơn giản: Đây là một máy chủ ứng dụng (Application Server) chuyên dùng để chạy các ứng dụng Web được viết bằng ngôn ngữ Java.

image.webp h-519.734375px

useradd --home-dir /opt/tomcat --shell /sbin/nologin tomcat

Lệnh này dùng để tạo một User hệ thống tên là tomcat phục vụ riêng cho việc khởi chạy dịch vụ Apache Tomcat:

useradd: Lệnh tạo người dùng mới trong Linux.

--home-dir /opt/tomcat: Khai báo thư mục nhà (Home directory) của user này là /opt/tomcat (nơi chứa phần mềm Tomcat).

--shell /sbin/nologin: Khóa quyền đăng nhập trực tiếp của user này. Điều này giúp tăng cường bảo mật — user tomcat chỉ dùng để chạy dịch vụ ngầm chứ không ai có thể dùng tài khoản này để SSH hoặc đăng nhập vào hệ thống.

tomcat: Tên của user cần tạo.

tomcat.service

code
[Unit]
Description=Tomcat
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

WorkingDirectory=/opt/tomcat

Environment=JAVA_HOME=/usr/lib/jvm/jre

Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINE_BASE=/opt/tomcat

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

[Install]
WantedBy=multi-user.target
    1. Khối [Unit] (Khai báo thông tin dịch vụ) Description=Tomcat: Tên mô tả ngắn gọn của dịch vụ.

After=network.target: Yêu cầu systemd chỉ được phép khởi động Tomcat sau khi card mạng (Network) đã hoạt động hoàn tất.

    1. Khối [Service] (Cách thức vận hành Tomcat) Type=forking: Khai báo rằng quá trình khởi động sẽ tạo ra một tiến trình con chạy ngầm (Background process).

User=tomcat & Group=tomcat: Chạy dịch vụ dưới danh nghĩa tài khoản tomcat thay vì root để tăng cường bảo mật.

WorkingDirectory=/opt/tomcat: Thư mục làm việc chính của Tomcat.

Các dòng Environment=...: Khai báo biến môi trường cho hệ thống:

JAVA_HOME: Chỉ định đường dẫn tới thư mục cài đặt Java (nếu bạn dùng Java 21 thì trỏ tới /usr/lib/jvm/java-21-openjdk).

CATALINA_HOME & CATALINA_BASE: Chỉ định thư mục gốc chứa các file thực thi và cấu hình của Tomcat.

ExecStart: Lệnh gọi file startup.sh để bật Tomcat khi bạn gõ systemctl start tomcat.

ExecStop: Lệnh gọi file shutdown.sh để tắt Tomcat khi bạn gõ systemctl stop tomcat.

    1. Khối [Install] (Cấu hình tự động bật cùng OS)

WantedBy=multi-user.target: Cho phép Tomcat tự động khởi động cùng hệ thống khi máy ảo Linux boot vào chế độ đa người dùng (Multi-user mode - trạng thái hoạt động bình thường của Server) khi bạn dùng lệnh systemctl enable tomcat.

Lệnh systemctl daemon-reload dùng để yêu cầu systemd nạp lại (reload) toàn bộ các file cấu hình dịch vụ trong hệ thống.

Attachments