Cấu hình và vận hành dự án LoopBack trong ServBay
LoopBack là gì?
LoopBack là một framework mã nguồn mở Node.js mạnh mẽ do IBM phát triển, được thiết kế để xây dựng API và microservice một cách nhanh chóng. Framework này áp dụng phương pháp phát triển dựa trên mô hình (MDD), giúp lập trình viên dễ dàng định nghĩa các mô hình dữ liệu và tự động sinh ra các API RESTful mạnh mẽ. LoopBack tích hợp sẵn nhiều tính năng như kết nối nguồn dữ liệu, xác thực và phân quyền, công cụ khám phá API,... và hỗ trợ nhiều loại cơ sở dữ liệu cùng giao thức khác nhau.
Các tính năng và ưu điểm nổi bật của LoopBack
- Phát triển dựa trên mô hình (MDD): Định nghĩa mô hình dữ liệu một cách trực quan, framework tự động sinh ra endpoint API tương ứng cùng logic kiểm tra dữ liệu.
- Hỗ trợ nhiều nguồn dữ liệu: Kết nối dễ dàng với các CSDL phổ biến (MongoDB, MySQL, PostgreSQL, MariaDB, v.v...) cũng như các dịch vụ RESTful, SOAP, v.v.
- Công cụ CLI mạnh mẽ: LoopBack CLI cung cấp tập hợp lệnh phong phú, tối giản các thao tác khởi tạo dự án, định nghĩa model, cấu hình data source,...
- Kiến trúc module và khả năng mở rộng: Thiết kế linh hoạt, hỗ trợ tích hợp thư viện và dịch vụ bên ngoài qua thành phần mở rộng, đáp ứng đa dạng nhu cầu kinh doanh.
- Tính năng bảo mật tích hợp: Hỗ trợ sẵn xác thực (Authentication) và phân quyền (Authorization), giúp tạo API bảo mật dễ dàng và nhanh chóng.
Với LoopBack, lập trình viên có thể tăng tốc xây dựng backend ứng dụng web, API hiệu năng cao và dễ bảo trì.
Thiết lập và vận hành dự án LoopBack với ServBay
Tài liệu này sẽ hướng dẫn bạn sử dụng môi trường Node.js do ServBay cung cấp để tạo và chạy một dự án LoopBack. Chúng ta sẽ khai thác tính năng 'Website' của ServBay để cấu hình Web server cục bộ, đồng thời sử dụng Reverse Proxy để chuyển tiếp request từ bên ngoài đến cổng mà ứng dụng LoopBack hoạt động, từ đó dễ dàng truy cập, phát triển và debug cục bộ.
Tạo dự án LoopBack
Cài đặt LoopBack CLI
Trước khi bắt đầu, đảm bảo bạn đã cài đặt và kích hoạt gói Node.js trong ServBay. Tiếp đó, mở Terminal và sử dụng npm để cài đặt LoopBack CLI ở phạm vi toàn cục:
bashnpm install -g @loopback/cli
1Khởi tạo dự án
Chuyển đến thư mục gốc website do ServBay gợi ý:
/Applications/ServBay/www
, và dùng LoopBack CLI để tạo ứng dụng mới. Nên đặt tên dự án bằng chữ cái thường, cách nhau bởi dấu gạch ngang, ví dụ:servbay-loopback-app
:bashcd /Applications/ServBay/www lb4 app servbay-loopback-app
1
2CLI sẽ hướng dẫn bạn thiết lập các đặc điểm dự án (như REST API, serialization, authentication,...) và cấu trúc. Chọn theo nhu cầu thực tế của bạn.
Cài đặt các phụ thuộc của dự án
Truy cập vào thư mục dự án vừa tạo và cài đặt các package Node.js cần thiết:
bashcd servbay-loopback-app npm install
1
2
Sửa đổi nội dung trả về của dự án LoopBack (tuỳ chọn)
Để minh hoạ cách truy cập ứng dụng qua ServBay, bạn có thể thay đổi endpoint /ping
mặc định để trả về nội dung tuỳ biến.
Chỉnh sửa file
src/controllers/ping.controller.ts
Tìm đến file
src/controllers/ping.controller.ts
trong dự án, thay đổi nội dung theo hướng dẫn để endpoint/ping
trả về chuỗi "Hello ServBay!":typescriptimport {get} from '@loopback/rest'; export class PingController { constructor() {} @get('/ping') ping(): string { // Thay đổi nội dung trả về thành "Hello ServBay!" return 'Hello ServBay!'; } }
1
2
3
4
5
6
7
8
9
10
11
Chạy dự án ở chế độ phát triển
Trong giai đoạn phát triển, bạn thường chạy server phát triển của LoopBack để có thể sửa nhanh và debug hiệu quả. Chúng ta sẽ truy cập server này thông qua reverse proxy của ServBay.
Khởi động server phát triển
Từ thư mục gốc của dự án, mở Terminal để khởi động ứng dụng LoopBack. Bạn có thể chỉ định cổng bằng biến môi trường
PORT
, ví dụ sử dụng cổng8585
:bashcd /Applications/ServBay/www/servbay-loopback-app PORT=8585 npm start
1
2Sau khi khởi động, Terminal sẽ hiển thị thông báo như "Server is running at http://[::1]:8585".
Cấu hình Website (Reverse Proxy) trong ServBay
Vào bảng điều khiển ServBay, đến mục 'Website'. Bấm nút Thêm để tạo website mới ở chế độ reverse proxy, chuyển tiếp domain và cổng bên ngoài đến địa chỉ nội bộ (localhost) nơi ứng dụng LoopBack đang listen:
- Tên (Name): Chẳng hạn
My first LoopBack dev site
(chỉ dùng để nhận biết trong ServBay) - Domain: Ví dụ
servbay-loopback-dev.servbay.demo
(là domain bạn sẽ truy cập trên trình duyệt) - Loại website (Type): Chọn
Reverse Proxy
- IP Address: Nhập
127.0.0.1
(ứng dụng LoopBack chạy trên máy bạn) - Port: Nhập
8585
(cổng LoopBack đang listen)
Sau khi hoàn thiện, lưu lại và áp dụng thay đổi trên ServBay. ServBay sẽ tự động cấu hình DNS nội bộ (sửa file
/etc/hosts
hoặc thông qua ServBay Helper Tool) và thiết lập Web server (Caddy hoặc Nginx), cho phép bạn truy cập qua domain đã tạo.Tham khảo thêm tại: Thêm website Node.js phát triển.
- Tên (Name): Chẳng hạn
Truy cập ứng dụng ở chế độ phát triển
Mở trình duyệt web và truy cập domain, kèm đường dẫn endpoint, ví dụ:
https://servbay-loopback-dev.servbay.demo/ping
.Do ServBay mặc định hỗ trợ cấp chứng chỉ SSL tự động cho website nội bộ (qua ServBay User CA hoặc ServBay Public CA), bạn có thể truy cập trực tiếp qua HTTPS, vừa bảo mật vừa mô phỏng sát môi trường production, giúp phát hiện sớm các vấn đề liên quan SSL. Tham khảo chi tiết về SSL tại: Bảo vệ website bằng SSL.
Triển khai phiên bản production (tuỳ chọn)
Khi dự án LoopBack đã sẵn sàng ra production, bạn có thể chạy nó ở chế độ production để tối ưu hiệu năng và giảm log debug.
Chạy server production
Ở thư mục gốc dự án, mở Terminal để khởi động LoopBack ở chế độ production. Cũng chỉ định port, ví dụ
8586
và đặt biến môi trườngNODE_ENV=production
:bashcd /Applications/ServBay/www/servbay-loopback-app PORT=8586 NODE_ENV=production npm start
1
2Cấu hình lại Website (Reverse Proxy) của ServBay
Vào bảng điều khiển ServBay, mục 'Website', thêm mới hoặc chỉnh sửa website dạng reverse proxy, trỏ tới app LoopBack chạy ở production:
- Tên (Name): Chẳng hạn
My first LoopBack production site
- Domain: Ví dụ
servbay-loopback-prod.servbay.demo
- Loại (Type): Chọn
Reverse Proxy
- IP Address:
127.0.0.1
- Port:
8586
(cổng production của app)
Lưu lại và áp dụng thay đổi.
- Tên (Name): Chẳng hạn
Truy cập ứng dụng production
Trên trình duyệt, truy cập domain production, ví dụ:
https://servbay-loopback-prod.servbay.demo/ping
để kiểm tra tình trạng chạy ở production. ServBay cũng tự cung cấp HTTPS cho tên miền này.
Kết nối cơ sở dữ liệu
LoopBack hỗ trợ nhiều CSDL qua data source connector. ServBay cung cấp sẵn các gói như MySQL, MariaDB, PostgreSQL, MongoDB, Redis,... bạn có thể dễ dàng khởi động và cấu hình chúng trong dự án LoopBack.
Dưới đây là ví dụ cấu hình kết nối các database phổ biến do ServBay cung cấp. Thay đổi theo thông tin thực tế của bạn.
Lưu ý quan trọng: Tài khoản và mật khẩu database trong ví dụ chỉ là placeholder. Hãy sử dụng đúng mật khẩu root/database đã thiết lập trong bảng điều khiển ServBay hoặc các tài khoản người dùng thích hợp.
Kết nối MongoDB
Đảm bảo bạn đã cài đặt & chạy MongoDB trong ServBay. Cài đặt connector MongoDB cho LoopBack:
bashnpm install --save @loopback/connector-mongodb
1Sau đó cấu hình datasource (thường là
src/datasources/mongodb.datasource.ts
):typescript// src/datasources/mongodb.datasource.ts import {juggler} from '@loopback/repository'; const config = { name: 'mongodb', connector: 'mongodb', // MongoDB của ServBay mặc định chạy tại localhost:27017 url: 'mongodb://localhost:27017/servbay-loopback-app', // Thay bằng tên CSDL của bạn host: 'localhost', port: 27017, user: '', // Điền username nếu bật xác thực password: '', // Điền mật khẩu nếu bật xác thực database: 'servbay-loopback-app', // Thay bằng tên CSDL của bạn // Tuỳ chọn khác... }; export class MongodbDataSource extends juggler.DataSource { static dataSourceName = 'mongodb'; constructor() { super(config); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22Kết nối Redis
Đảm bảo bạn đã cài & chạy Redis của ServBay. Cài đặt connector Redis (Lưu ý: LoopBack chưa có gói
@loopback/connector-redis
chính thức, bạn có thể dùngloopback-connector-redis
hoặc tích hợp thư việnredis
của Node.js với LoopBack Service):bashnpm install --save loopback-connector-redis # Hoặc các thư viện Redis tương thích khác
1Cấu hình datasource trong dự án (ví dụ theo phong cách loopback-connector-redis):
typescript// src/datasources/redis.datasource.ts import {juggler} from '@loopback/repository'; const config = { name: 'redis', connector: 'redis', // Redis của ServBay mặc định chạy tại localhost:6379 url: 'redis://localhost:6379', // Tuỳ chọn khác... }; export class RedisDataSource extends juggler.DataSource { static dataSourceName = 'redis'; constructor() { super(config); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Lưu ý: Cách sử dụng datasource ở LoopBack 4 khác với LoopBack 3. Đoạn ví dụ này dựa theo phong cách connector v3 để minh hoạ; ở LoopBack 4, bạn nên áp dụng @datasource decorator và cấu hình hiện đại hơn theo tài liệu chính thức. Tuy nhiên các tham số như
host
,port
,user
,password
,database
vẫn áp dụng tương tự.Kết nối MariaDB (hoặc MySQL)
Đảm bảo bạn đã cài & chạy MariaDB hoặc MySQL trong ServBay. Gói connector của LoopBack cho MySQL cũng tương thích với MariaDB. Cài đặt connector:
bashnpm install --save @loopback/connector-mysql
1Cấu hình datasource:
typescript// src/datasources/mariadb.datasource.ts hoặc mysql.datasource.ts import {juggler} from '@loopback/repository'; const config = { name: 'mariadb', // Hoặc 'mysql' connector: 'mysql', // Dùng connector mysql // url: '', // Có thể dùng url hoặc khai báo riêng biệt host, port, database host: 'localhost', // ServBay database mặc định chạy trên localhost port: 3306, // Port mặc định MariaDB/MySQL user: 'root', // Tài khoản mặc định của ServBay thường là root password: 'password', // << Thay bằng mật khẩu bạn đã đặt trong ServBay >> database: 'servbay_loopback_app', // Thay bằng tên CSDL của bạn // Tuỳ chọn khác... }; export class MariaDbDataSource extends juggler.DataSource { static dataSourceName = 'mariadb'; // Hoặc 'mysql' constructor() { super(config); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Lưu ý:
password: 'password'
chỉ là giá trị mẫu. Hãy vào panel quản trị database của ServBay để lấy/mở mật khẩu root hoặc tạo user riêng, sau đó thay thế vào cấu hình.Kết nối PostgreSQL
Đảm bảo bạn đã cài & chạy PostgreSQL trong ServBay. Cài đặt connector PostgreSQL cho LoopBack:
bashnpm install --save @loopback/connector-postgresql
1Cấu hình datasource:
typescript// src/datasources/postgresql.datasource.ts import {juggler} from '@loopback/repository'; const config = { name: 'postgresql', connector: 'postgresql', // url: '', // Có thể dùng url hoặc khai báo host, port, database riêng biệt host: 'localhost', // PostgreSQL của ServBay mặc định chạy tại localhost port: 5432, // Port mặc định của PostgreSQL user: 'user', // << Thay bằng username bạn tạo/cấu hình trong ServBay >> password: 'password', // << Thay bằng mật khẩu thực tế đã đặt trong ServBay >> database: 'servbay_loopback_app', // Thay bằng tên CSDL của bạn // Tuỳ chọn khác... }; export class PostgresqlDataSource extends juggler.DataSource { static dataSourceName = 'postgresql'; constructor() { super(config); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Lưu ý:
user: 'user'
vàpassword: 'password'
chỉ là placeholder mẫu. Hãy tra cứu hoặc tạo tài khoản mới trong panel quản lý PostgreSQL của ServBay rồi cập nhật thông tin cụ thể vào cấu hình.
Tổng kết
Thông qua các bước trên, bạn đã có thể tạo, cấu hình và chạy thành công dự án Node.js LoopBack trong môi trường phát triển ServBay trên máy tính cá nhân. Bạn cũng đã nắm được cách dùng tính năng Website/Reverse Proxy truy cập ứng dụng, cũng như kết nối nó với các dịch vụ database nội bộ mà ServBay hỗ trợ.
ServBay mang đến môi trường phát triển ổn định, tiện dụng cho framework Node.js như LoopBack, tích hợp sẵn Web server, database và nhiều runtime khác nhau, giúp đơn giản hóa quy trình của lập trình viên. Nhờ khả năng quản lý website, hỗ trợ SSL, tích hợp database,... ServBay giúp bạn phát triển và kiểm thử cục bộ hiệu quả, an toàn tuyệt đối.