Você não pode selecionar mais de 25 tópicos
Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
|
- #!/usr/bin/env bash
- set -Eeuo pipefail
-
- # 一次性安装 shunfeng 无源码运行目录。本脚本只复制运行配置,不重启服务。
-
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
- DEPLOY_HOME="${DEPLOY_HOME:-/home/emp-shunfeng}"
- RUNTIME_DIR="${RUNTIME_DIR:-$DEPLOY_HOME/runtime}"
- EXISTING_ENV_FILE="${EXISTING_ENV_FILE:-}"
-
- log() {
- echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
- }
-
- die() {
- echo "ERROR: $*" >&2
- exit 1
- }
-
- validate_runtime() {
- local compose_cmd=()
- if docker compose version >/dev/null 2>&1; then
- compose_cmd=(docker compose)
- elif command -v docker-compose >/dev/null 2>&1; then
- compose_cmd=(docker-compose)
- else
- die "missing docker compose"
- fi
-
- (
- set -a
- # shellcheck disable=SC1090
- . "$RUNTIME_DIR/release.env"
- set +a
-
- [[ "${RUNTIME_DIR:-}" == "/home/emp-shunfeng/runtime" ]] \
- || die "RUNTIME_DIR must be /home/emp-shunfeng/runtime"
- [[ "${BACKEND_COMPOSE_FILE:-}" == "$RUNTIME_DIR/docker-compose.yml" ]] \
- || die "BACKEND_COMPOSE_FILE does not match RUNTIME_DIR"
- [[ "${BACKEND_ENV_FILE:-}" == "$RUNTIME_DIR/.env" ]] \
- || die "BACKEND_ENV_FILE does not match RUNTIME_DIR"
- [[ "${REMOTE_DEPLOY_HOME:-}" == "/home/emp-shunfeng" ]] \
- || die "REMOTE_DEPLOY_HOME must be /home/emp-shunfeng"
- [[ "${REMOTE_RUNTIME_DIR:-}" == "/home/emp-shunfeng/runtime" ]] \
- || die "REMOTE_RUNTIME_DIR must be /home/emp-shunfeng/runtime"
- [[ -n "${PRIMARY_HOST:-}" && -n "${REMOTE_HOST:-}" ]] \
- || die "PRIMARY_HOST and REMOTE_HOST are required"
-
- BACKEND_ENV_FILE="$RUNTIME_DIR/.env" IMAGE_TAG=latest "${compose_cmd[@]}" \
- --env-file "$RUNTIME_DIR/.env" \
- -f "$RUNTIME_DIR/docker-compose.yml" \
- -p "${BACKEND_PROJECT_NAME:-emp_server}" \
- config >/dev/null
- )
- log "Runtime configuration validation passed"
- }
-
- [[ -f "$SCRIPT_DIR/docker-compose.yml" ]] || die "missing docker-compose.yml"
- [[ -f "$SCRIPT_DIR/deploy-from-url.sh" ]] || die "missing deploy-from-url.sh"
- [[ -f "$SCRIPT_DIR/release.env.example" ]] || die "missing release.env.example"
-
- mkdir -p "$RUNTIME_DIR"
- cp "$SCRIPT_DIR/docker-compose.yml" "$RUNTIME_DIR/docker-compose.yml"
- cp "$SCRIPT_DIR/deploy-from-url.sh" "$RUNTIME_DIR/deploy-from-url.sh"
- chmod +x "$RUNTIME_DIR/deploy-from-url.sh"
-
- if [[ ! -f "$RUNTIME_DIR/.env" ]]; then
- if [[ -n "$EXISTING_ENV_FILE" ]]; then
- [[ -f "$EXISTING_ENV_FILE" ]] || die "existing env file not found: $EXISTING_ENV_FILE"
- cp "$EXISTING_ENV_FILE" "$RUNTIME_DIR/.env"
- chmod 600 "$RUNTIME_DIR/.env"
- log "Existing backend env copied to $RUNTIME_DIR/.env"
- elif [[ -f "$SCRIPT_DIR/.env.example" ]]; then
- cp "$SCRIPT_DIR/.env.example" "$RUNTIME_DIR/.env"
- chmod 600 "$RUNTIME_DIR/.env"
- log "Created $RUNTIME_DIR/.env from example; replace all placeholders before deployment"
- else
- die "no existing env file supplied and .env.example is missing"
- fi
- else
- log "Keep existing runtime env: $RUNTIME_DIR/.env"
- fi
-
- if [[ ! -f "$RUNTIME_DIR/release.env" ]]; then
- cp "$SCRIPT_DIR/release.env.example" "$RUNTIME_DIR/release.env"
- chmod 600 "$RUNTIME_DIR/release.env"
- log "Created $RUNTIME_DIR/release.env; verify Compose project name and master/sub addresses"
- else
- log "Keep existing release config: $RUNTIME_DIR/release.env"
- fi
-
- validate_runtime
-
- log "Runtime files installed without restarting containers: $RUNTIME_DIR"
- log "Next: deploy one image package and verify the services before deleting source"
|