arko_renual/deploy/wise/01-was-setup.sh
infraurp ddacd1b7f5
Some checks failed
deploy-wise / deploy (push) Failing after 11s
csv.wise.ai.kr 배포 파이프라인 신설 (PC → git → web → was)
웹서버(175.118.124.176)의 Gitea 러너가 JDK8 로 WAR 을 빌드해 WAS(27.255.76.2)의
Tomcat·MariaDB 컨테이너로 배포한다. WAS 는 웹서버를 통해서만 닿고, Tomcat 은
127.0.0.1 바인딩이라 웹서버가 SSH 터널로 잇는다.

- WAS 는 가용 메모리가 3G 안팎(llama-server 200G+ 점유)이라 빌드를 웹서버에서 한다
- claudeops 가 sudo 를 쓸 수 없어 Tomcat·MariaDB 를 컨테이너로 올렸다
- 배포 스크립트를 매 실행마다 저장소본으로 덮어써 서버 사본 드리프트를 막는다

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-26 11:16:10 +09:00

66 lines
4.2 KiB
Bash

#!/usr/bin/env bash
# arko WAS(27.255.76.2) 최초 구축 — 컨테이너 2기(MariaDB, Tomcat) 생성
#
# 실행 위치: WAS 에서 claudeops 계정으로. bash 01-was-setup.sh
# 재실행 안전: 컨테이너를 지우고 다시 만든다. 단 db-data 는 건드리지 않는다.
#
# ┌ 이 서버의 제약 ────────────────────────────────────────────────────────┐
# │ ① claudeops 는 sudo 를 쓸 수 없다. docker 그룹 소속이라 컨테이너로만 │
# │ 설치할 수 있다. /opt 쓰기도 컨테이너를 거쳐야 한다. │
# │ ② llama-server 가 200G+ 를 점유해 가용 메모리가 3G 안팎이다. │
# │ 두 컨테이너 합쳐 1.75G 로 묶어 둔다. 올리기 전 반드시 free -g 확인. │
# │ ③ 11000~11050 은 다른 서비스가 쓰고 있다. arko 는 11060/11061 을 쓴다. │
# └────────────────────────────────────────────────────────────────────────┘
set -euo pipefail
APP_HOME=/opt/arko-app
MARIADB_ROOT_PW=${MARIADB_ROOT_PW:?"MARIADB_ROOT_PW 를 지정할 것"}
# ---------------------------------------------------------- 0. 디렉토리
# /opt 는 root 소유라 컨테이너를 거쳐 만든다(claudeops 는 sudo 불가).
docker run --rm -v /opt:/host-opt alpine:3 sh -c \
'for d in db-data incoming webapps logs deploy conf backup lib upload privacy-download; do mkdir -p /host-opt/arko-app/$d; done; chown -R 1005:1006 /host-opt/arko-app'
mkdir -p "$APP_HOME"/upload/{thumbNail,preView,Synch,bbsTemp} "$APP_HOME"/logs/{mysql,tomcat}
docker network inspect arko-net >/dev/null 2>&1 || docker network create arko-net
# ------------------------------------------------------ 1. JDBC 드라이버
# MariaDB 로 가므로 MariaDB 커넥터를 쓴다. WAR 안의 mysql-connector 는 쓰지 않는다
# (pom 은 5.1.17 고정인데 properties 는 8.x 전용 com.mysql.cj.jdbc.Driver 를 가리켜
# 그대로는 맞지 않는다). Tomcat 의 lib 에 두면 WAR 을 건드리지 않고 교체할 수 있다.
[ -f "$APP_HOME/lib/mariadb-java-client-2.7.12.jar" ] || \
curl -fsSL -o "$APP_HOME/lib/mariadb-java-client-2.7.12.jar" \
https://repo1.maven.org/maven2/org/mariadb/jdbc/mariadb-java-client/2.7.12/mariadb-java-client-2.7.12.jar
# ---------------------------------------------------------- 2. MariaDB
# lower_case_table_names=1 은 initdb 시점에만 반영된다(mariadb.cnf 주석 참고).
docker rm -f arko-mariadb >/dev/null 2>&1 || true
docker run -d --name arko-mariadb --restart unless-stopped --network arko-net \
-p 127.0.0.1:11061:3306 \
-m 768m --memory-swap 768m \
-e MARIADB_ROOT_PASSWORD="$MARIADB_ROOT_PW" \
-e MARIADB_DATABASE=csv -e MARIADB_USER=csv -e MARIADB_PASSWORD=csv \
-e TZ=Asia/Seoul \
-v "$APP_HOME/db-data":/var/lib/mysql \
-v "$APP_HOME/conf/mariadb.cnf":/etc/mysql/conf.d/arko.cnf:ro \
-v "$APP_HOME/logs/mysql":/var/log/mysql \
mariadb:11.4
# ----------------------------------------------------------- 3. Tomcat
# arko 는 source/target 1.7 이라 JDK 8 로만 뜬다(11/17 불가).
# 컨테이너는 만들어만 두고 기동은 arko-deploy.sh 가 한다(ROOT 가 없으면 의미가 없다).
docker rm -f arko-tomcat >/dev/null 2>&1 || true
docker create --name arko-tomcat --restart unless-stopped --network arko-net \
-p 127.0.0.1:11060:8080 \
-m 1g --memory-swap 1g \
-e TZ=Asia/Seoul \
-e JAVA_OPTS="-Xms256m -Xmx768m -XX:MaxMetaspaceSize=256m -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Seoul -Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom" \
-v "$APP_HOME/webapps":/usr/local/tomcat/webapps \
-v "$APP_HOME/lib/mariadb-java-client-2.7.12.jar":/usr/local/tomcat/lib/mariadb-java-client-2.7.12.jar:ro \
-v "$APP_HOME/logs/tomcat":/usr/local/tomcat/logs \
-v "$APP_HOME/upload":/app/upload \
-v "$APP_HOME/privacy-download":/app/privacy-download \
tomcat:9.0-jdk8-temurin
echo "완료. 다음: config/globals-{dev,live}.properties 를 두고 arko-deploy.sh 를 실행할 것."