Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions backend/appspec.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,6 @@ hooks:
- location: scripts/download_env.sh
timeout: 2000
runas: ubuntu

AfterInstall:
- location: scripts/after-deploy.sh
timeout: 2000
runas: root

AfterInstall:
- location: scripts/blue-green-deploy.sh
Expand Down
22 changes: 0 additions & 22 deletions backend/scripts/after-deploy.sh

This file was deleted.

279 changes: 96 additions & 183 deletions backend/scripts/blue-green-deploy.sh
Original file line number Diff line number Diff line change
@@ -1,214 +1,127 @@
#!/bin/bash

# Blue/Green ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ
set -e

echo "๐Ÿš€ Blue/Green ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค..."
# ๊ธฐ๋ณธ ์„ค์ •
REPOSITORY=/home/ubuntu/deploy
LOG_FILE="$REPOSITORY/deploy.log"

# ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
# CodeDeploy ๋ฐฐํฌ ๋””๋ ‰ํ† ๋ฆฌ ์ฐพ๊ธฐ
DEPLOYMENT_ROOT="/opt/codedeploy-agent/deployment-root"
# ๋กœ๊ทธ ํŒŒ์ผ๋กœ ๋ชจ๋“  ์ถœ๋ ฅ ๋ฆฌ๋””๋ ‰์…˜
exec > >(tee -a "$LOG_FILE") 2>&1

# ์‹ค์ œ ๋ฐฐํฌ๋œ ํŒŒ์ผ๋“ค์ด ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ ์ฐพ๊ธฐ
echo "DEBUG: deployment-root ๋‚ด์šฉ ํ™•์ธ"
find $DEPLOYMENT_ROOT -type f -name "*.yml" -o -name "*.conf" 2>/dev/null | head -5
echo "> ๐Ÿ”ต Blue/Green ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ์‹œ์ž‘ at $(date)"

# ๊ฐ€์žฅ ์ตœ๊ทผ ๋ฐฐํฌ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์‹ค์ œ ํŒŒ์ผ๋“ค ์ฐพ๊ธฐ (์ˆ˜์ • ์‹œ๊ฐ„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ)
PROJECT_DIR=$(find $DEPLOYMENT_ROOT -type f -name "docker-compose.yml" -printf '%T@ %p\n' 2>/dev/null | sort -nr | head -1 | cut -d' ' -f2- | xargs dirname)

if [ -z "$PROJECT_DIR" ]; then
# ๋Œ€์•ˆ: ls๋กœ ๊ฐ€์žฅ ์ตœ๊ทผ ๋””๋ ‰ํ† ๋ฆฌ ์ฐพ๊ธฐ
LATEST_APP_DIR=$(ls -td $DEPLOYMENT_ROOT/*/d-*/deployment-archive 2>/dev/null | head -1)
if [ -n "$LATEST_APP_DIR" ] && [ -f "$LATEST_APP_DIR/docker-compose.yml" ]; then
PROJECT_DIR="$LATEST_APP_DIR"
else
echo "โŒ docker-compose.yml์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌ ์‹คํŒจ."
exit 1
fi
fi

NGINX_CONFIG="$PROJECT_DIR/nginx.conf"
BACKUP_CONFIG="$PROJECT_DIR/nginx.conf.backup"
DOCKER_COMPOSE_FILE="$PROJECT_DIR/docker-compose.yml"
# ๋””๋ ‰ํ† ๋ฆฌ ์ด๋™
cd $REPOSITORY

echo "DEBUG: ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ: $(pwd)"
echo "DEBUG: ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ: $PROJECT_DIR"
echo "DEBUG: nginx.conf ๊ฒฝ๋กœ: $NGINX_CONFIG"

# ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
cd "$PROJECT_DIR"

# ๋””๋ ‰ํ† ๋ฆฌ ๊ถŒํ•œ ํ™•์ธ ๋ฐ ์ˆ˜์ •
echo "DEBUG: ํ˜„์žฌ ์‚ฌ์šฉ์ž: $(whoami)"
echo "DEBUG: ๋””๋ ‰ํ† ๋ฆฌ ๊ถŒํ•œ ํ™•์ธ"
ls -la "$PROJECT_DIR" || echo "๋””๋ ‰ํ† ๋ฆฌ ๋ชฉ๋ก ํ™•์ธ ์‹คํŒจ"

# ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ์ „์ฒด ์†Œ์œ ์ž root๋กœ ๋ณ€๊ฒฝ
sudo chown -R root:root "$PROJECT_DIR"
# ๋””๋ ‰ํ† ๋ฆฌ๋Š” 755, ํŒŒ์ผ์€ 644๋กœ ๊ถŒํ•œ ์„ค์ •
sudo find "$PROJECT_DIR" -type d -exec chmod 755 {} \;
sudo find "$PROJECT_DIR" -type f -exec chmod 644 {} \;
# ์•ฑ ์ด๋ฆ„ ์„ค์ •
DOCKER_APP_NAME="fastapi"

# ํ˜„์žฌ ํ™œ์„ฑ ์„œ๋ฒ„ ํ™•์ธ
check_active_server() {
if grep -q "backup" $NGINX_CONFIG; then
if grep "fastapi-blue:8000" $NGINX_CONFIG | grep -q "backup"; then
echo "green"
else
echo "blue"
fi
else
echo "blue" # ๊ธฐ๋ณธ๊ฐ’
fi
}
# Blue๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ˜„์žฌ ๋– ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ฒดํฌํ•œ๋‹ค.
EXIST_BLUE=$(docker-compose -p ${DOCKER_APP_NAME}-blue -f docker-compose.yml ps fastapi-blue 2>/dev/null | grep Up || echo "")

echo "ํ˜„์žฌ Blue ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ ํ™•์ธ..."
if [ -n "$EXIST_BLUE" ]; then
echo "โœ… Blue ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค."
else
echo "โŒ Blue ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค."
fi

# ํ—ฌ์Šค์ฒดํฌ ํ•จ์ˆ˜
health_check() {
local port=$1
local attempts=5
local color=$1
local attempts=10

echo "ํฌํŠธ $port ํ—ฌ์Šค์ฒดํฌ ์ค‘..."
echo "๐Ÿ“Š $color ํ™˜๊ฒฝ ํ—ฌ์Šค์ฒดํฌ ์ค‘..."

for i in $(seq 1 $attempts); do
if curl -f http://localhost:$port/api/health > /dev/null 2>&1; then
echo "โœ… ํฌํŠธ $port ํ—ฌ์Šค์ฒดํฌ ์„ฑ๊ณต!"
# ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธ
if ! docker-compose -p ${DOCKER_APP_NAME}-${color} -f docker-compose.yml ps fastapi-${color} | grep -q "Up"; then
echo "โณ $color ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ๋Œ€๊ธฐ ์ค‘... ($i/$attempts)"
sleep 3
continue
fi

# API ํ—ฌ์Šค์ฒดํฌ ์‹œ๋„
if docker-compose -p ${DOCKER_APP_NAME}-${color} -f docker-compose.yml exec -T fastapi-${color} curl -f http://localhost:8000/api/health > /dev/null 2>&1; then
echo "โœ… $color ํ™˜๊ฒฝ ํ—ฌ์Šค์ฒดํฌ ์„ฑ๊ณต!"
return 0
fi
echo "โณ ํ—ฌ์Šค์ฒดํฌ ์‹œ๋„ $i/$attempts..."
sleep 2
echo "โณ $color ํ—ฌ์Šค์ฒดํฌ ์‹œ๋„ $i/$attempts..."
sleep 3
done

echo "โŒ ํฌํŠธ $port ํ—ฌ์Šค์ฒดํฌ ์‹คํŒจ!"
echo "โŒ $color ํ™˜๊ฒฝ ํ—ฌ์Šค์ฒดํฌ ์‹คํŒจ!"
return 1
}

# Nginx ์„ค์ • ์—…๋ฐ์ดํŠธ
update_nginx_config() {
local active_server=$1

echo "Nginx ์„ค์ •์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑ ์„œ๋ฒ„: $active_server"

# ์ž„์‹œ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์„ค์ • (๊ถŒํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ)
TEMP_NGINX="$PROJECT_DIR/nginx.conf.temp"
BACKUP_CONFIG="$PROJECT_DIR/nginx.conf.backup"

# ๋ฐฑ์—… ์ƒ์„ฑ
cp "$NGINX_CONFIG" "$BACKUP_CONFIG"

# ์ž„์‹œ ํŒŒ์ผ๋กœ ๋ณต์‚ฌ
cp "$NGINX_CONFIG" "$TEMP_NGINX"

if [ "$active_server" = "blue" ]; then
# blue ํ™œ์„ฑ, green backup
sed -i 's/server fastapi-blue:8000 weight=1 max_fails=3 fail_timeout=30s backup; # Blue ํ™˜๊ฒฝ/server fastapi-blue:8000 weight=1 max_fails=3 fail_timeout=30s; # Blue ํ™˜๊ฒฝ/' "$TEMP_NGINX"
sed -i 's/server fastapi-green:8000 weight=1 max_fails=3 fail_timeout=30s; # Green ํ™˜๊ฒฝ/server fastapi-green:8000 weight=1 max_fails=3 fail_timeout=30s backup; # Green ํ™˜๊ฒฝ/' "$TEMP_NGINX"
else
# green ํ™œ์„ฑ, blue backup
sed -i 's/server fastapi-blue:8000 weight=1 max_fails=3 fail_timeout=30s; # Blue ํ™˜๊ฒฝ/server fastapi-blue:8000 weight=1 max_fails=3 fail_timeout=30s backup; # Blue ํ™˜๊ฒฝ/' "$TEMP_NGINX"
sed -i 's/server fastapi-green:8000 weight=1 max_fails=3 fail_timeout=30s backup; # Green ํ™˜๊ฒฝ/server fastapi-green:8000 weight=1 max_fails=3 fail_timeout=30s; # Green ํ™˜๊ฒฝ/' "$TEMP_NGINX"
fi

# ํŽธ์ง‘๋œ ํŒŒ์ผ์„ ์›๋ž˜ ์œ„์น˜๋กœ ๋ณต์‚ฌ
cp "$TEMP_NGINX" "$NGINX_CONFIG"

# ์ž„์‹œ ํŒŒ์ผ ์ •๋ฆฌ
rm -f "$TEMP_NGINX"
}
# ์ปจํ…Œ์ด๋„ˆ ์Šค์œ„์นญ
if [ -z "$EXIST_BLUE" ]; then
echo "๏ฟฝ Blue ํ™˜๊ฒฝ์œผ๋กœ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค..."

# Blue ํ™˜๊ฒฝ ์‹œ์ž‘
docker-compose -p ${DOCKER_APP_NAME}-blue -f docker-compose.yml up -d fastapi-blue nginx-lb
BEFORE_COMPOSE_COLOR="green"
AFTER_COMPOSE_COLOR="blue"
else
echo "๐ŸŸข Green ํ™˜๊ฒฝ์œผ๋กœ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค..."

# Green ํ™˜๊ฒฝ ์‹œ์ž‘
docker-compose -p ${DOCKER_APP_NAME}-green -f docker-compose.yml up -d fastapi-green nginx-lb
BEFORE_COMPOSE_COLOR="blue"
AFTER_COMPOSE_COLOR="green"
fi

# Nginx ๋ฆฌ๋กœ๋“œ
reload_nginx() {
echo "Nginx ์„ค์ •์„ ๋ฆฌ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค..."
echo "โณ ์ƒˆ๋กœ์šด $AFTER_COMPOSE_COLOR ํ™˜๊ฒฝ ์•ˆ์ •ํ™” ๋Œ€๊ธฐ ์ค‘..."
sleep 10

# ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ œ๋Œ€๋กœ ๋–ด๋Š”์ง€ ํ™•์ธ
echo "์ƒˆ๋กœ์šด $AFTER_COMPOSE_COLOR ํ™˜๊ฒฝ ์ƒํƒœ ํ™•์ธ..."
EXIST_AFTER=$(docker-compose -p ${DOCKER_APP_NAME}-${AFTER_COMPOSE_COLOR} -f docker-compose.yml ps fastapi-${AFTER_COMPOSE_COLOR} | grep Up || echo "")

if [ -n "$EXIST_AFTER" ]; then
echo "โœ… $AFTER_COMPOSE_COLOR ํ™˜๊ฒฝ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค."

# Nginx ์„ค์ • ๋ฆฌ๋กœ๋“œ ์‹œ๋„
if docker-compose -f "$DOCKER_COMPOSE_FILE" exec -T nginx nginx -s reload 2>/dev/null; then
echo "โœ… Nginx ๋ฆฌ๋กœ๋“œ ์„ฑ๊ณต!"
return 0
# ํ—ฌ์Šค์ฒดํฌ ์ˆ˜ํ–‰
if health_check $AFTER_COMPOSE_COLOR; then
echo "๐Ÿ”„ ์ด์ „ $BEFORE_COMPOSE_COLOR ํ™˜๊ฒฝ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค..."

# ์ด์ „ ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ
docker-compose -p ${DOCKER_APP_NAME}-${BEFORE_COMPOSE_COLOR} -f docker-compose.yml down 2>/dev/null || true
echo "โœ… $BEFORE_COMPOSE_COLOR ํ™˜๊ฒฝ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."

echo ""
echo "๐ŸŽ‰ Blue/Green ๋ฐฐํฌ ์™„๋ฃŒ!"
echo "๐Ÿ“Š ๋ฐฐํฌ ๊ฒฐ๊ณผ:"
echo " - ์ƒˆ๋กœ์šด ํ™œ์„ฑ ํ™˜๊ฒฝ: $AFTER_COMPOSE_COLOR"
echo " - ์ข…๋ฃŒ๋œ ํ™˜๊ฒฝ: $BEFORE_COMPOSE_COLOR"
echo " - ๋ฐฐํฌ ์‹œ๊ฐ„: $(date)"

# ์ตœ์ข… ์ƒํƒœ ํ™•์ธ
echo ""
echo "๐Ÿ” ์ตœ์ข… ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ:"
docker-compose -p ${DOCKER_APP_NAME}-${AFTER_COMPOSE_COLOR} -f docker-compose.yml ps

else
echo "โš ๏ธ ๋ฆฌ๋กœ๋“œ ์‹คํŒจ, Nginx ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘ ์‹œ๋„..."
docker-compose -f "$DOCKER_COMPOSE_FILE" restart nginx
sleep 3
echo "โŒ $AFTER_COMPOSE_COLOR ํ™˜๊ฒฝ ํ—ฌ์Šค์ฒดํฌ ์‹คํŒจ!"
echo "๐Ÿ”„ $AFTER_COMPOSE_COLOR ํ™˜๊ฒฝ์„ ๋กค๋ฐฑํ•ฉ๋‹ˆ๋‹ค..."

if docker-compose -f "$DOCKER_COMPOSE_FILE" ps nginx | grep -q "Up"; then
echo "โœ… Nginx ์žฌ์‹œ์ž‘ ์„ฑ๊ณต!"
return 0
else
echo "โŒ Nginx ์žฌ์‹œ์ž‘ ์‹คํŒจ!"
cp "$BACKUP_CONFIG" "$NGINX_CONFIG"
return 1
# ์‹คํŒจํ•œ ํ™˜๊ฒฝ ์ •๋ฆฌ
docker-compose -p ${DOCKER_APP_NAME}-${AFTER_COMPOSE_COLOR} -f docker-compose.yml down 2>/dev/null || true

# ์ด์ „ ํ™˜๊ฒฝ์ด ์žˆ๋‹ค๋ฉด ๋‹ค์‹œ ์‹œ์ž‘
if [ "$BEFORE_COMPOSE_COLOR" != "none" ]; then
echo "๐Ÿ”„ ์ด์ „ $BEFORE_COMPOSE_COLOR ํ™˜๊ฒฝ์„ ๋ณต๊ตฌํ•ฉ๋‹ˆ๋‹ค..."
docker-compose -p ${DOCKER_APP_NAME}-${BEFORE_COMPOSE_COLOR} -f docker-compose.yml up -d
fi
fi
}

# ๋ฉ”์ธ ๋ฐฐํฌ ๋กœ์ง
main() {
# ํ˜„์žฌ ํ™œ์„ฑ ์„œ๋ฒ„ ํ™•์ธ
ACTIVE_SERVER=$(check_active_server)
echo "ํ˜„์žฌ ํ™œ์„ฑ ์„œ๋ฒ„: $ACTIVE_SERVER"

# ๋Œ€๊ธฐ ์„œ๋ฒ„ ๊ฒฐ์ •
if [ "$ACTIVE_SERVER" = "blue" ]; then
STANDBY_SERVER="green"
STANDBY_PORT="8001"
STANDBY_SERVICE="fastapi-green"
else
STANDBY_SERVER="blue"
STANDBY_PORT="8000"
STANDBY_SERVICE="fastapi-blue"
fi

echo "๋ฐฐํฌ ๋Œ€์ƒ: $STANDBY_SERVER (ํฌํŠธ: $STANDBY_PORT)"

# 1. ๋Œ€๊ธฐ ์„œ๋ฒ„ ์žฌ์‹œ์ž‘
echo "๐Ÿ”„ $STANDBY_SERVER ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘..."

# ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ๋“ค ์ •๋ฆฌ (ํฌํŠธ ์ถฉ๋Œ ๋ฐฉ์ง€)
echo "๐Ÿงน ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ ์ •๋ฆฌ ์ค‘..."
docker-compose -f "$DOCKER_COMPOSE_FILE" down 2>/dev/null || true

# 80๋ฒˆ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ํ™•์ธ ๋ฐ ์ •๋ฆฌ
echo "๐Ÿ” ํฌํŠธ 80 ์‚ฌ์šฉ ํ”„๋กœ์„ธ์Šค ํ™•์ธ..."
if lsof -ti:80 >/dev/null 2>&1; then
echo "โš ๏ธ ํฌํŠธ 80์ด ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ์‹œ๋„..."
pkill -f nginx 2>/dev/null || true
sleep 2
fi

# ์ „์ฒด ์„œ๋น„์Šค ์‹œ์ž‘ (๋„คํŠธ์›Œํฌ ํฌํ•จ)
echo "๐Ÿš€ ์ „์ฒด ์„œ๋น„์Šค ์‹œ์ž‘ ์ค‘..."
docker-compose -f "$DOCKER_COMPOSE_FILE" up -d

sleep 5

echo "โณ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ๋Œ€๊ธฐ ์ค‘..."
sleep 10

# 2. ํ—ฌ์Šค์ฒดํฌ
if ! health_check $STANDBY_PORT; then
echo "โŒ ํ—ฌ์Šค์ฒดํฌ ์‹คํŒจ. ๋ฐฐํฌ ์ค‘๋‹จ."
exit 1
fi

# 3. ํŠธ๋ž˜ํ”ฝ ์ „ํ™˜
echo "๐Ÿ”€ ํŠธ๋ž˜ํ”ฝ์„ $STANDBY_SERVER๋กœ ์ „ํ™˜..."
update_nginx_config $STANDBY_SERVER

if ! reload_nginx; then
echo "โŒ Nginx ๋ฆฌ๋กœ๋“œ ์‹คํŒจ. ๋ฐฐํฌ ์ค‘๋‹จ."
exit 1
fi

# 4. ์ตœ์ข… ํ™•์ธ
sleep 3
if ! health_check 80; then
echo "โŒ ์ตœ์ข… ํ™•์ธ ์‹คํŒจ. ๋กค๋ฐฑ ์ค‘..."
update_nginx_config $ACTIVE_SERVER
reload_nginx

echo "โŒ ๋ฐฐํฌ ์‹คํŒจ! ๋กค๋ฐฑ ์™„๋ฃŒ."
exit 1
fi

echo "โœ… Blue/Green ๋ฐฐํฌ ์™„๋ฃŒ!"
echo "์ƒˆ๋กœ์šด ํ™œ์„ฑ ์„œ๋ฒ„: $STANDBY_SERVER"
}

# ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
main "$@"
else
echo "โŒ $AFTER_COMPOSE_COLOR ํ™˜๊ฒฝ ์‹œ์ž‘ ์‹คํŒจ!"
echo "โŒ ๋ฐฐํฌ ์‹คํŒจ!"
exit 1
fi
8 changes: 0 additions & 8 deletions backend/scripts/fix-permissions.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,4 @@ if [ -d "$DEPLOY_DIR" ]; then
find "$DEPLOY_DIR" -name "*.sh" -exec chmod 755 {} \;
fi

# CodeDeploy ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ ๊ถŒํ•œ๋„ ์ˆ˜์ •
CODEDEPLOY_ROOT="/opt/codedeploy-agent/deployment-root"
if [ -d "$CODEDEPLOY_ROOT" ]; then
echo "CodeDeploy ๋””๋ ‰ํ† ๋ฆฌ ๊ถŒํ•œ ์ˆ˜์ •: $CODEDEPLOY_ROOT"
find "$CODEDEPLOY_ROOT" -name "deployment-archive" -type d -exec chown -R ubuntu:ubuntu {} \; 2>/dev/null || true
find "$CODEDEPLOY_ROOT" -name "deployment-archive" -type d -exec chmod -R 755 {} \; 2>/dev/null || true
fi

echo "โœ… ๊ถŒํ•œ ์ˆ˜์ • ์™„๋ฃŒ"
Loading