기타/인프라 구축과정23 [Infra] 2. Nginx 설치 및 HTTPS 설정 - HelloWorld Project Nginx 설치 sudo apt-get install nginx 상태 확인 : sudo service nginx status 시작 : sudo service nginx start 재시작 : sudo service nginx restart 중지 : sudo service nginx stop 설정 리로드 : sudo service nginx reload Certbot Certbot은 Let's Encrypt 인증서를 쉽게 발급하고 갱신할 수 있도록 도와주는 도구라고 한다. Let's Encrypt는 무료로 SSL/TLS 인증서를 발급해주는 인증 기관으로, HTTPS를 사용하는 웹사이트에서 보안 통신을 위해 사용된다. Certbot을 이용하면 명령어를 통해 인증서를 발급하고 갱신할 수 있으며, 이를 통해 HT.. 기타/인프라 구축과정 2023. 5. 24. [Infra] 1. EC2 환경 구축 - HelloWorld Project | 해당 명령어는 먼저 패키지 관리자를 업데이트한다. 그리고 다음과 같은 패키지들을 설치한다. $ sudo apt update $ sudo apt-get install -y ca-certificates \\ curl \\ software-properties-common \\ apt-transport-https \\ gnupg \\ lsb-release ca-certificates: TLS/SSL 인증서를 검증하기 위한 패키지. curl: URL을 통해 데이터를 전송하기 위한 도구. software-properties-common: 소프트웨어 소스를 추가하거나 제거하기 위한 도구. apt-transport-https: HTTPS를 통해 패키지를 다운로드하기 위한 도구. gnupg: 암호화 기능을 제공하는 .. 기타/인프라 구축과정 2023. 5. 24. [Infra] 10. 최종 아키텍처 및 전체 흐름 - Voda Project 개발자 관점 개발자 개인 브랜치에서 Remote 환경의 Develop 브랜치에 Merge를 하게 되면 자동으로 빌드가 진행된다. 해당 빌드는 깃랩의 WebHook 설정과 젠킨스 설정을 통해 진행된다. 1. 개발자들이 Merge를 진행한다. 2. 젠킨스에서 깃랩에 Merge된 Develop 브랜치의 프로젝트 파일들을 빌드한다. 2-1. Java : 서버에 존재하는 db.yml, oauth.yml을 통합시켜 빌드를 진행한다. jar 파일이 생성되면 배포 폴더로 이동. 2-2. Vue : 서버에 존재하는 env 파일을 통합시켜 빌드를 진행한다. 빌드된 dist 폴더를 배포 폴더로 이동. 2-3. Python : 인공지능 모델 같은 경우 서버에 세팅한다. 서버에 존재하는 .h5(음성 분류 모델 가중치 파일), .. 기타/인프라 구축과정 2023. 4. 4. [Troubleshooting] http 버전 변경을 통한 문제점 해결 - Voda Project 이전 포스팅에서 Nginx 설정 파일에 http 2.0으로 설정되어있는데 기존에는 http 1.1을 사용하고 있었다. 필자의 팀원들은 프로젝트를 진행할 때 백엔드, 프론트 포트 8080, 8081로 설정을 해서 localhost에서 api 통신을 테스트하는 작업을 진행하였다. 해당 테스트를 진행할 때 속도 문제나 에러 사항은 발생하지 않았다. 하지만 해당 프로젝트가 배포가 되고 http 통신을 했을 때 다음과 같은 문제점이 발생하였다. 서버에서 빌드 및 배포를 했을 때 즉시 라우팅 되지 않는다. 예를 들면, 로컬 호스트에서 소셜 로그인을 진행하면 DB 조회를 통해 회원인지를 체크한다. 만약 회원이 아니라면 회원가입 페이지로 포워딩된다. 하지만 배포 환경에서는 회원 가입 페이지로 갈 때도 있고 가지 않을 .. 기타/인프라 구축과정 2023. 4. 4. [Infra] 9. MariaDB 인덱스 설정 및 쿼리 성능 개선 - Voda Project 해당 프로젝트에서는 소셜 로그인 (카카오)를 기준으로 로그인이 진행된다. 우리 서비스에서는 소셜 로그인을 통해 받아온 email 정보를 가지고 유저 정보를 확인한다. 즉, PK 값이 아닌 컬럼 (email)은 pk 값과 동일한 역할을 한다. 그러므로 email 컬럼에 인덱스를 적용하여 쿼리 성능을 측정해보려고 한다. 먼저 서버 환경에서 MariaDB 컨테이너 내부로 접속한다. MariaDB [voda]> select @@profiling; +-------------+ | @@profiling | +-------------+ | 0 | +-------------+ 1 row in set (0.000 sec) MariaDB [voda]> set profiling = 1; Query OK, 0 rows aff.. 기타/인프라 구축과정 2023. 4. 4. [Infra] 8. Blue-Green 무중단 배포(2) - Voda Project 이전 포스팅에서 무중단 배포를 하기 위한 컨테이너 구동 쉘 스크립트를 작성하였다. 해당 쉘 스크립트는 젠킨스 파이프라인에서 빌드된 이미지를 가지고 컨테이너를 생성한다. 생성 흐름은 블루 컨테이너가 현재 존재하지 않는다면 블루 컨테이너를 띄운다. 만약 블루 컨테이너가 구동 중이라면 그린 컨테이너를 구동 시키고 블루 컨테이너를 내린다. 이러한 프로세스로 스와핑이 발생한다. 그렇다면 사용자의 요청이 들어왔을 때 어떠한 컨테이너로 포트 포워딩을 할 지 결정하는 것은 개발자의 몫이다. 필자는 컨테이너의 Up/Down에 의해 변경되어지는 포트 포워딩을 upstream을 활용하여 무중단 배포를 진행하였다. | /etc/nginx/conf.d/voda.conf upstream app { least_conn; serve.. 기타/인프라 구축과정 2023. 4. 4. [Infra] 7. Blue-Green 무중단 배포(1) - Voda Project Java (Vue, Python 동일) # jenkins 파이프라인에서 ./deploy.sh 실행 stage('Run docker front image') { steps { dir('/var/jenkins_home/workspace/deploy_test/back_java'){ sh 'chmod +x deploy.sh' sh './deploy.sh' } } } 배포 작업은 깃랩에서 푸쉬된 프로젝트 파일들을 voda_back_build_test에서 빌드를 완료한다. 이후 deploy_test 파이프라인에서 해당 빌드된 파일들을 가지고 배포를 진행한다. java : voda-0.0.1-SNAPSHOT.jar (빌드 파일) vue : dist(빌드폴더) | 파일 구조 root@ip-172-26-9-157:/ho.. 기타/인프라 구축과정 2023. 4. 4. [Infra] 6. 컨테이너 구동 - Voda Project JAVA + VUE pipeline{ environment { dockerImage = '' } agent any stages{ stage('Building front image') { steps { script { dockerImage = docker.build("bae3007/frontvoda-zero-downtime", "/var/jenkins_home/workspace/deploy_test/front_vue") withCredentials([usernamePassword(credentialsId: 'bae3007', usernameVariable: 'DOCKER_HUB_USERNAME', passwordVariable: 'DOCKER_HUB_PASSWORD')]) { sh 'docker login.. 기타/인프라 구축과정 2023. 4. 4. [Infra] 5. Jenkins 프로젝트 빌드 - Voda Project Jenkins → voda_back_build_test → 구성 → Build Steps JAVA | /home/ubuntu/jenkins_home/workspace/voda_back_build_test/backend/java cd /var/jenkins_home/workspace/voda_back_build_test cp /var/jenkins_home/workspace/yml/application-db.yml backend/java/src/main/resources/ cp /var/jenkins_home/workspace/yml/application-oauth.yml backend/java/src/main/resources/ cd /var/jenkins_home/workspace/voda_back_b.. 기타/인프라 구축과정 2023. 4. 4. [Infra] 4. MariaDB 설정 - Voda Project MariaDB 설정 /home/ubuntu/mariadb/docker-compose.yml version: '3.7' services: db: container_name: mariadb image: mariadb restart: always environment: MARIADB_ROOT_PASSWORD: *** ports: - 3307:3306 volumes: - /data/mariadb/data:/var/lib/mysql 이 파일은 Docker Compose 설정 파일이다. 이 파일은 'db'라는 이름의 MariaDB 데이터베이스를 실행하는 서비스를 정의한다. container_name 지시어를 사용하여 컨테이너의 이름을 "mariadb"로 지정. image 지시어를 사용하여 컨테이너에 사용할 Dock.. 기타/인프라 구축과정 2023. 4. 4. 이전 1 2 3 다음 반응형