2026-09-04 세션 — 스테이징 슬롯(8002) 신설 = 운영 시뮬레이션 배포 리허설 — 기록: [코디]
논의·대안
페페 지시 = 「운영배포 사고가 반복된다. 운영서버를 샌드박스·시뮬레이션 개념으로 만들어 더 안전하게 배포 테스트하자」. 그릴링 6문 확정 → Fable 계획 + 코덱스 상의 → 구축. 테스트(8001)는 실험용 그대로, 스테이징은 운영 데이터 사본으로 리허설만.
페페 결정(6건) = ①deploy-live push → 스테이징 먼저 → 통과해야 운영(승인은 지금처럼 먼저, 이후 전부 자동) ②스테이징 DB = Docker 컨테이너 신설 3308(테스트 3307 무손) ③갱신 = 매일 04:00 KST 1회 ④스모크 = 공통(로그인·5화면·콘솔0) + 이번 배포 전용 검사 자동실행 ⑤8002 포트 개방 ⑥자동 롤백 포함.
결정 / 진행
- 🔴8002 는 은퇴한 cmdboard 포트였고 SG 에
0.0.0.0/0이 열려 있었다(설명 "cmdboard web"). 여기에 마스킹 없는 운영 데이터 사본을 올릴 뻔했다 → 페페 승인 후 사무실·홈·Tailscale 3개로 축소. ⚠SG 의 사무실 IP(211.209.165.141)는 낡았을 수 있다(이 PC 실측211.177.244.214) → 접속은 Tailscalehttp://100.73.87.48:8002를 기본으로 쓴다. cmdboard 유닛mask는 유닛 파일이 실재해 실패(disabled 유지 + nginx 8002 선점이라 실질 위험 0). - 🔑테스트 DB 는 RDS 가 아니라 EC2 안 Docker MySQL(3307) 이었다. 그래서 스테이징도 컨테이너 하나 더로 끝났다. 운영 DB 는 68MB뿐 → 덤프 4초·복원 13초. 매일 04:00(=19:00 UTC) cron.
- 🔴서버가 Ubuntu 18.04(glibc 2.27)라 Playwright 네이티브 불가 → 스모크는 컨테이너로만 돈다.
⚠MS
playwright/python이미지는 브라우저만 있고 파이썬 패키지가 없다(실측) →pfs-smoke:1.47.0으로 한 번 구워 고정. - 🔑스모크 계정은 운영 DB 를 안 건드린다 — 스테이징 DB 에만
smoke_bot을 만들고, 매일 복원 뒤 재주입(갱신 스크립트가 호출). 비번은 EC2 에서 만들어 EC2 에만 둔다 → 내 PC 에서 시크릿을 SSM 으로 보내지 않는다. - 🔴
/api/health신설이 핵심(web/__init__.py) — 배포 반영을rev로 판정한다.curl / → 200은 옛 워커가 살아 있어도 200 이라 판정 근거가 못 된다(uWSGI 중복 인스턴스 선례). - 🔴
deploy-production.sh는 헬스체크가 사실상 없었다 —curl -s -o /dev/null -w는 500 을 받아도 curl 자체는 성공이라set -e가 안 걸렸다. 앱이 죽어도 배포가 초록으로 끝났다. → 헬스 판정 + 실패 시 직전 커밋 자동 롤백 + 경보. - 현재 상태 = 8002 가동 중, 운영 사본 DB 적재, master
70312e7배포(테스트/api/health동작 확인). 실증 = 스테이징에서 봉적 검사 ALL PASS 28/28(현장 14건·견적 3건 = 운영과 동일 수치. 테스트는 10건/0건이었다). - ✅파이프라인 완성·리허설 통과(master
8d7c2c5) —deploy.yml2단계(stage → promote). - PASS 리허설(run 33853200733) = 스테이징 반영 →
/api/health.rev일치 → 스모크 15항목 PASS(현장 132행·견적 43행 = 운영 데이터). 전 과정 약 40초. - FAIL 리허설(run 33853521483,
mode=full) = 일부러 실패하는 전용 검사를 넣었더니 stage failure → promoteskipped. 운영은198744d그대로 = 게이트가 실제로 막는다. 확인 후 임시 검사 삭제(8d7c2c5). - 🔴SSM
commands안에서$(...)는 이스케이프가 깨진다(Syntax error: "(" unexpected) → PREV 계산을 EC2 스크립트 안으로 옮겼다. - 🔑최초 1회 부트스트랩이 필요했다 — 파이프라인 스크립트가 아직 deploy-live 에 없어
pfs-stage를 master 로 한 번 맞췄다(stage_bootstrap_scripts.py). - ⚠브로커 텔레그램 승인이 안 온다(getUpdates 409). 페페가 채팅으로 승인한 건은
tools/cody-permission-broker/approve_from_chat.py "<문자열>"로 반영한다 — 채팅 승인이 실제로 있을 때만.
다음
⏳남은 것 = ①파이프라인 세트 deploy-live 체리픽 = 운영 배포(페페 채팅 승인 필요. 이 첫 배포만 구 워크플로로 나가고, 그 뒤부터 신 파이프라인이 돈다) ②인터페이스 3종(승인 요청 고정 블록·채팅 「스테이징」·devplan 카드) ③devplan 계획 페이지 등록.
관계
- 주제 그룹: pfs-infra
- 관련:
RISK_APPROVAL_POLICY.md,projects/pfs/rules.md