chore(workflow): 런북을 워크플로우로 통일
- 51123_nas_sync_verification_workflow.md 신규 - 51123_github_org_repo_bootstrap_workflow.md 신규 - 기존 런북 deprecated 표시 및 SSOT 링크 - workflow README 문서 목록 테이블화 Made-with: Cursor
This commit is contained in:
parent
3fb33582ff
commit
240465158e
@ -1,5 +1,11 @@
|
||||
---
|
||||
tags: [infra, github, org, repository, bootstrap, runbook, 51123]
|
||||
tags: [infra, github, org, repository, bootstrap, runbook, 51123, deprecated]
|
||||
---
|
||||
|
||||
# 51123 GitHub Org Repo Bootstrap Runbook (deprecated)
|
||||
|
||||
> **SSOT 이동**: 이 절차는 [workflow/51123_github_org_repo_bootstrap_workflow.md](../workflow/51123_github_org_repo_bootstrap_workflow.md)로 통합되었습니다. 해당 워크플로우를 우선 참조하세요.
|
||||
|
||||
---
|
||||
|
||||
# 51123 GitHub Org Repo Bootstrap Runbook
|
||||
|
||||
@ -1,5 +1,11 @@
|
||||
---
|
||||
tags: [infra, nas, sync, runbook, 51123, companyx]
|
||||
tags: [infra, nas, sync, runbook, 51123, companyx, deprecated]
|
||||
---
|
||||
|
||||
# 51123 -> 내부 NAS 동기화 점검 런북 (deprecated)
|
||||
|
||||
> **SSOT 이동**: 이 절차는 [workflow/51123_nas_sync_verification_workflow.md](../workflow/51123_nas_sync_verification_workflow.md)로 통합되었습니다. 해당 워크플로우를 우선 참조하세요.
|
||||
|
||||
---
|
||||
|
||||
# 51123 -> 내부 NAS 동기화 점검 런북
|
||||
|
||||
269
workflow/51123_github_org_repo_bootstrap_workflow.md
Normal file
269
workflow/51123_github_org_repo_bootstrap_workflow.md
Normal file
@ -0,0 +1,269 @@
|
||||
---
|
||||
tags: [infra, workflow, github, org, repository, bootstrap, 51123]
|
||||
---
|
||||
|
||||
# 51123 GitHub Org Repo Bootstrap 워크플로우
|
||||
|
||||
## 상위 원칙
|
||||
- [Infra Project Identity](../00_Philosophy/00_IDENTITY/Infra_Project_Identity.md)
|
||||
- [Core Infrastructure Principles](../00_Philosophy/01_PRINCIPLES/Core_Infrastructure_Principles.md)
|
||||
- [Operational Guardrails](../00_Philosophy/02_GUARDRAILS/Operational_Guardrails.md)
|
||||
- 공통 작성 원칙: [0_VALUE Writing Principles](https://github.com/happybell80/0_VALUE/blob/main/02_Governance/writing-principles.md)
|
||||
|
||||
## 관련 문서
|
||||
- [Infrastructure Project Structure](../02_Architecture/Infrastructure_Project_Structure.md)
|
||||
- [51123_nas_sync_verification_workflow.md](./51123_nas_sync_verification_workflow.md)
|
||||
- [260307 infra_scripts 원격 미존재 푸시실패 및 조직레포 생성 조치](../journey/troubleshooting/260307_infra_scripts_원격_미존재_푸시실패_및_조직레포_생성_조치.md)
|
||||
- [260307 수정 레포 일괄 푸시 및 infra/scripts 신규 레포 연결](../journey/worklog/260307_수정_레포_일괄_푸시_및_infra_scripts_신규_레포_연결.md)
|
||||
|
||||
## 목적
|
||||
|
||||
- 51123 서버에서 GitHub org 기준 새 프로젝트 루트와 다중 저장소를 같은 절차로 만든다.
|
||||
- 이 문서는 사건 기록이 아니라, 운영자가 다시 실행할 수 있는 고정 절차를 남기는 워크플로우다.
|
||||
|
||||
## 적용 범위
|
||||
|
||||
- 실행 서버: 51123
|
||||
- 기준 경로: `/home/admin/<org>`
|
||||
- 원격 대상: GitHub organization
|
||||
- 기본 저장소 묶음:
|
||||
- `DOCS`
|
||||
- `DATA`
|
||||
- `web`
|
||||
- `admin`
|
||||
- `api`
|
||||
|
||||
## SSOT 기준값
|
||||
|
||||
- 작업 루트: `/home/admin`
|
||||
- 공통 런타임 기준 파일:
|
||||
- `/home/admin/workspace-config/runtime.env`
|
||||
- `/home/admin/workspace-config/secrets.env`
|
||||
- Git 사용자 기준:
|
||||
- `git config --global user.name`
|
||||
- `git config --global user.email`
|
||||
- GitHub 인증 기준:
|
||||
- `~/.git-credentials`에 저장된 `github.com` 자격증명
|
||||
- `gh` CLI는 설치되어 있어야 한다.
|
||||
|
||||
## 표준 흐름
|
||||
|
||||
### 1. 기본 도구와 자격 확인
|
||||
|
||||
```bash
|
||||
which gh
|
||||
git config --global --get user.name
|
||||
git config --global --get user.email
|
||||
python3 - <<'PY'
|
||||
from pathlib import Path
|
||||
text = Path('/home/admin/.git-credentials').read_text() if Path('/home/admin/.git-credentials').exists() else ''
|
||||
print('github.com credential found' if 'github.com' in text else 'github.com credential missing')
|
||||
PY
|
||||
```
|
||||
|
||||
확인 기준:
|
||||
- `gh` 경로가 보여야 한다.
|
||||
- Git 전역 사용자명이 설정되어 있어야 한다.
|
||||
- `github.com credential found`가 나와야 한다.
|
||||
|
||||
### 2. org와 기존 레포 상태 확인
|
||||
|
||||
```bash
|
||||
python3 - <<'PY'
|
||||
from pathlib import Path
|
||||
from urllib.parse import urlparse
|
||||
import os, subprocess
|
||||
|
||||
org = 'xvaluelab'
|
||||
token = None
|
||||
for line in Path('/home/admin/.git-credentials').read_text().splitlines():
|
||||
if 'github.com' in line:
|
||||
token = urlparse(line.strip()).password
|
||||
break
|
||||
env = os.environ.copy()
|
||||
env['GH_TOKEN'] = token
|
||||
subprocess.run(['gh', 'api', f'/orgs/{org}/repos?per_page=100'], env=env, check=True)
|
||||
print('org access ok')
|
||||
PY
|
||||
```
|
||||
|
||||
확인 기준:
|
||||
- `org access ok`가 보여야 한다.
|
||||
- 실패하면 토큰 스코프나 org 접근 권한을 먼저 해결한다.
|
||||
|
||||
### 3. 프로젝트 루트 생성
|
||||
|
||||
```bash
|
||||
export ORG_NAME=xvaluelab
|
||||
export PROJECT_ROOT=/home/admin/$ORG_NAME
|
||||
|
||||
mkdir -p "$PROJECT_ROOT"
|
||||
mkdir -p "$PROJECT_ROOT/DATA"
|
||||
mkdir -p "$PROJECT_ROOT/apps/web"
|
||||
mkdir -p "$PROJECT_ROOT/apps/admin"
|
||||
mkdir -p "$PROJECT_ROOT/apps/api"
|
||||
```
|
||||
|
||||
설명:
|
||||
- 프로젝트 루트는 `/home/admin/<org>`로 고정한다.
|
||||
- `DOCS`, `DATA`, `apps/*` 경계를 처음부터 분리한다.
|
||||
|
||||
### 4. `DOCS` 처리
|
||||
|
||||
```bash
|
||||
git clone https://github.com/$ORG_NAME/DOCS.git "$PROJECT_ROOT/DOCS"
|
||||
```
|
||||
|
||||
설명:
|
||||
- 사용자가 이미 `DOCS` 원격을 만든 경우 먼저 clone한다.
|
||||
- 빈 저장소면 초기 구조를 채운 뒤 커밋/푸시한다.
|
||||
|
||||
### 5. 로컬 초기 파일 정리
|
||||
|
||||
최소 기준:
|
||||
- `DOCS`: 원칙, 구조, 제품, journey 인덱스
|
||||
- `DATA`: `README`, `.gitignore`
|
||||
- `apps/web`: `README`, `.gitignore`
|
||||
- `apps/admin`: `README`, `.gitignore`
|
||||
- `apps/api`: `README`, `.gitignore`
|
||||
|
||||
설명:
|
||||
- 공통 비밀은 프로젝트 `.env.local`에 중복 저장하지 않는다.
|
||||
- 공통 값은 `workspace-config`를 SSOT로 유지하고, 프로젝트 로컬에는 오버라이드만 둔다.
|
||||
|
||||
### 6. 원격 저장소 생성
|
||||
|
||||
```bash
|
||||
python3 - <<'PY'
|
||||
from pathlib import Path
|
||||
from urllib.parse import urlparse
|
||||
import os, subprocess
|
||||
|
||||
org = 'xvaluelab'
|
||||
repos = ['DATA', 'web', 'admin', 'api']
|
||||
token = None
|
||||
for line in Path('/home/admin/.git-credentials').read_text().splitlines():
|
||||
if 'github.com' in line:
|
||||
token = urlparse(line.strip()).password
|
||||
break
|
||||
env = os.environ.copy()
|
||||
env['GH_TOKEN'] = token
|
||||
|
||||
for name in repos:
|
||||
subprocess.run([
|
||||
'gh', 'api', '-X', 'POST', f'/orgs/{org}/repos',
|
||||
'-f', f'name={name}',
|
||||
'-f', 'private=true'
|
||||
], env=env, check=False)
|
||||
PY
|
||||
```
|
||||
|
||||
설명:
|
||||
- 이미 있는 레포는 `422 already exists`가 나올 수 있으므로 존재 여부 확인 후 넘어간다.
|
||||
- private 기본값을 사용하고, 공개 여부는 별도 판단 후 바꾼다.
|
||||
|
||||
### 7. 각 저장소 초기화와 최초 푸시
|
||||
|
||||
```bash
|
||||
for d in \
|
||||
/home/admin/xvaluelab/DATA \
|
||||
/home/admin/xvaluelab/apps/web \
|
||||
/home/admin/xvaluelab/apps/admin \
|
||||
/home/admin/xvaluelab/apps/api
|
||||
do
|
||||
git -C "$d" init -b main
|
||||
done
|
||||
```
|
||||
|
||||
원격 연결 기준:
|
||||
- `DATA` -> `https://github.com/<org>/DATA.git`
|
||||
- `apps/web` -> `https://github.com/<org>/web.git`
|
||||
- `apps/admin` -> `https://github.com/<org>/admin.git`
|
||||
- `apps/api` -> `https://github.com/<org>/api.git`
|
||||
|
||||
최초 커밋/푸시 기준:
|
||||
|
||||
```bash
|
||||
git -C /home/admin/xvaluelab/DATA add .
|
||||
git -C /home/admin/xvaluelab/DATA commit -m "Initialize repository structure"
|
||||
git -C /home/admin/xvaluelab/DATA push -u origin main
|
||||
```
|
||||
|
||||
설명:
|
||||
- 각 저장소 루트에서 같은 패턴으로 `add -> commit -> push`를 반복한다.
|
||||
- `DOCS`도 같은 방식이지만, clone한 저장소에서 수행한다.
|
||||
|
||||
### 8. 검증 절차
|
||||
|
||||
#### A. 로컬 추적 상태 확인
|
||||
|
||||
```bash
|
||||
for d in \
|
||||
/home/admin/xvaluelab/DOCS \
|
||||
/home/admin/xvaluelab/DATA \
|
||||
/home/admin/xvaluelab/apps/web \
|
||||
/home/admin/xvaluelab/apps/admin \
|
||||
/home/admin/xvaluelab/apps/api
|
||||
do
|
||||
echo "[$d]"
|
||||
git -C "$d" status -sb
|
||||
git -C "$d" remote -v
|
||||
done
|
||||
```
|
||||
|
||||
확인 기준:
|
||||
- 각 저장소가 `main...origin/main` 추적 상태여야 한다.
|
||||
- `origin`이 GitHub org 레포를 가리켜야 한다.
|
||||
|
||||
#### B. 원격 생성 결과 확인
|
||||
|
||||
```bash
|
||||
python3 - <<'PY'
|
||||
from pathlib import Path
|
||||
from urllib.parse import urlparse
|
||||
import os, subprocess
|
||||
|
||||
org = 'xvaluelab'
|
||||
token = None
|
||||
for line in Path('/home/admin/.git-credentials').read_text().splitlines():
|
||||
if 'github.com' in line:
|
||||
token = urlparse(line.strip()).password
|
||||
break
|
||||
env = os.environ.copy()
|
||||
env['GH_TOKEN'] = token
|
||||
subprocess.run(['gh', 'api', f'/orgs/{org}/repos?per_page=100'], env=env, check=True)
|
||||
PY
|
||||
```
|
||||
|
||||
확인 기준:
|
||||
- `DOCS`, `DATA`, `web`, `admin`, `api`가 모두 보여야 한다.
|
||||
|
||||
## 성공 판정 규칙
|
||||
|
||||
### A. 구조 생성 성공
|
||||
- `/home/admin/<org>` 아래에 `DOCS`, `DATA`, `apps/web`, `apps/admin`, `apps/api`가 존재한다.
|
||||
|
||||
### B. GitHub 생성 성공
|
||||
- 대상 org에 필요한 레포가 모두 생성된다.
|
||||
|
||||
### C. 최초 푸시 성공
|
||||
- 각 저장소 루트가 `main...origin/main` 추적 상태다.
|
||||
- 원격 기본 브랜치에 초기 커밋이 보인다.
|
||||
|
||||
## 기록 원칙
|
||||
|
||||
- 반복 절차 자체는 이 워크플로우를 SSOT로 유지한다.
|
||||
- 특정 날짜의 실제 실행 기록은 아래 중 하나에 남긴다.
|
||||
- 실패/차단/권한 이슈가 있으면 `journey/troubleshooting/`
|
||||
- 문제 없이 끝났으면 `journey/worklog/`
|
||||
|
||||
## 이 워크플로우가 다루지 않는 것
|
||||
|
||||
- 프로젝트별 문서 내용 설계
|
||||
- 앱 코드 구현
|
||||
- GitHub 팀 권한 설계
|
||||
- 실제 secret 발급과 노출 정책
|
||||
|
||||
## 한 줄 결론
|
||||
|
||||
- 이 워크플로우는 `51123 서버에서 GitHub org 기준 새 프로젝트 루트와 다중 저장소를 같은 절차로 반복 생성하고 최초 푸시하는 표준 절차`다.
|
||||
@ -84,7 +84,7 @@ ip route
|
||||
### 4. 작업 유형별 분기
|
||||
|
||||
#### A. 점검만 할 때
|
||||
- [51123_to_internal_nas_sync_verification_runbook.md](../02_Architecture/51123_to_internal_nas_sync_verification_runbook.md) 절차를 그대로 따릅니다.
|
||||
- [51123_nas_sync_verification_workflow.md](./51123_nas_sync_verification_workflow.md) 절차를 그대로 따릅니다.
|
||||
|
||||
#### B. NAS cron을 수정할 때
|
||||
|
||||
|
||||
206
workflow/51123_nas_sync_verification_workflow.md
Normal file
206
workflow/51123_nas_sync_verification_workflow.md
Normal file
@ -0,0 +1,206 @@
|
||||
---
|
||||
tags: [infra, workflow, nas, sync, 51123, companyx]
|
||||
---
|
||||
|
||||
# 51123 -> 내부 NAS 동기화 점검 워크플로우
|
||||
|
||||
## 상위 원칙
|
||||
- [Infra Project Identity](../00_Philosophy/00_IDENTITY/Infra_Project_Identity.md)
|
||||
- [Core Infrastructure Principles](../00_Philosophy/01_PRINCIPLES/Core_Infrastructure_Principles.md)
|
||||
- [Operational Guardrails](../00_Philosophy/02_GUARDRAILS/Operational_Guardrails.md)
|
||||
- 공통 작성 원칙: [0_VALUE Writing Principles](https://github.com/happybell80/0_VALUE/blob/main/02_Governance/writing-principles.md)
|
||||
|
||||
## 관련 문서
|
||||
- [51123_nas_remote_operations_workflow.md](./51123_nas_remote_operations_workflow.md) — NAS 원격 작업 전체 흐름
|
||||
- [Infrastructure Project Structure](../02_Architecture/Infrastructure_Project_Structure.md)
|
||||
- [260307 NAS(192.168.0.101) SSOT 전환 및 CIFS 실마운트 복구](../journey/troubleshooting/260307_NAS_192_168_0_101_SSOT_전환_및_CIFS_실마운트_복구.md)
|
||||
- [260313 내부 NAS -> 외부 NAS 경로 교정 및 Go 프로브 검증](../journey/troubleshooting/260313_internal_nas_external_nas_route_fix_and_go_probe_verification.md)
|
||||
- [260313 내부 NAS 직접 Go 동기화 가능성 리서치](../journey/research/260313_internal_nas_direct_go_sync_feasibility_research.md)
|
||||
|
||||
## 목적
|
||||
|
||||
- 51123 서버에서 내부 NAS `192.168.0.101`에 접속해 Company X 외부 NAS 동기화 상태를 같은 절차로 반복 점검한다.
|
||||
- 이 문서는 사건 기록이 아니라, 운영자가 다시 실행할 수 있는 고정 절차를 남기는 워크플로우다.
|
||||
|
||||
## 적용 범위
|
||||
|
||||
- 점검 주체: 51123 서버
|
||||
- 점검 대상: 내부 NAS `192.168.0.101`
|
||||
- 점검 주제:
|
||||
- NAS SSH 접속 가능 여부
|
||||
- NAS 라우팅이 외부 NAS 경로 기준으로 유지되는지
|
||||
- Go 테스트 결과가 남아 있는지
|
||||
- 현재 운영 중인 fullscan / hierarchical 동기화가 실패 없이 끝났는지
|
||||
|
||||
## SSOT 기준값
|
||||
|
||||
- 내부 NAS 호스트: `192.168.0.101`
|
||||
- NAS 공유 기준: `/mnt/nas`
|
||||
- 51123 런타임 기준 파일:
|
||||
- `/home/admin/workspace-config/runtime.env`
|
||||
- `/home/admin/workspace-config/secrets.env`
|
||||
- 23 서버 cron 기준:
|
||||
- `*/30 * * * * /home/admin/infra/scripts/bin/companyx_external_nas_sync_hierarchical_cron.sh`
|
||||
- `0 1 * * * /home/admin/infra/scripts/bin/companyx_external_nas_sync_fullscan_cron.sh`
|
||||
- NAS 로컬 동기화 로그 기준:
|
||||
- `~/workspace/.sync-logs/`
|
||||
- `~/workspace/.sync-logs-hierarchical/`
|
||||
- NAS 로컬 Go 테스트 흔적 기준:
|
||||
- `~/workspace/.sync-logs-go/`
|
||||
- `~/workspace/.sync-logs-go-real-20260313/`
|
||||
- `~/workspace/.sync-logs-go-live/`
|
||||
|
||||
## 표준 흐름
|
||||
|
||||
### 1. 51123 기준값 확인
|
||||
|
||||
```bash
|
||||
grep -n '^NAS_' /home/admin/workspace-config/runtime.env /home/admin/workspace-config/secrets.env
|
||||
crontab -l
|
||||
ls -la /mnt/nas/workspace/.sync-logs /mnt/nas/workspace/.sync-logs-hierarchical
|
||||
```
|
||||
|
||||
확인 기준:
|
||||
- `NAS_HOST=192.168.0.101`이어야 한다.
|
||||
- 30분 계층형과 1일 1회 전수조사 cron이 보여야 한다.
|
||||
- `/mnt/nas/workspace/.sync-logs*` 아래 최신 summary 파일이 있어야 한다.
|
||||
|
||||
### 2. NAS SSH 포트 확인
|
||||
|
||||
```bash
|
||||
nc -vz -w 3 192.168.0.101 22
|
||||
ssh-keygen -F 192.168.0.101
|
||||
```
|
||||
|
||||
확인 기준:
|
||||
- `22/tcp` 접속 성공
|
||||
- known_hosts에 기존 호스트키가 있으면 재확인 없이 바로 접속 가능
|
||||
|
||||
### 3. 51123에서 내부 NAS SSH 접속
|
||||
|
||||
```bash
|
||||
ssh -o StrictHostKeyChecking=no admin@192.168.0.101
|
||||
```
|
||||
|
||||
설명:
|
||||
- 현재 운영 확인 기준 계정은 `admin`이다.
|
||||
- 비대화형 키 접속이 보장되지 않으므로, 필요 시 비밀번호 입력으로 접속한다.
|
||||
- 이 문서는 접속 방법을 남기는 문서이며, 비밀번호 값 자체는 문서에 적지 않는다.
|
||||
|
||||
### 4. NAS 기본 상태 확인
|
||||
|
||||
```bash
|
||||
date
|
||||
hostname
|
||||
whoami
|
||||
ip route
|
||||
```
|
||||
|
||||
성공 기준:
|
||||
- `hostname`은 내부 NAS 장비명으로 응답해야 한다.
|
||||
- 라우팅에 `default via 192.168.0.1 dev eth1`가 있어야 한다.
|
||||
- 외부 NAS 호스트 라우트가 있으면 `112.218.113.4 via 192.168.0.1 dev eth1` 형태여야 한다.
|
||||
|
||||
### 5. NAS 내부에서 동기화 관련 경로 찾기
|
||||
|
||||
```bash
|
||||
find ~ -maxdepth 3 \( -name '*companyx*' -o -name '*probe*' -o -name '*.log' -o -path '*/log/*' \) 2>/dev/null | sort | tail -n 200
|
||||
```
|
||||
|
||||
목적:
|
||||
- Go 프로브/테스트 바이너리와 로컬 sync 로그 경로가 실제로 남아 있는지 본다.
|
||||
|
||||
### 6. Go 테스트 결과 확인
|
||||
|
||||
```bash
|
||||
for f in \
|
||||
~/workspace/.sync-logs-go/companyx_sync_summary_*.json \
|
||||
~/workspace/.sync-logs-go-real-20260313/companyx_sync_summary_*.json \
|
||||
~/workspace/.sync-logs-go-live/companyx_sync_summary_*.json
|
||||
do
|
||||
[ -f "$f" ] && echo "FILE=$f" && cat "$f"
|
||||
done
|
||||
```
|
||||
|
||||
판단 기준:
|
||||
- 샘플 다운로드 테스트는 `downloaded > 0`, `failed = 0`이면 1차 성공으로 본다.
|
||||
- 같은 경로 재실행 테스트는 `downloaded = 0`, `skipped > 0`, `failed = 0`이면 증분 판정이 동작한 것으로 본다.
|
||||
- 루트 기준 go-live 테스트는 `files_seen`과 `downloaded/skipped/failed`가 남아 있어야 한다.
|
||||
|
||||
### 7. 현재 fullscan 운영 결과 확인
|
||||
|
||||
```bash
|
||||
cat ~/workspace/.sync-logs/companyx_sync_state.json
|
||||
ls -1t ~/workspace/.sync-logs/companyx_sync_summary_*.json | head -n 3 | while read f; do
|
||||
echo "FILE=$f"
|
||||
cat "$f"
|
||||
done
|
||||
```
|
||||
|
||||
판단 기준:
|
||||
- 최신 summary에 `finished_at`이 있어야 한다.
|
||||
- `failed = 0`이면 실패 없이 종료한 것이다.
|
||||
- `downloaded = 0`이어도 `skipped > 0`이면 정상 재검사일 수 있으므로 실패로 보지 않는다.
|
||||
- state 파일의 `updated_at`, `last_scanned_path`, `last_downloaded_path`가 있으면 상태 기록 기능은 정상으로 본다.
|
||||
|
||||
### 8. 현재 hierarchical 운영 결과 확인
|
||||
|
||||
```bash
|
||||
cat ~/workspace/.sync-logs-hierarchical/companyx_sync_state.json
|
||||
ls -1t ~/workspace/.sync-logs-hierarchical/companyx_sync_summary_*.json | head -n 3 | while read f; do
|
||||
echo "FILE=$f"
|
||||
cat "$f"
|
||||
done
|
||||
```
|
||||
|
||||
판단 기준:
|
||||
- 최근 30분 실행 summary가 계속 생성돼야 한다.
|
||||
- `failed = 0`이면 정상 종료다.
|
||||
- `downloaded = 0`, `skipped > 0`은 캐시 기반 점검에서 흔한 정상 결과다.
|
||||
|
||||
### 9. 필요 시 결과물 실체 확인
|
||||
|
||||
```bash
|
||||
find ~/workspace/companyx_go_sample_real_20260313 -type f | wc -l
|
||||
stat -c '%n %s %y' ~/workspace/companyx_go_sample_real_20260313/Thumbs.db
|
||||
find ~/workspace/6.Company\ X -type f | wc -l
|
||||
stat -c '%n %s %y' ~/workspace/6.Company\ X/Thumbs.db
|
||||
```
|
||||
|
||||
목적:
|
||||
- summary 숫자만이 아니라 실제 파일이 존재하는지 한 번 더 닫는다.
|
||||
|
||||
## 성공 판정 규칙
|
||||
|
||||
### A. NAS 접속 성공
|
||||
- 51123에서 NAS SSH 접속이 된다.
|
||||
- NAS 라우팅이 `eth1` 기준으로 유지된다.
|
||||
|
||||
### B. Go 테스트 성공
|
||||
- 샘플 다운로드 summary에 `downloaded > 0`, `failed = 0`
|
||||
- 재실행 summary에 `downloaded = 0`, `skipped > 0`, `failed = 0`
|
||||
|
||||
### C. 운영 동기화 정상
|
||||
- latest fullscan summary에 `finished_at` 존재, `failed = 0`
|
||||
- latest hierarchical summary가 최근 시각까지 누적되고 `failed = 0`
|
||||
|
||||
### D. 주의
|
||||
- `downloaded = 0`만으로 실패라고 판단하지 않는다.
|
||||
- 반드시 `failed`, `finished_at`, `updated_at`, 실제 파일 존재 여부를 함께 본다.
|
||||
|
||||
## 기록 원칙
|
||||
|
||||
- 반복 절차 자체는 이 워크플로우를 SSOT로 유지한다.
|
||||
- 특정 날짜의 실제 점검 결과는 아래 중 하나에 남긴다.
|
||||
- 장애/이상 징후가 있으면 `journey/troubleshooting/`
|
||||
- 문제 없이 끝난 점검이면 `journey/worklog/`
|
||||
|
||||
## 이 워크플로우가 다루지 않는 것
|
||||
|
||||
- NAS 로컬에 Go 동기화 본체를 상시 배포하는 절차
|
||||
- DSM 작업 스케줄러 또는 NAS cron에 실제 운영 스케줄을 심는 절차
|
||||
- 외부 NAS 계정/비밀번호 같은 민감값 기록
|
||||
|
||||
## 한 줄 결론
|
||||
|
||||
- 이 워크플로우는 `51123 -> 내부 NAS -> Go 테스트/운영 sync 상태 확인`을 같은 기준으로 반복하기 위한 고정 운영 절차다.
|
||||
@ -20,11 +20,16 @@ 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 워크스페이스 레포 동기화·푸시
|
||||
|
||||
| 문서 | 설명 |
|
||||
|------|------|
|
||||
| [51123_nas_remote_operations_workflow.md](./51123_nas_remote_operations_workflow.md) | NAS 원격 작업 전체 흐름 (점검·cron·동기화) |
|
||||
| [51123_nas_sync_verification_workflow.md](./51123_nas_sync_verification_workflow.md) | 51123 → 내부 NAS 동기화 점검 상세 절차 |
|
||||
| [51123_github_org_repo_bootstrap_workflow.md](./51123_github_org_repo_bootstrap_workflow.md) | GitHub org 기준 새 프로젝트·다중 레포 생성 |
|
||||
| [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 워크스페이스 레포 동기화·푸시 |
|
||||
|
||||
## 관련 문서
|
||||
- [../README.md](../README.md)
|
||||
- [../02_Architecture/51123_to_internal_nas_sync_verification_runbook.md](../02_Architecture/51123_to_internal_nas_sync_verification_runbook.md)
|
||||
- [../02_Architecture/Infrastructure_Project_Structure.md](../02_Architecture/Infrastructure_Project_Structure.md)
|
||||
- [../journey/README.md](../journey/README.md)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user