| 1 |
#!/usr/bin/env bash |
| 2 |
# |
| 3 |
# Deploy tarmac-web to production (Node.js server mode) |
| 4 |
# Run this script on the server hosting the site |
| 5 |
# |
| 6 |
# Usage: ./scripts/deploy.sh |
| 7 |
# |
| 8 |
|
| 9 |
set -euo pipefail |
| 10 |
|
| 11 |
DOMAIN="tarmac.musicsian.com" |
| 12 |
STAMP=$(date +%Y-%m-%d-%H%M%S) |
| 13 |
RELEASES_DIR="/var/www/$DOMAIN/releases" |
| 14 |
RELEASE_DIR="$RELEASES_DIR/$STAMP" |
| 15 |
APP_NAME="tarmac-web" |
| 16 |
USER=$(whoami) |
| 17 |
|
| 18 |
echo "=== tarmac-web deployment ===" |
| 19 |
echo "Timestamp: $STAMP" |
| 20 |
|
| 21 |
# Install dependencies |
| 22 |
echo "" |
| 23 |
echo "▶ npm ci" |
| 24 |
npm ci |
| 25 |
|
| 26 |
# Build the project |
| 27 |
echo "" |
| 28 |
echo "▶ npm run build" |
| 29 |
npm run build |
| 30 |
|
| 31 |
# Create release directory with correct ownership |
| 32 |
echo "" |
| 33 |
echo "▶ Creating release $STAMP" |
| 34 |
sudo mkdir -p "$RELEASE_DIR" |
| 35 |
sudo chown "$USER:$USER" "$RELEASE_DIR" |
| 36 |
|
| 37 |
# Copy necessary files for Node.js server |
| 38 |
echo "" |
| 39 |
echo "▶ Copying build artifacts" |
| 40 |
cp -r .next "$RELEASE_DIR/" |
| 41 |
cp -r public "$RELEASE_DIR/" |
| 42 |
cp package.json "$RELEASE_DIR/" |
| 43 |
cp package-lock.json "$RELEASE_DIR/" |
| 44 |
cp next.config.mjs "$RELEASE_DIR/" |
| 45 |
cp ecosystem.config.cjs "$RELEASE_DIR/" |
| 46 |
|
| 47 |
# Install production dependencies in release directory |
| 48 |
echo "" |
| 49 |
echo "▶ Installing production dependencies" |
| 50 |
cd "$RELEASE_DIR" |
| 51 |
npm ci --omit=dev |
| 52 |
|
| 53 |
# Update symlink |
| 54 |
echo "" |
| 55 |
echo "▶ Flipping symlink" |
| 56 |
sudo ln -nfs "$RELEASE_DIR" "/var/www/$DOMAIN/current" |
| 57 |
|
| 58 |
# Restart the application with pm2 |
| 59 |
echo "" |
| 60 |
echo "▶ Restarting application" |
| 61 |
cd "/var/www/$DOMAIN/current" |
| 62 |
if pm2 describe "$APP_NAME" > /dev/null 2>&1; then |
| 63 |
pm2 restart "$APP_NAME" |
| 64 |
else |
| 65 |
# Create log directory |
| 66 |
sudo mkdir -p /var/log/tarmac-web |
| 67 |
sudo chown "$USER:$USER" /var/log/tarmac-web |
| 68 |
# Start with ecosystem config |
| 69 |
pm2 start ecosystem.config.cjs |
| 70 |
fi |
| 71 |
pm2 save |
| 72 |
|
| 73 |
# Reload nginx |
| 74 |
echo "" |
| 75 |
echo "▶ Reloading nginx" |
| 76 |
sudo systemctl reload nginx |
| 77 |
|
| 78 |
# Clean up old releases (keep last 5) |
| 79 |
echo "" |
| 80 |
echo "▶ Cleaning up old releases" |
| 81 |
cd "$RELEASES_DIR" && ls -1t | tail -n +6 | xargs -r sudo rm -rf |
| 82 |
|
| 83 |
echo "" |
| 84 |
echo "✓ Deployed $STAMP" |
| 85 |
echo " Site: https://$DOMAIN" |