개인 프로젝트에 테스트용으로 LLM을 붙여야 할 일이 생겼다. 테스트용인데 크레딧 충전하기는 싫고, 예전에 오픈클로 가지고 놀 때가 생각이 나서 그거처럼 API 키 말고 ChatGPT 계정으로 LLM 연결하는 방법이 없나 찾아보니까 이미 관련 프로젝트가 있었다. (어차피 GPT 구독 중인데 절대로 돈을 안 내겠다는 의지;;)
구독에 포함된 Codex와 통신하는 OpenAI 호환 API를 제공하는 프로젝트이다. 코덱스 사용량을 소모하며 기존 openai api 주소만 이 서버로 바꾸기만 하면 바로 사용할 수 있다.
https://github.com/hotchpotch/openai-api-server-via-codex
~/.codex/auth.json 파일을 참고하기 때문에 코덱스에 로그인이 되어 있어야 한다. 아래 명령어로 로그인할 수 있다.
codex login
그리고 파이썬 패키지로 제공되기 때문에 ux를 사용 중이라면 아래 명령어로 서버를 바로 실행할 수 있다.
uvx openai-api-server-via-codex
이제 기존 OpenAI SDK는 그대로 사용하고 OPENAI_BASE_URL만 로컬 주소(http://127.0.0.1:18080/v1)로 바꾸면 된다. OPENAI_API_KEY는 호환 서버에서는 상관이 없으니 그냥 아무 값이나 넣으면 된다. 참고로 서버는 go로 만들어졌다고 한다.
이게 간단하게 로컬에서 서버를 띄워서 사용하는 방법이고, 나는 24시간 언제든지 사용할 수 있게끔 개인 서버에 도커로 올리려고 한다. 사실 테스트 용도기 때문에 굳이 새로 도커 이미지를 빌드하고 싶진 않아서 그냥 베이스 이미지 안에서 직접 서버를 설치하고 실행하는 방법을 택했다.
- 패키지 유지용 볼륨 생성
docker volume create codex-auth
docker volume create codex-local
- 최초 설치용 컨테이너 실행
docker run -d \
--name codex-api \
-p 18080:18080 \
-v codex-auth:/root/.codex \
-v codex-local:/root/.local \
-v /etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt:ro \
-e npm_config_prefix=/root/.local \
-e UV_TOOL_DIR=/root/.local/share/uv/tools \
-e UV_TOOL_BIN_DIR=/root/.local/bin \
-e UV_PYTHON_INSTALL_DIR=/root/.local/share/uv/python \
-e PATH=/root/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
node:22-bookworm-slim \
sleep infinity
- 컨테이너 접속
docker exec -it codex-api bash
- 최초 설치
apt-get update
apt-get install -y curl
npm install -g @openai/codex
curl -LsSf https://astral.sh/uv/install.sh | sh
uv tool install openai-api-server-via-codex
- Codex 로그인
codex login --device-auth
- 컨테이너 삭제
docker rm -f codex-api
- 새 컨테이너 생성. OPENAI_VIA_CODEX_API_KEY 환경변수를 지정해서 OPENAI_API_KEY를 강제할 수 있다. 외부에 열리는 서버라 추가함.
docker run -d \
--name codex-api \
--restart unless-stopped \
-p 18080:18080 \
-v codex-auth:/root/.codex \
-v codex-local:/root/.local \
-v /etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt:ro \
-e npm_config_prefix=/root/.local \
-e UV_TOOL_DIR=/root/.local/share/uv/tools \
-e UV_TOOL_BIN_DIR=/root/.local/bin \
-e UV_PYTHON_INSTALL_DIR=/root/.local/share/uv/python \
-e PATH=/root/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
-e OPENAI_VIA_CODEX_API_KEY='SECRET-KEY' \
node:22-bookworm-slim \
openai-api-server-via-codex \
--host 0.0.0.0 \
--port 18080
이제 OPENAI_BASE_URL을 해당 서버 주소로 사용하면 된다.
이런 식으로 코덱스를 사용하는 게 OpenAI에서 원하는 방식은 아니겠지만 일단 OpenAI는 이런 쪽으로 관대(?)한 편이니까..? 괜찮겠지..?
'프로그래밍 > 기타' 카테고리의 다른 글
| [Go] go install로 설치된 바이너리를 업데이트하는 도구 (0) | 2026.06.24 |
|---|---|
| [Go/자작] 게임 세이브 백업 매니저 (0) | 2026.03.01 |
| 원격에서 삭제된 브랜치를 모두 삭제하는 커스텀 명령어 (0) | 2024.10.18 |
| [Batch] 관리자 권한 획득하기 (0) | 2024.04.28 |
| 포크한 리포지토리를 원본과 동기화 하기 (0) | 2022.04.09 |
| [Shell Script] 윷놀이 (0) | 2019.06.29 |
| [Batch] 파일 다운로드 (3) | 2018.11.08 |
| [Batch] help 명령어에 안나오는 명령어 모음 (0) | 2018.11.07 |


