- node 22.13
- React (Vite) 18
- VS Code
- Spring Boot
- JDK 17
- JAR 이용
- IntelliJ 최신 버전 이용
- 제공된 AWS 서버 사용
- OpenVidu 2.31
- Redis 7.4.2
- MySQL 8.4.4
- 젠킨스
- FastAPI
- OpenAI (GPT-4o-mini)
- LangChain
FROM jenkins/jenkins:lts
USER root
# 필요한 패키지 설치
RUN apt-get update && apt-get install -y docker.io openssl
# Node.js와 npm 설치
RUN curl -sL https://deb.nodesource.com/setup_20.x | bash - \
&& apt-get update && apt-get install -y nodejs \
&& npm install -g npm
# Let's Encrypt 인증서 복사 (Dockerfile과 같은 디렉토리에 인증서가 있다고 가정)
COPY fullchain.pem /var/jenkins_home/certs/fullchain.pem
COPY privkey.pem /var/jenkins_home/certs/privkey.pem
# 인증서를 JKS 형식으로 변환하는 스크립트 추가
RUN openssl pkcs12 -export -in /var/jenkins_home/certs/fullchain.pem -inkey /var/jenkins_home/certs/privkey.pem \
-out /var/jenkins_home/certs/jenkins.p12 -name jenkins -passout pass:changeit && \
keytool -importkeystore -deststorepass changeit -destkeypass changeit -destkeystore /var/jenkins_home/certs/jenkins.jks \
-srckeystore /var/jenkins_home/certs/jenkins.p12 -srcstoretype PKCS12 -srcstorepass changeit -alias jenkins
# Jenkins 사용자 권한 설정
RUN chown -R jenkins:jenkins /var/jenkins_home/certs
# Jenkins 실행 명령어 변경
USER jenkins
ENV JENKINS_OPTS="--httpPort=-1 --httpsPort=8080 --httpsKeyStore=/var/jenkins_home/certs/jenkins.jks --httpsKeyStorePassword=Alltogether33!"
- 빌드 후 프론트 dockerfile을 통해 docker 생성 (frontend-app)
# Step 1: Nginx 이미지 사용
FROM nginx:alpine
# 기존 Nginx 페이지 삭제
RUN rm -rf /usr/share/nginx/html/*
COPY default.conf /etc/nginx/conf.d/default.conf
# 포트 노출
EXPOSE 5173
EXPOSE 443
# Nginx 실행
CMD ["nginx", "-g", "daemon off;"]
- 미리 저장해둔 nginx conf 파일 사용
파일 첨부
- 젠킨스 Credentials를 활용하여 application-secret.properties 로드 (파일 첨부)
# 젠킨스에서 Credentials를 이용하여 application-secret.properties 로드 (파일 첨부)
withCredentials([file(credentialsId: 'app_secret', variable: 'SECRET_FILE')]) {
sh 'rm -rf $WORKSPACE/backend/lv-up-backend/src/main/resources/application-secret.properties'
sh '''
echo "Secret file path is $SECRET_FILE"
mkdir -p $WORKSPACE/secret_files
cp $SECRET_FILE $WORKSPACE/backend/lv-up-backend/src/main/resources/application-secret.properties
chmod 644 $WORKSPACE/backend/lv-up-backend/src/main/resources/application-secret.properties
'''
}
# https를 위한 인증서 복사
sh '''
cd $WORKSPACE
cd ..
cd nginx_conf
cp ./keystore.p12 $WORKSPACE/backend/lv-up-backend/src/main/resources
'''
# 테스트 없이 빌드 후
# jar 파일 복사
sh '''
JAR_FILE=$(find backend/lv-up-backend/build/libs -type f -name "*.jar" | grep -v plain | head -n 1)
echo "Jar file found: $JAR_FILE"
mkdir -p $WORKSPACE/backend
cp $JAR_FILE $WORKSPACE/backend/
'''
- https:443, http:5173으로 실행
sh 'docker run -d -p 443:443 -p 5173:80 -e TZ=Asia/Seoul -v /home/ubuntu/jenkins-data/workspace/프론트/frontend/lv_up_FrontEnd/dist:/usr/share/nginx/html -v /etc/letsencrypt:/etc/letsencrypt:ro --name frontend frontend-app'
sh 'docker run --name backend -d -e TZ=Asia/Seoul -v /home/ubuntu/jenkins-data/workspace/백엔드/backend:/app -p 9090:9090 openjdk:17 sh -c "chmod +x /app/lv-up-backend-0.0.1-SNAPSHOT.jar && java -jar -Dserver.port=9090 /app/lv-up-backend-0.0.1-SNAPSHOT.jar"'
version: "3.9"
services:
fastapi-langchain:
build:
context: ./fastapi-langchain
container_name: fastapi-langchain
ports:
- "8000:8000"
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
# Langsmith
- LANGSMITH_TRACING=true
- LANGSMITH_ENDPOINT="https://api.smith.langchain.com"
- LANGSMITH_PROJECT=${LANGSMITH_PROJECT}
- LANGSMITH_API_KEY=${LANGSMITH_API_KEY}
# spring-backend
- WEBHOOK_URL_EXPLANATION=${WEBHOOK_URL_EXPLANATION}
- WEBHOOK_URL_HINT=${WEBHOOK_URL_HINT}
- .env: FastAPI 관련 env
- application.properties (백엔드에 폴더 내부에 파일 존재)
- application-secret.properties (별첨): db정보, https 정보, cors 설정정
- default.conf (프론트 nginx 설정 파일)
- 포트: 3306
- 유저: ssafy
- 비번: 1234
- 포트: 8080 (http)
- 유저: lvup
- 비번: Alltogether33!
- 포트: 6379
- 유저: default
- 비번: Alltogether33!
- 포트: 4443
- 유저: OPENVIDUAPP
- 비번: Alltogether33_
| 1 |
2 |
 |
 |