[Installation] With Docker - sparc-software-hust/fmecg-web-server GitHub Wiki

Dựa theo flow install thủ công đã được giải thích tại đây. Chúng ta có thể thấy khá nhiều các package cần cài và điều đó có thể khá mất thời gian.
Việc team thêm một giải pháp dùng Docker sẽ giúp người mới không cần cài package thủ công (Docker do that for us), đồng thời xây dựng các services theo hướng độc lập và chạy Docker run từng services và kết nối với nhau. Các tools cần thiết:

  • Docker CLI: version: latest or version: 25.x.x
  • Docker Desktop: optional
  • Makefile

Yêu cầu với repo:

  • Có đủ 3 file .env.docker cho (server-web, bin, server_chat)

Yêu cầu với người dùng:

  • Có kiến thức cơ bản về Docker (images, containers, commands, Dockerfile, docker compose) (có thể tìm hiểu sau)

1. Cách run repo với Docker

1.1. Lưu ý cho lần đầu tiên chạy

  • Với lần chạy đầu tiên cần copy đủ 3 file env vào các folder tương ứng.

  • Các file lấy tại Pin Messages trong channel fmecg_discussion
    Screenshot 2024-06-05 at 11 48 48
    Screenshot 2024-06-05 at 11 49 45

  • Sau khi tải 3 file về, thực hiện copy: (giả sử mọi người đang đứng ở root directory của repo)

    • server-web-env-docker vào /server-web
    • bin-env-docker vào /frontend_web/bin
    • server-chat-env-docker vào /server_chat
  • Đổi tên tất cả các file được copy vào folder thành .env.docker

1.2. Cách run Docker

  • Cú pháp chạy (chạy từ root directory repo):
make name-of-command
  • Về cách flow run cụ thể đã được viết ở Makefile trong root directory repo, được giải thích chi tiết ở dưới đây:
# cho môi trường prod: k chạy dưới môi trường dev
app:
	docker compose rm -sf; \
	docker compose -f docker-compose.yml up --build --detach --pull "always"; \
	docker image prune -f

# chạy tất cả các container bao gồm cả node, react, bin, proxy, chat, database
dev:
	docker compose rm -sf; \
	docker compose --profile "*" -f docker-compose-dev.yml up --build --detach; \
	docker image prune -f

# chỉ chạy sau khi `make dev` hoặc `make app` thành công, dùng để logs các container đang chạy
log:
	docker compose logs -f --tail=10

# chỉ chạy sau khi `make dev` hoặc `make app` thành công, access vào container node
node:
	docker exec -it node-fmecg sh

# access vào db mysql
db:
	docker exec -it database-fmecg sh

# access vào db postgresql
dbchat:
	docker exec -it database-chat-fmecg sh

# chỉ chạy server (không chạy react và bin), sau khi chạy sẽ vào thẳng interactive shell của server-chat 
chatdev:
	docker compose rm -sf; \
	docker compose --profile backend -f docker-compose-dev.yml up --build --detach; \
	docker exec -it chat-fmecg iex -S mix phx.server
  • NOTE: sau khi thực hiện chạy xong cần cấp 1 quyền cho mysql (sẽ fix sau) (MYSQL_ROOT_PASSWORD trong .env.docker)
make db
mysql -u -root - p
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY MYSQL_ROOT_PASSWORD;
flush privileges;