이제 AI 서버인 FastAPI를 배포해보자
젠킨스 FastAPI용 pipeline
pipeline {
agent any
stages {
stage('github clone') {
steps {
git branch: '배포할 브랜치명', credentialsId: 'jenkins_token', url: '깃 래포 https 주소'
}
}
stage('Deployment') {
steps {
sshagent(credentials: ['ssh_key']) {
sh '''
ssh -o StrictHostKeyChecking=no ubuntu@ec2_public_ip
scp -r /var/jenkins_home/workspace/배포하는_젠킨스_item_이름/FastAPI_프로젝트_폴더명/ ubuntu@ec2_public_ip:/home/ubuntu/Ai/
ssh -t ubuntu@ec2_public_ip ./deploy_ai.sh
'''
}
}
}
}
}
/home/ubuntu 에서
mkdir Ai
폴더 만든 다음에
/home/ubuntu/deploy_ai.sh
cd Ai
sudo docker compose down
sudo docker compose up -d --build
yes | sudo docker system prune
생성한 뒤
sudo chmod -R 755 deploy_ai.sh
권한부여 하고,
/home/ubuntu/Ai/Dockerfile
FROM python:3.9
COPY ./requirements.txt /fastApiProject/requirements.txt
COPY ./.env /fastApiProject/.env
RUN pip install --no-cache-dir --upgrade -r /fastApiProject/requirements.txt
RUN cd /fastApiProject
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
/home/ubuntu/Ai/docker-compose.yml
version: "3"
services:
web:
build:
context: .
dockerfile: Dockerfile
image: mt-ai
container_name: mt-ai
ports:
- "8000:8000"
/home/ubuntu/Ai/requirements.txt
fastapi
uvicorn
openai
clarifai
nbformat
nbclient
nbconvert
이건 Dockerfile에서 프로젝트 빌드하면서 필요한 라이브러리 설치할 수 있도록 적어둔거다.
...
**COPY ./requirements.txt /fastApiProject/requirements.txt**
**RUN pip install --no-cache-dir --upgrade -r /fastApiProject/requirements.txt**
...
이 부분임!
/home/ubuntu/Ai/.env
CLARIFAI_API_KEY=
CHATGPT_API_KEY=
이건 환경변수 파일.
gitignore되어있어서 안올라가있으니까 서버에만 올려둔거임
일단 젠킨스는 잘 된다.
저 fastApiProject가 우리 깃 레포에 올라와있는 디렉토리 명이다.
디렉토리 안에 있는 코드들도 다 잘 가져와지는데..
main을 찾을 수 없다는건가..
아마 Dockerfile의
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
이 쪽 문제인 것 같은디..
main.py 권한 부여 문제인가 싶어서 Dockerfile에 권한부여 코드를 추가해주니까
#8 [web 4/5] RUN cd /fastApiProject
#8 CACHED
#9 [web 5/5] RUN chmod +x /main.py
#9 0.189 chmod: cannot access '/main.py': No such file or directory
그냥 저 main.py 파일을 찾을 수 없다고 한다..
함 해결해 봅시다. 다 함께. 잇쇼니
하 해결 완료
#10 [web 6/7] RUN pwd
#10 0.176 /fastApiProject
#10 DONE 0.2s
#11 [web 7/7] RUN ls -al
#11 0.271 total 16
#11 0.271 drwxr-xr-x 1 root root 4096 Sep 14 15:28 .
#11 0.271 drwxr-xr-x 1 root root 4096 Sep 14 15:42 ..
#11 0.271 -rw-r--r-- 1 root root 122 Sep 14 15:26 .env
#11 0.271 -rw-r--r-- 1 root root 32 Sep 14 13:54 requirements.txt
#11 DONE 0.3s
이건 젠킨스에서 배포할 때 Dockerfile에서 내가 띄운 로그인데, 보면 위치는 fastApiProject가 맞는데, 안에 아무런 코드가 없다.
보니까 내가 젠킨스에서 모든 코드들을 복사해서 안가져왔다..
그래서 Dockerfile에 복붙하는 코드를 추가해주면 해결
FROM python:3.8
COPY ./requirements.txt /fastApiProject/requirements.txt
COPY ./.env /fastApiProject/.env
WORKDIR /fastApiProject
RUN pip install --no-cache-dir --upgrade -r /fastApiProject/requirements.txt
# 이 코드
COPY ./fastApiProject /fastApiProject
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
굳굳