2026-01-01 15:38:41 -08:00
#!/usr/bin/env sh
2026-01-01 16:44:54 -08:00
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"
mdbook build
2026-01-01 17:48:00 -08:00
# Common files to deploy (shared between staging and prod)
2026-01-15 17:30:06 -08:00
DEPLOY_FILES = "blog includes index.html menu.html resume.html style.css 404.html cover.jpg"
2026-01-01 17:48:00 -08:00
2026-01-01 16:44:54 -08:00
# Usage information
usage( ) {
printf "Usage: %s [staging|prod]\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\nExample:\n %s staging\n %s prod\n" " $0 " " $0 " " $0 "
exit 1
}
2026-01-01 15:38:41 -08:00
2026-01-01 16:44:54 -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"
2026-01-01 17:48:00 -08:00
sudo rsync -av --delete ${ DEPLOY_FILES } ${ STAGING_PATH } /
2026-01-01 16:44:54 -08:00
# Set proper ownership
sudo chown -R nginx:nginx ${ STAGING_PATH } /
# Copy nginx config
sudo cp -t /etc/nixos/ staging.nginx.nix
printf "✓ Staging deployment complete!\n Files deployed to: %s\n Nginx config: /etc/nixos/staging.nginx.nix\n\nTo activate, update your NixOS configuration to import staging.nginx.nix\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"
REMOTE_USER = "m3b"
2026-01-01 16:44:54 -08:00
REMOTE_PATH = "/srv/www/binning.net"
REMOTE_NIXOS = "/etc/nixos/"
# 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
# Deploy website files via rsync over SSH
2026-01-01 17:48:00 -08:00
# Using just the host from SSH config without user@ prefix
2026-01-01 16:44:54 -08:00
printf "Deploying website files...\n"
2026-01-01 17:48:00 -08:00
ssh ${ REMOTE_HOST } " mkdir -p /tmp/ ${ REMOTE_PATH } "
rsync -avz --delete ${ DEPLOY_FILES } ${ REMOTE_HOST } :/tmp/${ REMOTE_PATH } /
# Set proper permissions and move config on remote server
2026-01-02 08:39:49 -08:00
ssh ${ 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-01-01 16:44:54 -08:00
# Deploy nginx configuration
printf "Deploying nginx configuration...\n"
2026-01-01 17:48:00 -08:00
scp prod.nginx.nix ${ REMOTE_HOST } :/tmp/nginx.nix
2026-01-01 16:44:54 -08:00
# Set proper permissions and move config on remote server
2026-01-01 17:48:00 -08:00
ssh ${ REMOTE_HOST } " sudo mv /tmp/nginx.nix ${ REMOTE_NIXOS } nginx.nix && \
2026-01-01 16:44:54 -08:00
sudo chown -R nginx:nginx ${ REMOTE_PATH } / && \
printf 'Configuration deployed. Run sudo nixos-rebuild switch to activate.\n' "
printf "✓ Production deployment complete!\n\nSSH into %s and run: sudo nixos-rebuild switch\n" " ${ REMOTE_HOST } "
; ;
*)
printf "Error: Invalid environment '%s'\n" " $ENV "
usage
; ;
esac