- Extended GitHub Actions workflow to deploy to server via rsync - Fixed favicon reference in index.html (favicon.png → favicon-48.png) - Added deploy-site.sh script for manual deployments - Added deploy-homepage.md documentation Co-Authored-By: Paperclip <noreply@paperclip.ing>
93 lines
2.1 KiB
Bash
Executable File
93 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# Deploy static site to hatch.surf server
|
|
# Usage: ./scripts/deploy-site.sh [--dry-run]
|
|
#
|
|
# Environment variables required:
|
|
# DEPLOY_HOST - SSH host (e.g., 46.250.250.48)
|
|
# DEPLOY_USER - SSH user (e.g., root)
|
|
# DEPLOY_KEY - SSH private key (base64 encoded, optional if using ssh-agent)
|
|
#
|
|
# The script deploys the contents of the site/ directory to /var/www/hatch.surf
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
SITE_DIR="$REPO_ROOT/site"
|
|
REMOTE_DIR="/var/www/hatch.surf"
|
|
|
|
# Configuration
|
|
DEPLOY_HOST="${DEPLOY_HOST:-46.250.250.48}"
|
|
DEPLOY_USER="${DEPLOY_USER:-root}"
|
|
DEPLOY_KEY="${DEPLOY_KEY:-}"
|
|
|
|
# Parse arguments
|
|
DRY_RUN=false
|
|
for arg in "$@"; do
|
|
case $arg in
|
|
--dry-run)
|
|
DRY_RUN=true
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
log() {
|
|
echo -e "${GREEN}✓${NC} $1"
|
|
}
|
|
|
|
warn() {
|
|
echo -e "${YELLOW}⚠${NC} $1"
|
|
}
|
|
|
|
error() {
|
|
echo -e "${RED}✗${NC} $1" >&2
|
|
exit 1
|
|
}
|
|
|
|
# Validate
|
|
if [ ! -d "$SITE_DIR" ]; then
|
|
error "Site directory not found: $SITE_DIR"
|
|
fi
|
|
|
|
if [ ! -f "$SITE_DIR/index.html" ]; then
|
|
error "index.html not found in $SITE_DIR"
|
|
fi
|
|
|
|
# Setup SSH key if provided
|
|
SSH_OPTS="-o StrictHostKeyChecking=no -o ConnectTimeout=10"
|
|
if [ -n "$DEPLOY_KEY" ]; then
|
|
SSH_KEY_FILE=$(mktemp)
|
|
echo "$DEPLOY_KEY" | base64 -d > "$SSH_KEY_FILE"
|
|
chmod 600 "$SSH_KEY_FILE"
|
|
SSH_OPTS="$SSH_OPTS -i $SSH_KEY_FILE"
|
|
fi
|
|
|
|
# Deploy
|
|
DEPLOY_TARGET="${DEPLOY_USER}@${DEPLOY_HOST}"
|
|
|
|
if [ "$DRY_RUN" = true ]; then
|
|
warn "Dry run - would deploy to $DEPLOY_TARGET:$REMOTE_DIR"
|
|
rsync -avz --delete --dry-run $SSH_OPTS "$SITE_DIR/" "$DEPLOY_TARGET:$REMOTE_DIR/"
|
|
else
|
|
log "Deploying to $DEPLOY_TARGET:$REMOTE_DIR"
|
|
rsync -avz --delete $SSH_OPTS "$SITE_DIR/" "$DEPLOY_TARGET:$REMOTE_DIR/"
|
|
|
|
# Reload nginx
|
|
log "Reloading nginx..."
|
|
ssh $SSH_OPTS "$DEPLOY_TARGET" "nginx -t && systemctl reload nginx"
|
|
|
|
log "Deployment complete!"
|
|
log "Site live at https://hatch.surf"
|
|
fi
|
|
|
|
# Cleanup SSH key if created
|
|
if [ -n "$SSH_KEY_FILE" ]; then
|
|
rm -f "$SSH_KEY_FILE"
|
|
fi
|