103 lines
3.0 KiB
Bash
Executable File

#!/bin/bash
# Deployment script for Project Progress Tracker to ppt24.com
# Set variables
SERVER="root@172.105.78.162"
SERVER_DIR="/var/www/ppt24.com"
LOCAL_DIR=$(pwd)
DB_FILENAME="project_tracker.sqlite"
set -e # Exit on error
echo "=== DEPLOYMENT STARTED ==="
echo "Building React frontend for production..."
cd $LOCAL_DIR/frontend
npm run build
echo "Creating deployment package..."
cd $LOCAL_DIR
rm -rf deployment
mkdir -p deployment
# Copy frontend build
cp -r frontend/build deployment/
# Copy backend code
cp -r backend deployment/
# Use production environment file
cp backend/.env.production deployment/backend/.env
# Prepare database directory
mkdir -p deployment/database
# Check if we have a database file to copy
if [ -f "backend/data/$DB_FILENAME" ]; then
echo "Copying existing SQLite database..."
cp "backend/data/$DB_FILENAME" "deployment/database/$DB_FILENAME"
else
echo "No existing database found. A new one will be created on the server."
fi
echo "Deploying to server at $SERVER:$SERVER_DIR"
ssh $SERVER "mkdir -p $SERVER_DIR/frontend"
ssh $SERVER "mkdir -p $SERVER_DIR/backend"
ssh $SERVER "mkdir -p $SERVER_DIR/database"
# Transfer files
echo "Transferring frontend files..."
scp -r deployment/build/* $SERVER:$SERVER_DIR/frontend/
echo "Transferring backend files..."
scp -r deployment/backend/* $SERVER:$SERVER_DIR/backend/
echo "Transferring database..."
if [ -f "deployment/database/$DB_FILENAME" ]; then
scp "deployment/database/$DB_FILENAME" "$SERVER:$SERVER_DIR/database/$DB_FILENAME"
fi
# Setup backend on server
echo "Setting up backend on server..."
ssh $SERVER "cd $SERVER_DIR/backend && npm install --only=production"
# Create PM2 configuration file
echo "Creating PM2 configuration..."
cat > deployment/ecosystem.config.js << EOL
module.exports = {
apps: [
{
name: 'ppt24-backend',
script: '$SERVER_DIR/backend/src/server.js',
env: {
NODE_ENV: 'production',
PORT: 5000,
DB_PATH: '$SERVER_DIR/database/$DB_FILENAME',
JWT_SECRET: '$(openssl rand -hex 32)',
CORS_ORIGIN: 'https://ppt24.com',
},
instances: 1,
exec_mode: 'fork',
watch: false,
max_memory_restart: '300M',
}
]
};
EOL
# Deploy PM2 configuration
scp deployment/ecosystem.config.js $SERVER:$SERVER_DIR/
# Start the application with PM2
echo "Starting application with PM2..."
ssh $SERVER "cd $SERVER_DIR && pm2 delete ppt24-backend 2>/dev/null || true"
ssh $SERVER "cd $SERVER_DIR && pm2 start ecosystem.config.js && pm2 save && pm2 startup && pm2 save"
# Set up certbot for HTTPS
echo "Setting up HTTPS with Let's Encrypt..."
ssh $SERVER "apt install -y certbot python3-certbot-nginx"
ssh $SERVER "certbot --nginx -d ppt24.com -d www.ppt24.com --non-interactive --agree-tos --email admin@ppt24.com || echo 'Certificate setup can be completed later'"
echo "=== DEPLOYMENT COMPLETE ==="
echo "The application should now be accessible at https://ppt24.com"
echo "You may need to update your DNS settings at Cloudflare to point to your Linode server IP: 172.105.78.162"