diff --git a/README.md b/README.md index d8d8ce2..e074e29 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ - [01_Terminology/](./01_Terminology/) - [02_Architecture/](./02_Architecture/) - [workflow/README.md](./workflow/README.md) +- [workflow/51124_remote_workspace_config_operations_workflow.md](./workflow/51124_remote_workspace_config_operations_workflow.md) - [02_Architecture/51123_to_internal_nas_sync_verification_runbook.md](./02_Architecture/51123_to_internal_nas_sync_verification_runbook.md) - [02_Architecture/51123_github_org_repo_bootstrap_runbook.md](./02_Architecture/51123_github_org_repo_bootstrap_runbook.md) - [journey/README.md](./journey/README.md) @@ -26,6 +27,7 @@ - [02_Architecture/Infrastructure_Project_Structure.md](./02_Architecture/Infrastructure_Project_Structure.md) - [workflow/README.md](./workflow/README.md) - [workflow/51123_nas_remote_operations_workflow.md](./workflow/51123_nas_remote_operations_workflow.md) +- [workflow/51124_remote_workspace_config_operations_workflow.md](./workflow/51124_remote_workspace_config_operations_workflow.md) - [02_Architecture/51123_to_internal_nas_sync_verification_runbook.md](./02_Architecture/51123_to_internal_nas_sync_verification_runbook.md) - [02_Architecture/51123_github_org_repo_bootstrap_runbook.md](./02_Architecture/51123_github_org_repo_bootstrap_runbook.md) @@ -40,7 +42,8 @@ 7. [02_Architecture/Infrastructure_Project_Structure.md](./02_Architecture/Infrastructure_Project_Structure.md) 8. [workflow/README.md](./workflow/README.md) 9. [workflow/51123_nas_remote_operations_workflow.md](./workflow/51123_nas_remote_operations_workflow.md) -10. [02_Architecture/51123_to_internal_nas_sync_verification_runbook.md](./02_Architecture/51123_to_internal_nas_sync_verification_runbook.md) -11. [02_Architecture/51123_github_org_repo_bootstrap_runbook.md](./02_Architecture/51123_github_org_repo_bootstrap_runbook.md) -12. [journey/research/260307_value_기준_인프라철학문서_구조초안.md](./journey/research/260307_value_기준_인프라철학문서_구조초안.md) -13. [journey/README.md](./journey/README.md) +10. [workflow/51124_remote_workspace_config_operations_workflow.md](./workflow/51124_remote_workspace_config_operations_workflow.md) +11. [02_Architecture/51123_to_internal_nas_sync_verification_runbook.md](./02_Architecture/51123_to_internal_nas_sync_verification_runbook.md) +12. [02_Architecture/51123_github_org_repo_bootstrap_runbook.md](./02_Architecture/51123_github_org_repo_bootstrap_runbook.md) +13. [journey/research/260307_value_기준_인프라철학문서_구조초안.md](./journey/research/260307_value_기준_인프라철학문서_구조초안.md) +14. [journey/README.md](./journey/README.md) diff --git a/workflow/51124_remote_workspace_config_operations_workflow.md b/workflow/51124_remote_workspace_config_operations_workflow.md new file mode 100644 index 0000000..1222e3f --- /dev/null +++ b/workflow/51124_remote_workspace_config_operations_workflow.md @@ -0,0 +1,186 @@ +--- +tags: [infra, workflow, 51124, remote-operations, workspace-config, ssh] +--- + +# 51124 Remote Workspace Config Operations Workflow + +## 상위 원칙 +- [../00_Philosophy/00_IDENTITY/Infra_Project_Identity.md](../00_Philosophy/00_IDENTITY/Infra_Project_Identity.md) +- [../00_Philosophy/01_PRINCIPLES/Core_Infrastructure_Principles.md](../00_Philosophy/01_PRINCIPLES/Core_Infrastructure_Principles.md) +- [../00_Philosophy/02_GUARDRAILS/Operational_Guardrails.md](../00_Philosophy/02_GUARDRAILS/Operational_Guardrails.md) + +## 관련 문서 +- [../02_Architecture/Infrastructure_Project_Structure.md](../02_Architecture/Infrastructure_Project_Structure.md) +- [../journey/worklog/260310_24서버_robeing_runtime_workspace_config_단일화.md](../journey/worklog/260310_24서버_robeing_runtime_workspace_config_단일화.md) +- [../journey/troubleshooting/260309_24서버_우분투터미널불가_네트워크대역오류_python3apt복구.md](../journey/troubleshooting/260309_24서버_우분투터미널불가_네트워크대역오류_python3apt복구.md) + +## 목적 + +- 51123에서 51124 서버의 공통 설정 파일 `workspace-config/runtime.env`, `workspace-config/secrets.env`를 원격 점검·수정·검증할 때 같은 순서로 작업합니다. +- 사람과 에이전트가 24 서버 접속 기준, 수정 위치, 검증 기준을 같은 문서로 공유합니다. + +## 적용 범위 + +- 51124 SSH 접속 +- 51124 기본 식별 확인 +- 51124 `workspace-config` 조회 +- 51124 `runtime.env`, `secrets.env` 값 추가·수정 +- 51124 권한 및 반영 검증 + +## 기본 원칙 + +- 먼저 24 서버 정의와 접속 기준을 확인한 뒤 원격 수정에 들어갑니다. +- 24 서버 SSH 접속 기준은 `ssh -p 51124 -i ~/.ssh/id_rsa_51123_to_51124 admin@192.168.0.106`입니다. +- 민감값은 51124의 `/home/admin/workspace-config/secrets.env`에만 넣고, 프로젝트별 `.env`는 임시 로컬 오버라이드로만 봅니다. +- 실제 값 수정 전에는 소스 값과 대상 키 이름을 먼저 분리 확인합니다. +- 수정 후에는 값 존재 여부와 파일 권한을 같이 확인합니다. +- 서비스 반영이 필요할 때만 후속 `docker compose down && docker compose up -d --build`를 수행합니다. + +## 표준 흐름 + +### 1. 23 서버 기준값 확인 + +먼저 현재 23 서버에서 기준 정보를 확인합니다. + +```bash +hostname +grep -n '^HOST_51124=' /home/admin/workspace-config/runtime.env +ls -l /home/admin/.ssh/id_rsa_51123_to_51124 +``` + +판단 기준: +- 현재 작업 서버는 51123 제어면이다. +- `HOST_51124=192.168.0.106` +- SSH 키 `/home/admin/.ssh/id_rsa_51123_to_51124` 존재 + +### 2. 24 서버 SSH 접속 확인 + +```bash +ssh -p 51124 -i /home/admin/.ssh/id_rsa_51123_to_51124 admin@192.168.0.106 +``` + +원격 접속 직후 확인: + +```bash +hostname +whoami +pwd +``` + +판단 기준: +- `whoami=admin` +- `hostname=robeing-i9` +- 홈 경로 기준 `/home/admin` 사용 가능 + +### 3. 대상 파일 확인 + +```bash +ls -l /home/admin/workspace-config +sed -n '1,200p' /home/admin/workspace-config/runtime.env +sed -n '1,200p' /home/admin/workspace-config/secrets.env +``` + +판단 기준: +- `runtime.env`, `secrets.env` 존재 +- 민감값은 `secrets.env`에만 둔다 +- 파일 권한은 `secrets.env` 기준 `600` 유지 + +### 4. 소스 값 확인 + +값을 가져올 소스 파일에서 키 이름과 실제 값을 확인합니다. + +예시: + +```bash +rg -n '^OPENAI_API_KEY=' /home/admin/projectStarsAndI/.env.local +``` + +판단 기준: +- 어떤 키를 옮길지 명확하다. +- 따옴표 포함 여부를 먼저 확인한다. +- 대상이 민감값이면 응답 본문에 평문으로 다시 쓰지 않는다. + +### 5. 24 서버 `workspace-config` 수정 + +#### A. 점검만 할 때 + +```bash +ssh -p 51124 -i /home/admin/.ssh/id_rsa_51123_to_51124 admin@192.168.0.106 \ + "grep -n '^OPENAI_API_KEY=' /home/admin/workspace-config/secrets.env" +``` + +#### B. 키를 추가하거나 교체할 때 + +23 서버에서 소스 값을 정제한 뒤 표준입력으로 24 서버에 전달합니다. + +```bash +KEY=$(sed -n '1s/^OPENAI_API_KEY=//p' /home/admin/projectStarsAndI/.env.local | head -n1 | tr -d '"') +printf '%s\n' "$KEY" | ssh -p 51124 -i /home/admin/.ssh/id_rsa_51123_to_51124 admin@192.168.0.106 \ + 'bash -lc '\''read -r KEY; f=/home/admin/workspace-config/secrets.env; if grep -q "^OPENAI_API_KEY=" "$f"; then sed -i "s|^OPENAI_API_KEY=.*$|OPENAI_API_KEY=$KEY|" "$f"; else printf "\nOPENAI_API_KEY=%s\n" "$KEY" >> "$f"; fi; grep -n "^OPENAI_API_KEY=" "$f"; stat -c "%a %U %G %n" "$f"'\''' +``` + +판단 기준: +- 값 끝에 따옴표가 남지 않아야 한다. +- 같은 키가 이미 있으면 교체, 없으면 한 줄 추가 +- 검증은 `grep -n`, `stat`까지 한 번에 끝낸다. + +### 6. 후속 반영 필요 여부 판단 + +`workspace-config`를 읽는 서비스가 이미 실행 중이면, 값만 바꿔도 컨테이너에는 자동 반영되지 않습니다. + +적용이 필요한 경우: + +```bash +cd /home/admin/ +docker compose down && docker compose up -d --build +``` + +판단 기준: +- 단순 파일 주입과 런타임 반영을 구분해서 말한다. +- 재기동은 사용자 요청 또는 적용 필요성이 확인된 경우만 수행한다. + +## 자주 쓰는 작업 패턴 + +### 패턴 1. 24 서버 접속만 빠르게 확인 + +```bash +ssh -p 51124 -i /home/admin/.ssh/id_rsa_51123_to_51124 admin@192.168.0.106 'hostname && whoami' +``` + +### 패턴 2. 24 서버 secrets 키 존재 여부만 확인 + +```bash +ssh -p 51124 -i /home/admin/.ssh/id_rsa_51123_to_51124 admin@192.168.0.106 \ + "grep -n '^OPENAI_API_KEY=' /home/admin/workspace-config/secrets.env" +``` + +### 패턴 3. 23의 소스 값으로 24 secrets 키 교체 + +```bash +KEY=$(sed -n '1s/^OPENAI_API_KEY=//p' /home/admin/projectStarsAndI/.env.local | head -n1 | tr -d '"') +printf '%s\n' "$KEY" | ssh -p 51124 -i /home/admin/.ssh/id_rsa_51123_to_51124 admin@192.168.0.106 \ + 'bash -lc '\''read -r KEY; sed -i "s|^OPENAI_API_KEY=.*$|OPENAI_API_KEY=$KEY|" /home/admin/workspace-config/secrets.env; grep -n "^OPENAI_API_KEY=" /home/admin/workspace-config/secrets.env'\''' +``` + +## 변경 후 검증 + +- 원격 `grep -n`으로 정확한 키가 한 줄만 존재하는지 확인합니다. +- `stat -c '%a %U %G %n'`으로 `600 admin xusers` 권한을 확인합니다. +- 서비스 적용이 필요하면 재기동 후 컨테이너 env 또는 헬스체크까지 확인합니다. + +## 금지선 + +- 24 서버 SSH 포트를 `22`로 가정하지 않습니다. +- 23과 24의 `workspace-config` 경로를 같은 서버에서 혼동하지 않습니다. +- 민감값을 문서나 일반 응답 본문에 평문으로 남기지 않습니다. +- `.env`에만 값을 넣고 `workspace-config` SSOT 반영을 끝났다고 말하지 않습니다. +- `docker compose restart`로 끝내지 않습니다. + +## 기록 원칙 + +- 반복 점검이나 값 주입이 문제 없이 끝나면 `journey/worklog/` +- SSH 실패, 포트 혼선, 권한 오류, 값 반영 불일치가 있으면 `journey/troubleshooting/` + +## 한 줄 결론 + +- 51124 공통 설정 원격 작업은 `23 기준 확인 -> 24 SSH 접속 -> workspace-config 확인 -> 값 수정 -> 권한/반영 검증` 순서로 고정합니다. diff --git a/workflow/README.md b/workflow/README.md index 5f6490c..d7e8e1a 100644 --- a/workflow/README.md +++ b/workflow/README.md @@ -21,6 +21,7 @@ tags: [infra, workflow, docs, operations] ## 현재 문서 - [51123_nas_remote_operations_workflow.md](./51123_nas_remote_operations_workflow.md) +- [51124_remote_workspace_config_operations_workflow.md](./51124_remote_workspace_config_operations_workflow.md) — 24 서버 SSH 접속과 workspace-config 원격 수정·검증 - [local_developer_workflow.md](./local_developer_workflow.md) — 로컬 PC 워크스페이스 레포 동기화·푸시 ## 관련 문서