본문 바로가기

Tech

AWS EC2에 Hermes Agent 설치 및 Slack Chatbot 연동

안녕하세요 G1N4입니다 :-)

게으름이 심해질수록 자동화에 관심이 생기는 건 어쩔 수 없는 것 같습니다... 최근 관심 있는 정보들을 매일 받아보는 작업들을 하고 있는 와중에 Hermes Agent가 자동화 작업을 스케줄링하고, 경험을 통해 스스로 학습까지 한다기에 흥미로워서 진행해 보았습니다.

 

 

[트레이드오프1: VPS vs AWS EC2]

영상 속 유튜버는 VPS (+ Docker) + Slack chatbot 연동으로 구현했는데, 저는 매달 비용이 나가는 VPS 대신 현재 크레딧이 있는 프리티어 계정을 사용하여 AWS EC2로 동일하게 구현하였습니다.

//인프라스펙
Region : ap-northeast-2 (서울)
OS : Ubuntu 24.04.4 LTS
Instance : t2.micro (1 vCPU / 1GB RAM / 20GB gp3)
Swap : 2GB (메모리 부족 대비)

 

 

[트레이드오프 2: EC2 VS EC2+Docker]

EC2에 Hermes를 바로 설치할까, Docker 위에 올릴까 고민하다가 관리 편의성과 확장성을 고려해 후자로 결정했습니다.

추가로 t2.micro는 RAM이 1GB로 메모리가 빠듯할 상황을 대비해 swap 2GB를 미리 설정해 두었습니다.

  EC2 직접 설치 EC2 + Docker
장점 설치 단순, 메모리 오버헤드 없음 업데이트/제거 간편, 환경 격리, 이식성
단점 업데이트/제거 번거로움, 환경 오염 가능 Docker 설치 필요, 약간의 메모리 추가 사용

 

[트러블슈팅 1: 도커 이미지 못 받는 문제]

감히 혼자 예측하고 docker-compose.yml의 image를 작성했더니 GitHub 로그인이 필요하다며 unauthorized 에러가 발생했습니다. 부랴부랴 공식문서 확인하고 아래처럼 수정하니 거짓말같이 정상 다운로드가 됐습니다.

//기존
image: ghcr.io/nousresearch/hermes-agent:latest

//수정 후
image: nousresearch/hermes-agent:latest

 


[트러블슈팅 2
라 부르고 삽질: Dashboard 연동]

챗봇 연동과는 상관없었지만, 이왕 하는 김에 해보았는데...여기서 시간을 많이 잡아먹었네요. Dashboard의 기본 포트가 9119인 걸 확인 후 아래 순서로 진행했습니다.

 

1. docker-compose.yml에 gateway와 dashboard 서비스를 아래와 같이 추가

services:
  hermes-gateway:
    image: nousresearch/hermes-agent:latest
    container_name: hermes-gateway
    restart: unless-stopped
    command: [hermes, gateway, run]
    env_file: hermes.env
    environment:
      HERMES_HOME: /home/hermes
    volumes:
      - ./hermes_data:/home/hermes

  hermes-dashboard:
    image: nousresearch/hermes-agent:latest
    container_name: hermes-dashboard
    restart: unless-stopped
    depends_on: [hermes-gateway]
    command: [hermes, dashboard, --host, 0.0.0.0, --port, "9119", --no-open]
    env_file: hermes.env
    environment:
      HERMES_HOME: /home/hermes
    volumes:
      - ./hermes_data:/home/hermes
    ports:
      - "9119:9119"

 

2. AWS Security Group 인바운드 추가

EC2 콘솔 → 해당 인스턴스 선택 → 하단 보안 탭 → 보안 그룹 클릭 → 인바운드 규칙 편집 클릭 → 규칙 추가 클릭 → 아래 이미지 참고 작성(Custom TCP / 9119 / 내 공인 IP) → 규칙 저장 클릭

 

3. Dashboard 실행 확인

docker compose logs -f hermes-dashboard

//해당 내용 확인
HERMES_DASHBOARD_READY port=9119
Hermes Web UI → http://0.0.0.0:9119

 

4. basic_auth 설정

Dashboard를 0.0.0.0으로 외부 공개하려면 인증 설정이 필수입니다. 설정 누락 시 아래 오류와 함께 실행을 거부합니다. 저는 자동적용이 안 돼서 수동으로 진행했습니다.

Refusing to bind dashboard to 0.0.0.0

 

자동 적용 방법

-1. 사용자명 설정

export DASHBOARD_USER=유저명

-2. 비밀번호 입력 (-s 옵션으로 입력값 화면 미표시)

read -s -p "Dashboard password: " 패스워드
echo

-3. 비밀번호 해시 생성

DASHBOARD_HASH=$(
docker run --rm \
  --entrypoint python \
  -e DASHBOARD_PASS="패스워드" \
  nousresearch/hermes-agent:latest \
  -c "from plugins.dashboard_auth.basic import hash_password; import os; print(hash_password(os.environ['DASHBOARD_PASS']))"
)

 

수동 적용 방법

-1. 자동 반영이 안 될 경우 config.yaml을 직접 수정합니다.

sudo nano ./hermes_data/config.yaml
dashboard:
  basic_auth:
    username: 유저명
    password_hash: 생성된 HASH

-2. 수정 후 재시작

docker compose restart hermes-dashboard

 

 

5. 브라우저 접속

http://<EC2_PUBLIC_IP>:9119

 

6. #4에서 설정한 유저명과 패스워드를 입력하여 로그인

 

7. 대시보드 접속 성공!

 

[Slack 연동]

유튜버도 연동 과정에서 오류를 만났다고 했는데, 자세한 튜토리얼 덕분에 저는 이슈 없이 쭉 따라갈 수 있었습니다 ;-)

 

도움이 되셨길 바라며, 그럼 다음 글에서 만나요 ;-)

 

 

[참조링크]


VPS 대신 AWS EC2로 Hermes Agent 무료 운영하기 | YouTube 

Web Dashboard | Hermes Agent

Docker | Hermes Agent