#!/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 ] [--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