Files

56 lines
3.9 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
# ============================================================================
# 연동 서비스 설치·점검 (v1.5.7, 요구 4)
#
# 웹메이커가 제대로 동작하려면 함께 설치되어야 하는 서비스가 있다.
# - Gitea : 사이트 소스 버전 보관 (deploy/install-gitea.sh — Docker 컨테이너 webmaker-gitea)
# - Arimail: 받는 메일·웹메일·IMAP/POP/SMTP 메일 서버 (deploy/install-arimail.sh)
# 이 스크립트는 둘을 한 번에 다루고, 설치 뒤 설정 파일 점검(scripts/config.js check)과 초기 설정 페이지 주소를 알려 준다.
# deploy/install.sh · remote-install.sh 가 설치 끝에 부르고(배포 과정에 포함), remote-update.sh 는 --check 로 부른다.
#
# 사용:
# deploy/install-services.sh --gitea [--bind <LAN IP>] [--migrate-from <옛 원격>] Gitea 설치·등록
# deploy/install-services.sh --arimail --host mail.example.com --mailbox admin@example.com [install-arimail.sh 옵션…]
# deploy/install-services.sh --check 이미 설치된 서비스를 찾아 설정 파일에 등록되어 있지 않으면 등록만 (설치는 안 함)
# 공통: --service <유닛 이름> (기본: 설정 파일 service.systemdUnit, 없으면 webmaker/webhosting-agent 중 있는 것)
# ============================================================================
set -euo pipefail
HERE=$(cd "$(dirname "$0")/.." && pwd)
CFG() { (cd "$HERE" && node scripts/config.js "$@"); }
DO_GITEA=0; DO_ARIMAIL=0; CHECK=0; SVC=""; BIND=""; MIGRATE=""; ARGS=()
while [ $# -gt 0 ]; do
case "$1" in
--gitea) DO_GITEA=1; shift;; --arimail) DO_ARIMAIL=1; shift;; --check) CHECK=1; shift;;
--service) SVC=$2; shift 2;; --bind) BIND=$2; shift 2;; --migrate-from) MIGRATE=$2; shift 2;;
-h|--help) sed -n '2,20p' "$0" | sed 's/^# \{0,1\}//'; exit 0;;
*) ARGS+=("$1"); shift;; # 나머지는 install-arimail.sh 로
esac
done
[ "$DO_GITEA$DO_ARIMAIL$CHECK" != "000" ] || { echo "옵션을 주세요: --gitea | --arimail … | --check (--help)"; exit 1; }
# 서비스 유닛 이름: 설정 파일 → 이 서버에 있는 유닛
[ -n "$SVC" ] || SVC=$(CFG get service.systemdUnit 2>/dev/null || true)
if [ -z "$SVC" ]; then for c in webmaker webhosting-agent; do systemctl list-unit-files "$c.service" 2>/dev/null | grep -q "$c.service" && { SVC=$c; break; }; done; fi
[ -n "$SVC" ] && CFG set service.systemdUnit "$SVC" >/dev/null 2>&1 || true
docker_cmd() { if docker info >/dev/null 2>&1; then echo docker; elif sudo -n docker info >/dev/null 2>&1; then echo "sudo -n docker"; fi; }
# ---- Gitea ----
if [ "$DO_GITEA" = 1 ]; then
if ! command -v docker >/dev/null 2>&1; then echo "== Gitea: docker 가 없어 건너뜁니다 (sudo apt install docker.io 뒤 deploy/install-gitea.sh --service $SVC)"; else
"$HERE/deploy/install-gitea.sh" ${SVC:+--service "$SVC"} ${BIND:+--bind "$BIND"} ${MIGRATE:+--migrate-from "$MIGRATE"} --no-restart
fi
elif [ "$CHECK" = 1 ]; then
D=$(docker_cmd)
if [ -n "$D" ] && $D ps -a --format '{{.Names}}' 2>/dev/null | grep -qx webmaker-gitea; then
if [ -z "$(CFG get source.remote)" ]; then echo "== Gitea 컨테이너는 있는데 설정 파일에 등록되지 않았습니다 → 등록"; "$HERE/deploy/install-gitea.sh" ${SVC:+--service "$SVC"} --no-restart; else echo "== Gitea: 등록됨 ($(CFG get source.remote))"; fi
else echo "== Gitea: 이 서버에 컨테이너(webmaker-gitea)가 없습니다. 설치: deploy/install-gitea.sh --service $SVC"; fi
fi
# ---- Arimail ----
if [ "$DO_ARIMAIL" = 1 ]; then "$HERE/deploy/install-arimail.sh" "${ARGS[@]}";
elif [ "$CHECK" = 1 ]; then "$HERE/deploy/install-arimail.sh" --check; fi
# ---- 마무리: 설정 점검과 초기 설정 페이지 주소 ----
echo "== 설정 파일 점검"; CFG check || true
if systemctl is-active --quiet webmaker-setup 2>/dev/null; then echo "== 초기 설정 페이지:"; CFG setup-url | sed 's/^/ /'; fi