강의

멘토링

커뮤니티

Inflearn Community Q&A

insamdrink3364's profile image
insamdrink3364

asked

[Part 1: Basics] OpenClaw.AI Master Class: Creating Your Own Autonomous AI Agent with Gemini and Docker

Minimum defense strategies to protect my secretary

auth-profiles.json 내 google_api_key 하드코딩 제거시 오류

Written on

·

24

0

image.pngimage.png

강의대로 진행해서 WSL2 Ubuntu Bash를 이용해 게이트웨이 토큰과 제미나이 API KEY를 환경변수로 지정(Echo까지 확인하였음)하였습니다.

이후 auth-profiles.json에서 key: ""으로 두는 경우에 오픈클로가 api키가 없다고 합니다.

다시 KEY를 넣으면 제대로 작동하고요. 도와주세요!

 

 

docker업무-생산성geminiai-agentopenclaw

Answer 2

0

Kevin님의 프로필 이미지
Kevin
Instructor

결론부터 말하면, 이 현상은 auth-profiles.json은 비워도 되는데, 실제 컨테이너 안에서는 API 키 환경변수를 못 보고 있는 상태일 가능성이 가장 큽니다.

해결을 위해서 제일 먼저 WSL2 Ubuntu → Docker 컨테이너 안까지 키가 제대로 전달됐는지 순서대로 확인해 보셔야 합니다.
- 추측만 해보면, 진수님이 echo로 확인하셨다는게 아마도 윈도우즈에서 Ubuntu(WSL2의 Ubuntu)를 열어서 API 키가 출력되는걸 확인하셨을 가능성이 높아보여요.
- 좀 헷갈리긴 하실텐데 실제로 echo로 확인해야하는 곳은 WSL2에서 돌아가는 Ubuntu가 아니라 도커 컨테이너 내부에서 돌아가는 리눅스 OS(데비안)인데요. 이건 아래에서 어떻게 확인하는지 가이드를 남겨 놓을게요.


먼저 정리하고 싶은 점은, 이 강의에서는 Windows 시스템 환경변수는 전혀 쓰지 않고(이건 당연히 그렇게 하셨을거라 생각해요),
반드시 WSL2 Ubuntu 터미널에서만 API 키를 export 해서 사용합니다.

# WSL2 Ubuntu 터미널 안에서 vi로 ~/.bashrc 열어서
export GEMINI_API_KEY="your-real-key"
echo $GEMINI_API_KEY # 여기까지는 WSL 세션 안에서만 유효

여기서 echo로 값이 보이면 “WSL2 셸 안에는 잘 들어갔다”는 뜻이지만,
OpenClaw는 Docker 컨테이너 안에서 돌아가기 때문에, 컨테이너 내부 환경변수에 이 값이 들어왔는지를 따로 확인해야 합니다.


1) docker-compose.yml에서 컨테이너로 환경변수를 넘기는지 확인

docker-compose.ymlenvironment: 블록에 API 키를 넘겨주는 설정이 있는지 먼저 확인해 주세요. 예를 들어:

services: 
    openclaw-gateway: 
        environment: 
            - GEMINI_API_KEY=${GEMINI_API_KEY}

이 항목이 없다면, WSL2에서 export를 해도 컨테이너 안으로는 키가 전달되지 않습니다.
이 상태에서 auth-profiles.json"key": ""로 비워두면, 파일에서도 못 찾고 env에서도 못 찾아서 “API 키가 없다”고 에러를 내는 게 정상 동작입니다.


2) 컨테이너 내부에서 실제로 환경변수가 보이는지 확인

WSL2의 Ubuntu가 아닌 도커 컨테이너 안의 리눅스(데비안)에서 직접 echo로 확인해 보시면 가장 확실합니다.

# WSL2 Ubuntu에서, 컨테이너 안으로 들어가기 
docker compose exec openclaw-gateway /bin/bash 
# 컨테이너 내부로 들어오면 `node@0ec632f45846:/app$` 이런식으로 입력창이 바뀜
# 컨테이너 내부 셸에서 API 키 확인. 
node@0ec632f45846:/app$ echo $GEMINI_API_KEY
  • 여기서 실제 키 문자열이 출력되면 → 컨테이너 내부까지 env가 잘 전달된 상태입니다.

  • 아무 것도 안 나오면 → 아직 컨테이너 안에는 키가 없는 상태이고,

    • environment:가 빠졌거나,

    • 키를 export한 뒤 컨테이너를 재시작하지 않았거나,

    • export를 다른 셸(다른 WSL 세션)에서 한 경우일 수 있습니다.

    • 그리고 정상적으로 WSL2에서 export 하고, docker-compose.yml 파일에서 environment:로 환경변수를 넘겨주는 설정을 했더라도 열려있는 Ubuntu 터미널 창을 완전히 껏다가 다시 열어서 확인하는게 혼선을 줄이는 방법입니다.

환경변수 설정을 바꾼 뒤에는:

docker compose down

그리고, WSL2의 Ubuntu 터미널 창을 완전히 닫고 다시 열어서,

docker compose up -d

로 게이트웨이를 다시 올리는게 가장 확실합니다.


3) auth-profiles.json과의 관계

auth-profiles.json에서 "key": ""로 비워두면,
“프로파일 파일에는 키를 하드코딩하지 않고, 환경변수에서 가져오겠다”는 의미가 됩니다.

그래서:

  • 컨테이너 안 환경변수에 GEMINI_API_KEY 가 제대로 들어와 있으면 → key: "" 상태에서도 정상적으로 동작합니다.

  • 반대로 컨테이너 안에서 echo $GEMINI_API_KEY가 비어 있다면 → OpenClaw 입장에서는 “정말로 키가 없다” 상태라서, key에 직접 값을 넣을 때만 작동하는 것처럼 보이게 됩니다.


정리하면,

  • WSL2 Ubuntu에서만 export 하는 것이 맞고, Windows 환경변수는 사용하지 않습니다.

  • docker-compose.ymlenvironment:로 API 키를 컨테이너에 넘겨주는지 확인해 주세요.

     

  • 그 다음 docker compose exec openclaw-gateway /bin/bash로 컨테이너 안에 들어가서 echo $GEMINI_API_KEY 명령이 실제 키를 출력하는지 확인해 보시면, 왜 key: ""에서 오류가 나는지 바로 원인을 찾을 수 있을 거예요.

이렇게 확인해 보시고, 컨테이너 안 echo 결과와 docker-compose.ymlenvironment: 부분을 스크린샷으로 보내주시면, 필요한 경우 그 상태를 기준으로 한 번 더 같이 봐 드릴게요.

0

안녕하세요, 인프런 AI 인턴입니다. 하진수님.

항상 환경 변수를 통해 보안을 유지하려는 노력이 인상 깊습니다. 환경 변수를 사용하여 auth-profiles.json에서 하드코딩 없이 API 키를 설정하려는 경우의 문제점에 대해 말씀드리겠습니다.

문제 발생 원인:

  • 이미 환경 변수로 설정되어 있다고 하더라도, auth-profiles.json 파일 내에서 API 키가 비어 있을 경우, 관련 소프트웨어 또는 스크립트가 환경 변수를 올바르게 읽지 못하고 있습니다. 이는 환경 변수가 인식되지 않는다는 의미일 수 있습니다.

해결 방안:

  1. 환경 변수 설정 확인:

    • echo $YOUR_ENV_VARIABLE_NAME을 통해 환경 변수가 올바르게 설정되었는지 확인하세요. 환경 변수 지정 시에는 쉘의 문법 및 세션의 유효성을 반드시 확인해야 합니다.
  2. 환경 변수 불러오기:

    • 프로그램이 해당 환경 변수를 올바르게 불러오고 있는지 확인하세요. 개발 언어나 스크립트가 환경 변수를 인식할 수 있도록 설정을 확인해 주세요.
    • 예를 들어, Node.js에서는 process.env.YOUR_ENV_VARIABLE_NAME을 사용하여 환경 변수를 불러올 수 있습니다.
  3. auth-profiles.json의 키 설정:

    • JSON 파일 내에서 API 키를 반드시 환경 변수로 불러와 사용해야 하는 경우, 코드 내에서 이 값을 동적 로딩할 수 있도록 조치가 필요합니다.
  4. 스크립트 및 프로세스 검사:

    • API 호출을 관리하는 부분에서 환경 변수를 활용하도록 구현되어 있는지 확인해 주세요.

문제를 더욱 쉽게 해결할 수 있도록, 관련 링크에서 더 나은 정보나 예시를 확인 할 수 있습니다:
- Environment Variable 사용 방법 및 주의점 - 환경 변수 설정과 관련된 실제 문제 해결 사례를 확인할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

insamdrink3364's profile image
insamdrink3364

asked

Ask a question