Cách cài đặt MEAN Stack trên Ubuntu 22.04

theanh

Administrator
Nhân viên
Ngăn xếp MEAN là một khuôn khổ dựa trên JavaScript miễn phí và mã nguồn mở được sử dụng để phát triển các ứng dụng web. MEAN được tạo thành từ bốn công nghệ chính là MongoDB, Express, Angular và Node. Ngăn xếp được thiết kế để giúp việc xây dựng các ứng dụng web bằng JavaScript và xử lý JSON trở nên cực kỳ dễ dàng. Bạn có thể sử dụng các ứng dụng MEAN theo nhiều cách. Tuy nhiên, nó đặc biệt phù hợp với các ứng dụng thời gian thực, đặc biệt là các ứng dụng chạy gốc trên đám mây và các ứng dụng web một trang (động) được xây dựng trong Angular.js.

Trong bài đăng này, chúng tôi sẽ chỉ cho bạn cách cài đặt ngăn xếp MEAN trên máy chủ Ubuntu 22.04.

Điều kiện tiên quyết​

  • Một máy chủ chạy Ubuntu 22.04.
  • Tên miền hợp lệ được trỏ bằng IP máy chủ của bạn.
  • Mật khẩu gốc được cấu hình trên máy chủ.

Bắt đầu​

Trước khi bắt đầu, bạn nên cập nhật tất cả các gói hệ thống lên phiên bản mới nhất. Bạn có thể cập nhật tất cả chúng bằng lệnh sau:
Mã:
apt update -y
apt upgrade -y
Sau khi tất cả các gói được cập nhật, hãy cài đặt các phụ thuộc bắt buộc bằng cách sử dụng lệnh sau lệnh:
Mã:
apt install python3 dirmngr gnupg apt-transport-https ca-certificates software-properties-common -y
Sau khi cài đặt xong tất cả các phần phụ thuộc, bạn có thể tiến hành bước tiếp theo.

Cài đặt MongoDB​

Theo mặc định, gói MongoDB không được bao gồm trong kho lưu trữ mặc định của Ubuntu. Vì vậy, bạn sẽ cần thêm kho lưu trữ MongoDB vào máy chủ của mình.

Đầu tiên, hãy tải xuống và thêm khóa MongoDB bằng lệnh sau:
Mã:
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | apt-key add -
Tiếp theo, hãy thêm kho lưu trữ MongoDB vào APT bằng lệnh sau:
Mã:
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.4.list
Tiếp theo, hãy tải xuống và cài đặt phụ thuộc libssl bằng lệnh sau lệnh:
Mã:
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb
Tiếp theo, hãy cập nhật kho lưu trữ và cài đặt gói MongoDB bằng lệnh sau:
Mã:
apt-get update -y
apt-get install mongodb-org -y
Sau khi cài đặt thành công, hãy khởi động và kích hoạt dịch vụ MongoDB bằng lệnh sau lệnh:
Mã:
systemctl start mongod
systemctl enable mongod
Tiếp theo, hãy kiểm tra trạng thái của dịch vụ MongoDB bằng lệnh sau:
Mã:
systemctl status mongod
Bạn sẽ nhận được thông báo sau đầu ra:
Mã:
? mongod.service - MongoDB Database Server Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled) Active: active (running) since Sun 2022-10-30 07:30:10 UTC; 5s ago Docs: https://docs.mongodb.org/manual Main PID: 2995 (mongod) Memory: 60.5M CPU: 1.050s CGroup: /system.slice/mongod.service ??2995 /usr/bin/mongod --config /etc/mongod.conf
Oct 30 07:30:10 ubuntu2204 systemd[1]: Started MongoDB Database Server.
Sau khi hoàn tất, bạn có thể tiến hành cài đặt Node.js.

Cài đặt Node.js​

Theo mặc định, gói Node.js không được bao gồm trong kho lưu trữ mặc định của Ubuntu. Vì vậy, bạn sẽ cần cài đặt nó từ kho lưu trữ nguồn Node.

Đầu tiên, hãy thêm kho lưu trữ nguồn Node bằng lệnh sau:
Mã:
curl -sL https://deb.nodesource.com/setup_18.x | bash -
Tiếp theo, hãy cài đặt gói Node.js bằng lệnh sau:
Mã:
apt-get install nodejs -y
Sau khi gói Node.js được cài đặt, bạn có thể xác minh phiên bản Node.js bằng lệnh sau lệnh:
Mã:
node -v
Bạn sẽ nhận được kết quả đầu ra sau:
Mã:
v18.12.0
Tiếp theo, cài đặt gói Yarn, Gulp và PM2 bằng cách sử dụng NPM:
Mã:
npm install -g yarn
npm install -g gulp
npm install pm2 -g
Sau khi hoàn tất, bạn có thể tiến hành bước tiếp theo.

Tải xuống và cài đặt MEAN Stack​

Đầu tiên, bạn sẽ cần tải xuống phiên bản mới nhất của MEAN stack từ kho lưu trữ Git. Bạn có thể tải xuống bằng lệnh sau:
Mã:
git clone https://github.com/meanjs/mean
Sau khi tải xuống hoàn tất, hãy điều hướng đến thư mục đã tải xuống và cài đặt tất cả các phần phụ thuộc cần thiết bằng lệnh sau:
Mã:
cd mean
yarn install
Sau khi cài đặt tất cả các phần phụ thuộc, bạn có thể tiến hành bước tiếp theo.

Tạo ứng dụng MEAN​

Trong phần này, chúng ta sẽ tạo một ứng dụng MEAN đơn giản.

Để thực hiện, hãy tạo một ứng dụng MEAN bên trong thư mục mean bằng lệnh sau:
Mã:
nano server.js
Thêm mã sau:
Mã:
const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const app = express();
app.use('/', (req, res) => {
MongoClient.connect("mongodb://localhost:27017/test", function(err, db){
db.collection('Example', function(err, collection){
collection.insert({ pageHits: 'pageHits' });
db.collection('Example').count(function(err, count){
if(err) throw err;
res.status(200).send('Page Hits: ' + Math.floor(count/2));
});
});
});
});
app.listen(3000);
console.log('Server running at http://localhost:3000/');
module.exports = app;
Lưu và đóng tệp, sau đó khởi động ứng dụng bằng lệnh PM2:
Mã:
pm2 start server.js
Bạn sẽ nhận được kết quả sau:
Mã:
Runtime Edition PM2 is a Production Process Manager for Node.js applications with a built-in Load Balancer. Start and Daemonize any application: $ pm2 start app.js Load Balance 4 instances of api.js: $ pm2 start api.js -i 4 Monitor in production: $ pm2 monitor Make pm2 auto-boot at server restart: $ pm2 startup To go further checkout: http://pm2.io/ -------------
[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /root/mean/server.js in fork_mode (1 instance)
[PM2] Done.
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? id ? name ? namespace ? version ? mode ? pid ? uptime ? ? ? status ? cpu ? mem ? user ? watching ?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 0 ? server ? default ? 0.6.0 ? fork ? 5644 ? 0s ? 0 ? online ? 0% ? 45.2mb ? root ? disabled ?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Tiếp theo, bật ứng dụng MEAN để khởi động sau hệ thống khởi động lại:
Mã:
pm2 startup
Bạn sẽ nhận được kết quả sau:
Mã:
Target path
/etc/systemd/system/pm2-root.service
Command list
[ 'systemctl enable pm2-root' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
[PM2] Making script booting at startup...
[PM2] [-] Executing: systemctl enable pm2-root...
Created symlink /etc/systemd/system/multi-user.target.wants/pm2-root.service → /etc/systemd/system/pm2-root.service.
[PM2] [v] Command successfully executed.
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save
[PM2] Remove init script via:
$ pm2 unstartup systemd
Theo mặc định, ứng dụng MEAN lắng nghe trên cổng 3000. Bạn có thể kiểm tra bằng lệnh sau lệnh:
Mã:
ss -antpl | grep 3000
Bạn sẽ nhận được kết quả sau:
Mã:
LISTEN 0 511 *:3000 *:* users:(("node /root/mean",pid=5644,fd=20))
Sau khi hoàn tất, bạn có thể tiến hành bước tiếp theo.

Cài đặt và cấu hình Nginx cho ứng dụng MEAN​

Đầu tiên, hãy cài đặt Gói máy chủ web Nginx với lệnh sau:
Mã:
apt-get install nginx -y
Sau khi Nginx được cài đặt, hãy tạo tệp cấu hình máy chủ ảo Nginx bằng lệnh sau:
Mã:
nano /etc/nginx/conf.d/mean.conf
Thêm nội dung sau cấu hình:
Mã:
server {
listen 80;
server_name mean.example.com;
access_log /var/log/nginx/mean-access.log;
error_log /var/log/nginx/mean-error.log;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:3000/;
}
}
Lưu và đóng tệp, sau đó xác minh Nginx để tìm lỗi cú pháp bằng lệnh sau:
Mã:
nginx -t
Bạn sẽ nhận được thông báo sau đầu ra:
Mã:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Tiếp theo, khởi động lại dịch vụ Nginx để áp dụng các thay đổi.
Mã:
systemctl restart nginx
Bạn cũng có thể kiểm tra trạng thái Nginx bằng cách sử dụng lệnh sau lệnh:
Mã:
systemctl status nginx
Bạn sẽ nhận được kết quả sau:
Mã:
? nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2022-10-30 07:37:24 UTC; 4s ago Docs: man:nginx(8) Process: 6416 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 6417 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 6418 (nginx) Tasks: 3 (limit: 4579) Memory: 3.3M CPU: 49ms CGroup: /system.slice/nginx.service ??6418 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;" ??6419 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ??6420 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
Oct 30 07:37:24 ubuntu2204 systemd[1]: Starting A high performance web server and a reverse proxy server...
Oct 30 07:37:24 ubuntu2204 systemd[1]: Started A high performance web server and a reverse proxy server.
Sau khi hoàn tất, bạn có thể tiến hành bước tiếp theo.

Truy cập Ứng dụng MEAN​

Lúc này, Nginx đã được cài đặt và cấu hình như một proxy ngược cho ứng dụng MEAN. Bây giờ bạn có thể truy cập ứng dụng MEAN bằng URL Bạn sẽ thấy giao diện web MEAN trên màn hình sau:


Kết luận​

Xin chúc mừng! Bạn đã cài đặt và cấu hình thành công ngăn xếp MEAN trên Ubuntu 22.04. Bây giờ bạn có thể bắt đầu phát triển ứng dụng bằng cách sử dụng ngăn xếp MEAN và lưu trữ nó trên máy chủ sản xuất. Hãy thoải mái hỏi tôi nếu bạn có bất kỳ câu hỏi nào.
 
Back
Bên trên