#!/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 를 실행할 것."