1
+ #! /bin/bash
2
+
3
+ # Big Brain Coding - Server-Side Deployment Script
4
+ # This script builds and deploys the Next.js application with server-side functionality
5
+ # for analytics features that require API routes and dynamic data processing
6
+
7
+ set -e # Exit on any error
8
+
9
+ # Configuration
10
+ PROJECT_DIR=" $( pwd) "
11
+ BUILD_DIR=" .next"
12
+ DEPLOY_DIR=" /var/www/bigbraincoding.com/html"
13
+ PORT=3000
14
+
15
+ echo " 🚀 Big Brain Coding - Server-Side Deployment"
16
+ echo " ==========================================="
17
+ echo " 📁 Project Directory: $PROJECT_DIR "
18
+ echo " 📦 Build Directory: $BUILD_DIR "
19
+ echo " 🌐 Deploy Directory: $DEPLOY_DIR "
20
+ echo " 🔌 Port: $PORT "
21
+ echo " "
22
+
23
+ # Step 1: Install dependencies
24
+ echo " 🔧 Step 1: Installing dependencies..."
25
+ npm install
26
+
27
+ # Step 2: Build the Next.js application
28
+ echo " "
29
+ echo " 🔨 Step 2: Building Next.js application..."
30
+ npm run build
31
+
32
+ # Step 3: Create backup of current deployment
33
+ echo " "
34
+ echo " 📋 Step 3: Creating backup of current deployment..."
35
+ BACKUP_DIR=" /tmp/bigbraincoding-backup-$( date +%Y%m%d-%H%M%S) "
36
+ BACKUP_ARCHIVE=" $BACKUP_DIR .tar.bz2"
37
+ if [ -d " $DEPLOY_DIR " ]; then
38
+ mkdir -p " $BACKUP_DIR "
39
+ cp -r " $DEPLOY_DIR " /* " $BACKUP_DIR /" 2> /dev/null || true
40
+ echo " 📦 Compressing backup to save disk space..."
41
+ tar -cjf " $BACKUP_ARCHIVE " -C " $( dirname " $BACKUP_DIR " ) " " $( basename " $BACKUP_DIR " ) "
42
+ rm -rf " $BACKUP_DIR "
43
+ echo " ✅ Compressed backup created at: $BACKUP_ARCHIVE "
44
+ else
45
+ echo " ℹ️ No existing deployment to backup"
46
+ fi
47
+
48
+ # Step 4: Deploy application files
49
+ echo " "
50
+ echo " 📤 Step 4: Deploying application files..."
51
+
52
+ # Create deploy directory if it doesn't exist
53
+ sudo mkdir -p " $DEPLOY_DIR "
54
+
55
+ # Copy necessary files for server-side deployment
56
+ echo " 📁 Copying application files..."
57
+ sudo cp -r " $BUILD_DIR " " $DEPLOY_DIR /"
58
+ sudo cp package.json " $DEPLOY_DIR /"
59
+ sudo cp package-lock.json " $DEPLOY_DIR /"
60
+ sudo cp next.config.js " $DEPLOY_DIR /"
61
+ sudo cp -r public " $DEPLOY_DIR /"
62
+ sudo cp -r src " $DEPLOY_DIR /"
63
+
64
+ # Step 5: Set proper permissions
65
+ echo " "
66
+ echo " 🔐 Step 5: Setting permissions..."
67
+ sudo chown -R $USER :$USER " $DEPLOY_DIR "
68
+ sudo chmod -R 755 " $DEPLOY_DIR "
69
+ echo " ✅ Permissions set"
70
+
71
+ # Step 6: Install production dependencies in deploy directory
72
+ echo " "
73
+ echo " 📦 Step 6: Installing production dependencies..."
74
+ cd " $DEPLOY_DIR "
75
+ npm ci --only=production
76
+ cd " $PROJECT_DIR "
77
+
78
+ # Step 7: Create PM2 ecosystem file for process management
79
+ echo " "
80
+ echo " ⚙️ Step 7: Setting up process management..."
81
+ cat > " $DEPLOY_DIR /ecosystem.config.js" << EOF
82
+ module.exports = {
83
+ apps: [{
84
+ name: 'bigbraincoding',
85
+ script: 'node_modules/next/dist/bin/next',
86
+ args: 'start',
87
+ cwd: '$DEPLOY_DIR ',
88
+ instances: 1,
89
+ autorestart: true,
90
+ watch: false,
91
+ max_memory_restart: '1G',
92
+ env: {
93
+ NODE_ENV: 'production',
94
+ PORT: $PORT
95
+ }
96
+ }]
97
+ }
98
+ EOF
99
+
100
+ # Step 8: Stop existing PM2 process if running
101
+ echo " "
102
+ echo " 🛑 Step 8: Managing PM2 processes..."
103
+ if command -v pm2 & > /dev/null; then
104
+ pm2 stop bigbraincoding 2> /dev/null || true
105
+ pm2 delete bigbraincoding 2> /dev/null || true
106
+ echo " ✅ Stopped existing PM2 process"
107
+ else
108
+ echo " ℹ️ PM2 not found, installing..."
109
+ npm install -g pm2
110
+ fi
111
+
112
+ # Step 9: Start the application with PM2
113
+ echo " "
114
+ echo " 🚀 Step 9: Starting application with PM2..."
115
+ cd " $DEPLOY_DIR "
116
+ pm2 start ecosystem.config.js
117
+ pm2 save
118
+ cd " $PROJECT_DIR "
119
+
120
+ # Step 10: Configure nginx to proxy to the Node.js application
121
+ echo " "
122
+ echo " 🌐 Step 10: Configuring nginx proxy..."
123
+ NGINX_CONFIG=" /etc/nginx/sites-available/bigbraincoding.com"
124
+ sudo tee " $NGINX_CONFIG " > /dev/null << EOF
125
+ server {
126
+ listen 80;
127
+ server_name bigbraincoding.com www.bigbraincoding.com;
128
+
129
+ location / {
130
+ proxy_pass http://localhost:$PORT ;
131
+ proxy_http_version 1.1;
132
+ proxy_set_header Upgrade \$ http_upgrade;
133
+ proxy_set_header Connection 'upgrade';
134
+ proxy_set_header Host \$ host;
135
+ proxy_set_header X-Real-IP \$ remote_addr;
136
+ proxy_set_header X-Forwarded-For \$ proxy_add_x_forwarded_for;
137
+ proxy_set_header X-Forwarded-Proto \$ scheme;
138
+ proxy_cache_bypass \$ http_upgrade;
139
+ }
140
+ }
141
+ EOF
142
+
143
+ # Enable the site and restart nginx
144
+ sudo ln -sf " $NGINX_CONFIG " /etc/nginx/sites-enabled/
145
+ sudo nginx -t && sudo systemctl reload nginx
146
+
147
+ # Step 11: Verify deployment
148
+ echo " "
149
+ echo " ✅ Step 11: Verifying deployment..."
150
+ sleep 5 # Give the application time to start
151
+
152
+ if curl -f http://localhost:$PORT > /dev/null 2>&1 ; then
153
+ echo " ✅ Application is running on port $PORT "
154
+ echo " ✅ Deployment successful!"
155
+ echo " "
156
+ echo " 🌐 Your site should now be live at: https://bigbraincoding.com"
157
+ echo " 📊 Analytics features are now active!"
158
+ echo " 🔧 PM2 process: bigbraincoding"
159
+ echo " 📈 Monitor with: pm2 monit"
160
+ else
161
+ echo " ❌ Error: Application is not responding on port $PORT "
162
+ echo " 🔍 Check logs with: pm2 logs bigbraincoding"
163
+ exit 1
164
+ fi
165
+
166
+ echo " "
167
+ echo " 🎉 Server-side deployment complete!"
168
+ echo " "
169
+ echo " 📋 Useful commands:"
170
+ echo " pm2 status - Check application status"
171
+ echo " pm2 logs bigbraincoding - View application logs"
172
+ echo " pm2 restart bigbraincoding - Restart application"
173
+ echo " pm2 monit - Monitor all processes"
0 commit comments