생성 일시: 2023년 4월 7일 오전 9:55 생성자: 김태현 최종 편집 일시: 2023년 4월 7일 오전 9:55 최종 편집자: 김태현
- 환경 설정
- 포팅 순서
- 주의 사항
- 기술 스택
- 프로젝트 구조
- 부가설명
- 하드웨어 정보
- Architecture: x86_64
- CPU Model: Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
- CPU family: 6
- CPU op-mode(s): 32-bit, 64-bit
- Socket(s): 1
- Core(s) per socket: 4
- Thread(s) per core: 1
- CPU(s): 4
- CPU MHz: 2300.167
- 소프트웨어 정보
- OS : Ubuntu 20.04 LTS focal
- 배포에 필요한 프로그램 : Docker version 20.10.12, build 20.10.12-0ubuntu2~20.04.1
- 패키지 관리자 : apt 2.0.2ubuntu0.2 (amd64)
도커를 사용하여 서비스를 배포하기 때문에 프레임워크, 라이브러리 등 추가 설치 할 필요 없습니다.
여러 도커 컨테이너를 관리하는데 편리한 docker-compose를 사용해서 프로젝트를 배포합니다.
-
리눅스 패키지 업데이트
$ sudo apt update -
Docker 설치를 위한 패키지 설치
$ sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -
Docker 공식 GPG키 추가
$ curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg -
Docker 저장소 추가
$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] <https://download.docker.com/linux/ubuntu> $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null -
Docker 설치
$ sudo apt update $ sudo apt install docker-ce docker-ce-cli containerd.io -
Docker 서비스 실행
$ sudo systemctl start docker $ sudo systemctl enable docker -
Docker 버전 확인
$ docker --version -
Docker Compose 설치
$ sudo curl -L "<https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$>(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose $ docker-compose --version$ sudo curl -L "<https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$>(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose $ docker-compose --version
- 도메인 구매후 Nginx app.conf의 server_name을 구매한 도메인으로 변경시켜준다.
- docker-compose.yml 의 certbot command 주석 해제, entrypoint를 주석 하고 실행해서 인증서를 발급받는다. (Let's Encrypt의 알림을 받을 본인 이메일을 입력한다)
certbot:
image: certbot/certbot
container_name: certbot
restart: unless-stopped
volumes:
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
# entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
command: certonly --webroot --webroot-path=/var/www/certbot --email {Let's Encrypt의 알림을 받을 이메일 입력} --agree-tos --no-eff-email -d jobtender.shop -d www.jobtender.shop
- 발급에 성공하면 반대로 entrypoint 주석 해제, command 주석으로 기한 만료시 자동 갱신되도록 변경하는 entrypoint를 실행하게 다시 컨테이너를 실행한다.
Backend에서 package com.ssafy.jobtender.jwt 안에 SecretKey.java 클래스를 생성한다.
package com.ssafy.jobtender.jwt;
public class SecretKey {
public static String JWT_SECRET_KEY = "임의로 생성한 키값"; //토큰을 암호화 및 복호화 할 때 사용
}
카카오 로그인 API를 사용 애플리케이션을 생성, 추가 개인정보 동의는 성별, 나이대를 선택하고 도메인은 구매한 도메인(예: https://jobtender.shop)을 등록한다.
그리고 발급받은 서비스 키를 코드에 입력한다.
Backend에서 package com.ssafy.jobtender.oauth 안에 OauthSecretKey.java 클래스를 생성한다.
package com.ssafy.jobtender.oauth;
public class OauthSecretKey {
public final static String KAKAO_API_CLIENT_ID = "카카오 클라이언트 키";
}
Frontend에서 /frontend/src/components/login/KakaoButton.js
const REST_API_KEY = "REST API 키";
데이터베이스 생성 후 데이터 베이스 연결을 위한 설정 작성 /database/mysql.env
MYSQL_DATABASE=
MYSQL_ROOT_PASSWORD=
MYSQL_USER=
MYSQL_PASSWORD=
다음 명령어를 입력합니다.
$ docker-compose up #-d 옵션을 사용하면 로그출력없이 bg에서 실행
프로젝트를 중지하고자 한다면 다음 명령어를 수행합니다.
$ docker-compose stop # stop대신 down을 사용하면 컨테이너가 중지되고 삭제
- docker, docker-compose는 아키텍처, 운영체제 등에 따라 설치 코드가 다를 수 있으니 적절한 버전을 선택하세요.
- 기본적으로 도커를 실행하려면 root계정 권한이 필요합니다. 일반 계정에서 도커를 사용하고자 한다면 도커를 사용할 수 있는 그룹에 사용자를 추가해야 합니다. 그룹에 사용자를 추가하고자 한다면 다음 명령어를 입력합니다.
$ sudo usermod -aG docker 유저계정
- 도커 설정 등에 의해서 Permission definded 에러가 나온다면 다음 명령어를 프로젝트에 적용하세요.
$ chown -R 사용자계정 프로젝트root폴더
Backend - Spring, Flask
- IntelliJ Ultimate 2022.3.3
- Pycharm Community Edition 2022.3.1
- Spring Boot Gradle 2.7.9
- Spring Data JPA
- QueryDSL 1.0.10
- Flask
- JWT
- OAuth
- MySQL 8.0.31
Frontend - React, JavaScript
- Visual Studio Code IDE
- node v18.13.0
- React 18.0.2
- React-Router-Dom 6.8.2
- Redux 8.0.5
- ChakraUI
- GSAP
- D3
CI/CD
- AWS EC2
- NGINX
- Docker
- SSL (certbot)
S08P22A203/
├── backend
│ ├── gradle
│ │ └── wrapper
│ └── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── ssafy
│ │ │ └── jobtender
│ │ │ ├── config
│ │ │ ├── controller
│ │ │ ├── dao
│ │ │ │ └── impl
│ │ │ ├── dto
│ │ │ │ ├── input
│ │ │ │ └── output
│ │ │ ├── entity
│ │ │ │ └── common
│ │ │ ├── jwt
│ │ │ ├── oauth
│ │ │ ├── repo
│ │ │ └── service
│ │ │ └── impl
│ │ └── resources
│ └── test
│ └── java
│ └── com
│ └── ssafy
│ └── jobtender
│ ├── dao
│ │ └── impl
│ ├── repo
│ └── service
│ └── impl
├── data
│ ├── certbot
│ │ ├── conf
│ │ └── www
│ └── nginx
├── database
│ └── mysql
│ └── sql
├── frontend
│ ├── public
│ │ ├── companyLogo
│ │ ├── font
│ │ └── images
│ │ └── welcome
│ └── src
│ ├── api
│ ├── components
│ │ ├── home
│ │ ├── keyword
│ │ ├── login
│ │ ├── mypage
│ │ ├── result
│ │ │ ├── 1
│ │ │ ├── 2
│ │ │ ├── 3
│ │ │ ├── 4
│ │ │ └── 5
│ │ ├── survey
│ │ └── welcome
│ ├── hooks
│ ├── pages
│ │ └── router
│ ├── redux
│ │ ├── counter
│ │ ├── home
│ │ ├── keyword
│ │ ├── mypage
│ │ ├── result
│ │ ├── survey
│ │ └── user
│ └── styles
│ ├── keyword
│ ├── loading
│ ├── result
│ └── survey
└── python
├── crow
│ └── companyLogo
└── python_backend
├── Dao
│ └── __pycache__
└── Logic
└── __pycache__
- Mysql 더미파일 : JobTenderDumpFinal.sql