쓰고 있지 않는 oracle cloud의 ec2 두개를 정리했다.
그리고 새로 2개를 만들었는데
하나는 이름을 intergratedApiEC2로 정하고
다른 하나는 intergratedDatabaseEC2로 정했다.
둘다 운영체제는 우분투
보안 규칙을 살펴보니 80, 8080이 열려있어서 443을 추가했다.
이후
sudo iptables -I INPUT 1 -p tcp --dport <포트번호> -j ACCEPT
이걸 사용해서 필요한 포트를 열어 주고
sudo netfilter-persistent save
sudo netfilter-persistent reload
이걸로 해당 사항이 ec2가 재부팅되도 사라지지 않도록 저장했다.
둘다 같은 vpc에 넣어서 스프링에서 db서버에 내부 ip로 요청을 보낼 생각이고 api ec2는 elastic ip를 할당했다.
이후 spring boot 코드를 짜서 넣어줬다
크론탭을 사용해서 노션에 ec2의 메모리를 15분 마다 기록하게 해뒀음
그냥 안될 거 같아서
memoryTracker.sh의 권한은
sudo chmod +x /home/ubuntu/memoryTracker.sh
로 실행 권한을 줬다.
memoryTracker.sh 의 소스는 이렇다
https://github.com/okanekudasai/intergratedApiEC2/blob/master/memoryTracker.sh
#!/bin/bash
# 변수 초기화
CURRENT_TIME="$(date '+%Y-%m-%dT%H:%M:%S')"
# free -m 명령어의 두 번째 줄 (메모리 정보)만 가져오기
MEMORY_USAGE=$(free -m | awk 'NR==2')
TOTAL_MEM=$(echo $MEMORY_USAGE | awk '{print $2}')
USED_MEM=$(echo $MEMORY_USAGE | awk '{print $3}')
MEMORY_USAGE_PERCENT=$(awk "BEGIN {printf \"%.2f\", ($USED_MEM/$TOTAL_MEM)*100}")
# Notion API
NOTION_API_URL="https://api.notion.com/v1/pages"
AUTHORIZATION="Bearer ntn_2************************************Rl"
CONTENT_TYPE="application/json"
NOTION_VERSION="2022-06-28"
# JAVA
CURRENT_PID=$(pgrep -f intergratedApi) # 실행중인 파일명으로
MEM_USAGE=0 # 프로세스 메모리 사용량
CPU_USAGE=0 # 프로세스 CPU 사용량
JAVA_USAGE_MB=0
# PID가 존재하는지 확인
if [ -n "$CURRENT_PID" ]; then
# 프로세스 메모리 및 CPU 사용량 가져오기
MEM_USAGE=$(ps -p $CURRENT_PID -o %mem --no-headers) # 프로세스 메모리 사용량
CPU_USAGE=$(ps -p $CURRENT_PID -o %cpu --no-headers) # 프로세스 CPU 사용량
JAVA_USAGE_MB=$(ps -p $CURRENT_PID -o rss= | awk '{print $1 / 1024}')
fi
BODY=$(cat <<EOF
{
"parent": {
"database_id": "14****************************56"
},
"properties": {
"시간": {
"date": {
"start": "$CURRENT_TIME"
}
},
"ec2 사용 메모리 점유율": {
"rich_text": [
{
"text": {
"content": "$MEMORY_USAGE_PERCENT %"
}
}
]
},
"PID": {
"rich_text": [
{
"text": {
"content": "$CURRENT_PID"
}
}
]
},
"스프링 메모리 사용량": {
"title": [
{
"text": {
"content": "$JAVA_USAGE_MB MB"
}
}
]
},
"스프링 메모리 점유율": {
"rich_text": [
{
"text": {
"content": "$MEM_USAGE %"
}
}
]
},
"스프링 CPU 사용률": {
"rich_text": [
{
"text": {
"content": "$CPU_USAGE %"
}
}
]
}
}
}
EOF
)
# curl 명령어로 POST 요청 보내기
curl -X POST $NOTION_API_URL \
-H "Authorization: $AUTHORIZATION" \
-H "Content-Type: $CONTENT_TYPE" \
-H "Notion-Version: $NOTION_VERSION" \
-d "$BODY"
결과적으로
이렇게 저장됨
이후 okane-on-cliff.duckdns.org로 도메인을 발급받아 https연결을 하였다.
https://okane-on-cliff.duckdns.org/api/swagger-ui/index.html#/ 로 스웨거 페이지로 갈 수 있다.
자동 갱신을 위한 크론탭을 만들어야 하는데
0 0 * * * certbot renew --quiet --standalone --deploy-hook "systemctl reload nginx"
이걸 크론탭에 추가해서 갱신을 자동으로 하게 만들어 봤다 아직 갱신할 날이 다가오지 않아 제대로 작동되는 지는 모르겠지만
sudo certbot renew --force-renewal --standalone --deploy-hook "systemctl reload nginx"
이걸 실행해 보니까 스웨거 페이지의 인증서 정보가 갱신된걸 확인 할 수 있었다. 그래서 아마 되지 않을까 생각함
vercel에 배포 하고 환경변수가 제대로 작동하는지 확인해 봄
제대로 작동하는걸 볼 수 있따.