사용 기술: AWS EC2, MySql, Nginx, Spring boot, Docker, Git Actions
1. Spring boot 프로젝트
- 도커파일 생성 (최상단 폴더)
FROM eclipse-temurin:17-jdk-jammy
ARG JAR_FILE=build/libs/*.jar
ARG PROFILES
COPY ${JAR_FILE} app.jar
ENV TZ Asia/Seoul
ENTRYPOINT ["java","-Dspring.profiles.active=${PROFILES}","-jar","app.jar"]
2. AWS
-ec2 인스턴스 생성
-8080, 443, 80 포트 열기
-탄력적 IP 연결
- C:\Users\YourUsername\.ssh에 key 저장
3. 인스턴스
3-1. 접속
- 쉘스크립트 작성( 탄력적 IP 사용)
- 쉘스크립트 이용해 인스턴스 접속
- sudo su
- 기본 셋팅
- apt-get update
- apt-get upgrade
- swap 생성 작업
- free -h ( 시스템 메모리와 스왑 사용량 확인)
- fallocate -l 1G /swapfile ( 스왑 파일 생성)
- chmod 600 /swapfile (권한 설정)
- mkswap /swapfile (스왑 파일을 스왑 영역으로 설정)
- swappon /swapfile (스왑파일 활성화)
- free -h ( 다시 시스템 메모리와 스왑 사용량 확인)
3-2. 도커
- 도커 다운로드
- 도커 로그인
- Docker login
- 비밀번호 입력
- 도커 Nginx, MySQL 이미지 설치( 도커 허브에서 명령어 찾기)
- 도커 네트워크 설치
- network create <네트워크명>
- 컨테이너 설치
- docker run -d --name <컨테이너명> --network <네트워크명> -p 80:80 -p 443:443 nginx
- docker run -d --name <컨테이너명> --network <네트워크명> -e MYSQL_ROOT_PASSWORD=<mysql비밀번호> -p 3306:3306 mysql
- 네트워크 확인
- docker network inspect <네트워크명>
- MySQL 접속
- docker exec -it <컨테이너명> bash
- mysql -u root -p
- 패스워드 입력
- create database <연결할 DB 명>
- exit
- Nginx 설정
- docker exec -it <컨테이너명> bin/bash
- apt-get update
- apt-get upgrade
- apt install vim
- vim /etc/nginx/conf.d/default.conf
# location / {}에 추가
proxy_pass http://localhost:8080;
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_set_header X-Forwarded-Proto $scheme;
- exit
3-3. 컴포즈 파일
- 컴포즈 파일 생성
- vim docker-compose.yml
version: '3.8'
services:
server:
image: <도커Id>/<이미지명>:latest
container_name: <컨테이너명>
ports:
- "8080:8080"
environment:
- PROFILES=prod
networks:
- my_app_network
networks:
my_app_network:
external: true
- 컴포즈 로그 확인법
docker-compose -f <컴포즈파일명> logs
4. Git actions
-github에서 /github/worksflows/CICD.yml 작성
- https://github.com/GyeonghwaKim/MusicSheetsCommunitiy/blob/main/.github/workflows/CICD.yml
- Settings-Secrets and variables-actions 에서 시크릿 파일 암호화
번외 https 적용
- 도메인 구입
- Route 53 적용
- 인스턴스 접속
- sudo su
- docker exec -it <nginx컨테이너명> bin/bash
- vim /etc/nginx/conf/default.f
server {
server_name 도메인명;
#추가
location /.well-known/acme-challenge/ {
allow all;
root /var/www/certbot;
}
}
certbot --nginx -d