Skip to content

Commit ea7e7a2

Browse files
authored
Merge pull request #184 from Runnect/dev
[Fix] - deploy.sh ์ง„๋‹จ ์ •๋ณด ์ˆ˜์ง‘ + Nginx ๋ณต๊ตฌ
2 parents b5cf9cb + e451281 commit ea7e7a2

2 files changed

Lines changed: 126 additions & 70 deletions

File tree

Lines changed: 61 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
name: EC2-RECOVERY
1+
name: EC2-DIAGNOSTIC
22

33
on:
44
workflow_dispatch:
55

66
jobs:
7-
recover:
8-
name: Recover Server
7+
diagnose:
8+
name: Diagnose EC2 Instance
99
runs-on: ubuntu-latest
1010

1111
steps:
@@ -16,84 +16,81 @@ jobs:
1616
aws-secret-access-key: ${{ secrets.AWS_PROD_SECRET_KEY }}
1717
aws-region: ap-northeast-2
1818

19-
- name: Check IAM identity
19+
- name: Check IAM identity and permissions
2020
run: |
21-
echo "=== IAM ์ •๋ณด ํ™•์ธ ==="
22-
aws sts get-caller-identity || echo "STS ํ˜ธ์ถœ ์‹คํŒจ"
21+
echo "=== IAM ์ •๋ณด ==="
22+
aws sts get-caller-identity 2>&1 || true
2323
24-
- name: Check CodeDeploy deployments
24+
echo ""
25+
echo "=== IAM ์ •์ฑ… ํ™•์ธ ==="
26+
ACCOUNT=$(aws sts get-caller-identity --query Account --output text 2>/dev/null)
27+
USER_NAME=$(aws sts get-caller-identity --query Arn --output text 2>/dev/null | awk -F'/' '{print $NF}')
28+
echo "Account: $ACCOUNT"
29+
echo "User: $USER_NAME"
30+
31+
echo ""
32+
echo "=== Attached Policies ==="
33+
aws iam list-attached-user-policies --user-name "$USER_NAME" 2>&1 || echo "IAM ์ •์ฑ… ์กฐํšŒ ๊ถŒํ•œ ์—†์Œ"
34+
35+
echo ""
36+
echo "=== Inline Policies ==="
37+
aws iam list-user-policies --user-name "$USER_NAME" 2>&1 || echo "IAM ์ธ๋ผ์ธ ์ •์ฑ… ์กฐํšŒ ๊ถŒํ•œ ์—†์Œ"
38+
39+
- name: CodeDeploy deployment group info
2540
run: |
26-
echo "=== ์ตœ๊ทผ ๋ฐฐํฌ ์ƒํƒœ ํ™•์ธ ==="
27-
aws deploy list-deployments \
41+
echo "=== ๋ฐฐํฌ ๊ทธ๋ฃน ์ƒ์„ธ ==="
42+
aws deploy get-deployment-group \
2843
--application-name runnect-prod-codedeploy \
2944
--deployment-group-name runnect-prod-codedeploy-group \
30-
--include-only-statuses "Succeeded,Failed,InProgress" \
31-
--query "deployments[:3]" \
32-
--output text || echo "๋ฐฐํฌ ๋ชฉ๋ก ์กฐํšŒ ์‹คํŒจ"
45+
--output json 2>&1 || echo "๋ฐฐํฌ ๊ทธ๋ฃน ์กฐํšŒ ์‹คํŒจ"
3346
47+
- name: Latest deployment details
48+
run: |
49+
echo "=== ์ตœ๊ทผ ๋ฐฐํฌ ๋ชฉ๋ก ==="
3450
LATEST=$(aws deploy list-deployments \
3551
--application-name runnect-prod-codedeploy \
3652
--deployment-group-name runnect-prod-codedeploy-group \
3753
--query "deployments[0]" \
3854
--output text 2>/dev/null)
55+
echo "Latest deployment: $LATEST"
3956
4057
if [ -n "$LATEST" ] && [ "$LATEST" != "None" ]; then
4158
echo ""
42-
echo "=== ์ตœ์‹  ๋ฐฐํฌ ์ƒ์„ธ ==="
43-
aws deploy get-deployment --deployment-id "$LATEST" \
44-
--query "deploymentInfo.{status:status, createTime:createTime, completeTime:completeTime, errorInfo:errorInformation}" \
45-
--output json
59+
echo "=== ๋ฐฐํฌ ์ƒ์„ธ ==="
60+
aws deploy get-deployment --deployment-id "$LATEST" --output json 2>&1
61+
62+
echo ""
63+
echo "=== ๋ฐฐํฌ ์ธ์Šคํ„ด์Šค ๋ชฉ๋ก ==="
64+
aws deploy list-deployment-instances --deployment-id "$LATEST" --output json 2>&1 || echo "์ธ์Šคํ„ด์Šค ๋ชฉ๋ก ์กฐํšŒ ์‹คํŒจ"
65+
66+
echo ""
67+
echo "=== ๋ฐฐํฌ ํƒ€๊ฒŸ ์ƒ์„ธ ==="
68+
INSTANCE_IDS=$(aws deploy list-deployment-instances --deployment-id "$LATEST" --query "instancesList" --output text 2>/dev/null)
69+
for INST in $INSTANCE_IDS; do
70+
echo "--- Instance: $INST ---"
71+
aws deploy get-deployment-instance --deployment-id "$LATEST" --instance-id "$INST" --output json 2>&1 || echo "์กฐํšŒ ์‹คํŒจ"
72+
done
4673
fi
4774
48-
- name: Trigger new CodeDeploy deployment
75+
- name: Check SSM access
4976
run: |
50-
echo "=== ์ƒˆ CodeDeploy ๋ฐฐํฌ ํŠธ๋ฆฌ๊ฑฐ ==="
51-
DEPLOYMENT_ID=$(aws deploy create-deployment \
52-
--application-name runnect-prod-codedeploy \
53-
--deployment-group-name runnect-prod-codedeploy-group \
54-
--file-exists-behavior OVERWRITE \
55-
--s3-location bucket=runnect-prod-bucket,bundleType=zip,key=runnect_prod_server.zip \
56-
--region ap-northeast-2 \
57-
--query "deploymentId" \
58-
--output text)
59-
60-
echo "Deployment ID: $DEPLOYMENT_ID"
61-
62-
echo "๋ฐฐํฌ ์™„๋ฃŒ ๋Œ€๊ธฐ (์ตœ๋Œ€ 5๋ถ„)..."
63-
for i in $(seq 1 30); do
64-
STATUS=$(aws deploy get-deployment --deployment-id "$DEPLOYMENT_ID" \
65-
--query "deploymentInfo.status" --output text 2>/dev/null)
66-
echo "[$i/30] Status: $STATUS"
67-
68-
if [ "$STATUS" = "Succeeded" ]; then
69-
echo "๋ฐฐํฌ ์„ฑ๊ณต!"
70-
break
71-
elif [ "$STATUS" = "Failed" ] || [ "$STATUS" = "Stopped" ]; then
72-
echo "๋ฐฐํฌ ์‹คํŒจ! ์ƒ์„ธ ์ •๋ณด:"
73-
aws deploy get-deployment --deployment-id "$DEPLOYMENT_ID" \
74-
--query "deploymentInfo.errorInformation" --output json
75-
break
76-
fi
77-
sleep 10
78-
done
79-
80-
- name: Health check
77+
echo "=== SSM ์ธ์Šคํ„ด์Šค ๋ชฉ๋ก ==="
78+
aws ssm describe-instance-information --output json 2>&1 || echo "SSM ๊ถŒํ•œ ์—†์Œ"
79+
80+
- name: Try EC2 describe (may fail)
8181
run: |
82-
echo "์„œ๋ฒ„ ํ—ฌ์Šค ์ฒดํฌ (์ตœ๋Œ€ 3๋ถ„ ๋Œ€๊ธฐ)..."
83-
for i in $(seq 1 18); do
84-
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 --max-time 10 http://3.35.195.11/actuator/health 2>/dev/null || echo "000")
85-
echo "[$i/18] HTTP: $HTTP_CODE"
86-
if [ "$HTTP_CODE" = "200" ]; then
87-
echo "์„œ๋ฒ„ ๋ณต๊ตฌ ์™„๋ฃŒ!"
88-
exit 0
89-
fi
90-
sleep 10
91-
done
82+
echo "=== EC2 ์ธ์Šคํ„ด์Šค ์กฐํšŒ ์‹œ๋„ ==="
83+
aws ec2 describe-instances --output json 2>&1 || echo "EC2 ๊ถŒํ•œ ์—†์Œ"
9284
9385
echo ""
94-
echo "=== ํฌํŠธ๋ณ„ ์ฒดํฌ ==="
95-
for PORT in 80 8081 8082; do
96-
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 --max-time 10 http://3.35.195.11:$PORT/actuator/health 2>/dev/null || echo "000")
97-
echo "Port $PORT: HTTP $HTTP_CODE"
98-
done
99-
echo "WARNING: ์„œ๋ฒ„๊ฐ€ ์•„์ง ์‘๋‹ตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."
86+
echo "=== Elastic IP ์กฐํšŒ ์‹œ๋„ ==="
87+
aws ec2 describe-addresses --public-ips 3.35.195.11 2>&1 || echo "Elastic IP ์กฐํšŒ ์‹คํŒจ"
88+
89+
echo ""
90+
echo "=== ๋ณด์•ˆ ๊ทธ๋ฃน ์กฐํšŒ ์‹œ๋„ ==="
91+
aws ec2 describe-security-groups 2>&1 || echo "๋ณด์•ˆ ๊ทธ๋ฃน ์กฐํšŒ ์‹คํŒจ"
92+
93+
- name: Check S3 bucket
94+
run: |
95+
echo "=== S3 ๋ฒ„ํ‚ท ํ™•์ธ ==="
96+
aws s3 ls s3://runnect-prod-bucket/ 2>&1 || echo "S3 ์ ‘๊ทผ ์‹คํŒจ"

โ€Žscripts/deploy.shโ€Ž

Lines changed: 65 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,68 @@ echo "> ์Šค์œ„์นญ"
9696
sleep 10
9797
/home/ubuntu/app/nonstop/switch.sh
9898

99-
echo "> ๋ฐฐํฌ ์™„๋ฃŒ. ์ตœ์ข… ์ƒํƒœ ํ™•์ธ"
100-
echo "> Nginx: $(sudo systemctl is-active nginx)"
101-
echo "> Java ํ”„๋กœ์„ธ์Šค:"
102-
pgrep -a java || echo "> Java ํ”„๋กœ์„ธ์Šค ์—†์Œ"
103-
echo "> ํฌํŠธ ๋ฆฌ์Šค๋‹:"
104-
sudo ss -tlnp | grep -E ':(80|8081|8082) ' || echo "> ํ•ด๋‹น ํฌํŠธ ๋ฆฌ์Šค๋‹ ์—†์Œ"
99+
echo "> ๋ฐฐํฌ ์™„๋ฃŒ. ์ง„๋‹จ ์ •๋ณด ์ˆ˜์ง‘ ์ค‘..."
100+
101+
DIAG_FILE="/tmp/server-diagnostic-$(date +%Y%m%d-%H%M%S).txt"
102+
{
103+
echo "========== SERVER DIAGNOSTIC =========="
104+
echo "Date: $(date)"
105+
echo ""
106+
107+
echo "=== Public IP (EC2 metadata) ==="
108+
curl -s --connect-timeout 3 http://169.254.169.254/latest/meta-data/public-ipv4 2>/dev/null || echo "๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋ถˆ๊ฐ€"
109+
echo ""
110+
111+
echo "=== Network Interfaces ==="
112+
ip addr show 2>/dev/null || ifconfig 2>/dev/null
113+
echo ""
114+
115+
echo "=== Nginx Status ==="
116+
sudo systemctl status nginx 2>&1
117+
echo ""
118+
119+
echo "=== Nginx Config ==="
120+
sudo nginx -T 2>&1
121+
echo ""
122+
123+
echo "=== Listening Ports ==="
124+
sudo ss -tlnp 2>/dev/null || sudo netstat -tlnp 2>/dev/null
125+
echo ""
126+
127+
echo "=== Java Processes ==="
128+
pgrep -a java 2>/dev/null || echo "Java ํ”„๋กœ์„ธ์Šค ์—†์Œ"
129+
echo ""
130+
131+
echo "=== iptables Rules ==="
132+
sudo iptables -L -n 2>/dev/null || echo "iptables ์กฐํšŒ ์‹คํŒจ"
133+
echo ""
134+
135+
echo "=== Localhost Health Check ==="
136+
curl -s http://localhost:8081/actuator/health 2>/dev/null
137+
echo ""
138+
curl -s http://localhost:8082/actuator/health 2>/dev/null
139+
echo ""
140+
curl -s http://localhost/actuator/health 2>/dev/null
141+
echo ""
142+
curl -s http://localhost/profile 2>/dev/null
143+
echo ""
144+
145+
echo "=== Disk Usage ==="
146+
df -h 2>/dev/null
147+
echo ""
148+
149+
echo "=== Memory Usage ==="
150+
free -h 2>/dev/null
151+
echo ""
152+
153+
echo "=== nohup.out (last 50 lines) ==="
154+
tail -50 /home/ubuntu/app/nohup.out 2>/dev/null || echo "nohup.out ์—†์Œ"
155+
echo ""
156+
157+
echo "========== END DIAGNOSTIC =========="
158+
} > "$DIAG_FILE" 2>&1
159+
160+
echo "> ์ง„๋‹จ ๊ฒฐ๊ณผ๋ฅผ S3์— ์—…๋กœ๋“œ..."
161+
aws s3 cp "$DIAG_FILE" s3://runnect-prod-bucket/diagnostics/$(basename "$DIAG_FILE") 2>&1 || echo "> S3 ์—…๋กœ๋“œ ์‹คํŒจ"
162+
163+
echo "> ์ง„๋‹จ ์™„๋ฃŒ"

0 commit comments

Comments
ย (0)