mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-02-28 05:02:59 +00:00
76 lines
2.4 KiB
Bash
76 lines
2.4 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
# Upload bundle + deploy script to remote server.
|
||
|
|
#
|
||
|
|
# Usage:
|
||
|
|
# ./scripts/upload_to_server.sh <archive_name_or_path> <remote_user> <remote_host> [remote_port] [remote_base_dir]
|
||
|
|
# Example:
|
||
|
|
# ./scripts/upload_to_server.sh 3x-ui-custom-20260219-120000.zip root 203.0.113.10 22 /opt/3x-ui-deploy
|
||
|
|
|
||
|
|
ARCHIVE_INPUT="${1:-}"
|
||
|
|
REMOTE_USER="${2:-}"
|
||
|
|
REMOTE_HOST="${3:-}"
|
||
|
|
REMOTE_PORT="${4:-22}"
|
||
|
|
REMOTE_BASE_DIR="${5:-/home/$REMOTE_USER/panel}"
|
||
|
|
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
||
|
|
DEPLOY_SCRIPT_LOCAL="${SCRIPT_DIR}/deploy_on_server.sh"
|
||
|
|
COMMON_SCRIPT_LOCAL="${SCRIPT_DIR}/common.sh"
|
||
|
|
# shellcheck source=scripts/common.sh
|
||
|
|
. "${COMMON_SCRIPT_LOCAL}"
|
||
|
|
|
||
|
|
usage() {
|
||
|
|
echo "Usage: $0 <archive_name_or_path> <remote_user> <remote_host> [remote_port] [remote_base_dir]"
|
||
|
|
echo "Example: $0 3x-ui-custom-20260219-120000.zip root 203.0.113.10 22 /opt/3x-ui-deploy"
|
||
|
|
}
|
||
|
|
|
||
|
|
if [[ "${ARCHIVE_INPUT}" == "-h" || "${ARCHIVE_INPUT}" == "--help" ]]; then
|
||
|
|
usage
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [[ -z "${ARCHIVE_INPUT}" || -z "${REMOTE_USER}" || -z "${REMOTE_HOST}" ]]; then
|
||
|
|
echo "Error: archive, remote_user, and remote_host are required."
|
||
|
|
usage
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [[ ! -f "${DEPLOY_SCRIPT_LOCAL}" ]]; then
|
||
|
|
echo "Error: ${DEPLOY_SCRIPT_LOCAL} not found."
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
require_cmd scp
|
||
|
|
require_cmd ssh
|
||
|
|
|
||
|
|
if [[ "${ARCHIVE_INPUT}" = /* ]]; then
|
||
|
|
ARCHIVE_PATH="${ARCHIVE_INPUT}"
|
||
|
|
else
|
||
|
|
ARCHIVE_PATH="${REPO_ROOT}/${ARCHIVE_INPUT}"
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [[ ! -f "${ARCHIVE_PATH}" ]]; then
|
||
|
|
echo "Error: archive not found: ${ARCHIVE_PATH}"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
ARCHIVE_NAME="$(basename "${ARCHIVE_PATH}")"
|
||
|
|
|
||
|
|
echo "Ensuring remote directory exists: ${REMOTE_BASE_DIR}"
|
||
|
|
ssh -p "${REMOTE_PORT}" "${REMOTE_USER}@${REMOTE_HOST}" "mkdir -p '${REMOTE_BASE_DIR}'"
|
||
|
|
|
||
|
|
echo "Uploading archive: ${ARCHIVE_NAME}"
|
||
|
|
scp -P "${REMOTE_PORT}" "${ARCHIVE_PATH}" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_BASE_DIR}/"
|
||
|
|
|
||
|
|
echo "Uploading deploy script..."
|
||
|
|
scp -P "${REMOTE_PORT}" "${DEPLOY_SCRIPT_LOCAL}" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_BASE_DIR}/"
|
||
|
|
echo "Uploading common script..."
|
||
|
|
scp -P "${REMOTE_PORT}" "${COMMON_SCRIPT_LOCAL}" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_BASE_DIR}/"
|
||
|
|
|
||
|
|
echo
|
||
|
|
echo "Upload complete."
|
||
|
|
echo "Next, run on server:"
|
||
|
|
echo "ssh -p ${REMOTE_PORT} ${REMOTE_USER}@${REMOTE_HOST} 'cd ${REMOTE_BASE_DIR} && chmod +x deploy_on_server.sh common.sh && ./deploy_on_server.sh ${ARCHIVE_NAME}'"
|