docs(itms): 지침서 4종(docx) + 설치 패키지 구성

- docs/ITMS_사용자지침서.docx: 접속·로그인(OTP)·주요 업무화면·FAQ
- docs/ITMS_운영자지침서.docx: 4포트 스택 구성·기관 프로파일·CI/CD·systemd 기동·헬스체크·트러블슈팅
- docs/ITMS_개발자지침서.docx: 멀티모듈 아키텍처·common 추출(키스토어 파라미터화)·빌드·기여 워크플로우·백로그
- docs/ITMS_서버설치가이드.docx: 사전요구사항·설치절차·CI연동·검증 체크리스트·제거

- install/ 설치 패키지 소스: preflight.sh·install.sh(멱등, 서비스 start 안 함)·uninstall.sh·README·make_package.sh
- make_package.sh → dist/itms-install-v1.0.tar.gz(152K): install+systemd+env+ci+docs 번들(재생성 가능, dist/ gitignore)

시크릿(접속정보·keystore 비번·연동 키) 문서·스크립트에 미포함(env/서버 로컬 관리 안내만). Tier2 기동은 DB/시크릿/JDK17 확보 환경 전제.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
itms-merge-dev 2026-07-17 22:55:12 +09:00
parent 08e634c3a5
commit 8adec35979
10 changed files with 134 additions and 0 deletions

3
.gitignore vendored
View File

@ -33,3 +33,6 @@ legacy/nlib/target/
# OS
.DS_Store
Thumbs.db
# 설치 패키지 빌드 산출물(make_package.sh 로 재생성)
/dist/

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

39
install/README.md Normal file
View File

@ -0,0 +1,39 @@
# ITMS 설치 패키지
배포 대상 서버에 ITMS(4포트 WAR 스택 + datatrans 데몬)를 설치하기 위한 패키지.
상세 절차는 동봉 `docs/ITMS_서버설치가이드.docx` 참조.
## 구성
```
itms-install/
├── README.md 이 파일
├── preflight.sh 사전 점검(JDK17·systemd·디스크·DB 도달성)
├── install.sh 멱등 설치(계정·디렉터리·systemd 유닛·env). 서비스 start 안 함
├── uninstall.sh 제거(데이터/DB 보존)
├── build.sh 소스에서 5모듈 WAR 빌드(JDK17)
├── systemd/itms-*.service 모듈별 systemd 유닛(5)
├── env/itms.env.example env 템플릿(SPRING_PROFILES_ACTIVE)
├── ci/ (선택) CI 자동배포 연동
│ ├── deploy_server_itms_block.py
│ └── gitea-webhook.md
└── docs/ 지침서(사용자·운영자·개발자·서버설치) docx
```
## 빠른 설치
```bash
tar xzf itms-install-*.tar.gz && cd itms-install
sudo bash preflight.sh <MariaDB_HOST:3306> <ORACLE_HOST:1521} # 선택 인자
# JDK17 미설치 시: sudo apt-get install -y openjdk-17-jdk (또는 dnf java-17-openjdk-devel)
sudo bash install.sh
# 아티팩트 준비: /opt/itms/repo 에 소스 → JAVA_HOME=<jdk17> bash build.sh → artifacts/current 연결
# /etc/itms/itms-<모듈>.env 의 SPRING_PROFILES_ACTIVE=<기관> 설정
for m in auth api front batch datatrans; do sudo systemctl enable --now itms-$m; done
```
## 선결 조건
- Linux(systemd) · **JDK17**(Boot 2.6.2 는 Java21 미지원) · 메모리 4GB 권장
- **런타임 DB**: MariaDB(ur_itms_db, api/batch) · Oracle XE(batch) 네트워크 도달
- 기관 프로파일(application-<기관>.yml) · keystore 사전 확보(시크릿은 서버 로컬 관리)
## 보안
- env/keystore 권한 600, 소유자 itms. 시크릿은 형상관리에 커밋 금지.

34
install/install.sh Normal file
View File

@ -0,0 +1,34 @@
#!/usr/bin/env bash
# ITMS 멱등 설치: 계정·디렉터리·systemd 유닛·env 배치. 서비스 start 는 하지 않음(기동은 운영자가 4.6 절차로).
set -euo pipefail
[ "$(id -u)" = "0" ] || { echo "root 로 실행하세요 (sudo bash install.sh)"; exit 1; }
HERE="$(cd "$(dirname "$0")" && pwd)"
SVC_USER=itms
echo "== 1) 서비스 계정 =="
id "$SVC_USER" >/dev/null 2>&1 || useradd -r -s /usr/sbin/nologin "$SVC_USER" || useradd -r -s /sbin/nologin "$SVC_USER"
echo "== 2) 디렉터리 =="
mkdir -p /opt/itms/repo /opt/itms/artifacts /etc/itms
chown -R "$SVC_USER":"$SVC_USER" /opt/itms
echo "== 3) systemd 유닛 설치 =="
for u in "$HERE"/systemd/itms-*.service; do
install -m 644 "$u" /etc/systemd/system/"$(basename "$u")"
echo " installed $(basename "$u")"
done
systemctl daemon-reload
echo "== 4) env 템플릿 배치 (기존 파일 보존) =="
for m in auth api front batch datatrans; do
f=/etc/itms/itms-$m.env
if [ ! -f "$f" ]; then
install -m 600 -o "$SVC_USER" -g "$SVC_USER" "$HERE"/env/itms.env.example "$f"
echo " created $f (SPRING_PROFILES_ACTIVE 를 기관명으로 수정하세요)"
else
echo " keep $f (기존 유지)"
fi
done
echo
echo "설치 완료. 다음:"
echo " 1) 아티팩트: /opt/itms/artifacts/current/itms-<모듈>.war 배치(빌드 또는 CI)"
echo " 2) /etc/itms/itms-<모듈>.env 의 SPRING_PROFILES_ACTIVE=<기관> 설정"
echo " 3) 기동: for m in auth api front batch datatrans; do systemctl enable --now itms-\$m; done"
echo " ※ 런타임 DB(MariaDB/Oracle) 도달·keystore·프로파일 시크릿 확보 후 기동할 것."

24
install/make_package.sh Normal file
View File

@ -0,0 +1,24 @@
#!/usr/bin/env bash
# 설치 패키지(tar.gz) 조립. repo 루트에서 실행: bash install/make_package.sh
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
VER="v1.0"
STAGE="$(mktemp -d)/itms-install"
mkdir -p "$STAGE"/{systemd,env,ci,docs}
# 설치 스크립트
cp "$ROOT"/install/{README.md,preflight.sh,install.sh,uninstall.sh} "$STAGE"/
# deploy 아티팩트 재사용
cp "$ROOT"/deploy/build.sh "$STAGE"/
cp "$ROOT"/deploy/systemd/itms-*.service "$STAGE"/systemd/
cp "$ROOT"/deploy/env/itms.env.example "$STAGE"/env/
cp "$ROOT"/deploy/deploy_server_itms_block.py "$STAGE"/ci/
cp "$ROOT"/deploy/gitea-webhook.md "$STAGE"/ci/
# 지침서
cp "$ROOT"/docs/ITMS_*.docx "$STAGE"/docs/ 2>/dev/null || true
chmod +x "$STAGE"/*.sh
# 산출
OUT="$ROOT/dist"; mkdir -p "$OUT"
TAR="$OUT/itms-install-$VER.tar.gz"
tar czf "$TAR" -C "$(dirname "$STAGE")" itms-install
echo "패키지 생성: $TAR ($(du -h "$TAR" | cut -f1))"
tar tzf "$TAR" | head -40

24
install/preflight.sh Normal file
View File

@ -0,0 +1,24 @@
#!/usr/bin/env bash
# ITMS 설치 사전 점검 (읽기 전용). 실패해도 설치를 막지 않으나 경고를 남긴다.
set -u
echo "== ITMS preflight =="
# JDK17
if command -v javac >/dev/null 2>&1 && javac -version 2>&1 | grep -q ' 17'; then
echo "[OK] JDK17 (javac): $(javac -version 2>&1)"
elif ls /usr/lib/jvm/ 2>/dev/null | grep -qi 'java-17'; then
echo "[OK] JDK17 설치 경로 존재: $(ls -d /usr/lib/jvm/*17* 2>/dev/null | head -1)"
else
echo "[WARN] JDK17 미검출 — 'apt-get install -y openjdk-17-jdk' 또는 'dnf install -y java-17-openjdk-devel'"
fi
# systemd
command -v systemctl >/dev/null 2>&1 && echo "[OK] systemd 존재" || echo "[WARN] systemd 미검출"
# disk
avail=$(df -Pm /opt 2>/dev/null | awk 'NR==2{print $4}'); echo "[INFO] /opt 여유: ${avail:-?} MB (권장 2000+)"
# mem
mem=$(free -m 2>/dev/null | awk '/Mem:/{print $2}'); echo "[INFO] 총 메모리: ${mem:-?} MB (권장 4096+)"
# DB 포트 도달성(선택; 인자로 host:port 전달)
for hp in "$@"; do
h=${hp%:*}; p=${hp#*:}
timeout 4 bash -c "echo > /dev/tcp/$h/$p" 2>/dev/null && echo "[OK] DB 도달 $hp" || echo "[WARN] DB 미도달 $hp (api/batch 기동 전 필요)"
done
echo "== preflight 완료 =="

10
install/uninstall.sh Normal file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# ITMS 제거: 서비스 중지·disable·유닛 제거. 데이터(/opt/itms)·DB 는 보존.
set -euo pipefail
[ "$(id -u)" = "0" ] || { echo "root 로 실행하세요"; exit 1; }
for m in auth api front batch datatrans; do
systemctl disable --now itms-$m 2>/dev/null || true
rm -f /etc/systemd/system/itms-$m.service
done
systemctl daemon-reload
echo "제거 완료. /opt/itms(아티팩트)·/etc/itms(env)·DB 는 보존됨(수동 삭제 가능)."