Some checks failed
deploy-wise / deploy (push) Failing after 11s
웹서버(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>
66 lines
4.2 KiB
Bash
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 를 실행할 것."
|