본문으로 건너뛰기

프로덕션 인수 기준

이 페이지는 설치 담당자와 운영팀이 같은 기준으로 “운영 투입 가능”을 판단하기 위한 체크리스트입니다. 설치가 끝났다는 말은 서비스가 한 번 뜬 것이 아니라, 재시작/백업/헬스/보안/인수 증거가 모두 남았다는 뜻입니다.


1. Go / No-Go 기준

구분Go 기준No-Go
배포 모드신규 설치는 container_mode=true신규 박스에서 plantpulse.service native 운영
systemdplantpulse-edge.service active + enabledactive 지만 enabled 아님, 또는 restart loop
헬스/api/v1/system/health HTTP 200 + components UPHTTP 503, component DOWN, 응답 지연 지속
버전/api/v1/system/versionimage_tag / build_date 기록tag 미확인, 이전 image 로 기동
네트워크WAN, PLC NIC, DNS/NTP, 플랫폼 API 도달성 확인PLC 망이 default route 보유, NTP 미동기
보안/etc/kopens/credentials.txt root 0600, 초기 admin 비밀번호 변경 완료기본/공유 비밀번호 유지, 자격증명 전달 기록 없음
백업backup.sh 1회 성공 + .sha256 존재백업 미실행, 백업이 같은 디스크에만 존재
복구성doctor.sh 또는 acceptance log 생성장애 시 전달할 증거 없음

하나라도 No-Go 면 운영 투입하지 말고 설치 트러블슈팅 또는 컨테이너 모드 운영 가이드의 escalation 절차를 따릅니다.


2. 설치 전 승인 항목

설치 전 운영팀이 확인해야 할 값:

항목
EDGE_IDEDGE_00303
SITE_IDSITE_00001
플랫폼 host / API keySERVER_HOST, SERVER_API_KEY
PLC NIC / WAN NICLAN1_IFACE, LAN2_IFACE
static IP / gateway / DNSLAN1_IP, LAN2_IP, LAN2_GATEWAY, LAN2_DNS
image tag 정책latest 또는 고정 IMAGE_TAG=2026-YYYYMMDD
초기 자격증명 정책random 생성 또는 운영팀 지정
외부 백업 위치NAS / S3 / 운영 백업 서버

자격증명은 채팅/메일 본문에 남기지 말고 root 전용 파일 또는 운영 비밀 저장소로 전달합니다.


3. Secret-safe 설치 env

비밀번호와 API key 를 shell history 에 남기지 않으려면 root 전용 env 파일을 사용합니다.

sudo -i
umask 077
install -m 600 /dev/null /root/pp-edge-install.env
${EDITOR:-vi} /root/pp-edge-install.env

파일 내용 예시:

export EDGE_ID=EDGE_00303
export SITE_ID=SITE_00001
export SERVER_HOST=192.168.0.41
export SERVER_API_KEY='<platform-api-key>'
export LAN1_IFACE=enp1s0
export LAN1_IP=192.168.100.10/24
export LAN2_IFACE=enp2s0
export LAN2_IP=192.168.0.10/24
export LAN2_GATEWAY=192.168.0.1
export LAN2_DNS=192.168.0.1
# export IMAGE_TAG=2026-20260524

실행:

sudo -i
set -a
. /root/pp-edge-install.env
set +a
cd /opt/kopens/install
bash install.sh

운영팀이 초기 비밀번호를 직접 지정하는 경우에도 같은 파일에 ADMIN_PASS, API_KEY, MQTT_PASS, OPCUA_PASS, CERT_PASS 를 넣고 chmod 600 을 유지합니다. 공식 cert password key 는 CERT_PASS 하나만 사용합니다.


4. 인수 증거 수집

설치가 끝나면 아래 명령으로 비밀값을 제외한 증거 파일을 남깁니다.

sudo -i
OUT=/root/pp-edge-acceptance-$(date +%Y%m%d-%H%M%S).txt
{
echo "# PlantPulse Edge acceptance"
date -Is
echo
echo "## host"
hostnamectl
uname -a
timedatectl
echo
echo "## service"
systemctl is-enabled plantpulse-edge.service || true
systemctl is-active plantpulse-edge.service || true
systemctl status plantpulse-edge.service --no-pager | sed -n '1,40p'
echo
echo "## version"
curl -ks https://127.0.0.1/api/v1/system/version | python3 -m json.tool
echo
echo "## health"
curl -ks https://127.0.0.1/api/v1/system/health | python3 -m json.tool
echo
echo "## ports"
ss -lntp | grep -E ':(80|443|1883|1884|6379|7799|9042|1880|12000|12443)([[:space:]]|$)' || true
echo
echo "## storage"
df -h /opt /data1 2>/dev/null || df -h
echo
echo "## docker"
docker ps --filter name=plantpulse-edge --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}'
} > "$OUT"
chmod 600 "$OUT"
sha256sum "$OUT" > "$OUT.sha256"
echo "$OUT"

인수 시 운영팀에 전달할 항목:

  • acceptance text 파일 경로와 sha256
  • /data1/pp-backups/pe-backup-*.tar.zst.sha256
  • /tmp/pe-doctor-*.tar.zst.sha256 (문제 발생 시)
  • 게이트웨이 IP, EDGE_ID, SITE_ID, image tag, 설치 일시
  • 자격증명 전달 완료 여부 (비밀번호 원문은 별도 보안 절차)

5. 재시작 검증

운영 투입 전 한 번은 service restart 후 자동 복구를 확인합니다.

sudo systemctl restart plantpulse-edge.service
sleep 30
sudo bash /opt/kopens/install/bin/health.sh
curl -ks https://127.0.0.1/api/v1/system/health | python3 -m json.tool

PLC 연결이 이미 등록된 현장은 restart 후 수집 상태와 마지막 값 갱신까지 확인합니다.


6. 백업과 복구 준비

sudo bash /opt/kopens/install/bin/backup.sh
ls -lh /data1/pp-backups/
sha256sum /data1/pp-backups/pe-backup-*.tar.zst | tail -1

첫 백업은 외부 NAS/S3/운영 백업 서버로 복사합니다. 같은 디스크의 백업만으로는 장애 복구가 되지 않습니다.


7. 운영팀 인수 후 잠금

  • /etc/kopens/credentials.txt 권한이 0600 root 인지 확인
  • 초기 admin 비밀번호 변경 완료
  • /root/pp-edge-install.env 보존 정책 결정: 운영 비밀 저장소에 이관 후 박스에서 삭제하거나 root 0600 유지
  • 방화벽에서 WAN 노출이 필요한 포트만 허용
  • 운영팀 연락처와 escalation 경로 등록
  • 다음 점검일과 백업 검증일 예약