Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

06장. 배포 자동화 #6

Open
KS-KIM opened this issue Mar 14, 2021 · 1 comment
Open

06장. 배포 자동화 #6

KS-KIM opened this issue Mar 14, 2021 · 1 comment
Labels

Comments

@KS-KIM
Copy link

KS-KIM commented Mar 14, 2021

No description provided.

@KS-KIM KS-KIM added the 3주차 label Mar 14, 2021
@aegis1920
Copy link

aegis1920 commented Mar 17, 2021

몇 가지 이슈 정리

서버가 켜질 때마다 nginx.conf 를 바뀌어진 IP로 할당해야하는 이슈

AWS에서 우리가 사용하고 있는 IP는 고정 IP가 아니라 퍼블릭 IP이기 때문에 인스턴스를 껐다 켤때마다 바뀝니다. 인스턴스를 켤 때마다 직접 들어가서 매번 바꿔줘야하는 게 너무 귀찮았습니다.

그래서 shell script로 IP와 DNS 주소를 가지고 올 수 있는 방법을 찾긴 했습니다.

# 퍼블릭 IP
aws_public_ip=$(curl http://169.254.169.254/latest/meta-data/public-ipv4)

# 퍼블릭 DNS IP
aws_public_dns_ip=$(curl http://169.254.169.254/latest/meta-data/public-hostname)

aws_public_ip, aws_public_dns_ip 를 전역변수로 만들고 nginx.conf 안에서 쓰면 되지 않을까 생각했는데 생각보다 잘 되지 않았습니다. 쉘 파일이 아니라 .conf 파일이라서 그런듯합니다.

같이 고민해보면 좋을 것 같아 적습니다 :)

해결 : nginx.conf를 굳이 바꾸지 않아도 인스턴스 안에 nginx와 서버가 켜져있다면 켜진 서버로 알아서 할당해줍니다. 삽질했네요 ㅎㅎ

AWS EC2에 CodeDeploy Agent를 설치 시 /usr/bin/env: ruby: No such file or directory 가 뜨는 이슈

  1. 설치를 진행하다보면 sudo ./install auto 에서
  2. /usr/bin/env: ruby: No such file or directory 가 뜹니다.
  3. 루비로 이뤄져 있는데 루비가 설치되지 않아서 생긴 문제입니다.
  4. sudo yum install ruby 로 루비를 설치하고 다시 실행하면 됩니다.

출처 : https://sarc.io/index.php/aws/1875-error-aws-codedeploy-agent

Spring Boot를 이용하므로 책과 쉘 스크립트가 다른 이슈

  • 저희는 서버를 Spring Boot로하기 때문에 책에서 나온 쉘 스크립트 파일과 다르게 작성해야 합니다.
  • appspec.yml은 같으며 scripts 디렉토리에 들어가 있는 파일은 아래와 같습니다.
  • 저의 경우, github에서 받는 파일의 경로가 /home/ec2-user/deploy 입니다.
  • 상대 경로(~)로 하면 못 찾기에 모두 절대경로로 줬습니다.
  • 제가 한 것도 하나의 방법이므로 다르게 작성하셔도 좋을 것 같습니다.
# install_dependencies.sh

echo '============================'
echo 'Running install_dependencies'
echo '============================'

source /home/ec2-user/.bash_profile

cd /home/ec2-user/deploy
./gradlew clean build

# restart_server.sh

echo '======================'
echo 'Running restart_server'
echo '======================'

# 여기서 조심해야할 점! 서버가 있다면 종료시켜줘야 합니다!

nohup java -jar /home/ec2-user/deploy/build/libs/aws-exercise-0.0.1-SNAPSHOT.jar /dev/null 2> /dev/null < /dev/null &

sudo service nginx start

# set_owner.sh

echo '================='
echo 'Running set_owner'
echo '================='

chown -R ec2-user /home/ec2-user/deploy

# validate_server.sh

echo '======================='
echo 'Running validate_server'
echo '======================='

result=$(curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:8080/health)

echo $result

if [[ "$result" =~ "200" ]]; then
  exit 0
else
  exit 1
fi

CodeDeploy에서 &만 붙여서 배포 실행 시 에러가 뜨는 이슈

  1. 스프링 부트의 출력을 그대로 하니까 Script at specified location: scripts/restart_server.sh failed to close STDOUT 에러가 떴습니다.
  2. 공식문서를 보면 &만 추가해서는 백그라운드에서 실행시킬 수 없다고 합니다.
    1. stdout, stderr 및 stdin을 /dev/null로 리디렉션해야한다고 합니다.
  3. 저의 경우, 아래 방식처럼 하니까 됐습니다.
  4. 참고로 배포가 안됐다가 다시 재배포를 하니까 되는 경우도 있었습니다.
nohup java -jar /home/ec2-user/deploy/build/libs/aws-exercise-0.0.1-SNAPSHOT.jar /dev/null 2> /dev/null < /dev/null &

출처 : https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/troubleshooting-deployments.html

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants