- Cloud Server : AWS EC2
- OS : Ubuntu 20.04 LTS (GNU/Linux 5.4.0-1018-aws x86_64)
- CPU 모델 : Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
- 전체 core 수 : 4 | cpu 당 물리코어 : 4
- nginx (1.18.0 (Ubuntu))
- gunicorn (version 20.0.4)
- Front
- Node.js 16.16.0
- React 17.0.2
- Back
- Spring Boot 2.7.2
- Spring Framework 5.3.22
- FastAPI 0.79
- DB
- MySQL 8.0.29
- WebRTc
- openVidu
- IDE
- vscode 1.70
- IntelliJ 2022.1.3
- 형상관리
- Git
web server(nginx) | 80 |
---|---|
https | 443 |
springboot | 8080 |
fastAPI(gunicorn) | 8000 |
openvidu | 4443 |
mysql | 33306 |
login as : ubuntu
# 1. 디렉토리 생성
$ mkdir source
# 2. 디렉토리 이동
$ cd source/
# 3. git clone
$ git clone https://lab.ssafy.com/s07-webmobile3-sub2/S07P12E202.git
-
Nginx
# 1. nginx $ sudo install nginx
-
Node.js
# 1. curl 설치 $ sudo apt-get install curl # 2. nvm 설치 $ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash # 3. 설정 $ source ~/.bashrc # 4. node js LTS 버전 설치 $ nvm install --lts # 5. 사용 버전 변경 $ nvm use 16.16.0
-
Java
- jdk 1.8
$ sudo apt-get install openjdk-1.8-jdk $ sudo install gradle
-
가상환경 생성&활성화
# venv 라는 이름의 가상환경 생성 $ virtualenv --python=python venv # 가상환경 활성화 $ source /home/ubuntu/venv/bin/activate
-
Python
version : 3.7
$ cd /home/ubuntu/source/S07P12E202/backend-fastAPI/ $ sudo apt-get update $ sudo apt install python3.7-dev
-
FastAPI
$ pip install fastapi uvicorn
-
Gunicorn
# gunicorn: 멀티 스레드 (다수의 사용자가 사용할 수 있기 때문에, 서버에서 사용) pip install gunicorn
-
모션인식에 필요한 라이브러리 다운 및 환경 구축
# 디렉토리 이동 $ # 필요 라이브러리 설치 $ pip install -r requirements.txt $ sudo apt install swig $ pip install pandas $ pip install tf-slim $ pip install sklearn # swig 설정 # download.sh 에러 발생할 수 있음. $ cd tf_pose/pafprocess $ swig -python -c++ pafprocess.i && python setup.py build_ext --inplace
- download.sh 에러 발생시, 윈도우 환경에서 git clone 받은 후, /home/ubuntu/fastAPI/model 폴더를 MobaXterm 을 통해 aws ec2 서버에 넣어줍니다.
💡 Spring Boot backend 서버는 로컬 환경에서 build 후 aws ec2 서버에 업로드 합니다.
[로컬환경]
-
git clone
# 1. git clone $ git clone https://lab.ssafy.com/s07-webmobile3-sub2/S07P12E202.git # 2. 디렉토리 이동 $ cd S07P12E202/backend-java
-
build
# build $ ./gradlew build
-
/build/lib 폴더에 .jar 파일 생성 확인
-
AWS EC2 업로드
/home/ubuntu/source 폴더 하위에 업로드
💡 다운받은 source code 로 build 폴더를 생성합니다.
-
build
# 1. 디렉토리 이동 $ cd S07P12E202/frontend/ #/home/ubuntu/source/S07P12E202/frontend/ # 2. 빌드 $ npm build
-
/home/ubuntu/source/S07P12E202/frontend/build 폴더 생성 확인
-
/home/ubuntu/source/S07P12E202/frontend/ 하위에
.env
파일 생성# .env REACT_APP_S3_URL_DANCE = 'https://chukkadance.s3.ap-northeast-2.amazonaws.com' REACT_APP_S3_URL_CHUKKA = 'https://chukkachukka.s3.ap-northeast-2.amazonaws.com'
-
-
jar
# 디텔토리 이동 $ cd /home/ubuntu/source # 실행 $ java -jar ssafy-web-project-1.0-SNAPSHOT.jar &
-
Nginx
# 시작 $ sudo service nginx start # 재시작 $ sudo service nginx restart
-
Gunicorn
# 가상환경 활성화 $ source /home/ubuntu/venv/bin/activate # 디렉토리 이동 $ cd /home/ubuntu/source/S07P12E202/backend-fastAPI/ # gunicorn 백그라운드 실행 $ gunicorn -k uvicorn.workers.UvicornWorker --access-logfile ./gunicorn-access.log prac2_main:app --bind 0.0.0.0:8000 --workers 2 --daemon
-
default.conf 파일
-
/etc/nginx/sites-available/default.conf
server { root /home/ubuntu/source/S07P12E202/frontend/build; index index.html index.htm index.nginx-debian.html; server_name i7e202.p.ssafy.io; # managed by Certbot location / { try_files $uri $uri/ /index.html; } location /api { include proxy_params; proxy_pass http://127.0.0.1:8080; } location /fastAPI { include proxy_params; proxy_pass http://127.0.0.1:8000; proxy_http_version 1.1; } location /fastAPI/ws { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:8000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Origin ""; } listen [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/i7e202.p.ssafy.io/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/i7e202.p.ssafy.io/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } upstream ws-backend { # enable sticy session based on IP ip_hash; server 127.0.0.1:8080; } server { if ($host = i7e202.p.ssafy.io) { return 301 https://$host$request_uri; } # managed by Certbot listen 80 ; listen [::]:80 ; server_name i7e202.p.ssafy.io; return 404; # managed by Certbot }
-
-
nginx.conf 파일
-
/etc/nginx/nginx.conf
user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; # multi_accept on; } http { client_max_body_size 20M; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
-
- username :
chukka
- password :
choyosk297445@
-
policy
{ "Version": "2012-10-17", "Id": "Policy1659410125978", "Statement": [ { "Sid": "Stmt1659410114477", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::chukkadance" } ] }
-
access key :
AKIASLFMVV5EYKPNMRRL
-
bucket :
chukkadance
-
region :
ap-northeast-2
-
master / develop / [front, fastapi, spring]
-
master / feature / [front, fastapi, spring] / [기능명]
|-- master
|----develop/front
|------feature/front/feature1
|------feature/front/feature2
|----develop/fastapi
|------feature/fastapi/feature1
|------feature/fastapi/feature2
|----develop/spring
|------feature/spring/feature1
|------feature/spring/feature2
################
# <이모지> <제목> 의 형식으로 제목을 아래 공백줄에 작성
# 제목은 50자 이내 / 변경사항이 "무엇"인지 명확히 작성 / 끝에 마침표 금지
✨ 로그인 기능 추가
# 바로 아래 공백은 지우지 마세요 (제목과 본문의 분리를 위함)
################
# 본문(구체적인 내용)을 아랫줄에 작성
# 여러 줄의 메시지를 작성할 땐 "-"로 구분 (한 줄은 72자 이내)
- 회원 정보 확인
- 토큰 발급 및 저장
################
# 꼬릿말(footer)을 아랫줄에 작성 (현재 커밋과 관련된 이슈 번호 추가 등)
# Jira Smart commit 사용 시 Jira 이슈 또한 종료할 수 있음.
# 예) Close #7
################
# ✨ : 새로운 기능 추가
# 🐛 : 버그 수정
# 📚 : 문서 수정
# 🚨 : 테스트 코드 추가
# 🔨 : 코드 리팩토
# 📝 : 코드 의미에 영향을 주지 않는 변경사항
# 🔧 : 기타 변경사항, 프로`덕션 코드 변경사항 없음
################
## 어떤 이유로 MR를 하셨나요?
- [ ] feature 병합(feature issue #를 남겨주세요)
- [ ] 버그 수정(아래에 issue #를 남겨주세요)
- [ ] 코드 개선
- [ ] 기타(아래에 자세한 내용 기입해주세요)
## 스크린샷 및 세부 내용 - 왜 해당 MR이 필요한지 자세하게 설명해주세요
- 세부사항을 항목으로 설명해주세요
## MR하기 전에 확인해주세요
- [ ] local code lint 검사를 진행하셨나요?
- [ ] local ci test를 진행하셨나요?
## relavant issue number
- 관련된 이슈 넘버가 있으면 이곳에 기입해주세요