anh lam web image

Container healthcheck và tự động restart service sử dụng autoheal

Xin chào các bạn, mình lại trở lại đây. Bài viết hôm nay mình sẽ trình bày về service health checking và service recovery, mình có lòng tốt xây dựng 1 web service nhỏ, deploy lên để mọi người sử dụng, nhưng vì lý do nào đó thì bị các hacker vào mò mẫm và phá phách, làm cho web service của mình thường xuyên bị gián đoạn, hacker sau khi đạt được mục đích thì cười hả hê hahaha, còn mình thì phải mất thời gian truy cập vào server để restart lại service sau khi hacker đã làm cho nó bị lỗi và gián đoạn, nếu một lần, hai lần thì không sao nhưng rất nhiều lần thì mình phải nghĩ cách thôi. Sau khi tìm kiếm và tra cứu google thì mình thấy có một service rất hay đó là autoheal, service này sẽ giúp mình khởi động lại web service của mình nếu trạng thái của web service là unhealthy. Nếu service không được khỏe (unhealthy) thì autoheal sẽ tự chữa lành đúng như tên gọi của nó. Nào vào việc thôi các bạn không dài dòng nữa.

Đây là repository chứa code sample các bạn có thể clone về tham khảo nhé:

https://github.com/PhongVX/autoheal-docker-services

Xây dựng docker server đơn giản bằng NodeJS

Để tiến hành chạy thử nghiệm các bạn phải cài đặt thành công NodeJS và Docker, Docker Compose trên máy nhé. 

Clone dự án mẫu về:

git clone https://github.com/PhongVX/autoheal-docker-services.git

Sau đó vào thư mục server để cài dependencies cần thiết.

cd server

Chạy lệnh yarn để cài đặt, nếu các bạn chưa có yarn thì hãy cài yarn bằng lệnh ```npm i -g yarn``` nhé.

yarn

Bởi vì mình có cấu hình cho dự án này sử dụng typescript nên cần phải build ra Javascript để chạy bằng lệnh:

yarn build

Sau khi build từ Typescript sang Javascript mình đã có folder dist trong này sẽ chứa những file Javascript đã được build ra.

Tiếp theo mình sẽ build docker image cho web server này. 

sudo docker build -t my-simple-server .

Kiểm tra xem image đã được build ra chưa bằng lệnh

sudo docker images

Chạy docker-compose chứa web service và autoheal

Để chạy được thì các bạn phải hoàn thành các bước phía trên, sau khi đã hoàn thành các bạn chạy lệnh:

sudo docker-compose up -d

Và đây là kết quả:

Test thử xem service có tự động restart lại không?

Mình sẽ xem id của container web service bằng lệnh 

sudo docker ps

Tạm dừng webservice bằng lệnh với <simple-server-container-id> là id của web service mình biết được từ bước trên:

docker pause <simple-server-container-id>

Thử truy cập http://localhost:5000 xem có được không nhé, nếu không được thì kết quả này như mình đã dự tính.

Mình chờ trong khoảng thời gian là 1 phút, dựa trên biến môi trường AUTOHEAL_INTERVAL mình đã thiết lập ở docker-compose.yml file. Đã hết thời gian 1 phút rồi, truy cập lại lần nữa web service sẽ sống lại thôi.

Chúc các bạn thành công.