56 lines
3.9 KiB
Bash
56 lines
3.9 KiB
Bash
#!/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
|