Skip to content

Latest commit

 

History

1,635 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

버전 정보

프론트

  • 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
  • 젠킨스

AI

  • FastAPI
  • OpenAI (GPT-4o-mini)
  • LangChain

젠킨스 docker 설정

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;"]

백엔드

  • 젠킨스 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'

백엔드

  • 9090 포트로 JAR 실행
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"'

AI

  • docker-compose 실행
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 설정 파일)

MySQL 접속 계정

  • 포트: 3306
  • 유저: ssafy
  • 비번: 1234

젠킨스 접속 계정

  • 포트: 8080 (http)
  • 유저: lvup
  • 비번: Alltogether33!

Redis 접속 계정

  • 포트: 6379
  • 유저: default
  • 비번: Alltogether33!

OpenVidu 접속

  • 포트: 4443
  • 유저: OPENVIDUAPP
  • 비번: Alltogether33_

테스트 계정

외부 서비스

카카오 소셜 인증

OpenAI

LangChain

DB 덤프 파일

시연 시나리오

AI 스몰톡

1 2 3
이미지 이미지 이미지
4 5
이미지 이미지

유저 스몰톡

1 2 3
이미지 이미지 이미지
4 5 6
이미지 이미지 이미지
7 8
이미지 이미지

매칭 기록

1 2 3
이미지 이미지 이미지
4 5
이미지 이미지

미션 기능

1 2
이미지 이미지

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages