Skip to content

Commit

Permalink
Support for a custom SSH port
Browse files Browse the repository at this point in the history
  • Loading branch information
hirasso committed Sep 30, 2024
1 parent a93557c commit 0538872
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 9 deletions.
2 changes: 2 additions & 0 deletions .env.wp-sync-deploy.example
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ PROD_PROTOCOL="https"
PROD_HTTP_AUTH="" # for HTTP Authentication, e.g. "username:password"
PROD_ROOT_DIR="/absolute/path/to/production/root"
PROD_SSH="[email protected]"
PROD_SSH_PORT="22"
PROD_PHP_BINARY="php"
PROD_DEPLOY_STRATEGY="conservative" # or "risky", to skip most preflight checks

Expand All @@ -37,5 +38,6 @@ STAG_PROTOCOL="https"
STAG_HTTP_AUTH=""
STAG_ROOT_DIR="/absolute/path/to/staging/root"
STAG_SSH="[email protected]"
STAG_SSH_PORT="22"
STAG_PHP_BINARY="php"
PROD_DEPLOY_STRATEGY="conservative" # or "risky", to skip most preflight checks
4 changes: 3 additions & 1 deletion deploy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,9 @@ dry)
(
cd "$LOCAL_ROOT_DIR"
rsync --dry-run -avz --delete --relative \
-e "ssh -p $REMOTE_SSH_PORT" \
--exclude-from="$DEPLOYIGNORE_FILE" \
$DEPLOY_PATHS $FAVICON_PATH "$REMOTE_SSH:$REMOTE_ROOT_DIR"
$DEPLOY_PATHS "$REMOTE_SSH:$REMOTE_ROOT_DIR"
)
logLine
log "🔥 Would clear the cache at $PRETTY_REMOTE_ENV"
Expand Down Expand Up @@ -103,6 +104,7 @@ run)
(
cd "$LOCAL_ROOT_DIR"
rsync -avz --delete --relative \
-e "ssh -p $REMOTE_SSH_PORT" \
--exclude-from="$DEPLOYIGNORE_FILE" \
$DEPLOY_PATHS "$REMOTE_SSH:$REMOTE_ROOT_DIR"
)
Expand Down
2 changes: 2 additions & 0 deletions lib/bootstrap.sh
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ production)
REMOTE_PROTOCOL=$(trimWhitespace "$PROD_PROTOCOL")
REMOTE_HTTP_AUTH=$(trimWhitespace "${PROD_HTTP_AUTH:-}")
REMOTE_SSH=$(trimWhitespace "$PROD_SSH")
REMOTE_SSH_PORT=$(trimWhitespace "${PROD_SSH_PORT:-22}")
REMOTE_ROOT_DIR=$(trimWhitespace "$PROD_ROOT_DIR")
REMOTE_PHP_BINARY=$(trimWhitespace "${PROD_PHP_BINARY:-php}")
DEPLOY_STRATEGY=$(trimWhitespace "${PROD_DEPLOY_STRATEGY:-conservative}")
Expand All @@ -48,6 +49,7 @@ staging)
REMOTE_PROTOCOL=$(trimWhitespace "$STAG_PROTOCOL")
REMOTE_HTTP_AUTH=$(trimWhitespace "${STAG_HTTP_AUTH:-}")
REMOTE_SSH=$(trimWhitespace "$STAG_SSH")
REMOTE_SSH_PORT=$(trimWhitespace "${STAG_SSH_PORT:-22}")
REMOTE_ROOT_DIR=$(trimWhitespace "$STAG_ROOT_DIR")
REMOTE_PHP_BINARY=$(trimWhitespace "${STAG_PHP_BINARY:-php}")
DEPLOY_STRATEGY=$(trimWhitespace "${STAG_DEPLOY_STRATEGY:-conservative}")
Expand Down
16 changes: 8 additions & 8 deletions lib/functions.sh
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ function validateProductionBranch() {
function checkIsRemoteAllowed() {
local FILE_PATH="$REMOTE_ROOT_DIR/.allow-deployment"

IS_ALLOWED=$(ssh "$REMOTE_SSH" test -e "$FILE_PATH" && echo "yes" || echo "no")
IS_ALLOWED=$(ssh "$REMOTE_SSH" -p "$REMOTE_SSH_PORT" test -e "$FILE_PATH" && echo "yes" || echo "no")

if [[ $IS_ALLOWED != "yes" ]]; then
logError "Remote root ${RED}not allowed${NC} for deployment (missing file ${GREEN}.allow-deployment${NC})"
Expand Down Expand Up @@ -188,7 +188,7 @@ function checkCommandLinePHPVersions() {
local LOCAL_VERSION=${LOCAL_OUTPUT:0:3}
log "- Command line PHP version at $PRETTY_LOCAL_ENV server: ${BLUE}$LOCAL_VERSION${NC}"

local REMOTE_OUTPUT=$(ssh "$REMOTE_SSH" "$REMOTE_PHP_BINARY -r 'echo PHP_VERSION;'")
local REMOTE_OUTPUT=$(ssh "$REMOTE_SSH" -p "$REMOTE_SSH_PORT" "$REMOTE_PHP_BINARY -r 'echo PHP_VERSION;'")
local REMOTE_VERSION=${REMOTE_OUTPUT:0:3}
log "- Command line PHP version at $PRETTY_REMOTE_ENV server: ${BLUE}$REMOTE_VERSION${NC}"

Expand Down Expand Up @@ -240,13 +240,13 @@ function checkWebFacingPHPVersions() {
log "- Web-facing PHP version at $PRETTY_LOCAL_HOST: ${BLUE}$LOCAL_VERSION${NC}"

# Create the test file on the remote server
ssh "$REMOTE_SSH" "cd $REMOTE_WEB_ROOT; echo '<?= phpversion();' > ./$FILE_NAME"
ssh "$REMOTE_SSH" -p "$REMOTE_SSH_PORT" "cd $REMOTE_WEB_ROOT; echo '<?= phpversion();' > ./$FILE_NAME"

# Get the output of the test file
local REMOTE_OUTPUT=$(fetch "$REMOTE_URL/$FILE_NAME" "$REMOTE_HTTP_AUTH")

# Cleanup the test file
ssh "$REMOTE_SSH" "cd $REMOTE_WEB_ROOT; rm ./$FILE_NAME"
ssh "$REMOTE_SSH" -p "$REMOTE_SSH_PORT" "cd $REMOTE_WEB_ROOT; rm ./$FILE_NAME"
# substring from position 0-3
local REMOTE_VERSION=${REMOTE_OUTPUT:0:3}
# validate if the version looks legit
Expand All @@ -264,7 +264,7 @@ function checkWebFacingPHPVersions() {

# Check if a file exists on a remote server
function checkRemoteFile() {
ssh $REMOTE_SSH "[ -e \"$1\" ] && echo 1 || echo 0"
ssh "$REMOTE_SSH" -p "$REMOTE_SSH_PORT" "[ -e \"$1\" ] && echo 1 || echo 0"
}

# Validate that the required directories exist locally and remotely
Expand Down Expand Up @@ -306,7 +306,7 @@ function installRemoteWpCli() {

log "🚀 Installing WP-CLI on the remote server ..."

RESULT=$(ssh "$REMOTE_SSH" "cd $REMOTE_WEB_ROOT && curl -s -o $WP_CLI_PHAR https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && echo success")
RESULT=$(ssh "$REMOTE_SSH" -p "$REMOTE_SSH_PORT" "cd $REMOTE_WEB_ROOT && curl -s -o $WP_CLI_PHAR https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && echo success")

[ ! "$RESULT" == 'success' ] && logError "Failed to install WP-CLI on the server"

Expand All @@ -327,7 +327,7 @@ function wpRemote() {
local WP_CLI_PHAR=$(getRemoteWPCLIFilename)

# Construct the remote command
local SSH_COMMAND="ssh $REMOTE_SSH 'cd $REMOTE_WEB_ROOT && $REMOTE_PHP_BINARY $WP_CLI_PHAR $ARGS'"
local SSH_COMMAND="ssh $REMOTE_SSH -p $REMOTE_SSH_PORT 'cd $REMOTE_WEB_ROOT && $REMOTE_PHP_BINARY $WP_CLI_PHAR $ARGS'"

# @see ChatGPT
eval $SSH_COMMAND;
Expand All @@ -342,7 +342,7 @@ function runRemoteTasks() {
log "Running ${BLUE}wp eval-file wp-sync-deploy.tasks.php $TASK${NC} on $PRETTY_REMOTE_ENV server ... \n"

# Upload the file to the remote web root
scp -q "$TASKS_FILE" "$REMOTE_SSH:$REMOTE_WEB_ROOT"
scp -P "$REMOTE_SSH_PORT" "$TASKS_FILE" "$REMOTE_SSH:$REMOTE_WEB_ROOT"

# Execute the file on the remote server
wpRemote eval-file "$REMOTE_WEB_ROOT/wp-sync-deploy.tasks.php" "$TASK"
Expand Down

0 comments on commit 0538872

Please sign in to comment.