NỘI DUNG
Như đã đề cập về việc tận dụng tối đa chi phí của tài khoản GCP trong Phần 7 của Sê-ri Hướng dẫn tạo VPN Server miễn phí, hôm nay tôi sẽ bắt tay vào Sê-ri Hướng dẫn tạo Web Hosting Server miễn phí từ A đến Z. Việc tự tạo và quản lý một Web Hosting Server để tha hồ tung tóe trong quá trình làm website thực sự rất “thỏa mãn” (và còn đặc biệt “đã” hơn nữa vì bạn còn được ăn chùa).
Vì việc này thực chất tương đương với việc khởi tạo và quản lý một con Cloud Virtual Private Server (VPS) đóng vai trò làm Web Hosting Server, do vậy quyền kiểm soát (và hiển nhiên trách nhiệm) của bạn cũng sẽ cao hơn rất nhiều so với việc sử dụng một dịch vụ Shared Hosting để chạy website thông thường. Cũng tương tự như Sê-ri Hướng dẫn tạo VPN Server miễn phí, tôi sẽ tiếp tục phong cách demo chậm và chi tiết đến mức gây ức chế cho người dùng. Nếu bạn không phải gà mờ chính hiệu thì có thể đẩy nhanh tốc độ bằng cách tập trung vào vị trí các dòng lệnh thôi cũng được.
Ở đây, để làm Web Hosting Server, tôi sẽ sử dụng một giải pháp phổ biến là LAMP stack. LAMP ở đây là viết tắt của Linux – Apache – MySQL – PHP (tôi thấy có mấy đại ca bảo chữ P giờ có thể là Python hay Perl nữa). Và trong phần đầu tiên của Sê-ri này, tôi sẽ tập trung vào nội dung chuẩn bị con GCP VM Instance (phần Linux với Ubuntu), quá trình cài đặt Apache Web Server (phần Apache) và cuối cùng là nội dung thiết lập Firewall tối quan trọng.
#1. Nội dung chuẩn bị
Vì mục tiêu là tận dụng năng lực xử lý của con VPN Server tạo ở Phần 2 – Tạo VM Instance trên Google Cloud Platform đóng vai trò làm VPN Server, tôi giả định bạn đã và đang quản lý một con GCP VM Instance chạy Ubuntu 16.04 LTS kiểu như sau.
Trong trường hợp này, bạn cần thực hiện thêm một thay đổi để cho phép thêm HTTP traffic.
Lưu ý:
– Nếu không biết cách thay đổi thế nào thì bạn xem lại Phần 7 – Bổ sung VPN Client, quản lý chi phí VPN Server và tận thu con VM Instance.
– Trường hợp bạn “đâm ngang hông” nhảy vô bài này mà chưa biết cách tạo GCP VMP Instance thì chịu khó làm theo nội dung Phần 2 – Tạo VM Instance trên Google Cloud Platform đóng vai trò làm VPN Server trước đi nhé
Nội dung thứ 2 cần lưu ý là khá nhiều dòng lệnh trong Sê-ri này sẽ ghi dữ liệu, cấp phép thực thi nên bạn sẽ cần đến quyền root để chạy lệnh. Phương án đơn sơ mộc mạc nhất như tôi đã giới thiệu đâu đó trong các bài trước là thêm “magic word – sudo” vào trước các dòng lệnh. Tuy nhiên, phương án này chỉ phù hợp cho các bài demo giới thiệu ban đầu vì lạm dụng chạy lệnh với quyền root là một hành vi bị cực lực lên án bởi các đại ca quản lý bảo mật.
Do vậy, trong Sê-ri này, để nhanh gọn, tôi sẽ vi phạm nguyên tắc nói trên. Tuy nhiên, trong một tương lai gần, chắc tôi sẽ giới thiệu thêm các nội dung tập trung kỹ hơn về vấn đề bảo mật.
#2. Truy cập và cập nhật hệ thống
Sau khi đã “start” VM Instance, bạn click chọn vào nút SSH để truy cập hệ thống.
Sau đó bạn tiến hành cập nhật danh mục package và phiên bản với dòng lệnh:
sudo apt-get update
Tiếp đến nâng cấp các phiên bản package trên hệ thống với:
sudo apt-get upgrade
#3. Cài đặt và kiểm tra hoạt động Apache Web Server
#3.1 Cài đặt Apache Web Server
Để cài đặt Apache, bạn chạy dòng lệnh sau (nhớ chọn “y” khi nó hỏi có muốn triển không nhé).
sudo apt-get install apache2
Sau khi cài xong bạn khởi động Apache với:
sudo systemctl start apache2
Đồng thời nhớ kích hoạt để Apache tự khởi động khi server reboot:
sudo systemctl enable apache2
#3.2 Kiểm tra hoạt động của Apache Web Server
Để kiểm tra tình trạng của Apache Web Server, bảo đảm nó đang chạy, bạn chạy dòng lệnh.
systemctl status apache2
Nếu thấy dòng “active (running)” như trên là chuẩn “cmn” mực.
Kế tiếp, bạn xác nhận hoạt động của Apache Web Server bằng cách truy cập vào địa chỉ External IP của nó với giao thức http theo cú pháp tương tự như http://34.87.95.99 (nhớ thay bằng IP tương ứng của bạn).
Nếu không có gì bất ngờ thì bạn sẽ truy cập được giao diện mặc định của Apache như sau.
Lưu ý:
– Bạn dùng giao thức http chứ không phải https vì lúc này chưa có các thiết lập cần thiết để chạy https
– Nếu bạn để ý kỹ thì con VM Instance này mới được tạo chứ không phải con tôi demo khi làm VPN Server trong Sê-ri Hướng dẫn tạo VPN Server miễn phí. Lý do là vì tôi chọc ngoáy nhiều nội dung khác nữa nên việc demo trên con VPN Server cũ của tôi sẽ cần xử lý thêm lỗi phát sinh. Trong trường hợp của bạn, nếu bạn chỉ đơn thuần chạy VPN, bạn có thể yên tâm dùng con VPN Server bạn đã có để thực hiện tiếp các nội dung trong Sê-ri này vì tôi cũng đã chạy kiểm tra thử.
– Nếu bạn làm y hệt như tôi nhưng vẫn không thấy được kết quả như trên thì cũng đừng vội điên tiết, “lộn cái bàn”. Vấn đề có thể nằm ở thiết lập Firewall bạn đã triển trước đó trên con VPN Server hiện hữu. Bạn vui lòng mò xuống nội dung bên dưới để nắm rõ cách xử lý vấn đề.
#4 Thiết lập Firewall cho Apache Web Server
#4.1 Phân biệt thiết lập Firewall cho VM Instance và cho Apache Web Server
Việc đầu tiên tôi cần làm rõ ngay là phân biệt vấn đề “cho phép thêm HTTP traffic” trong Mục 1 – Nội dung chuẩn bị” và việc thiết lập Firewall cho Apache Web Server.
Dù bạn để ý thấy 2 cái này đều có dính đến chữ Firewall tuy nhiên nó khác biệt nhau ở cấp độ thiết lập. Để đơn giản bạn có thể hình dung:
– “cho phép thêm HTTP traffic” trong Mục 1 – Nội dung chuẩn bị” tương đương với việc thiết lập ổ khóa cửa rào bên ngoài cho VM Instance
– “thiết lập Firewall cho Apache Web Server” tương đương với việc thiết lập ổ khóa cửa bên trong cho con server (ở đây server chạy Ubuntu Linux)
Như vậy, để truy cập được vào bên trong Apache Web Server và thấy giao diện mặc định của Apache như trên, cả 2 lớp khóa này phải được mở.
Vấn đề là tại sao tôi truy cập được giao diện mặc định của Apache dù chưa đụng chạm gì đến Firewall của Apache Web Server?
Trả lời: Như tôi lưu ý trên, con Apache Web Server này tôi mới tạo để demo nên hiện tại Firewall của nó vẫn đang tắt. Như vậy chỉ cần “cho phép thêm HTTP traffic” trong Mục 1 – Nội dung chuẩn bị” để mở cửa rào bên ngoài nữa là xong.
Để xác nhận, tôi có thể kiểm tra tình trạng Firewall với:
sudo ufw status
Kết quả tương ứng trong trường hợp của tôi là “Status: inactive” – nghĩa là Firewall con Apache Web Server đang tắt. Trường hợp bạn nhận kết quả là “Status: active” mà chưa có thiết lập phù hợp để truy cập http (qua port 80) thì hiển nhiên bạn sẽ không thể truy cập được giao diện mặc định của Apache.
Để kiểm tra nhanh vấn đề này, bạn thử tắt Firewall với dòng lệnh sau trước khi truy cập lại vào giao diện mặc định của Apache.
sudo ufw disable
#4.2 Thiết lập Firewall cho Apache Web Server
Dù đang thực hiện demo thử nghiệm, bạn cũng đừng nên dùng phương án tắt Firewall nói trên làm giải pháp. Để tránh việc quên nội dung quan trọng này, tốt nhất bạn nên bổ sung rule cần thiết và bật Firewall lên ngay.
Thông thường, để tránh “một phút bốc đồng, cả ngày bốc sh*t”, bạn nên thiết lập các rule cần thiết trước rồi rà lại một lần khi kích hoạt Firewall. Các bước thiết lập cần thiết như sau:
– Cho phép ssh (quên cái này là sau đó bạn mất truyền ssh vào server đấy) với:
sudo ufw allow 22
– Cho phép truy cập http với
sudo ufw allow 80
– Cho phép truy cập https (sẽ cần sau này, khi bạn nâng cấp http lên https để bảo mật hơn)
sudo ufw allow 443
– Sau đó bạn kích hoạt Firewall với dòng lệnh:
sudo ufw enable
Lưu ý: Ở đây nó sẽ cảnh báo bạn việc mất kết nối ssh hiện tại tại khi kích hoạt Firewall. Sau khi chọn “y”, nếu mất kết nối ssh hiện tại, bạn có thể tắt cửa sổ này đi và mở lại cửa sổ ssh mới.
– Kiểm tra lại tình trạng Firewall với dòng lệnh:
sudo ufw status
OK, đến đây bạn đã xong phần thiết lập Firewall cho Apache Web Server rồi đấy. Bạn nhớ truy cập lại External IP của nó để xác nhận kết quả trước khi kết thúc phần này nhé.
2 thoughts on “Hướng dẫn tạo Website miễn phí từ A đến Z – Phần 1: Chuẩn bị GCP VM Instance, cài đặt Apache Web Server và thiết lập Firewall”