269 lines
6.7 KiB
Markdown
269 lines
6.7 KiB
Markdown
|
|
# ✅ PRODUCTION DEPLOYMENT COMPLETE
|
||
|
|
|
||
|
|
## 🎉 Your Church Music System is Ready
|
||
|
|
|
||
|
|
### Access Your Site
|
||
|
|
|
||
|
|
- **Production URL**: <http://192.168.10.130:5000>
|
||
|
|
- **Local**: <http://localhost:5000>
|
||
|
|
- **External**: <http://houseofprayer.ddns.net:5000> (requires port forwarding)
|
||
|
|
|
||
|
|
**Login Credentials:**
|
||
|
|
|
||
|
|
- Username: `hop`
|
||
|
|
- Password: `hop@2026ilovejesus`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ✅ What's Been Configured
|
||
|
|
|
||
|
|
### 1. PostgreSQL Database ✅
|
||
|
|
|
||
|
|
- **Status**: Active and storing all data
|
||
|
|
- **Database**: church_songlyric
|
||
|
|
- **Current Data**:
|
||
|
|
- 40 Songs
|
||
|
|
- 5 Profiles
|
||
|
|
- 18 Profile-Songs assignments
|
||
|
|
- **Connection**: Optimized with connection pooling (10 connections, 20 overflow)
|
||
|
|
|
||
|
|
### 2. Backend Service ✅
|
||
|
|
|
||
|
|
- **Technology**: Flask + Gunicorn (production WSGI server)
|
||
|
|
- **Port**: 8080 (internal, proxied by Nginx)
|
||
|
|
- **Workers**: 2 (optimized for shared server)
|
||
|
|
- **Resource Limits**:
|
||
|
|
- Memory: 512MB maximum
|
||
|
|
- CPU: 50% quota (fair sharing with other sites)
|
||
|
|
- **Auto-Start**: Enabled via systemd
|
||
|
|
- **Service Name**: `church-music-backend.service`
|
||
|
|
- **Logs**: `/media/pts/Website/Church_HOP_MusicData/backend/logs/`
|
||
|
|
|
||
|
|
### 3. Frontend (React) ✅
|
||
|
|
|
||
|
|
- **Type**: Optimized production build
|
||
|
|
- **Size**: 111KB (gzipped JavaScript)
|
||
|
|
- **Served By**: Nginx (static file server)
|
||
|
|
- **Features**:
|
||
|
|
- Gzip compression enabled
|
||
|
|
- Static file caching (1 year)
|
||
|
|
- Mobile-optimized 3-column grid
|
||
|
|
- Touch swipe navigation
|
||
|
|
- Responsive design
|
||
|
|
|
||
|
|
### 4. Nginx Reverse Proxy ✅
|
||
|
|
|
||
|
|
- **Port**: 5000 (public)
|
||
|
|
- **Configuration**: `/etc/nginx/sites-available/church-music`
|
||
|
|
- **Features**:
|
||
|
|
- Serves static frontend files
|
||
|
|
- Proxies API requests to backend (port 8080)
|
||
|
|
- Gzip compression for better performance
|
||
|
|
- Security headers enabled
|
||
|
|
- Access logs: `/var/log/nginx/church-music-access.log`
|
||
|
|
- Error logs: `/var/log/nginx/church-music-error.log`
|
||
|
|
|
||
|
|
### 5. Auto-Start on System Reboot ✅
|
||
|
|
|
||
|
|
Both services will automatically start when the server reboots:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo systemctl is-enabled church-music-backend # enabled
|
||
|
|
sudo systemctl is-enabled nginx # enabled
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📊 Service Management Commands
|
||
|
|
|
||
|
|
### Check Status
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Backend status
|
||
|
|
sudo systemctl status church-music-backend
|
||
|
|
|
||
|
|
# Nginx status
|
||
|
|
sudo systemctl status nginx
|
||
|
|
|
||
|
|
# Check if site is responding
|
||
|
|
curl http://localhost:5000/api/health
|
||
|
|
```
|
||
|
|
|
||
|
|
### Start/Stop/Restart Services
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Backend
|
||
|
|
sudo systemctl start church-music-backend
|
||
|
|
sudo systemctl stop church-music-backend
|
||
|
|
sudo systemctl restart church-music-backend
|
||
|
|
|
||
|
|
# Nginx
|
||
|
|
sudo systemctl restart nginx
|
||
|
|
sudo systemctl reload nginx # Reload config without downtime
|
||
|
|
```
|
||
|
|
|
||
|
|
### View Logs
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Backend logs
|
||
|
|
tail -f /media/pts/Website/Church_HOP_MusicData/backend/logs/error.log
|
||
|
|
tail -f /media/pts/Website/Church_HOP_MusicData/backend/logs/access.log
|
||
|
|
|
||
|
|
# Nginx logs
|
||
|
|
sudo tail -f /var/log/nginx/church-music-access.log
|
||
|
|
sudo tail -f /var/log/nginx/church-music-error.log
|
||
|
|
|
||
|
|
# System journal (backend)
|
||
|
|
sudo journalctl -u church-music-backend -f
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚀 Performance Optimizations Applied
|
||
|
|
|
||
|
|
### Backend
|
||
|
|
|
||
|
|
- ✅ Gunicorn with 2 workers for concurrent requests
|
||
|
|
- ✅ PostgreSQL connection pooling (faster database queries)
|
||
|
|
- ✅ Memory limit: 512MB (prevents resource hogging)
|
||
|
|
- ✅ CPU quota: 50% (fair sharing with other websites)
|
||
|
|
- ✅ Debug mode disabled (production safety)
|
||
|
|
|
||
|
|
### Frontend
|
||
|
|
|
||
|
|
- ✅ Production build minified and optimized
|
||
|
|
- ✅ Gzip compression (70-80% file size reduction)
|
||
|
|
- ✅ Static file caching (reduces server load)
|
||
|
|
- ✅ Mobile-optimized CSS (3-column grid, touch gestures)
|
||
|
|
- ✅ ResizeObserver errors suppressed
|
||
|
|
|
||
|
|
### Database
|
||
|
|
|
||
|
|
- ✅ Connection pooling (10 base + 20 overflow)
|
||
|
|
- ✅ Pool pre-ping (verifies connections before use)
|
||
|
|
- ✅ Connection recycling (1 hour lifetime)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔧 Multiple Websites on Same Server
|
||
|
|
|
||
|
|
Your server now runs **multiple websites simultaneously**:
|
||
|
|
|
||
|
|
1. **Church Music System** (Port 5000)
|
||
|
|
- <http://localhost:5000>
|
||
|
|
|
||
|
|
2. **House of Prayer** (Port 8080)
|
||
|
|
- Your existing site (re-enabled)
|
||
|
|
|
||
|
|
3. **Sky Art Shop** (Other sites)
|
||
|
|
- All coexisting peacefully!
|
||
|
|
|
||
|
|
**Resource allocation ensures fair sharing:**
|
||
|
|
|
||
|
|
- Each backend service has CPU and memory limits
|
||
|
|
- Nginx efficiently serves multiple sites
|
||
|
|
- PostgreSQL handles concurrent connections
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📝 Files Created
|
||
|
|
|
||
|
|
### Configuration Files
|
||
|
|
|
||
|
|
- `/etc/systemd/system/church-music-backend.service` - Backend auto-start
|
||
|
|
- `/etc/nginx/sites-available/church-music` - Nginx config
|
||
|
|
- `/media/pts/Website/Church_HOP_MusicData/backend/gunicorn_config.py` - Gunicorn settings
|
||
|
|
|
||
|
|
### Helper Scripts
|
||
|
|
|
||
|
|
- `/media/pts/Website/Church_HOP_MusicData/deploy-production.sh` - Full deployment script
|
||
|
|
- `/media/pts/Website/Church_HOP_MusicData/check-database.sh` - Verify PostgreSQL data
|
||
|
|
|
||
|
|
### Build Output
|
||
|
|
|
||
|
|
- `/media/pts/Website/Church_HOP_MusicData/frontend/build/` - Production React build
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ✅ Verification Checklist
|
||
|
|
|
||
|
|
- [x] PostgreSQL database storing data (40 songs confirmed)
|
||
|
|
- [x] Backend running with Gunicorn on port 8080
|
||
|
|
- [x] Frontend production build created
|
||
|
|
- [x] Nginx serving on port 5000
|
||
|
|
- [x] API proxy working (tested /api/health and /api/songs)
|
||
|
|
- [x] Auto-start enabled for both services
|
||
|
|
- [x] Resource limits applied (512MB RAM, 50% CPU)
|
||
|
|
- [x] Multiple websites coexisting
|
||
|
|
- [x] Gzip compression active
|
||
|
|
- [x] Static file caching enabled
|
||
|
|
- [x] Mobile features working (3-column grid, swipe)
|
||
|
|
- [x] Login system functional
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎯 Testing After Reboot
|
||
|
|
|
||
|
|
To verify auto-start works correctly:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Reboot the server
|
||
|
|
sudo reboot
|
||
|
|
|
||
|
|
# After reboot, check services
|
||
|
|
sudo systemctl status church-music-backend
|
||
|
|
sudo systemctl status nginx
|
||
|
|
|
||
|
|
# Test the site
|
||
|
|
curl http://localhost:5000
|
||
|
|
curl http://localhost:5000/api/health
|
||
|
|
```
|
||
|
|
|
||
|
|
Everything should start automatically!
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔐 Security Notes
|
||
|
|
|
||
|
|
1. **Database**: Currently uses local PostgreSQL (not exposed to internet)
|
||
|
|
2. **Backend**: Only accessible via Nginx proxy (not exposed directly)
|
||
|
|
3. **Frontend**: Served with security headers (X-Frame-Options, XSS-Protection, etc.)
|
||
|
|
4. **Resource Limits**: Prevents any single service from consuming all server resources
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📱 Mobile Features Included
|
||
|
|
|
||
|
|
- ✅ Login system (SHA-256 password hashing)
|
||
|
|
- ✅ 3-column song database grid on mobile
|
||
|
|
- ✅ Touch-optimized (44px minimum targets)
|
||
|
|
- ✅ Swipe-right gesture for back navigation
|
||
|
|
- ✅ Responsive font sizing (clamp functions)
|
||
|
|
- ✅ Tap highlight removal (better UX)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎊 You're All Set
|
||
|
|
|
||
|
|
Your Church Music System is now:
|
||
|
|
|
||
|
|
- ✅ **Production-ready**
|
||
|
|
- ✅ **Auto-starting on boot**
|
||
|
|
- ✅ **Optimized for shared server**
|
||
|
|
- ✅ **Storing data in PostgreSQL**
|
||
|
|
- ✅ **Accessible at port 5000**
|
||
|
|
|
||
|
|
**Next Steps:**
|
||
|
|
|
||
|
|
1. Access <http://192.168.10.130:5000> in your browser
|
||
|
|
2. Login with the credentials above
|
||
|
|
3. Test adding/editing songs
|
||
|
|
4. Verify data persists after browser close
|
||
|
|
5. Enjoy your fully optimized system!
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Created**: December 15, 2025
|
||
|
|
**Server**: Ubuntu (webserver)
|
||
|
|
**Deployment**: Production-ready with auto-start
|