Files
SkyArtShop/scripts/pre-deployment-check.sh

183 lines
4.9 KiB
Bash
Raw Normal View History

2025-12-19 20:44:46 -06:00
#!/bin/bash
# Quick Deployment Checklist Script
# Run this before deploying to production
echo "🔍 SkyArtShop Pre-Deployment Checklist"
echo "========================================"
echo ""
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
check_pass() {
echo -e "${GREEN}${NC} $1"
}
check_fail() {
echo -e "${RED}${NC} $1"
}
check_warn() {
echo -e "${YELLOW}${NC} $1"
}
# Check 1: .env file exists
echo "1. Checking environment configuration..."
if [ -f ".env" ]; then
check_pass ".env file exists"
# Check for default/weak values
if grep -q "your_secure_password_here" .env; then
check_fail "Default password found in .env - CHANGE IT!"
else
check_pass "No default passwords found"
fi
if grep -q "skyart-shop-secret-2025-change-this-in-production" .env; then
check_fail "Default SESSION_SECRET found - GENERATE NEW ONE!"
else
check_pass "SESSION_SECRET appears to be custom"
fi
else
check_fail ".env file not found - copy .env.example and configure"
fi
echo ""
# Check 2: Dependencies installed
echo "2. Checking dependencies..."
if [ -d "backend/node_modules" ]; then
check_pass "node_modules exists"
else
check_fail "node_modules not found - run: cd backend && npm install"
fi
echo ""
# Check 3: Log directory
echo "3. Checking log directory..."
if [ -d "backend/logs" ]; then
check_pass "logs directory exists"
else
check_warn "logs directory not found - will be created automatically"
mkdir -p backend/logs
check_pass "Created logs directory"
fi
echo ""
# Check 4: Uploads directory
echo "4. Checking uploads directory..."
if [ -d "website/uploads" ]; then
check_pass "uploads directory exists"
else
check_warn "uploads directory not found - creating it"
mkdir -p website/uploads
check_pass "Created uploads directory"
fi
echo ""
# Check 5: PostgreSQL connection
echo "5. Checking database connection..."
if command -v psql &> /dev/null; then
# Try to connect using .env values
if [ -f ".env" ]; then
source .env
if psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -c "SELECT 1;" &> /dev/null; then
check_pass "Database connection successful"
else
check_fail "Cannot connect to database - check credentials"
fi
else
check_warn "Cannot test database - .env not found"
fi
else
check_warn "psql not found - cannot test database connection"
fi
echo ""
# Check 6: Syntax validation
echo "6. Validating JavaScript syntax..."
cd backend
if node -c server.js 2>/dev/null && \
node -c config/database.js 2>/dev/null && \
node -c config/logger.js 2>/dev/null; then
check_pass "All core files syntax valid"
else
check_fail "Syntax errors found - check files"
fi
cd ..
echo ""
# Check 7: PM2 status
echo "7. Checking PM2 configuration..."
if command -v pm2 &> /dev/null; then
check_pass "PM2 installed"
if pm2 list | grep -q "skyartshop"; then
check_pass "SkyArtShop PM2 process exists"
else
check_warn "SkyArtShop not in PM2 - will need to add"
fi
else
check_fail "PM2 not installed - run: npm install -g pm2"
fi
echo ""
# Check 8: Security audit
echo "8. Running security audit..."
cd backend
npm audit --production 2>/dev/null | head -n 3
cd ..
echo ""
# Check 9: Nginx configuration
echo "9. Checking Nginx..."
if command -v nginx &> /dev/null; then
check_pass "Nginx installed"
if [ -f "/etc/nginx/sites-enabled/skyartshop" ] || [ -f "nginx-skyartshop-secured.conf" ]; then
check_pass "Nginx configuration found"
else
check_warn "Nginx configuration not found in sites-enabled"
fi
else
check_warn "Nginx not installed or not in PATH"
fi
echo ""
# Check 10: File permissions
echo "10. Checking file permissions..."
if [ -w "backend/logs" ]; then
check_pass "Logs directory is writable"
else
check_fail "Logs directory not writable - run: chmod 755 backend/logs"
fi
if [ -w "website/uploads" ]; then
check_pass "Uploads directory is writable"
else
check_fail "Uploads directory not writable - run: chmod 755 website/uploads"
fi
echo ""
# Summary
echo "========================================"
echo "📋 Summary"
echo "========================================"
echo ""
echo "Before deploying to production:"
echo "1. ✓ Update .env with strong passwords"
echo "2. ✓ Generate new SESSION_SECRET (32+ chars)"
echo "3. ✓ Set NODE_ENV=production"
echo "4. ✓ Configure SSL certificates"
echo "5. ✓ Set up nginx reverse proxy"
echo "6. ✓ Configure firewall (ufw/iptables)"
echo "7. ✓ Run: pm2 restart skyartshop"
echo "8. ✓ Run: pm2 save"
echo "9. ✓ Monitor logs: pm2 logs skyartshop"
echo "10. ✓ Test: curl http://localhost:5000/health"
echo ""
echo "Generate SESSION_SECRET with:"
echo "node -e \"console.log(require('crypto').randomBytes(32).toString('hex'))\""
echo ""
echo "========================================"