VNOI - HCMC
  • 💡Giới thiệu
  • Cài Đặt
    • ⚙️Chuẩn bị môi trường
    • 💻Chạy ứng dụng
Powered by GitBook
On this page
  • Tạo Bot Telegram (Tuỳ chọn)
  • Khởi tạo Firebase
  • Khởi động Docker
  • Khởi động RabbitMQ
  • Khởi động Server
  • Khởi động Client
  1. Cài Đặt

Chạy ứng dụng

Các bước để có thể khởi động ứng dụng.

PreviousChuẩn bị môi trường

Last updated 1 year ago

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ỗi BOT_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 , 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).

Nếu có lỗi khi khởi động, hãy xem lại bước cài đặt Docker.

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:

cmd
>  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

gateway/.env
# 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
common/.env
# 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
user/.env
# 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
exercise/.env
# 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
compiler/.env
# 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
logging/.env
# 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:

server/gateway
|--- index.js
|--- firebase.json
server/user
|--- 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:

cmd
> gateway@1.0.0 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ự.

Nếu muốn các log lỗi gửi về Telegram hãy dùng câu lệnh npm run prod thay vì npm start. Trong môi trường dev, thay vì gửi log lỗi, chúng sẽ được hiện ra ở giao diện console.

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:

client/.env.local
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ện

  • Cuố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:

cmd
> vnoi-nckh@0.0.0 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é!

💻
firebase
Giao diện Service Accounts
Thông tin config của Firebase phía Client
Giao diện Sign-in method sau khi bật xác thực bằng tài khoản Google
Giao diện Realtime Database Firebase
Giao diện RabbitMQ
Thay đổi vai trò của người dùng