-
Notifications
You must be signed in to change notification settings - Fork 1
Deploy/79 GitHub Secrets를 이용한 환경 변수 관리 설정 #81
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
Conversation
|
""" Walkthrough배포 워크플로우가 업데이트되어, 배포 스크립트가 최신 코드를 가져오기 전에 GitHub Secrets에서 환경변수를 읽어 Changes
Sequence Diagram(s)sequenceDiagram
participant GitHub Actions
participant OCI Server
participant Docker Compose
GitHub Actions->>OCI Server: SSH 접속 및 프로젝트 디렉토리 이동
OCI Server->>OCI Server: 기존 .env 파일 삭제
OCI Server->>OCI Server: GitHub Secrets에서 환경변수로 .env 파일 생성
OCI Server->>OCI Server: git pull로 최신 코드 가져오기
OCI Server->>Docker Compose: docker-compose up 실행 (.env 파일 사용)
Estimated code review effort🎯 2 (Simple) | ⏱️ ~7 minutes Assessment against linked issues
Assessment against linked issues: Out-of-scope changes(해당 없음) Possibly related PRs
Suggested reviewers
Poem
Note ⚡️ Unit Test Generation is now available in beta!Learn more here, or try it out under "Finishing Touches" below. ✨ Finishing Touches🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
| # .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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
환경 변수 값이 로그에 노출될 위험이 있습니다
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.
| # .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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
로그에 노출되는 부분의 문제에 관해서 궁금한게 하나 있는데 GitHub Actions에서 이 문제를 해결하기 위해서 자동으로 Secrets를 마스킹이였나? 하는 기능이 내장되어 있는거 아닌가? 찾아보니 워크플로우 로그에 Secrets 값이 출력 되려고 하면 깃허브에서 이 값을 다른값이였었나 별표였었나 아무튼 다른값으로 대체해주는 걸로 알고 있는데 잘못 알고있는건가 궁금해서 말이야.
There was a problem hiding this comment.
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 }}" # *** 로 마스킹됨마스킹이 실패할 수 있는 경우들
- SSH 원격 실행에서의 한계
ssh user@host << 'ENDSSH'
echo "API_URL=${{ secrets.API_URL }}" # SSH 세션 내부에서는 마스킹이 불완전할 수 있음
ENDSSH- 문자열 변형/인코딩
echo "${{ secrets.API_URL }}" | base64 # 인코딩된 값은 마스킹되지 않음- 부분 문자열 노출
echo "Config: prefix-${{ secrets.API_URL }}-suffix" # 변형된 형태는 감지 못할 수 있음현재 코드에서는 SSH 세션 내부에서 echo를 실행하고 있어서, GitHub의 마스킹이 완벽하게 동작하지 않을 가능성이 있습니다. cat heredoc 방식은 방어적 코딩(defense in depth) 관점에서 더 안전한 접근법입니다.
그래도 일반적인 경우에는 GitHub의 자동 마스킹이 잘 동작하니, 현재 코드를 그대로 유지하셔도 큰 문제는 없을 것 같습니다!
| env_file: | ||
| - .env | ||
|
|
There was a problem hiding this comment.
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 추가는 배포 스크립트와 잘 연동되지만,
.env파일이 저장소에 커밋되지 않았는지(.gitignore) 한 번 더 확인해 주세요.- 컨테이너 실행 디렉터리와
.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' 파일이 커밋되지 않았습니다."
fiLength 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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
♻️ Duplicate comments (1)
.github/workflows/deploy.yml (1)
108-118:echo사용으로 Secrets 값이 그대로 로그에 노출됩니다
지난 리뷰에서도 동일한 지적이 있었으나 여전히echo "KEY=${{ secrets.KEY }}"패턴을 쓰고 있습니다.
cat <<EOF > .envheredoc 방식으로 한 번에 기록하면 STDOUT 출력이 없어 마스킹 실패·로그 유출 위험을 줄일 수 있습니다.
변경 예:-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 -... -cat <<EOF > .env +rm -f .env +cat > .env <<'EOF' +NEXT_PUBLIC_API_URL=${{ secrets.NEXT_PUBLIC_API_URL }} +NEXT_PUBLIC_TEAM_ID=${{ secrets.NEXT_PUBLIC_TEAM_ID }} +NEXT_PUBLIC_API_SERVER_URL=${{ secrets.NEXT_PUBLIC_API_SERVER_URL }} +NEXT_PUBLIC_KAKAO_CLIENT_ID=${{ secrets.NEXT_PUBLIC_KAKAO_CLIENT_ID }} +NEXT_PUBLIC_KAKAO_APP_JS_KEY=${{ secrets.NEXT_PUBLIC_KAKAO_APP_JS_KEY }} +NEXT_PUBLIC_SITE_URL=${{ secrets.NEXT_PUBLIC_SITE_URL }} EOF
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (1)
.github/workflows/deploy.yml(1 hunks)
🧰 Additional context used
🪛 YAMLlint (1.37.1)
.github/workflows/deploy.yml
[error] 119-119: trailing spaces
(trailing-spaces)
[error] 123-123: trailing spaces
(trailing-spaces)
| rm -f .env | ||
| touch .env |
There was a problem hiding this comment.
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.
| 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 "🔄 Pulling latest code..." | ||
| git pull origin develop | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
불필요한 공백(trailing spaces) 삭제 권장
YAML lint 경고가 발생하므로 줄 끝 공백을 제거해 워크플로 파일 품질을 유지하세요.
🧰 Tools
🪛 YAMLlint (1.37.1)
[error] 119-119: trailing spaces
(trailing-spaces)
[error] 123-123: trailing spaces
(trailing-spaces)
🤖 Prompt for AI Agents
In .github/workflows/deploy.yml around lines 119 to 123, there are trailing
spaces at the end of some lines causing YAML lint warnings. Remove all trailing
spaces from these lines to ensure the workflow file is clean and free of
formatting issues.
| # GHCR 로그인 (PAT 사용) | ||
| echo "🔐 Logging in to GHCR..." | ||
| echo "🔐ㅇ Logging in to GHCR..." |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
로그 메시지에 불필요한 ‘ㅇ’ 문자가 포함되어 있습니다
🔐ㅇ Logging in to GHCR... → 🔐 Logging in to GHCR... 로 수정해 가독성을 높이세요.
🤖 Prompt for AI Agents
In .github/workflows/deploy.yml at line 125, remove the unnecessary 'ㅇ'
character from the log message so that it reads "🔐 Logging in to GHCR..."
instead of "🔐ㅇ Logging in to GHCR...". This will improve the readability of the
log output.
📌 변경 사항 개요
GitHub Secrets를 활용하여, Git 저장소에 노출하지 않고 서버에 안전하게 환경변수를 적용함.
📝 상세 내용
deploy.yml: 배포 스크립트에 깃허브 시크릿의 값을 읽어와 서버에.env파일을 자동으로 생성하는 로직을 추가했습니다.docker-compose.yml:.env파일을 도커 컨테이너가 읽어와 환경 변수를 주입할 수 있도록 변경했습니다.🔗 관련 이슈
🖼️ 스크린샷(선택사항)
💡 참고 사항
NEXT_PUBLIC_API_URL,NEXT_PUBLIC_TEAM_ID,NEXT_PUBLIC_KAKAO_APP_JS_KEY,NEXT_PUBLIC_API_SERVER_URL를 환경 변수로 등록해놨습니다.Summary by CodeRabbit