sudo apt-get update
# -y 옵션은 이후 설치하겠습니까? 질문에 대답을 yes로 하겠다는 의미
sudo apt-get install mariadb-server -y
# MariaDB 실행
sudo systemctl start mariadb
# MariaDB 상태 확인
sudo systemctl status mariadb
# MariaDB 종료
sudo systemctl stop mariadb
# root로 DB 접속
sudo mysql -u root -p
# MariaDB 설치 후 root 비밀번호를 설정한 적이 없으므로 비밀번호를 물어보는 질문에는 그냥 Enter
# 데이터베이스 목록 확인
show databases;
# mysql 데이터베이스 사용
use mysql;
# 비밀번호 정보 확인
select host, user, password from user;
# root의 비밀번호를 Ssafy6!으로 업데이트
update user set password=password('Ssafy6!') where user='root';
# 변경사항 적용
flush privileges;
# 데이터베이스 생성
create database pocket_fridge;
# 외부 접속 설정을 위해 DB 설정 파일을 수정
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
# bind-address 를 주석 처리
# MariaDB 재시작
sudo systemctl restart mariadb
# MariaDB 접속
sudo mysql -u root -p
# mysql 데이터베이스 사용
use mysql;
# 외부 접속을 허용할 유저 생성
create user 'andback'@'%' identified by 'Ssafy6!';
# 외부 접속할 유저에 모든 권한 부여
grant all privileges on *.* to 'andback'@'%' identified by 'Ssafy6!';
# 설정 적용
flush privileges;
sudo apt-get update
# 도커 설치
sudo apt install docker.io -y
# 도커 버전 확인
docker -v
# 도커 실행
sudo service docker start
# Docker 그룹에 sudo 추가(도커 바로 제어할 수 있도록)
sudo usermod -aG docker ubuntu
# 권환 적용 확인을 위해 프로세스 확인 명령어로 체크
docker ps
-
위와 같이 Permission denied가 발생한다면 Docker 데몬 소켓파일(docker.sock)의 권한 변경이 필요
# docker.sock 권한 변경 sudo chmod 666 /var/run/docker.sock # 다시 한번 체크 docker ps
# docker에 Jenkins 최신버전 이미지 다운로드
docker pull jenkins/jenkins:lts
# jenkins-andback 이라는 이름으로 Jenkins 컨테이너 실행
docker run -itd --name jenkins-andback -p 8081:8080 jenkins/jenkins:lts
# 위의 단계까지 완료후 k6d206.p.ssafy.io:8081 로 접속 시 Jenkins 비밀번호 입력 화면이 출력될 것이다.
# Jenkins 초기 비밀번호 확인
docker exec jenkins-andback cat /var/jenkins_home/secrets/initialAdminPassword
# 나온 비밀번호를 입력해주면 성공!
- Install suggested plugins 선택
- 정보 입력 후 Next
- Jenkins 도메인 주소 확인 후 Next
- 이 화면으로 넘어가면 초기 설정 완료!
- Item 이름 입력
- Freestyle 선택 후 OK
-
SSH Plugin 설치(Jekins 관리 → 플러그인 관리 → 설치 가능)
-
Key 파일 지정(Jenkins 관리 → 시스템 설정 → Publish over SSH 설정)
-
SSH Server 추가 버튼 클릭 후 설정
- Name : 원하는 이름으로 설정
- Hostname : 도메인(k6d206.p.ssafy.io)
- Username : ubuntu
- Test Configuration 선택 후 Success 확인!!
-
Gitlab 플러그인 설치(Jenkins 관리 → 플러그인 관리 → 설치 가능)
-
Gitlab 설정(Jenkins 관리 → 시스템 설정 → Gitlab 설정)
-
Connection name : 원하는 이름으로 설정
-
Gitlab host URL : https://lab.ssafy.com
-
Credentials 설정(Add 버튼 클릭)
- Gitlab → User Settings → Access Tokens
- Name : 원하는 이름으로 설정
- Expires at : 필요한 기간만큼 설정
- Scopes : 목적에 따라 체크
- 연결 확인
- Test Connection 클릭 후 Success 확인!!
-
만든 프로젝트 → 구성 → 소스 코드 관리
-
빌드 유발
- Build when a change ... 체크
- 빌드 유발 하단의 고급 버튼 클릭
- Gitlab Webhook 설정을 위해 Generate 버튼으로 Secret token 발급
-
Build
- Add build step → Execute shell 선택
- 백엔드 프로젝트 빌드를 위해 아래의 명령어 입력
- cd Backend/andback
- chmod +x gradlew
- ./gradlew clean build
- Flask는 빌드 후 조치에서 작성
-
빌드 후 조치
- Name : 미리 설정해 둔 SSH
- Source files : 배포할 파일 설정
- Remove prefix : 제거할 접두사 설정
- Remote directory : 배포할 파일이 저장될 디렉토리 설정, 이 때 EC2에 디렉토리가 없으면 에러 발생
- Exec command : 배포가 된 후 실행할 명령어 작성
-
Shell Script
-
아래의 쉘 스크립트를 EC2에서 작성해 ~/deploy/scripts 에 넣어준다.
-
init_spring_server.sh
echo "> 현재 구동중인 Pocket Fridge Spring pid 확인" CURRENT_PID=$(ps -ef | grep java | grep andback | awk '{print $2}') echo "$CURRENT_PID" if [ -z $CURRENT_PID ]; then echo "> 현재 구동중인 Pocket Fridge Spring이 없으므로 종료하지 않습니다." else echo "> kill -9 $CURRENT_PID" kill -9 $CURRENT_PID fi sleep 5 echo "> Pocket Fridge Spring이 실행됩니다..." nohup java -jar /home/ubuntu/deploy/Backend/andback/build/libs/andback-0.0.1-SNAPSHOT.jar >> /home/ubuntu/deploy/logs/andbacklogs.log 2>&1 &
-
init_flask_server.sh
echo "> 현재 구동중인 Pocket Fridge Flask pid 확인" CURRENT_PID=$(ps -ef | grep app | awk '{print $2}') echo "$CURRENT_PID" if [ -z $CURRENT_PID ]; then echo "> 현재 구동중인 Pocket Fridge Flask가 없으므로 종료하지 않습니다." else echo "> kill -9 $CURRENT_PID" kill -9 $CURRENT_PID fi sleep 5 echo "> Pocket Fridge Flask가 실행됩니다..." pip install --upgrade pip nohup python3 /home/ubuntu/deploy/ML/main/app.py >> /home/ubuntu/deploy/logs/flasklogs.log 2>&1 &
-
-
Spring 빌드
// Spring 빌드
./gradlew clean build
// 빌드 완료된 jar 파일을 백그라운드로 실행
nohup java -jar /home/ubuntu/deploy/Backend/andback/build/libs/andback-0.0.1-SNAPSHOT.jar &
Flask 빌드
// Flask 빌드 & 백그라운드로 실행
nohup python3 app.py &
배포 시 특이사항
- Spring은 8080번 포트 사용
- Flask는 5000번 포트 사용
데이터베이스 접속 정보
[File Path]
- S06P31D206 -> Backend -> andback -> main -> resources -> application-local.yml
-
Amazon EC2
[SSH로 서버 접속]
ssh -i K6D206T.pem [email protected]
- yml 설정
- url : 주소/데이터베이스이름 넣기
- username : 데이터베이스 아이디 입력
- password : 데이터베이스 비밀번호 입력
- 로그인 > Google 계정 관리 > 보안 > 2단계 인증
- 로그인 > Google 계정 관리 > 보안 > 앱 비밀번호 > 메일, Windows 컴퓨터 선택
- 앱 비밀번호 생성
- IMAP 사용 설정
- yml 설정
- useranme : 구글 이메일 주소
- password : 구글 비밀번호
OAuth2는 인증서버에서 로그인 후 인증서버에서 우리의 서버로 토큰을 보내주기 위해 Callback url을 등록해주어야 합니다.
OAuth2를 제공해주는 개발자 센터에 OAuth2 인증을 사용하기 위한 어플리케이션 등록 합니다.
API 및 서비스 클릭
사용자 인증 정보 클릭 후 프로젝트 만들기 클릭
이름을 입력하고 만들기 버튼 클릭
애플리케이션에 대한 정보를 포함하여 OAuth 동의 화면을 구성해야 한다.
Google 계정이 있는 모든 사용자가 접근이 가능하게 할 것이기 때문에 외부 선택 후 만들기 클릭
앱 이름과 사용자 지원 이메일 작성후 저장 후 계속 버튼 클릭
email / profile / openid 클릭 후 업데이트 버튼 클릭 후 저장 후 계속
저장 후 계속 버튼 클릭
OAuth 클라이언트 ID 클릭
이름 URI입력 후 저장
클라이언트 아이디와 비밀번호를 받는다
- yml 설정
- url : auth url
- client-id 위에서 받은 클라이언트 id
- client-secret : 위에서 받은 클라이언트 비밀번호
- callback-url : 로그인 완료후 받은 url
- scope : 위에서 설정한 scope
-
아래 주소로 들어가서 프로젝트를 생성한다
- 만들어진 프로젝트에 들어간다
- 톱니바퀴 클릭 → 프로젝트 설정
- 서비스 계정 클릭 → 자바 체크 → 새 비공개 키 생성
-
스프링 부트 설정
-
위에서 Firebase 프로젝트를 생성하면서 서버에 넣을 설정파일을 다운받았다
-
그 파일을 아래 사진처럼 경로에 넣어준다
- yml 설정
- yml 설정
- Spring 프로젝트를 연 후 우측 상단에 보이는 Build 버튼을 클릭하면 프로젝트 빌드가 실행된다.
- Build가 완료되었다면 main을 실행시키기 위해 AndbackApplication을 열어준다.
- 초록색 화살표를 클릭해 "Run 'AndbackApplication'" 을 클릭해 프로젝트를 실행한다.
cd "Spring 프로젝트가 있는 경로 입력"
- Spring 프로젝트가 있는 경로로 이동해준다.
gradlew build
- gradlew 파일을 이용하여 빌드를 실행한다.
cd "Spring 프로젝트 경로/build/libs"
- Spring 프로젝트가 빌드가 완료되었다면 build/libs 폴더가 생성된다. 이 경로로 이동해준다.
java -jar "jar 파일 이름"
- java -jar 명령어로 jar 파일을 실행시키면 Spring 프로젝트가 실행된다.
Anaconda | Anaconda Distribution
-
Anaconda Prompt 실행 후 가상환경 생성
conda create -n pocket_fridge python=3.9 # 가상환경 생성 conda activate pocket_fridge # pocket_fridge 가상환경 활성화 # conda deactivate # 현재 가상환경 비활성화 # conda info --envs # anaconda의 모든 가상환경 리스트 출력 # conda env remove --n <가상환경 이름> # 가상환경 삭제 시 사용
-
필요 라이브러리 추가
cd <프로젝트폴더>/ML/main pip install -r requirements.txt
-
File > Project Structure
-
SDKs > Add Python SDK...
-
Conda Environment > Existing environment > Interpreter > 만든 가상환경 (pocket_fridge) 선택 > OK
-
프로젝트 실행 환경 설정 > Edit Configurations...
-
app.py > Configuration > Python interpreter > Use specified interpreter > 방금 만든 SDK 선택 > OK
- Android Studio Bumblebee | 2021.1.1 Patch 2
- Android gradle plugin : 7.1.2
- gradle version: 7.2
local.properties에 다음의 정보를 입력 후 빌드한다.
// local.properties
barcode_service_key="공공데이터포털 - 바코드연계제품정보 api key"
google_auth_server_id="Google Cloud Platform 서버쪽 OAuth 클라이언트 ID"
firebase_storage_recipe_thumbnail_base_url="cloud storage 공개 url"
firebase_storage_recipe_cook_step_base_url="cloud 공개 url"
firebase_category_img_base_url="cloud storage 공개 url"
- 공공데이터포털 - 바코드연계제품정보에서 Open API 이용 신청을 하여 key를 발급받는다.
- google_auth_server_id는 외부서비스 - OAtuh2.0을 참고하시오.
- cloud storage 공개 url은 외부서비스 - 파이어베이스를 참고하시오.
google-services.json 파일을 app 모듈 내부에 위치
해당 파일은 외부서비스 - 파이어베이스를 참고하시오.
Google Cloud Platform
> 해당 프로젝트
> API 및 서비스
> 사용자 인증 정보
에 자동으로 키가 생성된 것을 확인할 수 있다.
사용할 이미지를 storage에 폴더별로 나눠서 올린다.
google cloud platform에 접속하여 다음의 설정을 해준다.
Google Cloud Platform > 해당 프로젝트 > API 및 서비스 > 사용자 인증 정보