blog/deploy.sh

84 lines
2.9 KiB
Bash
Raw Normal View History

2026-01-01 15:38:41 -08:00
#!/usr/bin/env sh
set -e
2026-01-01 15:38:41 -08:00
2026-01-02 07:16:46 -08:00
# Build the blog with mdbook before deploying
printf "Building blog with mdbook...\n"
[ -s src ] || ln -s /var/lib/www src
2026-01-02 07:16:46 -08:00
mdbook build
# Usage information
usage() {
2026-03-22 14:06:34 -07:00
printf "Usage: %s [staging|prod|local]\n\n staging - Deploy to local staging environment (/srv/www/stage.binning.net)\n prod - Deploy to production server via SSH (www.binning.net)\n local - Deploy directly to /srv/www/binning.net (used by Forgejo CI runner)\n\nExample:\n %s staging\n %s prod\n %s local\n" "$0" "$0" "$0" "$0"
exit 1
}
2026-01-01 15:38:41 -08:00
# Check if argument provided
if [ $# -eq 0 ]; then
printf "Error: No environment specified\n"
usage
fi
ENV=$1
case $ENV in
staging)
printf "Deploying to STAGING environment...\n"
STAGING_PATH="/srv/www/stage.binning.net"
# Create staging directory if it doesn't exist
sudo mkdir -p ${STAGING_PATH}
# Deploy website files via rsync
printf "Deploying website files...\n"
sudo rsync -av --delete main/* ${STAGING_PATH}/
sudo rsync -av --delete blog ${STAGING_PATH}/
# Set proper ownership
sudo chown -R nginx:nginx ${STAGING_PATH}/
printf "✓ Staging deployment complete!\n Files deployed to: %s\n\nTo activate nginx, import staging.nginx.nix into your local NixOS config\nand run: sudo nixos-rebuild switch\n" "${STAGING_PATH}"
;;
prod)
printf "Deploying to PRODUCTION environment...\n"
# SSH details
2026-01-01 17:48:00 -08:00
REMOTE_HOST="crossbox"
2026-03-22 14:06:34 -07:00
REMOTE_USER="brimlock"
REMOTE_PATH="/srv/www/binning.net"
2026-03-22 14:06:34 -07:00
# Check if SSH key is set up
if ! ssh -o BatchMode=yes -o ConnectTimeout=5 ${REMOTE_USER}@${REMOTE_HOST} exit 2>/dev/null; then
printf "Warning: SSH connection test failed. Ensure SSH keys are configured.\nYou may be prompted for a password.\n"
fi
2026-03-22 14:06:34 -07:00
# Deploy website files via rsync over SSH
printf "Deploying website files...\n"
2026-03-22 14:06:34 -07:00
ssh ${REMOTE_USER}@${REMOTE_HOST} "mkdir -p /tmp/${REMOTE_PATH}"
rsync -avz --delete main/ blog ${REMOTE_USER}@${REMOTE_HOST}:/tmp/${REMOTE_PATH}/
ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo rsync -avz --delete /tmp/${REMOTE_PATH}/ ${REMOTE_PATH}/ && \
2026-01-01 17:48:00 -08:00
sudo chown -R nginx:nginx ${REMOTE_PATH}/ && \
printf 'Content deployed.\n'"
2026-03-22 14:06:34 -07:00
printf "✓ Production deployment complete!\n\nNginx configuration is managed by the nixos-config flake (hosts/crossbox/nginx.nix).\n"
;;
2026-03-22 14:06:34 -07:00
local)
printf "Deploying locally to production path...\n"
LOCAL_PATH="/srv/www/binning.net"
printf "Deploying website files...\n"
rsync -av --delete main/ blog ${LOCAL_PATH}/
printf "✓ Local deployment complete!\n Files deployed to: %s\n" "${LOCAL_PATH}"
;;
*)
printf "Error: Invalid environment '%s'\n" "$ENV"
usage
;;
esac