Hành trình xây dựng một dịch vụ Web Phần 2: Chuẩn bị máy chủ Linux
Ở phần trước, chúng ta đã xác định rằng một ứng dụng chạy được trên máy cá nhân vẫn chưa phải là một dịch vụ Web hoàn chỉnh. Để người dùng có thể truy cập từ Internet, ứng dụng cần được đặt trên một máy chủ luôn hoạt động và có môi trường phù hợp để vận hành.
Máy chủ có thể là một máy tính đặt tại doanh nghiệp, một máy ảo trong trung tâm dữ liệu hoặc một VPS thuê từ nhà cung cấp đám mây. Trong seri này, chúng ta sử dụng một máy chủ Linux vì Linux phổ biến trong môi trường máy chủ, có khả năng tự động hóa tốt và hỗ trợ rộng rãi cho Docker cũng như các công cụ quản trị hệ thống.
Một máy chủ Web cơ bản cần có ba thành phần chính:
-
Hệ điều hành Linux ổn định
-
Tài khoản quản trị có kiểm soát
-
Kết nối mạng cho phép truy cập từ xa
Sau khi cài đặt hệ điều hành, việc đầu tiên cần làm là tạo một tài khoản quản trị riêng. Không nên sử dụng tài khoản root cho mọi thao tác hằng ngày, vì một câu lệnh sai khi thực hiện dưới quyền cao nhất có thể ảnh hưởng đến toàn bộ hệ thống.
Tiếp theo là thiết lập phương thức truy cập từ xa bằng SSH. SSH cho phép quản trị viên đăng nhập vào máy chủ thông qua mạng để cài đặt phần mềm, kiểm tra dịch vụ và xử lý sự cố. Trong thực tế, nên ưu tiên xác thực bằng khóa SSH thay cho mật khẩu vì khóa SSH khó bị đoán hoặc dò quét hơn.
Một số thao tác chuẩn bị thường bao gồm:
sudo apt update
sudo apt upgrade -y
sudo adduser deploy
sudo usermod -aG sudo deploy
Các lệnh trên giúp cập nhật danh sách gói phần mềm, cài đặt bản vá mới và tạo tài khoản có quyền quản trị khi cần. Tài khoản deploy trong ví dụ có thể được dùng cho các hoạt động triển khai dịch vụ sau này.
Máy chủ cũng cần được giới hạn các kết nối mạng không cần thiết. Firewall chỉ nên cho phép những cổng phục vụ đúng mục đích. Ở giai đoạn đầu, hệ thống thường cần cổng SSH để quản trị, cổng HTTP để tiếp nhận truy cập Web và cổng HTTPS để cung cấp kết nối mã hóa.
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Firewall không thay thế cho toàn bộ cơ chế bảo mật, nhưng giúp giảm đáng kể bề mặt tấn công. Những dịch vụ không sử dụng không nên được mở cổng ra Internet. Ngoài ra, hệ thống cần được cập nhật thường xuyên để hạn chế rủi ro từ các lỗ hổng đã được công bố.
Đến đây, chúng ta mới chỉ có một máy chủ sẵn sàng tiếp nhận dịch vụ. Ứng dụng vẫn chưa được triển khai, tên miền chưa trỏ về máy chủ và người dùng bên ngoài chưa thể truy cập hệ thống.
Trong phần tiếp theo, chúng ta sẽ đưa ứng dụng đã đóng gói bằng Docker lên máy chủ Linux. Đây là bước chuyển quan trọng từ môi trường phát triển trên máy cá nhân sang môi trường vận hành thực tế.