Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
10 changes: 10 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,16 @@ jobs:

# 프로젝트 디렉토리로 이동
cd ~/projects/GlobalNomad

# .env 파일 생성
echo "📝 Creating .env file from secrets..."
# 기존 .env 파일이 있다면 삭제하여 최신 상태 유지
rm -f .env
touch .env
Comment on lines +111 to +112
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

.env 파일 권한을 제한하여 서버 내 노출을 방지하세요
파일을 만들기만 하고 권한을 조정하지 않아 기본 umask 값에 따라 다른 사용자도 읽을 수 있습니다.

 touch .env
+chmod 600 .env  # 소유자만 읽기/쓰기
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
rm -f .env
touch .env
rm -f .env
touch .env
chmod 600 .env # 소유자만 읽기/쓰기
🤖 Prompt for AI Agents
In .github/workflows/deploy.yml at lines 111 to 112, after creating the .env
file with 'touch .env', set restrictive file permissions to prevent other users
on the server from reading it. Add a command like 'chmod 600 .env' immediately
after 'touch .env' to limit access to the file owner only.

echo "NEXT_PUBLIC_API_URL=${{ secrets.NEXT_PUBLIC_API_URL }}" >> .env
echo "NEXT_PUBLIC_TEAM_ID=${{ secrets.NEXT_PUBLIC_TEAM_ID }}" >> .env
echo "NEXT_PUBLIC_KAKAO_APP_JS_KEY=${{ secrets.NEXT_PUBLIC_KAKAO_APP_JS_KEY }}" >> .env
echo "NEXT_PUBLIC_API_SERVER_URL=${{ secrets.NEXT_PUBLIC_API_SERVER_URL }}" >> .env
Copy link

@coderabbitai coderabbitai bot Jul 27, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

⚠️ Potential issue

환경 변수 값이 로그에 노출될 위험이 있습니다

echo 명령으로 .env 파일을 작성하면 각 변수 값이 STDOUT 으로 출력되어 GitHub Actions 로그 및 원격 SSH 세션 로그에 그대로 남을 수 있습니다. Secrets 마스킹이 실패하거나 로그가 외부에 노출될 경우, 민감-정보가 유출될 가능성이 있습니다.
cat <<EOF > .env 패턴을 사용하면 값이 출력되지 않아 위험을 줄일 수 있습니다.

-            rm -f .env
-            touch .env
-            echo "NEXT_PUBLIC_API_URL=${{ secrets.NEXT_PUBLIC_API_URL }}" >> .env
-            echo "NEXT_PUBLIC_TEAM_ID=${{ secrets.NEXT_PUBLIC_TEAM_ID }}" >> .env
-            echo "NEXT_PUBLIC_KAKAO_APP_JS_KEY=${{ secrets.NEXT_PUBLIC_KAKAO_APP_JS_KEY }}" >> .env
-            echo "NEXT_PUBLIC_API_SERVER_URL=${{ secrets.NEXT_PUBLIC_API_SERVER_URL }}" >> .env
+            rm -f .env
+            # 값이 로그에 찍히지 않도록 cat-heredoc 사용
+            cat > .env <<EOF
+NEXT_PUBLIC_API_URL=${{ secrets.NEXT_PUBLIC_API_URL }}
+NEXT_PUBLIC_TEAM_ID=${{ secrets.NEXT_PUBLIC_TEAM_ID }}
+NEXT_PUBLIC_KAKAO_APP_JS_KEY=${{ secrets.NEXT_PUBLIC_KAKAO_APP_JS_KEY }}
+NEXT_PUBLIC_API_SERVER_URL=${{ secrets.NEXT_PUBLIC_API_SERVER_URL }}
+EOF
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# .env 파일 생성
echo "📝 Creating .env file from secrets..."
# 기존 .env 파일이 있다면 삭제하여 최신 상태 유지
rm -f .env
touch .env
echo "NEXT_PUBLIC_API_URL=${{ secrets.NEXT_PUBLIC_API_URL }}" >> .env
echo "NEXT_PUBLIC_TEAM_ID=${{ secrets.NEXT_PUBLIC_TEAM_ID }}" >> .env
echo "NEXT_PUBLIC_KAKAO_APP_JS_KEY=${{ secrets.NEXT_PUBLIC_KAKAO_APP_JS_KEY }}" >> .env
echo "NEXT_PUBLIC_API_SERVER_URL=${{ secrets.NEXT_PUBLIC_API_SERVER_URL }}" >> .env
# .env 파일 생성
echo "📝 Creating .env file from secrets..."
# 기존 .env 파일이 있다면 삭제하여 최신 상태 유지
rm -f .env
# 값이 로그에 찍히지 않도록 cat-heredoc 사용
cat > .env <<EOF
NEXT_PUBLIC_API_URL=${{ secrets.NEXT_PUBLIC_API_URL }}
NEXT_PUBLIC_TEAM_ID=${{ secrets.NEXT_PUBLIC_TEAM_ID }}
NEXT_PUBLIC_KAKAO_APP_JS_KEY=${{ secrets.NEXT_PUBLIC_KAKAO_APP_JS_KEY }}
NEXT_PUBLIC_API_SERVER_URL=${{ secrets.NEXT_PUBLIC_API_SERVER_URL }}
EOF
🤖 Prompt for AI Agents
In .github/workflows/deploy.yml around lines 107 to 116, the current use of echo
commands to write environment variables to the .env file risks exposing secret
values in the GitHub Actions logs. To fix this, replace the multiple echo
commands with a single here-document (cat <<EOF > .env) block that writes all
variables at once without printing their values to STDOUT, thereby preventing
secret leakage in logs.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

로그에 노출되는 부분의 문제에 관해서 궁금한게 하나 있는데 GitHub Actions에서 이 문제를 해결하기 위해서 자동으로 Secrets를 마스킹이였나? 하는 기능이 내장되어 있는거 아닌가? 찾아보니 워크플로우 로그에 Secrets 값이 출력 되려고 하면 깃허브에서 이 값을 다른값이였었나 별표였었나 아무튼 다른값으로 대체해주는 걸로 알고 있는데 잘못 알고있는건가 궁금해서 말이야.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@LeeCh0129 맞습니다! GitHub Actions에는 자동 시크릿 마스킹 기능이 내장되어 있어서, 워크플로우 로그에 등록된 secrets 값이 출력되려고 하면 ***로 자동 대체됩니다.

하지만 몇 가지 마스킹이 실패할 수 있는 경우들이 있어서 제가 heredoc 방식을 제안했습니다:

마스킹이 동작하는 경우

- name: Test
  run: echo "${{ secrets.MY_SECRET }}"  # *** 로 마스킹됨

마스킹이 실패할 수 있는 경우들

  1. SSH 원격 실행에서의 한계
ssh user@host << 'ENDSSH'
  echo "API_URL=${{ secrets.API_URL }}"  # SSH 세션 내부에서는 마스킹이 불완전할 수 있음
ENDSSH
  1. 문자열 변형/인코딩
echo "${{ secrets.API_URL }}" | base64  # 인코딩된 값은 마스킹되지 않음
  1. 부분 문자열 노출
echo "Config: prefix-${{ secrets.API_URL }}-suffix"  # 변형된 형태는 감지 못할 수 있음

현재 코드에서는 SSH 세션 내부에서 echo를 실행하고 있어서, GitHub의 마스킹이 완벽하게 동작하지 않을 가능성이 있습니다. cat heredoc 방식은 방어적 코딩(defense in depth) 관점에서 더 안전한 접근법입니다.

그래도 일반적인 경우에는 GitHub의 자동 마스킹이 잘 동작하니, 현재 코드를 그대로 유지하셔도 큰 문제는 없을 것 같습니다!


# 최신 코드 가져오기
echo "🔄 Pulling latest code..."
Expand Down
4 changes: 4 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ services:
context: .
dockerfile: Dockerfile
restart: unless-stopped

env_file:
- .env

Comment on lines +15 to +17
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

.env 경로 및 버전관리 제외 여부 확인 필요

env_file: - .env 추가는 배포 스크립트와 잘 연동되지만,

  1. .env 파일이 저장소에 커밋되지 않았는지(.gitignore) 한 번 더 확인해 주세요.
  2. 컨테이너 실행 디렉터리와 .env 위치가 다를 경우 경로가 틀릴 수 있으니 로컬·서버 모두에서 정상 로드되는지 테스트가 필요합니다.

별도 변경은 없어도 되지만 배포 전 두 항목을 검증해 주세요.


아래 스크립트를 실행해 .gitignore.env가 무시 대상으로 등록되어 있는지, 저장소 루트에 .env 파일이 실제로 커밋되지 않았는지 확인해 주세요.

위 결과를 바탕으로 .env 파일이 버전관리에서 제외되어 있는지, 그리고 로컬·서버 환경에서 docker-compose가 .env를 정상 로드하는지 확인해 주세요.


🏁 Script executed:

#!/bin/bash
# 1) .gitignore에 .env가 등록되어 있는지 확인
echo "🔍 .gitignore에서 '.env' 무시 설정 확인"
rg -n '^\s*\.env(\s*#.*)?$' .gitignore || echo "⚠️ .gitignore에 '.env'가 없습니다."

# 2) 저장소 루트에 .env 파일이 커밋된 상태인지 확인
echo "🔍 저장소 루트에 '.env' 파일 존재 여부 확인"
if ls -A | grep -q '^\.env$'; then
  echo "⚠️ 저장소에 '.env' 파일이 존재합니다. 커밋되지 않도록 .gitignore에 추가해주세요."
else
  echo "✅ '.env' 파일이 커밋되지 않았습니다."
fi

Length of output: 360


.env 무시 설정 추가 및 로드 테스트 필요

  • .gitignore에 .env 항목이 누락되어 있으므로, 저장소에 커밋되지 않도록 아래 라인을 추가해주세요.
    .env
  • 현재 .env 파일은 커밋되지 않은 상태임을 확인했습니다.
  • 로컬·서버 환경에서 docker-compose up 실행 시 .env 파일이 정상적으로 로드되는지 반드시 테스트해주세요.
🤖 Prompt for AI Agents
In docker-compose.yml around lines 15 to 17, the .env file is referenced but not
ignored in version control. Add a line with ".env" to the .gitignore file to
prevent committing this sensitive file. After updating .gitignore, run
"docker-compose up" locally and on the server to verify that the .env file loads
correctly without being tracked by git.

environment:
- NODE_ENV=production
networks:
Expand Down