공식 문서에는 2.5.0 버전으로 설치를 진행하게 되어 있지만, 최근까지 계속 메인테이너가 개발을 하고 있고 Stable Version이 2.7.3이여서 해당 버전으로 개선안을 작성했습니다.
2-1. Agent 컨테이너에 Python 환경 구성
기존 빌드된 컨테이너에는 Python 환경이 구성되지 않았습니다. Python을 실행하기 위해서 기존 이미지를 바탕으로 새로운 이미지를 빌드해야 했습니다. Python과 의존성을 가지는 환경을 Dockerfile로 구성했습니다. Python 환경, 파일들을 공유할 폴더도 생성하도록 추가했습니다.
Python은 UV 기반으로 구성할 예정이여서 설치 스크립트가 추가되어 있습니다. 사용하는 환경에 따라서 Dockerfile 구성을 변경하면 됩니다.
FROM sosberlin/js7:agent-2-7-3
RUN apk add \
wget \
gcc \
make \
zlib-dev \
libffi-dev \
openssl-dev \
musl-dev
RUN apk add --no-cache python3 python3-dev py3-pip
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
ENV PATH="$PATH:/root/.cargo/bin"
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
ENV PATH="$PATH:/root/.local/bin"
RUN mkdir /var/sos-berlin.com/js7/agent/workspace
파이썬 사용 시 주의사항
JS7 JobScheduler에서 사용한 컨테이너는 Alpine Linux 를 사용했습니다. Alpine Linux는 C 컴파일에 musl을 사용하기 때문에 Python의 특정 라이브러리를 설치 시 binary wheel 을 사용하지 못합니다. 그래서 설치시 C 코드를 컴파일해야 하는 문제점이 발생합니다. 해당 문제 때문에 설치 시간이 기존 보다 몇 (십)배는 느려지는 이슈가 있습니다. 그래서 라이브러리 사용에 제약 사항이 발생할 수 있습니다.
2-2. docker-compose 통합 및 Agent 다중화
문서에는 Agent, Controller, JOC를 각각의 docker-compose 파일로 분리했었습니다. 개발 환경을 구성할 떄 편리함을 위해서 한 개의 docker-compose 파일로 통합하였습니다.
그리고 Enterprise 버전을 사용하지 않더라도 여러 개의 Standalone Agent를 Controller에 등록할 수 있습니다. 그래서 여러 개의 Agent를 사용하도록 deploy 옵션을 추가했습니다. Replicas 옵션은 dotenv에서 수정할 수 있도록 하였습니다.
그리고 각 Agent가 실행할 코드를 공유할 수 있도록 docker volume를 추가하였습니다. Python 코드를 Git Repo에서 Pull 방식으로 배포 후 Agent 에서 사용할 수 있도록 하기 위해 해당 방법으로 구성 하였습니다.. Rolling이나 Blue/Green 등배포 전략을 사용하기에는 Agent 를 Controller에서 등록하는 방식때문에 배포 전략을 사용하기 어려운 점도 고려했습니다.