A comprehensive React + Node.js application for managing the Southern Street Premier League tournament system.
/var/www/vhosts/ssplt10.cloud/
βββ httpdocs/ # Frontend (React/Vite SPA)
β βββ src/
β βββ public/
β βββ package.json
β βββ .env
β βββ .env.preview
β βββ .env.production
β βββ vite.config.ts
βββ backend/ # Backend (Node.js/Express)
β βββ src/
β β βββ app.js
β βββ package.json
β βββ .env
β βββ .env.preview
β βββ .env.production
β βββ ecosystem.config.js
βββ logs/ # PM2 and application logs
βββ deploy-scripts/ # Deployment automation
β βββ deploy.sh
β βββ sync_env.sh
βββ nginx.conf # Nginx configuration
βββ README.md
-
Install dependencies:
npm run install:all
-
Start development servers:
npm run dev:full
This starts both frontend (port 5173) and backend (port 3001).
- Development:
npm run dev - Preview:
npm run build:preview - Production:
npm run build:production
- Domain:
http://localhost:3001 - Frontend:
http://localhost:5173 - API:
http://localhost:3001/api
- Domain:
https://preview.ssplt10.cloud - API:
https://preview.ssplt10.cloud/api
- Domain:
https://www.ssplt10.cloud - API:
https://www.ssplt10.cloud/api
# Deploy to production
./deploy-scripts/deploy.sh production
# Deploy to preview
./deploy-scripts/deploy.sh preview
# Sync environment files
./deploy-scripts/sync_env.sh production-
Build frontend:
cd httpdocs npm run build:production -
Deploy frontend:
sudo cp -r httpdocs/dist/* /var/www/vhosts/ssplt10.cloud/httpdocs/ -
Deploy backend:
cd backend npm ci --production pm2 start ecosystem.config.js --env production pm2 save -
Reload Nginx:
sudo nginx -t && sudo systemctl reload nginx
NODE_ENV: Environment namePORT: Backend port (3001)RAZORPAY_KEY_ID: Razorpay API keyRAZORPAY_KEY_SECRET: Razorpay secret keyDOMAIN: Application domainVITE_API_URL: API base URLVITE_SUPABASE_*: Supabase configuration
VITE_API_URL: API endpointVITE_SUPABASE_*: Supabase configurationVITE_RAZORPAY_KEY_ID: Razorpay public keyVITE_APP_NAME: Application nameVITE_APP_VERSION: Application version
# Start backend
pm2 start backend/ecosystem.config.js --env production
# View logs
pm2 logs sspl-backend
# Monitor processes
pm2 monit
# Restart
pm2 restart sspl-backendThe nginx.conf file includes:
- SSL/TLS configuration
- SPA routing with
try_files - API proxy to backend
- Rate limiting
- Security headers
- Separate configurations for production and preview
logs/pm2-backend-out.log: Standard outputlogs/pm2-backend-error.log: Error logs
/var/log/nginx/ssplt10_access.log: Access logs/var/log/nginx/ssplt10_error.log: Error logs
- Backend:
GET /health - PM2:
pm2 status - Nginx:
sudo systemctl status nginx
- Rate limiting on API endpoints
- Security headers (CSP, HSTS, etc.)
- CORS configuration
- Input validation
- Environment variable validation
# Run frontend tests
npm run --workspace=httpdocs test
# Run backend tests
npm run --workspace=backend testPOST /api/create-order: Create Razorpay orderPOST /api/verify-payment: Verify paymentGET /api/health: Health check
- Create a feature branch
- Make changes
- Test locally
- Deploy to preview environment
- Create pull request
For issues or questions:
- Check PM2 logs:
pm2 logs sspl-backend - Check Nginx logs:
sudo tail -f /var/log/nginx/ssplt10_error.log - Verify environment variables
- Test API endpoints with curl
- β Build frontend for target environment
- β Copy dist/ to httpdocs/
- β Install backend dependencies
- β Sync environment variables
- β Start/restart PM2 process
- β Verify PM2 logs
- β Reload Nginx
- β Test SPA routing
- β Verify API endpoints
- β Check environment variables
- β Monitor logs
When updating the application:
- Update environment variables if needed
- Run deployment script
- Verify health checks
- Monitor logs for errors
- Test critical user flows