From 637db2354b6190b03b7b857673f9a8cd0b0e41ea Mon Sep 17 00:00:00 2001 From: hadi barzegar <83537317+hdbar@users.noreply.github.com> Date: Sun, 12 Apr 2026 12:55:31 +0330 Subject: [PATCH] add upload script for remote code deployment --- upload.sh | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100755 upload.sh diff --git a/upload.sh b/upload.sh new file mode 100755 index 0000000..8a8ece5 --- /dev/null +++ b/upload.sh @@ -0,0 +1,69 @@ +#!/bin/bash +set -euo pipefail + +# Remote server configuration +REMOTE_USER="${REMOTE_USER:-root}" +REMOTE_HOST="${REMOTE_HOST:-}" +REMOTE_PATH="${REMOTE_PATH:-/opt/tm-back}" +SSH_KEY="${SSH_KEY:-}" + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" + +usage() { + echo "Usage: $0 --host [--user ] [--path ] [--key ]" + 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-back)" + echo " --key Path to SSH private key (optional)" + echo "" + echo "Environment variables REMOTE_USER, REMOTE_HOST, REMOTE_PATH, SSH_KEY 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 ;; + -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" +if [[ -n "$SSH_KEY" ]]; then + SSH_CMD="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 non-essential files +rsync -avz --progress \ + --exclude 'bin/' \ + --exclude 'artifacts/' \ + --exclude '.git/' \ + --exclude '.idea/' \ + --exclude '.vscode/' \ + --exclude '*.exe' \ + --exclude 'Dockerfile' \ + --exclude 'upload.sh' \ + ${SSH_KEY:+-e "ssh -i $SSH_KEY"} \ + "${SCRIPT_DIR}/" \ + "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}/" + +echo "" +echo "==> Upload complete to ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}" +echo "" +echo "To build and run on the remote server:" +echo " ${SSH_CMD} ${REMOTE_USER}@${REMOTE_HOST} 'cd ${REMOTE_PATH} && go build -o bin/web ./cmd/web'"