Cài đặt và Cấu hình Phần mềm Linux

Cài đặt và Quản lý Phần mềm Linux

I. Cài đặt Dịch vụ SSH
Cài đặt SSH cho hệ thống Red Hat

Bước 1: Cài đặt dịch vụ SSH

# Thực hiện lệnh sau để cài đặt SSH:
sudo yum install -y openssh-server

Bước 2: Cấu hình dịch vụ SSH

# Khởi động dịch vụ SSH
sudo systemctl start sshd
# Thiết lập tự động khởi động SSH khi boot hệ thống
sudo systemctl enable sshd
# Kiểm tra trạng thái dịch vụ SSH
sudo systemctl status sshd
Cài đặt SSH cho hệ thống Debian

Cài đặt máy chủ OpenSSH

Gói máy chủ OpenSSH có sẵn trong kho lưu trữ chính thức của Debian, quá trình cài đặt rất đơn giản.

# Cài đặt máy chủ OpenSSH
apt install -y openssh-server

Các lệnh liên quan đến máy chủ SSH

# Kiểm tra trạng thái máy chủ SSH, xem đang chạy hay được thêm vào khởi động hệ thống
systemctl status ssh

# Khởi động và dừng máy chủ SSH
systemctl start ssh
systemctl stop ssh

# Thêm hoặc xóa dịch vụ SSH khỏi khởi động hệ thống
systemctl enable ssh
systemctl disable ssh
  • Lưu ý: Dịch vụ sshd đã được cấu hình ở trên, không cần cấu hình bổ sung; Nếu vẫn không thể đăng nhập từ xa, có thể do tường lửa chưa mở cổng tương ứng

Truy cập máy chủ SSH

Thực hiện lệnh sau trên Debian 11 Desktop/Máy chủ để tìm địa chỉ IP:

# Phương pháp 1
hostname -i
# Phương pháp 2
whoami
# Phương pháp 3
ssh <username>@<ip-addr> -p <port-number>

# Lưu ý: Thay thế <username> và <ip-addr> bằng tên người dùng và địa chỉ IP tương ứng của Debian 11 Desktop/Máy chủ.
# ssh shovon@192.168.0.115
# ssh shovon@192.168.0.115 -p 22

# Đóng phiên SSH:
exit

Cấu hình máy chủ SSH

# Tệp cấu hình chính của máy chủ OpenSSH là sshd_config
nano /etc/ssh/sshd_config
# Sau mỗi thay đổi trong tệp sshd_config, phải khởi động lại máy chủ OpenSSH bằng lệnh sau
systemctl restart ssh
# Mở trang hướng dẫn trực tuyến cho tệp cấu hình sshd_config
man sshd_config
II. Cấu hình Tường lửa
Tường lửa cho hệ thống Red Hat

Sau Centos 7, hệ thống khuyến nghị sử dụng firewall thay vì iptables;

firewalld dễ sử dụng hơn nhiều so với iptables, ngay cả khi không hiểu rõ "năm bảng năm chuỗi" và cũng không hiểu về giao thức TCP/IP vẫn có thể thực hiện hầu hết các chức năng.

Lưu ý đặc biệt: firewalliptables xung đột, cần tắt một trong hai

Bước 1: Cài đặt tường lửa firewalld

########### Trường hợp tồn tại tường lửa iptables
## Dừng tường lửa iptables
systemctl stop iptables
## Vô hiệu hóa dịch vụ iptables
systemctl mask iptables

########## Cài đặt tường lửa firewalld
yum install -y firewalld
yum install -y firewall-config

Bước 2: Cấu hình tường lửa firewalld

#### Khởi động lại tường lửa
systemctl restart firewalld
#### Thiết lập tự động khởi động
systemctl enable firewalld
# Hủy bỏ tự động khởi động
systemctl disable firewalld

#### Xem trạng thái
systemctl status firewalld
# Dừng
systemctl stop firewalld

#### Xem danh sách các dịch vụ đã khởi động
systemctl list-unit-files|grep enabled
#### Xem danh sách các dịch vụ khởi động thất bại
systemctl --failed
  • Cấu hình bằng lệnh firewall-cmd
### Xem phiên bản
firewall-cmd --version
### Xem trợ giúp
firewall-cmd --help
### Hiển thị trạng thái
firewall-cmd --state
### Từ chối tất cả các gói
firewall-cmd --panic-on
### Hủy bỏ trạng thái từ chối
firewall-cmd --panic-off
### Kiểm tra xem có bị từ chối không
firewall-cmd --query-panic

Bước 3: Cấu hình cổng tường lửa

# Xem tất cả các cổng đã mở trên tường lửa
firewall-cmd --zone=public --list-ports
  • Mở cổng cụ thể (cho phép bất kỳ IP nào truy cập): ví dụ mở cổng 80
#### Các cổng thường mở: http:80; https:443; MySQL:3306; Redis:6379; rabbitmq:5672,15672
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-service=ssh --permanent
## Cập nhật quy tắc tường lửa
firewall-cmd --reload
  • Lưu ý: Tham số permanent có nghĩa là hiệu lực vĩnh viễn, nếu không có tham số này thì sau khi khởi động lại CentOS, cấu hình sẽ mất hiệu lực
  • Xóa cổng (cổng cho phép bất kỳ IP nào truy cập): ví dụ hủy mở cổng 80
firewall-cmd --zone=public --remove-port=80/tcp --permanent
firewall-cmd --reload

############ Xóa dịch vụ ssh mặc định:
### Trước khi xóa dịch vụ ssh mặc định, hãy xác nhận rằng cổng 22 đã được mở riêng biệt, nếu không sẽ không thể sử dụng kết nối SSH từ xa.
firewall-cmd --remove-service=ssh --permanent
firewall-cmd --reload
  • Xem quy tắc cho phép IP cụ thể truy cập cổng
firewall-cmd --zone=public --list-rich-rules
  • Xem trạng thái mở cổng cụ thể
firewall-cmd --zone=public --query-port=80/tcp
Tường lửa Debian

Cấu hình tường lửa UFW, firewall, iptables - Các loại tường lửa phổ biến trên hệ thống Linux: UFW, firewall, iptables

  • UFW là tường lửa mặc định cho hệ thống Debian
  • firewall là tường lửa cho hệ thống Red Hat phiên bản 7 trở lên (ví dụ CentOS7.x)
  • iptables là tường lửa cho hệ thống Red Hat phiên bản 6 trở xuống (ví dụ CentOS6.x).

Rất có thể cả ba loại **được cài đặt trên cùng một hệ thống và ảnh hưởng lẫn nhau!** iptables là hệ thống tường lửa thấp cấp và lâu đời nhất, mọi hệ thống đều tồn tại loại tường lửa này, nhưng nói chung chỉ cần đảm bảo tường lửa này hoàn toàn mở là đủ, phần còn lại không cần quan tâm, cũng không cần cấu hình phức tạp.

Cả ufwfirewall đều là công cụ thay thế iptables trên các hệ thống Linux mới hơn, khi cả hai được cài đặt trên máy chủ thì sẽ xảy ra xung đột giữa chúng.

Bước 1: Kiểm tra trạng thái tường lửa

### Trạng thái tường lửa firewall
firewall-cmd --state
### Trạng thái tường lửa UFW
ufw status

##### Xem các dịch vụ đang chạy trên hệ thống hiện tại
systemctl list-units --type=service --state=running

Bước 2: Cài đặt tường lửa UFW

apt install -y ufw
ufw status

# Thêm biến môi trường
export PATH=$PATH:/usr/sbin/
  • Kích hoạt IPV6 (tùy chọn): Nếu máy chủ Debian đã bật IPv6, cần đảm bảo cấu hình UFW hỗ trợ IPv6. Như vậy ngoài IPv4, UFW cũng sẽ quản lý các quy tắc tường lửa cho IPv6
sudo nano /etc/default/ufw
# IPV6=yes
  • Cho phép kết nối SSH

Hiện tại chưa thể khởi động tường lửa UFW, vì nó sẽ **từ chối tất cả các kết nối đến**, bao gồm cả SSH

#### Tạo quy tắc tường lửa, cho phép tất cả các kết nối trên cổng 22
## UFW biết cổng nào liên kết với allow ssh, vì nó được liệt kê dưới dạng dịch vụ trong tệp /etc/services
sudo ufw allow ssh

#### Cũng có thể viết quy tắc tương đương bằng cách chỉ định cổng thay vì tên dịch vụ
# sudo ufw allow 22

Bước 3: Các lệnh UFW

#### Kích hoạt ufw
ufw enable
#### Vô hiệu hóa ufw: Tất cả các quy tắc đã xác định trước đó sẽ không còn hiệu lực sau khi thực hiện
ufw disable
#### Đặt lại UFW, sau khi thực hiện sẽ vô hiệu hóa UFW và xóa tất cả các quy tắc đã xác định trước đó
sudo ufw reset

#### Xem các quy tắc đã thiết lập - danh sách cấu hình
ufw status verbose

Cấu hình cổng tường lửa

  • Cho phép các kết nối khác
#### Mở cổng 80
sudo ufw allow http
#### Mở cổng 443
sudo ufw allow https

# 15671、15672
# ufw cho phép lưu lượng đến cổng 5432 trên máy chủ này với chú thích nhận diện dịch vụ:
ufw allow 6379 comment "Redis"
ufw allow 3306 comment "MySQL"
  • Phạm vi cổng cụ thể
  • Khi chỉ định phạm vi cổng phải chỉ định giao thức áp dụng cho quy tắc (TCP hoặc UDP)
  • Trong các trường hợp trước, nếu không chỉ định giao thức sẽ tự động cho phép cả hai giao thức
# Mở cổng `6000~6007`
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
  • Cấu hình chặn IP cụ thể
# Cho phép kết nối từ địa chỉ IP cụ thể
sudo ufw allow from 203.0.113.4

# Có thể chỉ định cho phép IP truy cập cổng cụ thể bằng cách thêm `to any port` sau đó là số cổng
sudo ufw allow from 203.0.113.4 to any port 22
  • Cấu hình chặn IP + mạng con
#### Sử dụng ký hiệu CIDR để chỉ định mặt nạ mạng
##  203.0.113.1~203.0.113.254
sudo ufw allow from 203.0.113.0/24

#### Cũng có thể chỉ định cổng đích mà mạng con được phép kết nối
sudo ufw allow from 203.0.113.0/24 to any port 22

#### ufw chỉ cho phép lưu lượng TCP từ 192.168.0.4 đến bất kỳ địa chỉ nào trên máy chủ này, cổng 22:
ufw allow proto tcp from 192.168.0.4 to any port 22
  • Kết nối đến giao diện mạng cụ thể
# Tạo quy tắc tường lửa chỉ áp dụng cho giao diện mạng cụ thể, có thể thực hiện bằng cách chỉ định `allow in on` sau đó là tên giao diện mạng
# Cho phép lưu lượng HTTP đến giao diện mạng công khai có tên eth0, điều này sẽ cho phép máy chủ nhận yêu cầu HTTP từ internet công khai
sudo ufw allow in on eth0 to any port 80

# Cho phép lưu lượng MySQL đến giao diện mạng nội bộ có tên eth1, điều này sẽ cho phép các máy chủ khác trên mạng nội bộ kết nối đến cơ sở dữ liệu MySQL
sudo ufw allow in on eth1 to any port 3306
  • Từ chối kết nối
  • Theo quy tắc mặc định, UFW sẽ được cấu hình để từ chối tất cả các kết nối đến. Chúng ta thường tạo các quy tắc rõ ràng cho phép cổng và địa chỉ IP cụ thể đi qua, như vậy tạo ra chiến lược tường lửa an toàn
  • Đôi khi chúng ta muốn từ chối các kết nối cụ thể dựa trên địa chỉ IP nguồn hoặc mạng con, ví dụ như biết rằng máy chủ đang bị tấn công từ đâu đó
# Từ chối kết nối HTTP
sudo ufw deny http

# Từ chối tất cả các kết nối từ IP
sudo ufw deny from 203.0.113.4

# ufw từ chối tất cả lưu lượng UDP đến cổng 22:
ufw deny proto udp from any to any port 22
  • Xóa quy tắc
  • Có thể chỉ định quy tắc cần xóa bằng số quy tắc hoặc bằng chính quy tắc đó, tương tự như cách chỉ định quy tắc khi tạo
  • Theo số quy tắc
  • Cần chỉ định thủ công xóa quy tắc IPv4 hoặc IPv6
#### Lấy danh sách quy tắc tường lửa, sử dụng tùy chọn `numbered`
sudo ufw status numbered

#### Ví dụ
# Xóa quy tắc `2`
sudo ufw delete 2
  • Theo quy tắc thực tế
  • Xóa cả quy tắc IPv4 và IPv6 (nếu tồn tại)
# Chỉ định tên dịch vụ
sudo ufw delete allow http

# Chỉ định số cổng
sudo ufw delete allow 80
III. Cài đặt khác trên Debian
Công cụ quản lý dịch vụ

Công cụ quản lý dịch vụ init & service & systemctl

Có ba cách để quản lý dịch vụ, lần lượt là init, service, systemctl.

Kiểm tra hệ thống sử dụng phương pháp khởi tạo nào

ps -p 1
  • init: tức là hệ thống sử dụng init; systemd: tức là hệ thống sử dụng systemd

Giới thiệu dịch vụ init

Lệnh init là phương pháp khởi tạo hệ thống Linux truyền thống, là một tiến trình nền, sẽ tiếp tục chạy cho đến khi hệ thống tắt.

  • Và nó là tiến trình cha trực tiếp hoặc gián tiếp của tất cả các tiến trình khác.

Cú pháp cơ bản: init [tùy chọn] {lệnh}

# Mô tả tham số:
	[tùy chọn] có thể là một trong các tùy chọn sau:
		-t số giây: Trước khi thực hiện lệnh, chờ đợi số giây đã chỉ định.
		-b: Buộc khởi động lại hệ thống, không thực hiện bất kỳ script tắt nào.
		-s: Trước khi thực hiện lệnh, chuyển sang chế độ người dùng đơn.
		
	{lệnh} có thể là một trong các lệnh sau:
    	| 0       | Tắt hệ thống, tương đương với lệnh shutdown -h now.                    |
		| ------- | -------------------------------------------------------- |
		| 6       | Khởi động lại hệ thống, tương đương với lệnh reboot.                          |
		| 2       | Khởi động chế độ đa người dùng, nhưng không cấu hình giao diện mạng hoặc khởi động tiến trình nền.                 |
		| 3       | Khởi động chế độ đa người dùng, cấu hình giao diện mạng và khởi động tiến trình nền.                    |
		| 4       | Mức chạy do người dùng tự định nghĩa, thường không sử dụng.                             |
		| 5       | Khởi động chế độ đa người dùng, cấu hình giao diện mạng và khởi động tiến trình nền, đồng thời vào giao diện đồ họa.       |
		| 1, s, S | Vào chế độ cứu hộ, không cấu hình giao diện mạng hoặc khởi động tiến trình nền, chỉ cho phép người dùng root đăng nhập.   |
		| q, Q    | Tải lại tệp cấu hình init, làm cho nó có hiệu lực.                              |
		| u, U    | Thực hiện lại lệnh init, tương đương với lệnh telinit u.                   |
  • Tắt hệ thống
init 0
  • Khởi động lại hệ thống
init 6
  • Chờ 10 giây rồi tắt hệ thống
init -t 10 0
  • Vì tất cả các tham số của init đều nằm trong thư mục /etc/init.d, nên khi sử dụng init để khởi động một dịch vụ, nên làm như sau:
sudo /etc/init.d/nginx start

Giới thiệu dịch vụ service

service là một cách thực hiện khác của init;

Lệnh service thường liên quan đến hệ thống khởi tạo SysV init, đây là hệ thống khởi tạo sớm hơn, được sử dụng trong nhiều bản phân phối Linux truyền thống hoặc phiên bản cũ hơn.

Quản lý dịch vụ bằng cách **gọi các script dịch vụ trong thư mục /etc/init.d/**, hỗ trợ các thao tác bao gồm khởi động (start), dừng (stop), khởi động lại (restart), v.v.

  • Vậy System V init là gì?

Các tham số trong thư mục /etc/init.d; service sẽ thực thi chương trình liên quan trong thư mục /etc/init.d

  • Thư mục chứa tệp cấu hình dịch vụ là /etc/init.d
  • Sử dụng service để khởi động một dịch vụ
service nginx start
  • Có thể hiểu service là một cách thực hiện của init.d.

Vì vậy **hai cách khởi động này** (hoặc dừng, khởi động lại) không có gì khác biệt.

sudo /etc/init.d/nginx start
#########  Tương đương với  #########
service nginx start

Giới thiệu dịch vụ systemctl

Nhược điểm tồn tại của initservice:

  • Thời gian khởi động dài. Tiến trình init khởi động nối tiếp, chỉ khi tiến trình trước khởi động xong, mới khởi động tiến trình tiếp theo.
  • Thực thi tuần tự, giống như luồng đơn tuyến tính
  • Script khởi động phức tạp. Tiến trình init chỉ thực hiện script khởi động, không quản lý việc khác. Script cần tự xử lý các tình huống khác nhau, điều này thường khiến script trở nên rất dài.

Systemd chủ yếu được thiết kế nhằm khắc phục các nhược điểm cố hữu của System V init, cải thiện tốc độ khởi động hệ thống, nó bao gồm System and Service Manager, cung cấp một giải pháp hoàn chỉnh cho việc khởi động và quản lý hệ thống.

Theo quy ước của Linux, chữ cái d là viết tắt của daemon (tiến trình nền). Ý nghĩa của tên Systemd là nó sẽ bảo vệ toàn bộ hệ thống. Systemd thay thế initd (PID của Initd là 0), trở thành tiến trình đầu tiên của hệ thống (PID của Systemd bằng 1), các tiến trình khác đều là tiến trình con của nó.

Lệnh systemctl là lệnh quản lý dịch vụ hệ thống, thực chất kết hợp hai lệnh servicechkconfig lại làm một.

Xem thông tin phiên bản của Systemd

systemctl --version

Systemd không phải là một lệnh duy nhất, mà là một nhóm lệnh, liên quan đến mọi khía cạnh của quản lý hệ thống.

systemctl: Lệnh chính của Systemd, dùng để quản lý hệ thống

# Khởi động lại hệ thống
sudo systemctl reboot
# Tắt hệ thống, ngắt nguồn
sudo systemctl poweroff
# CPU ngừng hoạt động
sudo systemctl halt
# Tạm dừng hệ thống
sudo systemctl suspend
# Đưa hệ thống vào chế độ ngủ đông
sudo systemctl hibernate
# Đưa hệ thống vào chế độ ngủ lai tương tác
sudo systemctl hybrid-sleep
# Khởi động vào chế độ cứu hộ (chế độ người dùng đơn)
sudo systemctl rescue


# Quản lý dịch vụ
sudo systemctl start nginx
  • Lệnh systemctl với unit

Systemd có thể quản lý tất cả tài nguyên hệ thống. Các tài nguyên khác nhau được gọi chung là Unit (đơn vị)

Có thể xem tất cả các Unit trên hệ thống hiện tại

# Liệt kê các Unit đang chạy
systemctl list-units
# Liệt kê tất cả Unit, bao gồm những unit không tìm thấy tệp cấu hình hoặc khởi động thất bại
systemctl list-units --all
# Liệt kê tất cả các Unit không đang chạy
systemctl list-units --all --state=inactive
# Liệt kê tất cả các Unit tải thất bại
systemctl list-units --failed
# Liệt kê tất cả các Unit đang chạy, kiểu là service
systemctl list-units --type=service

##### Tất cả các dịch vụ đang chạy
systemctl list-units --type=service --state=running
  • Trạng thái của Unit

Dùng để xem trạng thái hệ thống và trạng thái của từng Unit

# Hiển thị trạng thái hệ thống
systemctl status
# Hiển thị trạng thái của một Unit
stemctl status httpd.service

# Hiển thị trạng thái của một Unit trên máy chủ từ xa
systemctl -h root@www.sherry.com status httpd.service

Ngoài lệnh status, systemctl còn cung cấp ba phương pháp đơn giản để truy vấn trạng thái

  • Chủ yếu dùng bên trong script để kiểm tra câu lệnh.
# Hiển thị xem một Unit có đang chạy hay không
systemctl is-active application.service
# Hiển thị xem một Unit có ở trạng thái khởi động thất bại hay không
systemctl is-failed application.service
# Hiển thị xem một dịch vụ Unit có thiết lập liên kết khởi động hay không
systemctl is-enabled application.service
  • **Quản lý Unit**

Đối với người dùng, các lệnh sau đây thường được sử dụng nhất, dùng để **khởi động và dừng Unit (chủ yếu là service)

# Ngay lập tức khởi động một dịch vụ
sudo systemctl start apache.service
# Ngay lập tức dừng một dịch vụ
sudo systemctl stop apache.service
# Khởi động lại một dịch vụ
sudo systemctl restart apache.service

# Giết tất cả các tiến trình con của một dịch vụ
sudo systemctl kill apache.service
# Tải lại tệp cấu hình của một dịch vụ
sudo systemctl reload apache.service
# Tải lại tất cả các tệp cấu hình đã sửa đổi
sudo systemctl daemon-reload
# Hiển thị tất cả các tham số底层 của một Unit
systemctl show httpd.service
# Hiển thị giá trị của thuộc tính được chỉ định của một Unit
systemctl show -p CPUShares httpd.service
# Thiết lập thuộc tính được chỉ định của một Unit
sudo systemctl set-property httpd.service CPUShares=500
  • Mối quan hệ phụ thuộc

Giữa các Unit tồn tại mối quan hệ phụ thuộc: A phụ thuộc vào B, có nghĩa là Systemd khi khởi động A, đồng thời sẽ khởi động B.

Liệt kê tất cả các phụ thuộc của một Unit.

systemctl list-dependencies nginx.service

Kết quả đầu ra của lệnh trên, một số phụ thuộc là kiểu Target, theo mặc định sẽ không mở rộng hiển thị

## Nếu muốn mở rộng Target, cần sử dụng tham số --all.  
systemctl list-dependencies --all nginx.service

hostnamectl: Dùng để xem thông tin máy chủ hiện tại

# Hiển thị thông tin máy chủ hiện tại
hostnamectl

# Thiết lập tên máy chủ
sudo hostnamectl set-hostname providence

localectl: Dùng để xem thiết lập bản địa hóa

# Xem thiết lập bản địa hóa
localectl
# Thiết lập tham số bản địa hóa.
sudo localectl set-locale LANG=zh_CN.UTF-8 
sudo localectl set-keymap en_GB

timedatectl: Dùng để xem thiết lập múi giờ hiện tại

# Xem thiết lập múi giờ hiện tại
timedatectl
# Hiển thị tất cả các múi giờ có thể sử dụng
timedatectl list-timezones
# Thiết lập múi giờ hiện tại
sudo timedatectl set-timezone Asia/Shanghai
sudo timedatectl set-time YYYY-MM-DD
sudo timedatectl set-time HH:MM:SS

loginctl: Dùng để xem người dùng đang đăng nhập hiện tại

# Liệt kê session hiện tại
loginctl list-sessions

# Liệt kê người dùng đang đăng nhập
loginctl list-users

# Liệt kê hiển thị thông tin người dùng được chỉ định
loginctl show-user ruanyf

Tóm tắt công cụ quản lý dịch vụ

  • init là phương pháp quản lý tiến trình ban đầu
  • service là một cách thực hiện khác của init
  • systemd là một giải pháp thay thế initd

Trong đó systemctl là lệnh chính của systemd, dùng để quản lý hệ thống và dịch vụ.

Cài đặt RabbitMQ

Địa chỉ tải RabbitMQ: https://mirrors.huaweicloud.com/rabbitmq-server/

Mối quan hệ phiên bản giữa RabbitMQ và Erlang: Yêu cầu phiên bản Erlang | RabbitMQ Quark Cloud Drive: Tải về liên quan đến RabbitMQ Mã truy cập: LPLG

Bước 1: Cài đặt erlang 26.2.5.3

  • Cách cài đặt tự động debian 12
# Phiên bản erlang mặc định 25.2.3
#### Xem phiên bản erlang
#apt-cache show erlang
#### Cài đặt
#apt install erlang

Cài đặt từ mã nguồn erlang 26.2.5.3 — Đề xuất

  • Bước 1: Cài đặt phụ thuộc
apt-get install -y curl gnupg apt-transport-https debian-keyring debian-archive-keyring
apt install -y build-essential
#apt-get install unixodbc unixodbc-dev
  • Bước 2: Cài đặt erlang
tar -zxvf otp_src_26.2.5.3.tar.gz
# Tạo thư mục cài đặt /usr/local/erlang
mkdir /usr/local/erlang
cd otp_src_26.2.5.3

#### Cấu hình đường dẫn cài đặt
./configure --prefix=/usr/local/erlang
make install
  • Bỏ qua thông báo cảnh báo
configure: WARNING:
        wxWidgets must be installed on your system.

        Please check that wx-config is in path, the directory
        where wxWidgets libraries are installed (returned by
        'wx-config --libs' or 'wx-config --static --libs' command)
        is in LD_LIBRARY_PATH or equivalent variable and
        wxWidgets version is 3.0.2 or above.
....
  • Bước 3: Cấu hình biến môi trường
#cài đặt biến môi trường erlang
echo 'export PATH=$PATH:/usr/local/erlang/bin' >> ~/.bashrc
source ~/.bashrc
  • Thử nghiệm môi trường erlang
#### Lệnh thoát: halt().  : Chú ý dấu . 
erl
  • Lấy thông tin phiên bản Elixir/Erlang
erl -noshell -eval \
'{ok, Version} = file:read_file(filename:join([code:root_dir(), "releases", erlang:system_info(otp_release), "OTP_VERSION"])), io:fwrite(Version), halt().'

Bước 2: Cài đặt RabbitMQ 3.12.14

  • Cách cài đặt tự động debian 12
#### Phiên bản rabbitmq mặc định 3.10.8
apt-get install -y rabbitmq-server

Cài đặt từ mã nguồn RabbitMQ-3.12.14 — Đề xuất Ghi chú: Cài đặt bằng rabbitmq-server-generic-unix-3.12.14.tar.xz, cần tự viết script khởi động, nếu không sẽ không thể tự động khởi động khi boot;

Địa chỉ cài đặt chính thức Debian Installing on Debian and Ubuntu | RabbitMQ

#### Cài đặt bằng rabbitmq-server_3.12.14-1_all.deb, tự động cài đặt script khởi động
apt install ./rabbitmq-server_3.12.14-1_all.deb

whereis rabbitmq

#cài đặt biến môi trường rabbitmq
echo 'export PATH=$PATH:/usr/lib/rabbitmq' >> ~/.bashrc
source ~/.bashrc
  • Các lệnh liên quan đến rabbitmq-server-generic-unix-3.12.14.tar.xz -> rabbitmq
### (chạy nền)    ###khởi động
rabbitmq-server -detached
netstat -lntup|grep -E "5672|25672|15672"

#xem trạng thái dịch vụ RabbitMQ
rabbitmqctl status
### dừng dịch vụ RabbitMQ
rabbitmqctl shutdown
  • Tệp cấu hình chung

Vị trí: /etc/rabbitmq/rabbitmq.conf

cd /etc/rabbitmq
vim rabbitmq.conf

#### và tìm tệp cấu hình mặc định của rabbitmq
cd /usr/local/rabbitmq/sbin/
### sửa tệp rabbitmq-defaults trong thư mục, và thêm dòng này vào cuối tệp
CONFIG_FILE=/etc/rabbitmq/rabbitmq.conf

# sau khi sửa đổi cổng mặc định nhớ nhập lệnh để khởi động lại rabbitmq
service rabbitmq-server restart

Dịch vụ RabbitMQ và làm cho nó khởi động khi hệ thống khởi động lại

systemctl rstart rabbitmq-server
systemctl stop rabbitmq-server

###tải plugin quản lý giao diện
# Tiếp theo, sử dụng lệnh sau để kích hoạt bảng điều khiển quản lý RabbitMQ:
rabbitmq-plugins enable rabbitmq_management

# Tiếp theo, bạn cần tạo một người dùng quản trị viên cho RabbitMQ. Bạn có thể sử dụng lệnh sau để tạo:
# rabbitmqctl add_user tên_người_dùng mật_khẩu
rabbitmqctl add_user admin admin
##### Báo lỗi
Cách giải quyết là chỉnh sửa /etc/hostname để sửa hostname sau đó thực hiện lệnh khởi động lại rabbitmq
--- Khởi động lại máy chủ rabbitmq

rabbitmqctl list_users

# Tiếp theo, sử dụng lệnh sau để đặt nhãn cho tài khoản quản trị viên của bạn:
rabbitmqctl set_user_tags admin administrator
# Tiếp theo, sử dụng lệnh sau để thiết lập quyền thích hợp:
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
IV. Cài đặt khác cho hệ thống Red Hat
Đồng bộ thời gian chrony

Cấu hình lệnh chronyd

# Khởi động dịch vụ chrony
systemctl start chronyd
# Thiết lập tự động khởi động khi boot
systemctl enable chronyd
# Xem trạng thái dịch vụ chrony
systemctl status chronyd

##### Vì phiên bản CentOS sớm có thể tồn tại cả ntpd và chrony, hoặc người khác đã cài đặt ntpd, cần tắt ntpd
# Kiểm tra xem cổng có bị chiếm dụng không ntpd, cổng: 123
netstat -anlp|grep 123
# Kiểm tra xem cổng có bị chiếm dụng không, chrony, cổng: 323
netstat -anlp|grep 323
# Dịch vụ ntp có được bật không
netstat -anlp|grep ntp

### Vì dịch vụ NTP sử dụng giao thức cổng 123/UDP, nếu không tắt tường lửa firewalld, dịch vụ NTP sẽ bị chặn
## Mở dịch vụ ntp
# firewall-cmd --add-service=ntp --permanent
firewall-cmd --permanent --add-port=323/udp
firewall-cmd --reload

Thiết lập thời gian và vị trí

#### Thiết lập múi giờ —|— Kiểm tra múi giờ
timedatectl

#### Sửa múi giờ, chỉ sửa múi giờ nếu không phải Asia/Shanghai
#### Xem các múi giờ có sẵn bắt đầu bằng S ở châu Á
timedatectl list-timezones |  grep  -E "Asia/S.*"
#### Thiết lập hệ thống hiện tại là múi giờ Thượng Hải —|— Châu Á/Thượng Hải —> múi giờ chuẩn Trung Nguyên GMT+8
timedatectl set-timezone "Asia/Shanghai"

#### Đồng bộ đồng hồ hệ thống thủ công
chronyc -a makestep
  • Cấu hình chrony
  • Bình luận bốn máy chủ ntp mặc định, vì máy chủ này đồng bộ thời gian hơi chậm
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
  • Định dạng: server địa_chỉ_ip_máy_chủ iburst

Thêm máy chủ ntp của Alibaba Cloud, có thể viết nhiều máy chủ ntp, phòng trường hợp máy chủ đầu tiên gặp sự cố, các máy chủ ntp dự phòng khác có thể tiếp tục đồng bộ thời gian

địa_chỉ_ip là địa chỉ ip máy chủ, iburst đại diện cho đồng bộ thời gian nhanh chóng

#### Sửa tệp cấu hình chrony
vim /etc/chrony.conf
# Trung Quốc cấp thời gian
server cn.ntp.org.cn iburst
# Trung tâm cấp thời gian quốc gia Trung Quốc
server ntp.ntsc.ac.cn iburst
# Máy chủ nguồn thời gian NTP của Alibaba Cloud
server ntp1.aliyun.com iburst
# Tencent Cloud
server ntp.tencent.com iburst
#### Khởi động lại dịch vụ chronyd
systemctl restart chronyd
  • Đồng bộ đồng hồ hệ thống thủ công
# Đồng bộ đồng hồ hệ thống thủ công
chronyc -a makestep
# Xem nguồn đồng bộ thời gian
chronyc sources -v

Ý nghĩa cấu hình /etc/chrony.conf

1. Sử dụng nguồn đồng hồ từ xa để đồng bộ, về lý thuyết có thể đồng bộ vô hạn
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (https://www.pool.ntp.org/join.html).

2. Tính toán tỷ lệ tăng/giảm thời gian của đồng hồ hệ thống dựa trên thời gian thực tế, sau đó ghi lại vào một tệp, để điều chỉnh thời gian tốt nhất cho hệ thống sau khi khởi động lại
# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

3. Nếu sai lệch đồng hồ hệ thống lớn hơn 1 giây, cho phép đồng hồ hệ thống bước tiến trong ba lần cập nhật đầu tiên
# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

4. Kích hoạt đồng bộ hóa đồng hồ thời gian thực (RTC) trong nhân
# Enable kernel synchronization of the real-time clock (RTC).
rtcsync

5. Kích hoạt đánh dấu thời gian phần cứng bằng chỉ thị hwtimestamp
# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *

6. Tăng số lượng tối thiểu nguồn có thể lựa chọn cần thiết để điều chỉnh
# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2

7. Cho phép máy chủ mạng cục bộ đồng bộ thời gian, nếu không chỉ định nghĩa là cho phép tất cả, mặc định không bật
# Allow NTP client access from local network.
#allow 192.168.0.0/16

8. Theo mặc định, nếu máy chủ cục bộ không thể đồng bộ thời gian internet, có thể không chính xác, vì vậy sẽ từ chối cung cấp dịch vụ cấp thời gian, bật tùy chọn sau có nghĩa là cho phép chấp nhận thời gian không chính xác, tiếp tục cung cấp dịch vụ cấp thời gian cho khách hàng
# Serve time even if not synchronized to a time source.
#local stratum 10

9. Chỉ định tệp chứa khóa xác thực NTP
# Specify file containing keys for NTP authentication.
keyfile /etc/chrony.keys

10. Chỉ định tệp nhật ký
# Specify directory for log files.
logdir /var/log/chrony

11. Chọn thông tin cần ghi nhật ký
# Select which information is logged.
#log measurements statistics tracking
Cài đặt và cấu hình Java
#### Kiểm tra jdk
rpm -qa|grep jdk
#### Gỡ cài đặt -e --nodeps xóa bắt buộc
rpm -e --nodeps ...

tar -zxvf ....

# export PATH=$PATH:/usr/local/mysql/bin
vim ~/.bashrc

# Cấu hình biến môi trường java 8
JAVA_HOME=/usr/local/java/jdk1.8.0_411
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin

# Cấu hình biến môi trường java 17
JAVA_HOME=/usr/local/java/jdk-17.0.12
PATH=$JAVA_HOME/bin:$PATH
source ~/.bashrc

MAVEN_HOME=/usr/local/apache-maven-3.9.5
PATH=$PATH:$MAVEN_HOME/bin
Cài đặt RabbitMQ

Cài đặt Erlang

#### Cài đặt phụ thuộc (jdk)
yum install -y glibc-devel ncurses-devel openssl-devel autoconf

tar -zvxf otp_src_24.2.tar.gz
cd otp_src_24.2

#### Thiết lập quy tắc cài đặt
./configure --prefix=/usr/local/software/erlang --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe --without-javac
#### Thực hiện quy tắc nếu gặp lỗi sau, vui lòng cài đặt trước yum install -y ncurses-devel
# configure: error: No curses library functions found
# ERROR: /usr/local/software/otp_src_24.2/erts/configure failed!

# Cài đặt
make && make install
# Xác minh
erl -version

Cài đặt RabbitMQ

# xz -d rabbitmq-server-generic-unix-3.7.0.tar.xz
# tar -xvf rabbitmq-server-generic-unix-3.7.0.tar

# Thêm phụ thuộc
yum install -y epel-release
yum install -y socat

rpm -ivh rabbitmq-server-3.6.16-1.el7.noarch.rpm
# hoặc rpm -Uvh rabbitmq-server-3.6.16-1.el7.noarch.rpm
# -U biểu thị nâng cấp

# Kích hoạt plugin web quản lý RabbitMQ
# Ghi chú: rabbitmq có tài khoản và mật khẩu mặc định là: guest Trong điều kiện mặc định chỉ có thể truy cập trên localhost, vì vậy cần thêm một người dùng đăng nhập từ xa.
# Cài đặt plugin giao diện quản lý (không có plugin này không thể khởi động giao diện quản lý)
# Bật giao diện quản lý
rabbitmq-plugins enable rabbitmq_management

# 5672:Cổng giao tiếp RabbitMQ
# 25672:Cổng CLI giữa các nút RabbitMQ
# 15672:Cổng HTTP_API của RabbitMQ, chỉ người dùng quản trị mới có thể truy cập, dùng để quản lý RabbitMQ, cần bật plugin Management.
# 1883, 8883: Cổng khi bật plugin MQTT.
# 61613, 61614: Cổng khi bật plugin STOMP.
# 15674, 15675: Cổng websocket STOMP và cổng MOTT
sudo firewall-cmd --zone=public --add-port=5672/tcp --permanent
sudo firewall-cmd --zone=public --add-port=25672/tcp --permanent
sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent
sudo firewall-cmd --zone=public --add-port=1883/tcp --permanent
sudo firewall-cmd --zone=public --add-port=8883/tcp --permanent
sudo firewall-cmd --zone=public --add-port=61613/tcp --permanent
sudo firewall-cmd --zone=public --add-port=61614/tcp --permanent
sudo firewall-cmd --zone=public --add-port=15674/tcp --permanent
sudo firewall-cmd --zone=public --add-port=15675/tcp --permanent
firewall-cmd --reload
systemctl restart firewalld
  • rabbitmq-plugins enable rabbitmq_management
  • Dịch vụ RabbitMQ
# Khởi động dịch vụ
systemctl start rabbitmq-server
# Xem trạng thái dịch vụ
systemctl status rabbitmq-server
# Dừng dịch vụ
systemctl stop rabbitmq-server
# Khởi động dịch vụ khi boot
systemctl enable rabbitmq-server
  • Tài khoản và mật khẩu mặc định chỉ giới hạn truy cập trên localhost, vì vậy cần thêm một người dùng đăng nhập từ xa
# Tạo tài khoản và mật khẩu
rabbitmqctl add_user tên_người_dùng mật_khẩu

# Thiết lập vai trò người dùng: administrator
rabbitmqctl set_user_tags tên_người_dùng vai_trò

# Thêm quyền tài nguyên cho người dùng, thêm quyền cấu hình, ghi, đọc
rabbitmqctl set_permissions -p "/" tên_người_dùng ".*" ".*" ".*"

#Sửa mật khẩu người dùng
rabbitmqctl change_password tên_người_dùng mật_khẩu_mới

Thẻ: linux ssh firewall systemd rabbitmq

Đăng vào ngày 5 tháng 9 lúc 15:13