1. Các thông tin về ec2 đã được setup dựa trên video anh Đạo hướng dẫn https://drive.google.com/file/d/1q9PZ8FKo26E0cdwYKDXY-i6_BvPUtDdm/view
  2. Các thông tin cơ bản được lưu trữ ở đây

Nextune

  1. Setup các key trên Github (Vào repo → settings/secrets/actions)

    Thông tin các keys này nằm trong file trên

image.png

  1. Mỗi lần chạy lại instance trên awc thì địa chỉ ip sẽ đổi, vì vậy trước khi deploy cần lên trên instance lấy địa chỉ ip mới rồi thay vào host.

    Ở đây lưu ý vùng và Singapore, và địa chỉ ip lấy ở Public IPv4 address

    image.png

    image.png

Vậy là xong bước setup môi trường, bây giờ cần setup thêm môi trường cho máy chủ ec2

  1. Kết nối với máy chủ

    Mở thư mục chứa aws_ec2_keypair rồi vào git bash

    image.png

    Chạy:

    Ở đây, **3.0.104.231** là địa chỉ ip được lấy từ instance có đề cập ở bước trên

    Sau đó nó chạy dòng lệnh, rồi bấm yes, cuối cùng thấy hiện ra con đại bàng là ok

  2. Cài docker và docker compose

    Kiểm tra

    docker --version docker compose version

    docker-compose --version

    À chỗ này nếu không được thì thêm tiền tố sudo

    Nếu không được thì tự fix nha 🥴

Okay, vậy là xong 2 lần setup ở dưới github action và trên aws, bây giờ ta bắt đầu deploy

  1. Bây giờ mình đang setup khi push code lên master ở file ci/cd thì sẽ bắt đầu luồng chạy:

    CI/CD này làm gì?

    1. Trigger
      • Chạy mỗi khi bạn git push lên branch master.
    2. Biến môi trường chung
      • DOCKER_IMAGE=leetuan0342/my-spring-app
      • DOCKER_TAG=1.0
    3. Job 1: build
      • Checkout code từ repo.

      • Cài JDK 21 (vì project Spring Boot).

      • Cài Docker BuildX để build image.

      • Login Docker Hub (dùng secrets.DOCKERHUB_USERNAME + secrets.DOCKERHUB_TOKEN).

      • Build + push image lên Docker Hub:

        docker build -t leetuan0342/my-spring-app:1.0 .
        docker push leetuan0342/my-spring-app:1.0
        
      • Copy file compose.yml sang server EC2 (IP 3.0.104.231) qua scp-action.

    4. Job 2: deploy (chạy sau build)
      • SSH vào server EC2.
      • Tạo file .env chứa các biến DB (SPRING_DATASOURCE_URL, SPRING_DATASOURCE_USERNAME, SPRING_DATASOURCE_PASSWORD) từ GitHub Secrets.
      • Check xem trên server có docker compose hay docker-compose để chọn lệnh chạy.
      • Nếu user không có quyền docker thì tự động dùng sudo.
      • Login Docker Hub ngay trên server.
      • Tạo customer-network nếu chưa có.
      • Pull image mới từ Docker Hub.
      • docker compose down rồi docker compose up -d để chạy lại container.
      • In log và check xem container customer-service có chạy không. Nếu fail thì dừng job.
  2. Vào github action kiểm tra có lỗi không

  3. Nếu không có lỗi gì thì lên lại ec2, gõ

    sudo docker ps

    để list ra các container đang chạy, nếu không có tức đã bị lỗi ở bước deploy

    Một lỗi mà mình gặp dù đã deploy thành công nhưng không có container chạy là mình setup biến môi trường trên github action sai so với trong code,

  4. Nếu ok thì vào kiểm tra API

    http://3.0.104.231:8081/api/customers

    Thay host phù hợp