93 lines
2.5 KiB
Bash
93 lines
2.5 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# =============================================================
|
||
|
|
# 远端执行 docker compose 命令
|
||
|
|
# 用法:
|
||
|
|
# ./remote-up.sh up # build + up -d
|
||
|
|
# ./remote-up.sh build # 仅 build
|
||
|
|
# ./remote-up.sh restart svc # 重启某服务
|
||
|
|
# ./remote-up.sh logs [svc] # 跟日志
|
||
|
|
# ./remote-up.sh ps # 服务状态
|
||
|
|
# ./remote-up.sh ssh # 登录到远端
|
||
|
|
# =============================================================
|
||
|
|
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
|
||
|
|
if [ -f "$SCRIPT_DIR/server.env" ]; then
|
||
|
|
# shellcheck disable=SC1091
|
||
|
|
set -a
|
||
|
|
. "$SCRIPT_DIR/server.env"
|
||
|
|
set +a
|
||
|
|
fi
|
||
|
|
|
||
|
|
SERVER_HOST="${SERVER_HOST:?SERVER_HOST 未配置,请先 cp server.env.example server.env}"
|
||
|
|
SERVER_USER="${SERVER_USER:-root}"
|
||
|
|
SERVER_PORT="${SERVER_PORT:-22}"
|
||
|
|
REMOTE_DIR="${REMOTE_DIR:-/root/integral-shop}"
|
||
|
|
|
||
|
|
if [ -n "${SSHPASS:-}" ]; then
|
||
|
|
command -v sshpass >/dev/null 2>&1 || { echo "需要 sshpass"; exit 1; }
|
||
|
|
export SSHPASS
|
||
|
|
SSH=(sshpass -e ssh -p "$SERVER_PORT" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -t)
|
||
|
|
else
|
||
|
|
SSH=(ssh -p "$SERVER_PORT" -o StrictHostKeyChecking=no -t)
|
||
|
|
fi
|
||
|
|
|
||
|
|
run_remote() {
|
||
|
|
"${SSH[@]}" "${SERVER_USER}@${SERVER_HOST}" "cd ${REMOTE_DIR}/deploy/docker && $*"
|
||
|
|
}
|
||
|
|
|
||
|
|
cmd="${1:-up}"
|
||
|
|
shift || true
|
||
|
|
|
||
|
|
case "$cmd" in
|
||
|
|
up)
|
||
|
|
# 预检:必须存在 .env
|
||
|
|
run_remote "test -f .env && test -f integral-resell/.env" || {
|
||
|
|
cat <<EOF
|
||
|
|
[!] 远端缺少 .env 文件,请在远端执行:
|
||
|
|
|
||
|
|
ssh ${SERVER_USER}@${SERVER_HOST}
|
||
|
|
cd ${REMOTE_DIR}/deploy/docker
|
||
|
|
cp .env.example .env
|
||
|
|
vim .env
|
||
|
|
cp integral-resell/.env.template integral-resell/.env
|
||
|
|
vim integral-resell/.env
|
||
|
|
|
||
|
|
EOF
|
||
|
|
exit 1
|
||
|
|
}
|
||
|
|
run_remote "docker compose build && docker compose up -d && docker compose ps"
|
||
|
|
;;
|
||
|
|
build)
|
||
|
|
run_remote "docker compose build $*"
|
||
|
|
;;
|
||
|
|
restart)
|
||
|
|
run_remote "docker compose restart $*"
|
||
|
|
;;
|
||
|
|
logs)
|
||
|
|
run_remote "docker compose logs --tail 200 -f $*"
|
||
|
|
;;
|
||
|
|
ps|status)
|
||
|
|
run_remote "docker compose ps"
|
||
|
|
;;
|
||
|
|
down)
|
||
|
|
run_remote "docker compose down"
|
||
|
|
;;
|
||
|
|
pull)
|
||
|
|
run_remote "docker compose pull"
|
||
|
|
;;
|
||
|
|
ssh)
|
||
|
|
"${SSH[@]}" "${SERVER_USER}@${SERVER_HOST}"
|
||
|
|
;;
|
||
|
|
exec)
|
||
|
|
run_remote "docker compose exec $*"
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
echo "未知子命令: $cmd"
|
||
|
|
echo "支持: up | build | restart | logs | ps | down | pull | ssh | exec"
|
||
|
|
exit 2
|
||
|
|
;;
|
||
|
|
esac
|