💻Chạy ứng dụng
Các bước để có thể khởi động ứng dụng.
Tạo Bot Telegram (Tuỳ chọn)
Mở ứng dụng Telegram, tìm
@BotFather
, tạo mới một bot của bạn bằng lệnh/newbot
. Sau khi hoàn tất, bot sẽ trả về một chuỗiBOT_TELEGRAM_TOKEN
cho bạn.Tiếp đến, tìm
@getidsbot
, sau đó bắt đầu chat, thông tin id trả về chính làBOT_TELEGRAM_CHAT_ID
của bạn.Hai giá trị này sẽ được sử dụng trong file config của server để gửi log về thông qua Telegram.
Khởi tạo Firebase
Truy cập firebase, tạo một project mới.
Tạo một web app mới, sau đó trong phần Project Setting, chọn mục Service Accounts. Nhấn chọn Generate new private key -> Create key. Một file config json sẽ được tải xuống máy của bạn. Để dễ quản lý, hãy đổi tên file thành
firebase.json
. File này sẽ được dùng cho phía Server truy cập vào Firebase.

Tiếp đến trong tab General, kéo xuống cuối và lưu lại các thông tin config. Các thông tin này sẽ được dùng cho phía Client truy cập vào Firebase.

Trong phần Build bên sidebar, chọn và bật mục Authentication, chọn tab Sign-in Method và bật dịch vụ đăng nhập với Google.

Tiếp đến, vào Build và bật Realtime Database, copy Reference URL của database. Đây sẽ là FIREBASE_DATABASE_URL của phía client dùng cho việc quản lí realtime người dùng đang đăng nhập.

Khởi động Docker
Khởi động Docker tương ứng với hệ điều hành của bạn (sử dụng cmd đối với Linux hoặc Docker Desktop đối với Windows, MacOS).
Khởi động RabbitMQ
Đảm bảo Docker đã được chạy trước đó, chạy câu lệnh bên dưới để cài đặt RabbitMQ qua Docker:
> docker run -d -it --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.12-management
38a1d78d8486700bd7d35ef222d6dfeb66d635b4075bba7a19eb95f4f8554f5b
Truy cập vào
localhost:15672
để vào giao diện đăng nhập, sử dụng tài khoản default làguest:guest
để đăng nhập:

Khởi động Server
Tiếp đến, Mở MongoDB Compass, kết nối và tạo mới một colllection, sao chép chuỗi kết nối mongoDB. Chuỗi kết nối thường có dạng
mongodb://localhost:27017/<mydb>
Trong folder server sẽ có tổng cộng 6 folder chính: gateway, common, user, exercise, compiler, logging. Trong từng folder tạo một file .env tương ứng để lưu biến môi trường
# global
RABBITMQ_URL=amqp://localhost
BOT_TELEGRAM_TOKEN=<YOUR_BOT_TELEGRAM_TOKEN>
BOT_TELEGRAM_CHAT_ID=<YOUR_BOT_TELEGRAM_CHAT_ID>
# only serice
CLIENT_URL=http://localhost:5173
# global
RABBITMQ_URL=amqp://localhost
BOT_TELEGRAM_TOKEN=<YOUR_BOT_TELEGRAM_TOKEN>
BOT_TELEGRAM_CHAT_ID=<YOUR_BOT_TELEGRAM_CHAT_ID>
# only serice
MONGODB_URL=<YOUR_MONGODB_URI>/vnoi-common
# global
RABBITMQ_URL=amqp://localhost
BOT_TELEGRAM_TOKEN=<YOUR_BOT_TELEGRAM_TOKEN>
BOT_TELEGRAM_CHAT_ID=<YOUR_BOT_TELEGRAM_CHAT_ID>
# only serice
MONGODB_URL=<YOUR_MONGODB_URI>/vnoi-user
# global
RABBITMQ_URL=amqp://localhost
BOT_TELEGRAM_TOKEN=<YOUR_BOT_TELEGRAM_TOKEN>
BOT_TELEGRAM_CHAT_ID=<YOUR_BOT_TELEGRAM_CHAT_ID>
# only serice
MONGODB_URL=<YOUR_MONGODB_URI>/vnoi-exercise
MAX_SUBMISSION=50
# global
RABBITMQ_URL=amqp://localhost
BOT_TELEGRAM_TOKEN=<YOUR_BOT_TELEGRAM_TOKEN>
BOT_TELEGRAM_CHAT_ID=<YOUR_BOT_TELEGRAM_CHAT_ID>
# only serice
STRING_SPLIT_TESTCASE=>----------<
DOCKER_LIMIT_TIME=10
DOCKER_LIMIT_MEMORY=256
MAX_SUBMISSION=50
PAGE_SIZE=9
GCC_IMAGE=gcc:13.2.0
# global
RABBITMQ_URL=amqp://localhost
BOT_TELEGRAM_TOKEN=<YOUR_BOT_TELEGRAM_TOKEN>
BOT_TELEGRAM_CHAT_ID=<YOUR_BOT_TELEGRAM_CHAT_ID>
Trong thư mục gateway và user, di chuyển file
firebase.json
lúc nãy vào. Thư mục sẽ có cấu trúc như sau:
|--- index.js
|--- firebase.json
|--- index.js
|--- firebase.json
Ở 6 folder, Chạy lệnh
npm install
ở từng folder để tải xuống các thư viện.Cuối cùng
npm run dev
để khởi chạy service, dòng lệnh thông báo trả ra có dạng như sau:
> [email protected] dev D:\Workspace\Web\vnoi-microservice\server\gateway
> cross-env NODE_ENV=dev nodemon server.js
[nodemon] 3.1.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,cjs,json
[nodemon] starting `node server.js`
(node:12900) ExperimentalWarning: Import assertions are not a stable feature of the JavaScript language. Avoid relying on their current behavior and syntax as those might change in a future version of Node.js.
(Use `node --trace-warnings ...` to show where the warning was created)
(node:12900) ExperimentalWarning: Importing JSON modules is an experimental feature and might change at any time
GATEWAY-SERVICE 9000 | Firebase admin initialized
GATEWAY-SERVICE 9000 | Running
Tiếp tục khởi động thêm 5 service còn lại tương tự.
Khởi động Client
Vào thư mục client của dự án, thêm file
.env.local
vào thư mục gốc với các nội dung sau:
VITE_MODE=dev
VITE_API_URL=http://localhost:8000
VITE_FIREBASE_API_KEY=<YOUR_FIREBASE_API_KEY>
VITE_FIREBASE_AUTH_DOMAIN=<YOUR_FIREBASE_AUTH_DOMAIN>
VITE_FIREBASE_PROJECT_ID=<YOUR_FIREBASE_PROJECT_ID>
VITE_FIREBASE_STORAGE_BUCKET=<YOUR_FIREBASE_STORAGE_BUCKET>
VITE_FIREBASE_MESS_SENDER_ID=<YOUR_FIREBASE_MESS_SENDER_ID>
VITE_FIREBASE_APP_ID=<YOUR_FIREBASE_APP_ID>
VITE_FIREBASE_MEASUREMENT_ID=<YOUR_FIREBASE_MEASUREMENT_ID>
VITE_FIREBASE_DATABASE_URL=<YOUR_FIREBASE_DATABASE_URL>
VITE_PAGE_SIZE=9
Ở thư mục gốc client, dùng lệnh
npm install
để tải xuống các thư việnCuối cùng dùng lệnh
npm run dev
để khởi động client, thông báo trả về sẽ có dạng như sau:
> [email protected] dev
> vite
VITE v4.4.9 ready in 550 ms
➜ Local: http://localhost:5173/
...
Đến đây, hệ thống đã có thể khởi chạy. Nhưng để quản lý các thông tin, cần có một user có quyền ADMIN. Truy cập vào hệ thống qua
http://localhost:5173
sau đó đăng nhập bằng tài khoản Google vào ứng dụng.Dùng MongoDB Compass vào collection User, thay đổi role của người dùng thành ADMIN. Sau khi đăng nhập lại bạn sẽ thấy được phần quản lý của ADMIN bên sidebar.

Tuyệt! Vậy là ứng dụng đã có thể chạy một cách hoàn chỉnh. Hướng dẫn sử dụng các tính năng sẽ được cập nhật trong tương lai, hãy chờ đón nhé!
Last updated