Inflearn Community Q&A
auth-profiles.json 내 google_api_key 하드코딩 제거시 오류
Written on
·
24
0


강의대로 진행해서 WSL2 Ubuntu Bash를 이용해 게이트웨이 토큰과 제미나이 API KEY를 환경변수로 지정(Echo까지 확인하였음)하였습니다.
이후 auth-profiles.json에서 key: ""으로 두는 경우에 오픈클로가 api키가 없다고 합니다.
다시 KEY를 넣으면 제대로 작동하고요. 도와주세요!
Answer 2
0
결론부터 말하면, 이 현상은 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.yml의 environment: 블록에 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.yml의environment:로 API 키를 컨테이너에 넘겨주는지 확인해 주세요.그 다음
docker compose exec openclaw-gateway /bin/bash로 컨테이너 안에 들어가서echo $GEMINI_API_KEY명령이 실제 키를 출력하는지 확인해 보시면, 왜key: ""에서 오류가 나는지 바로 원인을 찾을 수 있을 거예요.
이렇게 확인해 보시고, 컨테이너 안 echo 결과와 docker-compose.yml의 environment: 부분을 스크린샷으로 보내주시면, 필요한 경우 그 상태를 기준으로 한 번 더 같이 봐 드릴게요.
0
안녕하세요, 인프런 AI 인턴입니다. 하진수님.
항상 환경 변수를 통해 보안을 유지하려는 노력이 인상 깊습니다. 환경 변수를 사용하여 auth-profiles.json에서 하드코딩 없이 API 키를 설정하려는 경우의 문제점에 대해 말씀드리겠습니다.
문제 발생 원인:
- 이미 환경 변수로 설정되어 있다고 하더라도,
auth-profiles.json파일 내에서 API 키가 비어 있을 경우, 관련 소프트웨어 또는 스크립트가 환경 변수를 올바르게 읽지 못하고 있습니다. 이는 환경 변수가 인식되지 않는다는 의미일 수 있습니다.
해결 방안:
환경 변수 설정 확인:
echo $YOUR_ENV_VARIABLE_NAME을 통해 환경 변수가 올바르게 설정되었는지 확인하세요. 환경 변수 지정 시에는 쉘의 문법 및 세션의 유효성을 반드시 확인해야 합니다.
환경 변수 불러오기:
- 프로그램이 해당 환경 변수를 올바르게 불러오고 있는지 확인하세요. 개발 언어나 스크립트가 환경 변수를 인식할 수 있도록 설정을 확인해 주세요.
- 예를 들어, Node.js에서는
process.env.YOUR_ENV_VARIABLE_NAME을 사용하여 환경 변수를 불러올 수 있습니다.
- 프로그램이 해당 환경 변수를 올바르게 불러오고 있는지 확인하세요. 개발 언어나 스크립트가 환경 변수를 인식할 수 있도록 설정을 확인해 주세요.
auth-profiles.json의 키 설정:
- JSON 파일 내에서 API 키를 반드시 환경 변수로 불러와 사용해야 하는 경우, 코드 내에서 이 값을 동적 로딩할 수 있도록 조치가 필요합니다.
- JSON 파일 내에서 API 키를 반드시 환경 변수로 불러와 사용해야 하는 경우, 코드 내에서 이 값을 동적 로딩할 수 있도록 조치가 필요합니다.
스크립트 및 프로세스 검사:
- API 호출을 관리하는 부분에서 환경 변수를 활용하도록 구현되어 있는지 확인해 주세요.
- API 호출을 관리하는 부분에서 환경 변수를 활용하도록 구현되어 있는지 확인해 주세요.
문제를 더욱 쉽게 해결할 수 있도록, 관련 링크에서 더 나은 정보나 예시를 확인 할 수 있습니다:
- Environment Variable 사용 방법 및 주의점 - 환경 변수 설정과 관련된 실제 문제 해결 사례를 확인할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




