기록/CI&CD13 [Flask] 플라스크 배포(feat.Docker) 1. main.py main.py의 main함수의 app.run부분을 이렇게 설정한다. main에서 app.run()을 써서 아무 설정 없이 그대로 돌아가도록 하면 flask에 기본적으로 내장돼있는 웹서버를 쓰게된다. 로컬에서는 정말 간편하지만 이걸 서버로 배포할 때는 문제가 생긴다. 어떻게 해도 외부접속이 안되기 때문이다. 따라서 app.run() 말고(=로컬호스트127.0.0.1에서만 돌아간다) app.run(host='0.0.0.0')으로 바꿔야 한다. if __name__ == "__main__": app.run(debug=False, host='0.0.0.0', port=5000) 2. waitress_server.py 생성 여기서 main은 위에서 내가 만든 flask 파일이다. main 파일.. 기록/CI&CD 2022. 10. 12. [Jenkins] gradle 설정 이전에 빌드하던 방식은 maven을 사용했기 때문에 gradle 버전만 다시 정리해보았다. 1. 젠킨스 관리 > Global Tool Configuration Gradle을 추가해서 name을 G로 정했다. 자동으로 설치되도록 했고, 버전은 내 프로젝트와 맞췄다. 2. Item 구성 위에서 설정한 이름을 쓰고 Tasks에 clean build를 작성한다. Excute shell에 command line을 전처럼 설정하면 된다. 3. 빌드된 화면 기록/CI&CD 2022. 10. 6. [NLP] Docker로 Konlpy 사용하는 Flask 배포 konlpy는 자바 라이브러리를 내부적으로 실행시키기 때문에 파이썬 코드라도 자바환경이 갖춰져야한다. 하지만 플라스크 배포 시에는 어떻게 해야할 지 방법이 잘 나와있지 않아서 여기저기 자료를 찾아보고 해결한 결과를 정리해둔다. 이 글을 읽기 앞서서, 플라스크의 구조는 [이 방식]으로 구성했다. 1. requirements.txt pip로 이 두 가지를 설치해야한다. JPype1 == 1.4.0 konlpy == 0.6.0 2. main.py 내 플라스크 api일부이다. 이것처럼 konlpy의 라이브러리를 쓰기전에 jpype.attachThreadToJVM()를 호출해야한다. 3. Dockerfile 자바랑 파이썬 같이 있는 이미지를 불러와야한다. openjdk:slim을 사용하면 자바와 파이썬이 동시에 .. 기록/CI&CD 2022. 9. 23. [AWS] 같은 브랜치에 있는 프론트엔드, 백엔드 자동배포하기 (6) Jenkinsfile, vue & springboot Dockerfile 작성 1. 프로젝트 구조 프로젝트 구조는 다음과 같다. Jenkinsfile, frontend폴더, bacnekd폴더가 가장 최상단에 있고 그 밑에 Dockerfile이 있다. 2. Jenkinsfile tools에서 이전에 설치한 메이븐 이름을 쓴다. M3로 설정했으므로 maven "M3"을 적는다. stages는 네 단계로 나눴는데, 다음과 같다. 1) Docker kill 이미 프론트엔드, 백엔드 돌아가고있는 도커가 있다면 멈추고 해당 컨테이너를 지웠다. 만약 그 컨테이너가 없다면 오류가 나면서 빌드가 멈추기 때문에 || 연산을 사용해서 있든 없든 빌드가 계속되도록 했다. 2) Prepare checkout scm 명령어로 깃 레파지토리를 가져온다. 성공한다면 prepare success, 실패한다면 p.. 기록/CI&CD 2022. 8. 18. [AWS] 같은 브랜치에 있는 프론트엔드, 백엔드 자동배포하기 (5) jenkins 컨테이너 내부에 docker 설치 및 Webhook 설정 1. jenkins 컨테이너 내부에 docker 설치 1) sudo, vi, wget 설치 # 컨테이너 접속 docker exec -it jenkins bash apt update apt install vim apt install sudo apt install wget 2) docker 설치 sudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common sudo wget -qO- | sh sudo systemctl start docker sudo systemctl enable docker 3) docker.sock 권한변경 sudo chmod 666 /var/run/docker.sock .. 기록/CI&CD 2022. 8. 17. [AWS] 같은 브랜치에 있는 프론트엔드, 백엔드 자동배포하기 (4) Jenkins 설치 및 설정 1. Docker로 Jenkins 설치 1) jenkins 이미지 파일 내려받기 docker pull jenkins/jenkins:lts 2) jenkins 이미지 컨테이너로 실행 ubuntu와 젠킨스 컨테이너 볼륨을 연결한다. ubuntu의 /jenkins 와 컨테이너의 /var/jenkins ubuntu의 /home/ubuntu/.ssh 와 컨테이너의 /root/.ssh ubuntu의 /var/run/docker.sock 와 컨테이너의 /var/run/docker.sock (바깥에 설치된 docker를 jenkins 속 도커에서도 사용할 수 있도록 한다.) 이름은 jenkins, 계정은 root로 한다. docker run -d -p 8080:8080 -p 50000:50000 -v /jenkins:.. 기록/CI&CD 2022. 8. 13. [AWS] 같은 브랜치에 있는 프론트엔드, 백엔드 자동배포하기 (3) Nginx 설치 및 설정 1. Nginx 설치 sudo apt update sudo apt install nginx 2. SSL 인증서 1) certbot 설치 sudo add-apt-repository ppa:certbot/certbot sudo apt install python-certbot-nginx 2) SSL 인증서 가져오기 nginx 플러그인을 사용한다. sudo certbot --nginx -d 도메인주소 차례대로 이메일, 서비스 약관 동의절차를 수행한다. Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator nginx, Installer nginx Enter email address (used for urgen.. 기록/CI&CD 2022. 8. 12. [AWS] 같은 브랜치에 있는 프론트엔드, 백엔드 자동배포하기 (2) Docker, Docker Compose 설치 1. Docker 설치 1) 사전작업 sudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common 2) 자동 설치 스크립트 활용 sudo wget -qO- | sh 3) Docker 서비스 실행하기 및 부팅 시 자동 실행 설정 sudo systemctl start docker sudo systemctl enable docker 4) Docker 그룹에 현재 계정 추가 sudo usermod -aG docker ${USER} # ${USER} 대신 ubuntu를 넣어 진행했다. sudo systemctl restart docker 2. Docker Compose 설치 1) 설치 $ sud.. 기록/CI&CD 2022. 8. 11. [AWS] 같은 브랜치에 있는 프론트엔드, 백엔드 자동배포하기 (1) 초기설정 1. 초기 설정 sudo apt update sudo apt upgrade sudo apt install build-essential 2. java 설치 # 설치 sudo apt-get install openjdk-8-jdk # 버전확인 java -version 3. timezone 설정 sudo rm /etc/localtime sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime 4. hostname 설정 sudo hostnamectl set-hostname 이름.localdomain sudo vi /etc/hosts /etc/hosts 맨 윗줄을 변경한다. 127.0.0.1 이름.localdomain 이름 localhost4 localhost4.loca.. 기록/CI&CD 2022. 8. 10. [AWS] ec2에 openVidu on premises 설치하기 1. 사전 작업 Docker와 Docker compose를 미리 설치해야 한다. 설치 방법은 [이 글]에 있다. openvidu는 포트를 많이 쓰기 때문에 아래 포트를 전부 열어야 한다. openvidu의 http, https 포트로 80, 443 외에 다른 걸 쓰려면 그 포트도 연다. (밑의 명령어는 80, 443만 열려있다.) # ufw 설치 sudo apt install ufw # 포트 열기 ufw allow ssh ufw allow 80/tcp ufw allow 443/tcp ufw allow 3478/tcp ufw allow 3478/udp ufw allow 40000:57000/tcp ufw allow 40000:57000/udp ufw allow 57001:65535/tcp ufw allow.. 기록/CI&CD 2022. 8. 9. [AWS] ec2에 mysql 설치하기 1. EC2에서 MySQL 설치 1) 설치 # 설치 sudo apt install mysql-server # root계정 접속 sudo mysql -u root -p 2) 계정 생성 및 권한 부여 CREATE USER '아이디'@'%' IDENTIFIED BY '비밀번호'; FLUSH PRIVILEGES; show grants for '아이디'@'%'; grant all privileges on *.* to '아이디'@'%'; 3) 외부접속 허용 sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf # bind-address=0.0.0.0로 변경한다. # 포트 허용 sudo ufw allow out 3306/tcp sudo ufw allow in 3306/tcp # mysql 재시.. 기록/CI&CD 2022. 8. 8. CI(Continuous Integration) 1. CI(Continuous Integration), 지속적 통합 개발자들이 빠른 주기로 작업한 내용을 통합 브랜치에 통합하고 빌드하는 개발 방식을 의미한다. 여기서 통합이란, 개인이 작업한 코드를 공용 작업 환경에 올리는 것을 의미한다. 이 과정은 개인 브랜치를 중앙 브랜치에 merge하는 과정으로 이뤄진다. CI는 통합과정에서 발생하는 이슈를 가능한 빨리 발견하기 위해 필요하다. 2. CI를 이용한 애자일 기능을 개발할 때는 코드를 여러 번 수정하게 되는데, 이 과정에서 코드를 반영하고, 버전 관리 시스템에서 변경 사항을 가져오고, 소스코드를 빌드하고, 단위 테스트를 진행하고, 통합하고, 통합된 코드르 빌드하고, 이를 묶어 배포하는 등 여러 과정을 수행한다. CI 환경에서는 젠킨스 같은 도구를 이용.. 기록/CI&CD 2022. 8. 1. 이전 1 2 다음