arko_renual/deploy/dev
infraurp e4973fb777
All checks were successful
deploy-dev / deploy (push) Successful in 39s
배포 파이프라인 결함 3건 수정
2026-07-30 나눔고딕 글꼴 배포 중 드러난 문제들이다.

1) build-and-upload.sh: 업로드 검증이 없어 잘린 WAR이 통과했다
   pscp가 대용량 전송 중 약 30초 지점에서 조용히 끊기며 exit 0을 반환해,
   194MB WAR이 66MB/84MB로 잘린 채 "업로드 완료"로 처리됐다. 그 WAR로
   배포가 돌아 실패했다. 30MB 조각 전송 + 조각별 크기 확인(3회 재시도) +
   서버 결합 후 size/md5 대조를 통과할 때만 arko.war 로 교체하도록 바꿨다.

2) build-and-upload.sh: mvn -ntp 는 Maven 3.6.1+ 전용
   PATH에 3.5.4가 잡히면 "Unrecognized option: -ntp"로 빌드가 즉시 죽는다.
   진행률 억제 옵션일 뿐이라 제거했다.

3) arko-dev-deploy.sh: WAR 검증이 파이프+pipefail 조합으로 취약
   정상 WAR인데 Actions 실행 중 "WEB-INF/web.xml 없음"으로 오판해 배포가
   멈췄다(서버에서 동일 명령 재실행 시 20/20 통과). unzip 목록을 한 번만
   읽어 변수에 담고 파이프 없이 검사한다.
   ※ 서버의 /opt/arko-dev/bin/ 사본은 워크플로가 갱신하지 않으므로 별도 반영 필요.

덧붙여 워크플로 주석의 "빈 커밋으로 재배포" 안내를 정정했다 —
paths-ignore 때문에 변경 경로가 없는 커밋은 워크플로가 실행되지 않는다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 13:44:50 +09:00
..
00-server-setup.sh 개발서버(csv.zioinfo.co.kr) 배포 구성 및 Gitea Actions 파이프라인 추가 2026-07-29 15:44:02 +09:00
06-runner-reregister.sh 배포 구조 문서화 및 runner 직결 재등록 스크립트 추가 2026-07-29 17:57:17 +09:00
07-runner-upgrade.sh act_runner 0.2.11 -> 0.2.13 업그레이드 스크립트 추가 2026-07-29 18:04:33 +09:00
arko-dev-deploy.sh 배포 파이프라인 결함 3건 수정 2026-07-30 13:44:50 +09:00
arko-dev-runner.service 개발서버(csv.zioinfo.co.kr) 배포 구성 및 Gitea Actions 파이프라인 추가 2026-07-29 15:44:02 +09:00
arko-dev.service Gitea 1.22 호환: 워크플로에서 workflow_dispatch 제거 2026-07-29 17:03:55 +09:00
arko-runner-watchdog.service act_runner 폴링 정지 워치독 추가 2026-07-29 18:45:25 +09:00
arko-runner-watchdog.sh act_runner 폴링 정지 워치독 추가 2026-07-29 18:45:25 +09:00
arko-runner-watchdog.timer act_runner 폴링 정지 워치독 추가 2026-07-29 18:45:25 +09:00
build-and-upload.sh 배포 파이프라인 결함 3건 수정 2026-07-30 13:44:50 +09:00
csv.zioinfo.co.kr.conf 개발서버(csv.zioinfo.co.kr) 배포 구성 및 Gitea Actions 파이프라인 추가 2026-07-29 15:44:02 +09:00
README.md Gitea 1.22 호환: 워크플로에서 workflow_dispatch 제거 2026-07-29 17:03:55 +09:00
runner-config.yaml 개발서버(csv.zioinfo.co.kr) 배포 구성 및 Gitea Actions 파이프라인 추가 2026-07-29 15:44:02 +09:00

arko_renual 개발서버 배포 · CI/CD (csv.zioinfo.co.kr)

대상 환경

항목
서버 zio-server / 101.79.17.164 (Ubuntu 24.04.1, 2코어, 메모리 7.8G, 디스크 99G)
도메인 csv.zioinfo.co.kr → nginx(443) → Tomcat(127.0.0.1:8088)
저장소 https://git.zioinfo.co.kr/somang4819/arko_renual.git (Gitea 1.22.3)
CI/CD Gitea Actions + act_runner (host 모드, 같은 서버에서 빌드·배포)
JDK 8 (Temurin)source/target 1.7이라 서버 기본 JDK 17/21로는 컴파일 불가
DB 서버 MariaDB 10.11 127.0.0.1:3306 스키마 csv (이미 존재, 188테이블/실데이터)
배포 형태 ROOT 전개 필수 — JSP가 /new/css/... 처럼 컨텍스트 경로 없이 하드코딩

파일 구성

파일 설치 위치 역할
00-server-setup.sh (1회 실행) JDK8·Tomcat9·디렉토리·systemd·nginx·act_runner 구축
arko-dev-deploy.sh /opt/arko-dev/bin/ WAR 검증 → 백업 → 재전개 → 설정주입 → 기동 → 헬스체크(실패 시 롤백)
arko-dev.service /etc/systemd/system/ Tomcat 9 서비스 (힙 768m)
arko-dev-runner.service /etc/systemd/system/ Gitea Actions runner (host 모드)
runner-config.yaml /opt/arko-dev/runner/config.yaml 러너 설정 (동시 1개, 캐시 off)
csv.zioinfo.co.kr.conf /etc/nginx/sites-available/ 리버스 프록시
../../.gitea/workflows/deploy-dev.yml 저장소 master push → 빌드·배포

서버 디렉토리 배치

/opt/arko-dev/
├── jdk8/            Temurin 8 (빌드·런타임 공용)
├── tomcat/          Tomcat 9 — webapps/ROOT 에 전개
├── config/          globals-dev.properties, globals-live.properties  ← git에 없음, 서버에만 보관
├── bin/             arko-dev-deploy.sh
├── backup/          ROOT_<타임스탬프>.tar.gz (최근 3개 유지)
├── upload/          업로드 파일 (재배포로 사라지지 않도록 ROOT/file 에 심볼릭 링크)
├── runner/          act_runner 작업 디렉토리
└── logs/            deploy.log

구축 절차

# 1. 산출물 업로드
scp -r deploy/dev root@101.79.17.164:/tmp/arko-deploy

# 2. 서버 구축 (멱등 — 다시 실행해도 안전)
ssh root@101.79.17.164 'bash /tmp/arko-deploy/00-server-setup.sh'

# 3. 환경설정 배치 (.gitignore 대상이라 저장소에 없음 — 없으면 기동 실패)
scp src/main/resources/egovframework/egovProps/globals-{dev,live}.properties \
    root@101.79.17.164:/opt/arko-dev/config/
#    → 서버에서 DB(127.0.0.1:3306/csv)·도메인(csv.zioinfo.co.kr)·메일/SMS 값 수정

# 4. Gitea runner 등록 (토큰은 Gitea 웹에서 발급)
ssh root@101.79.17.164 'cd /opt/arko-dev/runner && \
  act_runner register --no-interactive --instance https://git.zioinfo.co.kr \
    --token <등록토큰> --name arko-dev-runner --labels arko-dev:host && \
  install -m 644 /tmp/arko-deploy/runner-config.yaml /opt/arko-dev/runner/config.yaml && \
  install -m 644 /tmp/arko-deploy/arko-dev-runner.service /etc/systemd/system/ && \
  systemctl daemon-reload && systemctl enable --now arko-dev-runner'

# 5. DNS A 레코드 등록 (사용자 작업): csv.zioinfo.co.kr → 101.79.17.164
#    등록 후 SSL 발급
ssh root@101.79.17.164 'certbot --nginx -d csv.zioinfo.co.kr'

# 6. 워크플로 push → 이후 master push마다 자동 배포
git add .gitea/workflows/deploy-dev.yml deploy/
git commit -m "개발서버 배포 및 Gitea Actions 파이프라인 추가"
git push origin master

평상시 배포 흐름

# 1) 개발자 PC에서 빌드 + WAR 업로드
bash deploy/dev/build-and-upload.sh

# 2) push → Gitea Actions(deploy-dev)가 자동 배포
git push origin master
#    진행 상황: https://git.zioinfo.co.kr/somang4819/arko_renual/actions

빌드는 개발자 PC에서만 한다. 서버(2코어/메모리 여유 1G)에서 Maven을 돌리면 다른 40여 개 서비스까지 흔들리기 때문이다.

push 없이 즉시 반영:

bash deploy/dev/build-and-upload.sh --deploy

소스 변경 없이 재배포 (WAR만 다시 올린 경우):

git commit --allow-empty -m "재배포" && git push origin master

롤백: Gitea 1.22는 수동 실행(workflow_dispatch) 버튼이 없어 서버에서 직접 수행한다.

ssh root@101.79.17.164
systemctl stop arko-dev
rm -rf /opt/arko-dev/tomcat/webapps/ROOT
tar -xzf /opt/arko-dev/backup/ROOT_<타임스탬프>.tar.gz -C /opt/arko-dev/tomcat/webapps
systemctl start arko-dev

운영 명령

systemctl status arko-dev            # 상태
journalctl -u arko-dev -f            # 서비스 로그
tail -f /opt/arko-dev/tomcat/logs/catalina.out
tail -f /opt/arko-dev/logs/deploy.log

# 수동 롤백
systemctl stop arko-dev
rm -rf /opt/arko-dev/tomcat/webapps/ROOT
tar -xzf /opt/arko-dev/backup/ROOT_<타임스탬프>.tar.gz -C /opt/arko-dev/tomcat/webapps
systemctl start arko-dev

알려진 제약 · 주의

  1. 서버 자원이 빠듯하다. 조사 시점 기준 디스크 99%(여유 1.8G), 메모리 여유 1.3G, 부하 평균 11~17, 40개 이상 서비스 동거. 구축 전 디스크 정리가 사실상 필수다(journalctl --vacuum-time=7d, /var/log 정리 등). 00-server-setup.sh는 여유 2.5GB 미만이면 스스로 중단한다.
  2. WAR가 192MB다. 전개본·백업까지 하면 배포 1회에 약 600MB를 쓴다. 백업은 3개까지만 유지한다.
  3. globals-dev/live.properties는 저장소에 없다(.gitignore). 서버 config/에 두고 배포 때 주입한다. context-datasource.xmlglobals-dev.properties만 읽으므로 이 파일이 없으면 기동 자체가 실패한다.
  4. ROOT 배포만 가능하다. /arko 같은 서브 컨텍스트로 올리면 CSS/JS/이미지가 전부 404난다.
  5. DB는 기존 csv 스키마를 그대로 쓴다. 실데이터(회원 75,301건 등)가 들어 있으므로 개인정보보호 신규 테이블(SFR-001~004) 적용 여부와 마스킹 필요성은 별도 확인이 필요하다.
  6. JDK 17/21로는 빌드되지 않는다. maven-compiler-pluginsource/target 1.7이고 JDK 9+는 1.7을 지원하지 않는다.