Bash · 1928 bytes Raw Blame History
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"