Files

71 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
# Remote server configuration
REMOTE_USER="${REMOTE_USER:-root}"
REMOTE_HOST="${REMOTE_HOST:-}"
REMOTE_PATH="${REMOTE_PATH:-/opt/tm-panel}"
SSH_KEY="${SSH_KEY:-}"
CONTAINER_NAME="tm-panel"
IMAGE_NAME="tm-panel"
HOST_PORT="${HOST_PORT:-3000}"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
usage() {
echo "Usage: $0 --host <remote-host> [--user <user>] [--path <remote-path>] [--key <ssh-key>] [--port <host-port>]"
echo ""
echo "Options:"
echo " --host Remote server hostname or IP (required)"
echo " --user Remote user (default: root)"
echo " --path Remote destination path (default: /opt/tm-panel)"
echo " --key Path to SSH private key (optional)"
echo " --port Host port to expose (default: 3000)"
echo ""
echo "Environment variables REMOTE_USER, REMOTE_HOST, REMOTE_PATH, SSH_KEY, HOST_PORT can also be used."
exit 1
}
while [[ $# -gt 0 ]]; do
case "$1" in
--host) REMOTE_HOST="$2"; shift 2 ;;
--user) REMOTE_USER="$2"; shift 2 ;;
--path) REMOTE_PATH="$2"; shift 2 ;;
--key) SSH_KEY="$2"; shift 2 ;;
--port) HOST_PORT="$2"; shift 2 ;;
-h|--help) usage ;;
*) echo "Unknown option: $1"; usage ;;
esac
done
if [[ -z "$REMOTE_HOST" ]]; then
echo "Error: --host is required"
usage
fi
SSH_CMD="ssh"
SCP_SSH=""
if [[ -n "$SSH_KEY" ]]; then
SSH_CMD="ssh -i $SSH_KEY"
SCP_SSH="-e ssh -i $SSH_KEY"
fi
echo "==> Uploading source code to ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}"
# Create remote directory
${SSH_CMD} "${REMOTE_USER}@${REMOTE_HOST}" "mkdir -p ${REMOTE_PATH}"
# Rsync source code, excluding build artifacts and dev files
rsync -avz --progress --delete \
--exclude 'node_modules/' \
--exclude '.next/' \
--exclude '.git/' \
--exclude '.idea/' \
--exclude '.vscode/' \
--exclude 'upload.sh' \
${SSH_KEY:+-e "ssh -i $SSH_KEY"} \
"${SCRIPT_DIR}/" \
"${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}/"
echo ""
echo "==> Upload complete. Building Docker image on remote..."