Máy chủ web trên CentOS 8 với php7, node.js và redis

lời tựa

Đã 2 ngày kể từ khi phát hành phiên bản mới của hệ điều hành CentOS, cụ thể là CentOS 8. Và cho đến nay, có khá nhiều bài viết trên Internet về cách mọi thứ được thực hiện trong đó, vì vậy tôi quyết định lấp đầy khoảng trống này. Hơn nữa, tôi sẽ cho bạn biết không chỉ về cách cài đặt cặp chương trình này mà còn về cách tôi thường thấy cài đặt Linux trong môi trường ảo trong thế giới hiện đại cho các tác vụ thông thường, bao gồm cả phân vùng đĩa, v.v.

Nhưng ở phần đầu, tôi muốn nói ngắn gọn về lý do tại sao nên chuyển sang phiên bản này từ tất cả các phiên bản trước và có hai lý do cho điều này:

  1. php7! Trong phiên bản trước của CentOS, php5.4 “Chính thống” đã được cài đặt...

    Được rồi, nghiêm túc hơn một chút, rất nhiều gói đã nhảy qua nhiều phiên bản. Chúng tôi (những người hâm mộ các hệ điều hành giống redhat) cuối cùng đã bước vào, nếu không phải là vào tương lai thì ít nhất là vào hiện tại. Và những người ủng hộ Ubuntu sẽ không còn cười nhạo và chỉ trích chúng tôi nữa, à... ít nhất là trong một thời gian;).

  2. Chuyển từ yum sang dnf. Sự khác biệt chính là giờ đây nó được hỗ trợ chính thức để hoạt động với nhiều phiên bản gói cùng một lúc. Ngay trong phần tám, tôi chưa bao giờ thấy điều này hữu ích, nhưng nó có vẻ đầy hứa hẹn.

Tạo một máy ảo

Có nhiều phần mềm ảo hóa khác nhau và tôi không có mục tiêu hướng người đọc theo một loại cụ thể, tôi sẽ cho bạn biết về các nguyên tắc chung.

ký ức

Đầu tiên... Để chắc chắn cài đặt hệ thống CentOS bắt đầu từ 7, và theo tôi, điều này cũng xảy ra với phiên bản 6 (“nhưng điều này không chắc chắn”), bạn cần tối thiểu RAM 2GB. Vì vậy, tôi khuyên bạn nên cho đi số tiền đó trước.

Nhưng nếu có thì sau khi cài đặt, kích thước bộ nhớ có thể giảm đi. Ở mức 1 GB, hệ thống trần hoạt động khá tốt, tôi đã kiểm tra.

Lái

Để cài đặt bình thường, bạn nên tạo một đĩa ảo có dung lượng 20-30 GB. Điều này là đủ cho hệ thống. Và một đĩa thứ hai cho dữ liệu. Nó có thể được thêm vào cả ở giai đoạn tạo máy ảo và sau đó. Tôi thường thêm nó sau.

Bộ vi xử lý

Trên một lõi, hệ thống trần không bị chậm lại. Và vì các tài nguyên có thể mở rộng tự do nên tôi không thấy có ích gì khi cung cấp thêm ở giai đoạn cài đặt (trừ khi bạn biết rõ các yêu cầu và quá lười để vào lại bộ cấu hình)

Phần còn lại thường có thể được để mặc định.

Cài đặt thực tế

Vì vậy... Hãy khởi chạy trình cài đặt... Cá nhân tôi đã lâu chỉ cài đặt các dịch vụ như vậy dưới dạng máy ảo nên tôi sẽ không mô tả tất cả các loại bản ghi phân phối trên ổ đĩa flash - tôi chỉ gắn kết ISO dưới dạng CD trong bộ ảo hóa yêu thích của tôi, tải xuống và sử dụng.

Việc cài đặt cơ bản khá điển hình, tôi sẽ chỉ tập trung vào một số điểm.

Lựa chọn nguồn

Kể từ khi phát hành phiên bản thứ tám, chiếc gương từ Yandex đã nằm đó nhiều ngày. Chà, nghĩa là, nó tăng định kỳ và sau đó lại bắt đầu hiển thị lỗi. Tôi chắc chắn đó là do dịch vụ quá tải. Vì vậy, để chỉ ra nguồn, cá nhân tôi thay vì nhập địa chỉ thông thường, hãy vào đây, chọn gương mà tôi thích ở đó và nhập địa chỉ theo cách thủ công vào cửa sổ trình cài đặt. Điều quan trọng cần nhớ ở đây là bạn cần chỉ định đường dẫn đến thư mục chứa thư mục đó kho dữ liệu. Ví dụ, mirror.corbina.net/pub/Linux/centos/8/BaseOS/x86_64/os.

Phân vùng đĩa

Theo tôi, câu hỏi này khá mang tính tôn giáo. Mỗi quản trị viên đều có quan điểm riêng của mình về vấn đề này. Nhưng tôi vẫn sẽ chia sẻ quan điểm của mình về vấn đề này.

Có, về nguyên tắc, bạn có thể phân bổ toàn bộ không gian cho thư mục gốc và nó sẽ hoạt động, thậm chí thường là khá tốt. Tại sao sau đó rào một khu vườn với các phần khác nhau? — Theo tôi, có hai lý do chính dẫn đến điều này: hạn ngạch và tính di động.

Ví dụ: nếu có sự cố xảy ra và xảy ra lỗi trên phân vùng dữ liệu chính, bạn muốn có thể vẫn khởi động được hệ thống và thực hiện các biện pháp khôi phục. Vì vậy, cá nhân tôi phân bổ một phân vùng riêng cho /boot. Có kernel và bootloader. Thông thường 500 megabyte là đủ, nhưng trong một số trường hợp hiếm hoi có thể cần nhiều hơn và vì chúng ta đã quen với việc đo không gian bằng terabyte, nên tôi phân bổ 2GB cho phần này. Và điều quan trọng ở đây là nó không thể thực hiện được lvm.

Tiếp theo là phần gốc của hệ thống. Đối với cài đặt bình thường, tôi chưa bao giờ cần nhiều hơn 4 GB cho mỗi hệ thống, nhưng trong các sự kiện đã lên lịch, tôi thường sử dụng thư mục /tmp để giải nén các bản phân phối và tôi thấy không có ích gì khi dành nó cho một phân vùng riêng - trong các hệ thống hiện đại nó được làm sạch tự động, vì vậy nó không được lấp đầy. Vì vậy tôi phân bổ 8GB cho root.

Hoán đổi... Nhìn chung, nó có rất ít ứng dụng thực tế. Nếu bạn bắt đầu sử dụng trao đổi trên máy chủ của mình thì ngày nay trong thế giới thực, điều này chỉ có nghĩa là máy chủ cần bổ sung thêm RAM. Nếu không, đảm bảo sẽ xảy ra các vấn đề về hiệu suất (hoặc một số chương trình bị "rò rỉ" bộ nhớ). Vì vậy, phần này chỉ cần thiết cho mục đích chẩn đoán. Vì vậy, 2 GB là một con số tuyệt vời. Có, bất kể có bao nhiêu bộ nhớ trên máy chủ. Có, tôi đã đọc tất cả những bài viết viết về tỷ lệ dung lượng bộ nhớ và dung lượng trao đổi... IMHO, chúng đã lỗi thời. Trong 10 năm hành nghề, tôi chưa bao giờ cần đến điều này. 15 năm trước tôi đã sử dụng chúng, vâng.

IMHO, mọi người đều có thể tự quyết định xem có nên phân bổ /home vào một phân vùng riêng hay không. Nếu ai đó trên máy chủ chủ động sử dụng thư mục này thì tốt hơn nên phân bổ nó. Nếu không có ai thì cũng không cần.

Tiếp theo, /var. Theo tôi, nó chắc chắn cần được làm nổi bật. Để bắt đầu, bạn có thể giới hạn bản thân ở mức 4 GB và xem nó diễn ra như thế nào. Và vâng, “mọi chuyện diễn ra thế nào” ý tôi là thế

  1. Đầu tiên, bạn luôn có thể gắn một đĩa khác vào thư mục con /var (tôi sẽ trình bày sau bằng một ví dụ)
  2. Thứ hai, chúng tôi có lvm - bạn luôn có thể thêm nó. Và bạn thường phải thêm nó khi có quá nhiều khúc gỗ bắt đầu đổ vào đó. Nhưng tôi chưa bao giờ dự đoán trước được con số này nên tôi bắt đầu với 2 GB rồi mới xem.

Không gian chưa được phân bổ sẽ vẫn còn trống trong nhóm âm lượng và luôn có thể được sử dụng sau này.

LVM

tất cả Việc tạo các phân vùng khác ngoài/boot trong LVM là điều hợp lý. Có, bao gồm cả trao đổi. Có, theo tất cả các lời khuyên, trao đổi phải ở đầu đĩa, nhưng trong trường hợp LVM về nguyên tắc, vị trí của nó không thể được xác định. Nhưng như tôi đã viết ở trên, hệ thống của bạn không nên sử dụng trao đổi chút nào. Vì vậy, việc anh ấy ở đâu không quan trọng. Chà, thành thật mà nói thì chúng ta không sống ở năm '95!

Hơn nữa, trong LVM có một số thực thể cơ bản mà bạn cần có thể sử dụng được:

  • khối lượng vật lý
  • nhóm âm lượng
  • khối lượng hợp lý

Các khối vật lý được kết hợp thành các nhóm và mỗi khối vật lý chỉ có thể nằm trong một nhóm và một nhóm có thể nằm trên nhiều khối vật lý cùng một lúc.
Và các khối logic đều nằm trong một nhóm.

Nhưng... Chết tiệt, lại là thế kỷ 21 rồi. Và các máy chủ là ảo. Sẽ thật vô nghĩa khi áp dụng cho chúng những cơ chế tương tự đã được áp dụng cho các cơ chế vật lý. Và đối với ảo, điều quan trọng là phải có dữ liệu tách biệt khỏi hệ thống! Điều này rất quan trọng, đặc biệt là khả năng chuyển đổi nhanh chóng dữ liệu sang một máy ảo khác (ví dụ: khi chuyển sang hệ điều hành mới) và nói chung đối với tất cả các loại tính năng hữu ích (ví dụ: tách các bản sao lưu theo phân vùng bằng công cụ ảo hóa) . Do đó, một nhóm ổ đĩa được sử dụng cho hệ thống và nhất thiết một nhóm ổ đĩa khác được sử dụng cho dữ liệu! Sự phân chia logic này giúp ích rất nhiều trong cuộc sống!

Nếu bạn chỉ tạo một đĩa cứng ảo khi tạo máy ảo thì đây là lúc quá trình cấu hình kết thúc. Và nếu có hai, thì đừng đánh dấu cái thứ hai.

Hãy bắt đầu cài đặt.

Bài cài đặt

Vì vậy, hệ thống mới được cài đặt cuối cùng đã khởi động được. Điều đầu tiên bạn cần kiểm tra là Internet.

ping ya.ru

Có câu trả lời không? - Tuyệt vời, nhấn Ctrl-C.
Nếu không, hãy thiết lập một mạng lưới, không có cuộc sống nếu không có điều này, nhưng đó không phải là nội dung bài viết của tôi.

Bây giờ nếu chúng ta chưa root, hãy vào root, vì gõ một số lượng lệnh với sudo đã phá vỡ cá nhân tôi (và mong các quản trị viên hoang tưởng tha thứ cho tôi):

sudo -i

Bây giờ điều đầu tiên chúng ta làm là gõ

dnf -y update

Và nếu bạn đang đọc bài viết này vào năm 2019, rất có thể sẽ không có chuyện gì xảy ra, nhưng nó rất đáng để thử.

Bây giờ hãy cấu hình đĩa còn lại

Giả sử phân vùng với hệ thống là xvda, thì đĩa dữ liệu sẽ là xvdb. ĐƯỢC RỒI.

Hầu hết lời khuyên sẽ bắt đầu bằng “Chạy fdisk và tạo phân vùng…”

Vì vậy đây là không chính xác!

Tôi sẽ nói lại lần nữa vì nó rất quan trọng! Trong trường hợp này, để làm việc với LVM, chiếm toàn bộ một đĩa ảo, việc tạo phân vùng trên đó là có hại! Mỗi từ trong cụm từ này đều quan trọng. Nếu chúng tôi làm việc mà không có LVM, chúng tôi cần phải làm vậy. Nếu chúng ta có một hệ thống và dữ liệu trên đĩa thì chúng ta cần nó. Nếu vì lý do nào đó mà chúng ta cần để trống một nửa đĩa thì chúng ta cũng nên làm như vậy. Nhưng thông thường tất cả những giả định này chỉ thuần túy là lý thuyết. Bởi vì nếu chúng ta quyết định thêm dung lượng vào một phân vùng hiện có, thì cách dễ nhất để thực hiện là sử dụng cấu hình này. Và tính dễ quản lý vượt trội hơn nhiều thứ khác nên chúng tôi đang cố tình hướng tới cấu hình này.

Và tiện lợi là nếu muốn mở rộng phân vùng dữ liệu, bạn chỉ cần thêm dấu cách vào phân vùng ảo, sau đó bung rộng nhóm bằng vgextend là xong! Trong một số trường hợp hiếm hoi, có thể cần một thứ khác, nhưng ít nhất bạn sẽ không phải mở rộng âm lượng hợp lý ngay từ đầu, điều này vốn đã tốt rồi. Mặt khác, để mở rộng khối lượng này, trước tiên họ khuyên bạn nên xóa khối hiện có, sau đó tạo một khối mới ở trên cùng... Việc này trông không đẹp lắm và không thể thực hiện trực tiếp, nhưng việc mở rộng theo kịch bản mà tôi đã chỉ ra có thể là được thực hiện “nhanh chóng” mà không cần ngắt kết nối phân vùng.

Vì vậy, chúng tôi tạo một ổ đĩa vật lý, sau đó là một nhóm ổ đĩa bao gồm nó và sau đó là một phân vùng cho máy chủ của chúng tôi:

pvcreate /dev/xvdb
vgcreate data /dev/xvdb
lvcreate -n www -L40G data
mke2fs -t ext4 /dev/mapper/data-www

Ở đây, thay vì chữ in hoa “L” (và kích thước tính bằng GB), bạn có thể chỉ định một chữ cái nhỏ, sau đó thay vì kích thước tuyệt đối, hãy chỉ định một kích thước tương đối, chẳng hạn như để sử dụng một nửa dung lượng trống hiện tại trong một nhóm âm lượng, bạn cần chỉ định “-l +50%MIỄN PHÍ”

Và lệnh cuối cùng định dạng phân vùng trong hệ thống tệp ext4 (theo kinh nghiệm của tôi, cho đến nay, nó cho thấy độ ổn định cao nhất trong trường hợp mọi thứ bị hỏng, vì vậy tôi thích nó hơn).

Bây giờ chúng ta gắn phân vùng vào đúng vị trí. Để thực hiện việc này, hãy thêm dòng chính xác vào /etc/fstab:

/dev/mapper/data-www    /var/www                ext4    defaults        1 2

Và chúng tôi quay số

mount /var/www

Nếu xảy ra lỗi, hãy phát âm thanh báo động! Bởi vì điều này có nghĩa là chúng ta có lỗi trong /etc/fstab. Và ở lần khởi động lại tiếp theo, chúng ta sẽ gặp những vấn đề rất lớn. Hệ thống có thể không khởi động được, điều này thường rất đáng buồn đối với các dịch vụ đám mây. Vì vậy, cần phải khẩn trương sửa lại dòng cuối cùng được thêm vào hoặc xóa hoàn toàn! Đó là lý do tại sao chúng tôi không viết lệnh mount theo cách thủ công - khi đó chúng tôi sẽ không có cơ hội tuyệt vời như vậy để kiểm tra cấu hình ngay lập tức.

Bây giờ chúng tôi thực sự cài đặt mọi thứ chúng tôi muốn và mở các cổng cho web:

dnf groupinstall "Development Tools"
dnf -y install httpd @nodejs @redis php
firewall-cmd --add-service http --permanent
firewall-cmd --add-service https --permanent

Nếu muốn, bạn cũng có thể đặt cơ sở dữ liệu ở đây, nhưng cá nhân tôi cố gắng tách nó ra khỏi máy chủ web. Mặc dù giữ cô ấy ở gần sẽ nhanh hơn, đúng vậy. Tốc độ của bộ điều hợp mạng ảo thường vào khoảng gigabit và khi làm việc trên cùng một máy, các cuộc gọi diễn ra gần như ngay lập tức. Nhưng nó kém an toàn hơn. Điều gì quan trọng hơn với ai?

Bây giờ chúng tôi thêm tham số vào tệp cấu hình (chúng tôi tạo một tham số mới, hệ tư tưởng hiện đại của CentOS là như thế này)

echo "vm.overcommit_memory = 1"> /etc/sysctl.d/98-sysctl.conf

Chúng tôi khởi động lại máy chủ.
Trong phần bình luận, tôi đã bị mắng vì khuyên tôi nên tắt SeLinux, vì vậy tôi sẽ tự sửa lỗi và viết về thực tế là sau này bạn cần nhớ cấu hình SeLinux.
Trên thực tế, lợi nhuận! 🙂

Nguồn: www.habr.com

Thêm một lời nhận xét