Bạn đang tìm kiếm một bộ công cụ mạnh mẽ để xây dựng ứng dụng web hiện đại? Stack MEAN có thể là câu trả lời bạn cần. Đây là một tập hợp các công nghệ JavaScript là gì mã nguồn mở, giúp phát triển ứng dụng web từ đầu đến cuối một cách hiệu quả. Cái tên MEAN là viết tắt của bốn thành phần chính: MongoDB là gì, Express là gì, Angular là gì, và Node.js là gì. Mỗi thành phần đều đóng một vai trò không thể thiếu trong quá trình này.
Hãy cùng AZWEB tìm hiểu sâu hơn về từng mảnh ghép nhé. MongoDB là gì là hệ quản trị cơ sở dữ liệu NoSQL, giúp lưu trữ dữ liệu dưới dạng tài liệu JSON linh hoạt. Express.js là một framework backend tối giản chạy trên nền Node.js, giúp xây dựng API và xử lý logic phía máy chủ. Angular là một framework frontend mạnh mẽ từ Google, cho phép tạo ra các giao diện người dùng động và phức tạp. Cuối cùng, Node.js là môi trường thực thi JavaScript phía máy chủ, là nền tảng cho toàn bộ stack.

Việc chọn MEAN JS để triển khai trên CentOS 7 mang lại nhiều lợi ích. CentOS 7 nổi tiếng là một hệ điều hành máy chủ ổn định, bảo mật và đáng tin cậy, là nền tảng vững chắc cho ứng dụng của bạn. Khi kết hợp với sự đồng bộ và hiệu suất cao của MEAN, bạn sẽ có một giải pháp toàn diện để phát triển các ứng dụng web phức tạp, từ trang thương mại điện tử đến mạng xã hội. Bài viết này sẽ hướng dẫn bạn chi tiết từng bước cài đặt stack MEAN trên CentOS 7 một cách dễ hiểu nhất.
Chuẩn bị môi trường CentOS 7 để cài đặt MEAN stack
Trước khi đi sâu vào việc cài đặt từng thành phần của MEAN, chúng ta cần chuẩn bị một môi trường CentOS 7 thật “sạch sẽ” và sẵn sàng. Bước này cực kỳ quan trọng, nó giống như việc xây một nền móng vững chắc cho ngôi nhà của bạn. Một môi trường được chuẩn bị tốt sẽ giúp quá trình cài đặt diễn ra suôn sẻ và tránh được những lỗi không đáng có.
Kiểm tra và cập nhật hệ điều hành CentOS 7
Đầu tiên, hãy đảm bảo hệ điều hành của bạn được cập nhật lên phiên bản mới nhất. Việc này không chỉ giúp vá các lỗ hổng bảo mật mà còn đảm bảo tính tương thích của các gói phần mềm. Bạn chỉ cần mở terminal và chạy lệnh sau với quyền quản trị (root hoặc sudo):
sudo yum update -y
Lệnh này sẽ tự động tải về và cài đặt tất cả các bản cập nhật có sẵn. Quá trình này có thể mất vài phút tùy thuộc vào tốc độ mạng và số lượng gói cần cập nhật.

Tiếp theo, hãy chắc chắn rằng bạn đang sử dụng một tài khoản người dùng có quyền sudo. Việc chạy các lệnh với quyền root trực tiếp có thể tiềm ẩn rủi ro. Nếu chưa có, bạn có thể tạo một người dùng mới và cấp quyền sudo cho họ. Điều này giúp quản lý hệ thống an toàn và có kiểm soát hơn.
Cài đặt các gói cần thiết hỗ trợ quá trình cài đặt
Để quá trình cài đặt MEAN stack diễn ra thuận lợi, chúng ta cần một vài công cụ hỗ trợ. Đây là những gói phần mềm cơ bản mà hầu hết các nhà phát triển đều cần đến. Hãy cài đặt chúng bằng lệnh sau:
sudo yum install -y git curl wget gcc-c++ make
Hãy cùng xem từng gói này có vai trò gì nhé:
- Git: Hệ thống quản lý phiên bản phân tán, cần thiết để tải mã nguồn từ các kho chứa như GitHub.
- curl & wget: Hai công cụ dòng lệnh mạnh mẽ để tải tệp từ internet. Chúng ta sẽ dùng chúng để tải về các tập lệnh cài đặt hoặc kho phần mềm.
- gcc-c++ & make: Bộ công cụ biên dịch cần thiết để xây dựng các “native addon” cho Node.js, những module được viết bằng C++ để tăng hiệu suất.
Sau khi hoàn tất các bước này, máy chủ CentOS 7 của bạn đã sẵn sàng để chào đón các thành phần của stack MEAN.
Các bước cài đặt các thành phần trong MEAN stack
Khi môi trường đã được chuẩn bị kỹ lưỡng, giờ là lúc chúng ta bắt tay vào cài đặt từng “viên gạch” xây nên ngôi nhà MEAN stack. Chúng ta sẽ đi lần lượt qua MongoDB là gì, Node.js là gì, Express là gì và Angular là gì. Hãy theo dõi cẩn thận từng bước để đảm bảo mọi thứ hoạt động trơn tru nhé.
Cài đặt MongoDB trên CentOS 7
MongoDB sẽ là nơi lưu trữ toàn bộ dữ liệu cho ứng dụng của bạn. Vì MongoDB không có sẵn trong kho lưu trữ mặc định của CentOS 7, chúng ta cần thêm kho lưu trữ chính thức của nó.
Đầu tiên, tạo một tệp repository mới:
sudo vi /etc/yum.repos.d/mongodb-org-4.4.repo
Sau đó, dán nội dung sau vào tệp này và lưu lại. Chúng ta sẽ sử dụng phiên bản 4.4, một phiên bản ổn định và được sử dụng rộng rãi.
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
Bây giờ, bạn có thể cài đặt MongoDB bằng lệnh yum:
sudo yum install -y mongodb-org
Sau khi cài đặt xong, hãy khởi động dịch vụ MongoDB và cho phép nó tự khởi động cùng hệ thống:
sudo systemctl start mongodsudo systemctl enable mongod
Để chắc chắn mọi thứ hoạt động đúng, hãy kiểm tra trạng thái của dịch vụ:
sudo systemctl status mongod
Nếu bạn thấy dòng chữ “active (running)” màu xanh lá, xin chúc mừng, bạn đã cài đặt thành công MongoDB là gì!

Cài đặt Node.js và npm trên CentOS 7
Node.js là gì là trái tim của stack MEAN, cung cấp môi trường để chạy backend Express.js. Chúng ta sẽ sử dụng kho lưu trữ NodeSource để cài đặt phiên bản Node.js ổn định và mới nhất.
Hãy chạy tập lệnh cài đặt từ NodeSource. Ở đây, chúng ta sẽ chọn phiên bản LTS (Long Term Support) 16.x, một lựa chọn an toàn và được hỗ trợ lâu dài:
curl -sL https://rpm.nodesource.com/setup_16.x | sudo bash -
Sau khi kho lưu trữ được thêm vào, việc cài đặt Node.js và npm (Node Package Manager) trở nên vô cùng đơn giản:
sudo yum install -y nodejs
Cài đặt xong, hãy kiểm tra lại phiên bản của Node.js và npm để xác nhận:
node -vnpm -v
Bạn sẽ thấy phiên bản của Node.js (ví dụ: v16.x.x) và npm hiện ra trên màn hình. npm là gì là công cụ không thể thiếu để quản lý các thư viện và gói phụ thuộc trong dự án JavaScript của bạn.

Cài đặt và cấu hình Express.js trong MEAN stack
Không giống như MongoDB hay Node.js, Express.js không phải là một phần mềm cài đặt trực tiếp lên hệ thống. Nó là một framework, một thư viện mà bạn sẽ thêm vào dự án Node.js của mình.
Hãy bắt đầu bằng cách tạo một thư mục cho dự án backend:
mkdir my-backend-app
cd my-backend-app
Tiếp theo, khởi tạo một dự án Node.js mới với npm. Lệnh này sẽ tạo ra một tệp package.json để quản lý thông tin và các gói phụ thuộc của dự án.
npm init -y
Bây giờ, hãy cài đặt Express.js:
npm install express
Để bắt đầu nhanh hơn, bạn có thể sử dụng express-generator, một công cụ giúp tạo ra cấu trúc thư mục cơ bản cho một ứng dụng Express. Tuy nhiên, để hiểu rõ hơn, chúng ta sẽ tạo một tệp máy chủ đơn giản. Tạo một tệp tên là server.js và thêm vào đó đoạn mã sau:
const express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => { res.send('Hello World từ Express.js!'); }); app.listen(port, () => { console.log(`Ứng dụng Express đang chạy tại http://localhost:${port}`); });
Lưu tệp lại và chạy thử máy chủ của bạn:
node server.js
Nếu bạn thấy thông báo “Ứng dụng Express đang chạy…”, backend của bạn đã sẵn sàng hoạt động!
Cài đặt và cấu hình Angular cho front-end
Cuối cùng, chúng ta sẽ cài đặt Angular để xây dựng giao diện người dùng. Angular CLI (Command Line Interface) là công cụ bắt buộc phải có, giúp bạn tạo dự án, thêm các thành phần và thực hiện nhiều tác vụ phát triển khác một cách dễ dàng.
Cài đặt Angular CLI toàn cục bằng npm:
sudo npm install -g @angular/cli

Sau khi cài đặt xong, hãy di chuyển ra khỏi thư mục backend và tạo một dự án Angular mới. Ví dụ, chúng ta sẽ đặt tên là my-frontend-app:
ng new my-frontend-app
Quá trình này có thể hỏi bạn một vài câu hỏi về routing và stylesheet. Bạn có thể chọn “Yes” cho routing và “CSS” cho stylesheet để bắt đầu. Angular CLI sẽ tự động tạo cấu trúc thư mục và cài đặt các gói cần thiết.
Khi đã hoàn tất, di chuyển vào thư mục dự án và khởi động máy chủ phát triển:
cd my-frontend-app
ng serve
Mặc định, máy chủ phát triển của Angular sẽ chạy trên cổng 4200. Bạn sẽ thấy thông báo cho biết ứng dụng đã sẵn sàng. Vậy là cả bốn thành phần của stack MEAN đã được cài đặt thành công!
Tích hợp các thành phần MEAN stack và kiểm tra hoạt động
Cài đặt xong từng phần riêng lẻ là một thành công lớn, nhưng sức mạnh thực sự của MEAN stack chỉ được thể hiện khi chúng kết hợp lại với nhau. Bây giờ, chúng ta sẽ kết nối backend Express.js với cơ sở dữ liệu MongoDB và cho phép frontend Angular giao tiếp với backend. Đây là bước quan trọng để biến các mảnh ghép rời rạc thành một ứng dụng full-stack hoàn chỉnh.
Đầu tiên, chúng ta cần kết nối Express.js với MongoDB. Cách phổ biến nhất là sử dụng thư viện Mongoose, một công cụ mô hình hóa đối tượng (ODM) giúp tương tác với MongoDB trở nên đơn giản và trực quan hơn. Trong thư mục dự án backend (my-backend-app), hãy cài đặt Mongoose:
npm install mongoose
Tiếp theo, cập nhật tệp server.js của bạn để thiết lập kết nối đến MongoDB. Thêm đoạn mã sau vào đầu tệp:
const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost:27017/my-mean-app', { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log('Kết nối MongoDB thành công!')) .catch(err => console.error('Không thể kết nối MongoDB:', err));
Bây giờ, backend của bạn đã có thể nói chuyện được với cơ sở dữ liệu.

Tiếp theo, chúng ta sẽ cấu hình để Angular có thể gọi API từ Express.js. Trong ứng dụng Express, hãy tạo một API endpoint đơn giản. Ví dụ, thêm đoạn mã này vào server.js:
app.get('/api/greeting', (req, res) => { res.json({ message: 'Xin chào từ API của Express!' }); });
Để Angular có thể gọi API này mà không gặp lỗi CORS (Cross-Origin Resource Sharing), bạn cần cài đặt và sử dụng middleware cors trong Express:
npm install cors
Và thêm vào server.js:
const cors = require('cors'); app.use(cors()); // Cho phép tất cả các request từ domain khác
Bên phía Angular, bạn sẽ sử dụng HttpClientModule để gửi request đến API này và hiển thị dữ liệu ra giao diện. Việc này thường được thực hiện trong một service của Angular.
Để chạy thử toàn bộ ứng dụng, bạn cần khởi động cả server backend và server frontend trong hai cửa sổ terminal riêng biệt.
- Trong thư mục backend:
node server.js - Trong thư mục frontend:
ng serve
Truy cập vào ứng dụng Angular (thường là http://localhost:4200), nếu bạn thấy dữ liệu được tải từ API của Express hiển thị trên trang web, xin chúc mừng! Bạn đã tích hợp thành công toàn bộ stack MEAN. Một mẹo nhỏ để kiểm tra lỗi là luôn mở cửa sổ console của trình duyệt (phím F12) và theo dõi log từ terminal của cả backend và frontend.
Lưu ý và xử lý lỗi phổ biến khi cài đặt MEAN stack trên CentOS 7
Quá trình cài đặt một stack phức tạp như MEAN không phải lúc nào cũng suôn sẻ. Ngay cả những nhà phát triển kinh nghiệm cũng có thể gặp phải một vài “ổ gà”. Đừng lo lắng, đây là một phần của quá trình học hỏi. Dưới đây là một số lỗi phổ biến và cách khắc phục chúng khi làm việc trên CentOS 7.
Lỗi quyền truy cập và firewall blocking
CentOS 7 có một hệ thống tường lửa mạnh mẽ tên là firewalld được bật mặc định. Đây là một tính năng bảo mật tuyệt vời, nhưng nó cũng có thể chặn các kết nối đến ứng dụng của bạn nếu không được cấu hình đúng.
Nếu bạn không thể truy cập ứng dụng Node.js (cổng 3000) hoặc kết nối đến MongoDB (cổng 27017) từ một máy khác, rất có thể là do tường lửa. Bạn cần mở các cổng này:
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --permanent --add-port=27017/tcp
sudo firewall-cmd --reload
Lệnh reload là cần thiết để áp dụng các thay đổi.
Một lỗi khác là “Permission denied” khi cố gắng khởi động một dịch vụ hoặc ghi vào một thư mục. Điều này thường xảy ra do quyền sở hữu tệp hoặc thư mục không đúng. Hãy đảm bảo rằng người dùng chạy ứng dụng có đủ quyền đọc/ghi trên thư mục dự án. Bạn có thể sử dụng lệnh chown để thay đổi chủ sở hữu.

Lỗi phiên bản Node hoặc npm không tương thích
Hệ sinh thái JavaScript phát triển rất nhanh, và đôi khi các phiên bản không tương thích với nhau có thể gây ra lỗi. Ví dụ, một gói npm cũ có thể không hoạt động với phiên bản Node.js mới nhất, hoặc Angular CLI yêu cầu một phiên bản Node cụ thể.
Nếu gặp lỗi liên quan đến phiên bản, giải pháp tốt nhất là sử dụng một công cụ quản lý phiên bản Node như nvm (Node Version Manager). nvm cho phép bạn cài đặt nhiều phiên bản Node.js trên cùng một hệ thống và chuyển đổi giữa chúng một cách dễ dàng.
Để cài đặt nvm, bạn có thể dùng lệnh curl từ trang GitHub chính thức của dự án. Sau khi cài đặt, bạn có thể cài một phiên bản Node cụ thể, ví dụ:
nvm install 14.17.0
nvm use 14.17.0
Việc sử dụng nvm giúp bạn linh hoạt hơn trong việc quản lý môi trường phát triển, đặc biệt khi bạn làm việc với nhiều dự án có yêu cầu phiên bản khác nhau. Đây là một công cụ mà mọi nhà phát triển Node.js nên biết.
Mẹo thực hành hiệu quả khi cài đặt MEAN stack trên CentOS 7
Cài đặt thành công là một chuyện, nhưng duy trì và làm việc hiệu quả với stack MEAN trên môi trường sản xuất lại là một câu chuyện khác. Dưới đây là một vài mẹo thực hành tốt nhất được AZWEB đúc kết, giúp bạn quản lý dự án của mình một cách chuyên nghiệp và tránh các vấn đề tiềm tàng trong tương lai.
Đầu tiên và quan trọng nhất, hãy giữ hệ thống và các gói luôn cập nhật. Thường xuyên chạy lệnh sudo yum update để đảm bảo hệ điều hành CentOS 7 và các gói hệ thống khác được vá lỗi bảo mật và cập nhật các tính năng mới nhất. Đối với các gói Node.js, hãy sử dụng npm update để cập nhật các thư viện trong dự án của bạn.
Thứ hai, tổ chức cấu trúc thư mục rõ ràng cho dự án MEAN. Thay vì để mọi thứ lộn xộn, hãy tạo một cấu trúc logic. Ví dụ, bạn có thể có một thư mục chính cho dự án, bên trong chứa hai thư mục con là client (cho code Angular) và server (cho code Express). Điều này giúp việc quản lý, bảo trì và mở rộng code sau này trở nên dễ dàng hơn rất nhiều.

Thứ ba, backup dữ liệu MongoDB định kỳ. Dữ liệu là tài sản quý giá nhất của ứng dụng. Đừng bao giờ chủ quan! Hãy thiết lập một cơ chế sao lưu tự động. MongoDB cung cấp công cụ mongodump rất hữu ích cho việc này. Bạn có thể viết một script đơn giản và sử dụng cron job của Linux để tự động chạy mongodump hàng ngày hoặc hàng tuần và lưu các bản sao lưu ở một nơi an toàn.
Cuối cùng, không cài đặt package không cần thiết để tránh phát sinh lỗi. Mỗi gói npm bạn thêm vào dự án là một điểm có thể phát sinh lỗi hoặc lỗ hổng bảo mật. Hãy giữ cho tệp package.json của bạn thật gọn gàng. Trước khi cài đặt một thư viện mới, hãy tự hỏi: “Tôi có thực sự cần nó không?”. Việc này không chỉ giúp giảm kích thước dự án mà còn làm cho ứng dụng của bạn ổn định và an toàn hơn.
Kết luận
Vậy là chúng ta đã cùng nhau hoàn thành một hành trình chi tiết, từ việc chuẩn bị một máy chủ CentOS 7 “sạch sẽ” đến việc cài đặt và tích hợp thành công từng thành phần của stack MEAN. Bạn đã học được cách cài đặt cơ sở dữ liệu MongoDB, thiết lập môi trường Node.js, xây dựng backend với Express.js, và tạo ra giao diện người dùng với Angular. Quan trọng hơn, bạn đã biết cách kết nối chúng lại với nhau để tạo thành một ứng dụng full-stack hoàn chỉnh.

Qua bài viết, chúng ta đã đi qua các bước chính: chuẩn bị môi trường, cài đặt riêng lẻ từng công nghệ, tích hợp chúng lại và xử lý các lỗi thường gặp. Hy vọng rằng những hướng dẫn từ AZWEB đã giúp bạn tự tin hơn trong việc làm chủ bộ công cụ mạnh mẽ này. Hãy nhớ rằng, đây chỉ là điểm khởi đầu. Đừng ngần ngại thử nghiệm, tùy chỉnh và tối ưu hóa dự án theo ý tưởng của riêng bạn.
Bước tiếp theo cho bạn là gì? Hãy thử mở rộng ứng dụng hiện tại bằng cách thêm các tính năng như xác thực người dùng, tải lên tệp tin, hoặc tương tác thời gian thực với WebSockets. Sau đó, hãy tìm hiểu về cách triển khai (deploy) ứng dụng MEAN của bạn lên một máy chủ thực tế hoặc các nền tảng đám mây như AWS, Google Cloud để chia sẻ sản phẩm của mình với toàn thế giới. Chúc bạn thành công trên con đường trở thành một nhà phát triển full-stack chuyên nghiệp