안녕하세요 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
'Tech' 카테고리의 다른 글
| Uncaught ReferenceError: jQuery is not defined (0) | 2025.05.22 |
|---|---|
| Uncaught SyntaxError: Unexpected token '<' (at jquery ...) (0) | 2025.05.21 |
| React http-proxy-middleware 404 (not found) (0) | 2025.05.16 |
| 최초커밋 메세지 수정 (0) | 2025.05.12 |
| Windows(윈도우) SSH키 생성 및 github 연결 (0) | 2025.05.11 |