Vastai-ConnectHub/connecthub.sh

165 lines
3.3 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$ROOT_DIR"
COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.yml}"
require_env() {
if [[ ! -f ".env" ]]; then
cat <<'EOF'
缺少 .env 文件。
请在仓库根目录创建 .env参考 env.example例如
cp env.example .env
然后按需修改其中变量。
EOF
exit 1
fi
}
usage() {
cat <<EOF
用法:
./connecthub.sh build
./connecthub.sh start
./connecthub.sh restart
./connecthub.sh stop
./connecthub.sh dev-build
./connecthub.sh dev-start
./connecthub.sh dev-restart
./connecthub.sh dev-stop
./connecthub.sh log [--follow|-f] [--tail N] [service]
环境变量(可选):
COMPOSE_FILE=path/to/docker-compose.yml (默认: docker-compose.yml)
示例:
./connecthub.sh log
./connecthub.sh log beat
./connecthub.sh log -f beat
./connecthub.sh log --tail 200 worker
EOF
}
log_usage() {
cat <<EOF
用法:
./connecthub.sh log [--follow|-f] [--tail N] [service]
说明:
- 不指定 service查看全部服务日志
- 指定 service例如 backend/worker/beat/redis
示例:
./connecthub.sh log beat
./connecthub.sh log -f beat
./connecthub.sh log --tail 200 worker
EOF
}
cmd="${1:-}"
case "$cmd" in
build)
require_env
docker compose -f "$COMPOSE_FILE" build
docker compose -f "$COMPOSE_FILE" up -d
;;
start)
require_env
docker compose -f "$COMPOSE_FILE" up -d
;;
restart)
require_env
docker compose -f "$COMPOSE_FILE" down
docker compose -f "$COMPOSE_FILE" up -d
;;
stop)
require_env
docker compose -f "$COMPOSE_FILE" down
;;
dev-build)
require_env
docker compose -f "$COMPOSE_FILE" -f docker-compose.dev.yml build
docker compose -f "$COMPOSE_FILE" -f docker-compose.dev.yml up -d
;;
dev-start)
require_env
docker compose -f "$COMPOSE_FILE" -f docker-compose.dev.yml up -d
;;
dev-restart)
require_env
docker compose -f "$COMPOSE_FILE" -f docker-compose.dev.yml down
docker compose -f "$COMPOSE_FILE" -f docker-compose.dev.yml up -d
;;
dev-stop)
require_env
docker compose -f "$COMPOSE_FILE" -f docker-compose.dev.yml down
;;
log)
shift || true
follow="0"
tail=""
service=""
while [[ $# -gt 0 ]]; do
case "$1" in
-f|--follow)
follow="1"
shift
;;
--tail)
if [[ $# -lt 2 ]]; then
echo "缺少 --tail 的参数" >&2
exit 2
fi
tail="$2"
shift 2
;;
--tail=*)
tail="${1#*=}"
shift
;;
-h|--help|help)
log_usage
exit 0
;;
*)
if [[ -z "$service" && "${1:0:1}" != "-" ]]; then
service="$1"
shift
else
echo "未知参数: $1" >&2
echo
log_usage
exit 2
fi
;;
esac
done
args=(docker compose -f "$COMPOSE_FILE" logs)
if [[ "$follow" = "1" ]]; then
args+=(--follow)
fi
if [[ -n "$tail" ]]; then
args+=(--tail "$tail")
fi
if [[ -n "$service" ]]; then
args+=("$service")
fi
"${args[@]}"
;;
-h|--help|help|"")
usage
;;
*)
echo "未知命令: $cmd" >&2
echo
usage
exit 2
;;
esac