361 lines
8.6 KiB
Markdown
361 lines
8.6 KiB
Markdown
|
|
# 🎯 PostgreSQL Migration Complete - Ready for Deployment
|
||
|
|
|
||
|
|
## Summary
|
||
|
|
|
||
|
|
Your Church Song Lyric application has been successfully prepared for migration to Ubuntu server **192.168.10.130** with the following changes:
|
||
|
|
|
||
|
|
- ✅ **Port**: Changed from 5000 to **5100**
|
||
|
|
- ✅ **Database**: Migrated from MongoDB to **PostgreSQL**
|
||
|
|
- ✅ **Server**: Configured for **192.168.10.130**
|
||
|
|
- ✅ **Dependencies**: Updated and tested locally
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📦 What's Been Created
|
||
|
|
|
||
|
|
### Core PostgreSQL Files
|
||
|
|
|
||
|
|
| File | Description |
|
||
|
|
|------|-------------|
|
||
|
|
| `backend/postgresql_models.py` | SQLAlchemy models for PostgreSQL |
|
||
|
|
| `backend/migrate_to_postgresql.py` | Data migration script from MongoDB/JSON |
|
||
|
|
| `backend/requirements.txt` | Updated with PostgreSQL dependencies |
|
||
|
|
|
||
|
|
### Configuration Files
|
||
|
|
|
||
|
|
| File | Description |
|
||
|
|
|------|-------------|
|
||
|
|
| `backend/.env` | Updated for PostgreSQL and port 5100 |
|
||
|
|
| `backend/.env.example` | Template with PostgreSQL settings |
|
||
|
|
| `backend/.env.ubuntu` | Ubuntu server configuration |
|
||
|
|
| `frontend/.env.ubuntu` | Frontend API configuration |
|
||
|
|
|
||
|
|
### Deployment Scripts
|
||
|
|
|
||
|
|
| File | Description |
|
||
|
|
|------|-------------|
|
||
|
|
| `ubuntu-setup-postgresql.sh` | **Automated setup script** (recommended) |
|
||
|
|
| `ubuntu-deploy.sh` | Quick update/redeploy script |
|
||
|
|
| `ubuntu-services.sh` | Service management helper |
|
||
|
|
|
||
|
|
### Documentation
|
||
|
|
|
||
|
|
| File | Description |
|
||
|
|
|------|-------------|
|
||
|
|
| `POSTGRESQL_DEPLOYMENT_GUIDE.md` | **Complete step-by-step guide** |
|
||
|
|
| `POSTGRESQL_QUICK_START.md` | Quick reference for fast deployment |
|
||
|
|
| `SSH_QUICK_REFERENCE.md` | SSH commands and troubleshooting |
|
||
|
|
| `MIGRATION_STATUS.md` | Detailed migration status |
|
||
|
|
| `README_POSTGRESQL.md` | This file |
|
||
|
|
|
||
|
|
### Service Files
|
||
|
|
|
||
|
|
| File | Description |
|
||
|
|
|------|-------------|
|
||
|
|
| `church-songlyric-backend.service` | Systemd service definition |
|
||
|
|
| `nginx-church-songlyric.conf` | HTTP Nginx configuration |
|
||
|
|
| `nginx-church-songlyric-ssl.conf` | HTTPS Nginx configuration |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚀 Deployment Options
|
||
|
|
|
||
|
|
### Option 1: Automated Setup (Recommended)
|
||
|
|
|
||
|
|
**Fastest way to deploy - One script does everything!**
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
# 1. From Windows: Transfer files
|
||
|
|
scp -r "E:\Documents\Website Projects\Church_SongLyric" username@192.168.10.130:/tmp/
|
||
|
|
|
||
|
|
# 2. SSH to server
|
||
|
|
ssh username@192.168.10.130
|
||
|
|
|
||
|
|
# 3. Run automated setup
|
||
|
|
sudo mv /tmp/Church_SongLyric /var/www/church-songlyric
|
||
|
|
cd /var/www/church-songlyric
|
||
|
|
chmod +x ubuntu-setup-postgresql.sh
|
||
|
|
./ubuntu-setup-postgresql.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
**The script will:**
|
||
|
|
|
||
|
|
- ✅ Install PostgreSQL
|
||
|
|
- ✅ Create database and user
|
||
|
|
- ✅ Install all dependencies (Python, Node.js, Nginx)
|
||
|
|
- ✅ Setup virtual environment
|
||
|
|
- ✅ Build frontend
|
||
|
|
- ✅ Migrate your data
|
||
|
|
- ✅ Create systemd service
|
||
|
|
- ✅ Configure Nginx
|
||
|
|
- ✅ Start everything
|
||
|
|
|
||
|
|
**Time**: ~15 minutes
|
||
|
|
**Difficulty**: Easy
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Option 2: Manual Setup
|
||
|
|
|
||
|
|
**For more control or learning purposes**
|
||
|
|
|
||
|
|
Follow the detailed guide: **POSTGRESQL_DEPLOYMENT_GUIDE.md**
|
||
|
|
|
||
|
|
**Time**: ~45-60 minutes
|
||
|
|
**Difficulty**: Moderate
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔐 Important Configuration
|
||
|
|
|
||
|
|
### PostgreSQL Connection String
|
||
|
|
|
||
|
|
```env
|
||
|
|
POSTGRESQL_URI=postgresql://songlyric_user:your_password@192.168.10.130:5432/church_songlyric
|
||
|
|
```
|
||
|
|
|
||
|
|
**Components:**
|
||
|
|
|
||
|
|
- Username: `songlyric_user`
|
||
|
|
- Password: Choose a secure password during setup
|
||
|
|
- Host: `192.168.10.130`
|
||
|
|
- Port: `5432` (PostgreSQL default)
|
||
|
|
- Database: `church_songlyric`
|
||
|
|
|
||
|
|
### Flask Configuration
|
||
|
|
|
||
|
|
```env
|
||
|
|
FLASK_PORT=5100
|
||
|
|
FLASK_ENV=production
|
||
|
|
SECRET_KEY=your-random-secret-key
|
||
|
|
```
|
||
|
|
|
||
|
|
### Access Points
|
||
|
|
|
||
|
|
| Service | URL | Port |
|
||
|
|
|---------|-----|------|
|
||
|
|
| Frontend | <http://192.168.10.130> | 80 |
|
||
|
|
| API | <http://192.168.10.130/api> | 80 (proxied) |
|
||
|
|
| Backend Direct | <http://192.168.10.130:5100> | 5100 |
|
||
|
|
| PostgreSQL | 192.168.10.130 | 5432 |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📋 Pre-Deployment Checklist
|
||
|
|
|
||
|
|
- [ ] SSH access to 192.168.10.130 configured
|
||
|
|
- [ ] Ubuntu server credentials ready
|
||
|
|
- [ ] Decided on PostgreSQL password
|
||
|
|
- [ ] Backed up current data (`data.json` exists)
|
||
|
|
- [ ] Read `POSTGRESQL_QUICK_START.md`
|
||
|
|
- [ ] Project files ready to transfer
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎬 Quick Start Commands
|
||
|
|
|
||
|
|
### Connect to Server
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
ssh username@192.168.10.130
|
||
|
|
```
|
||
|
|
|
||
|
|
### Transfer Files
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
scp -r "E:\Documents\Website Projects\Church_SongLyric" username@192.168.10.130:/tmp/
|
||
|
|
```
|
||
|
|
|
||
|
|
### Deploy
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo mv /tmp/Church_SongLyric /var/www/church-songlyric && \
|
||
|
|
cd /var/www/church-songlyric && \
|
||
|
|
chmod +x ubuntu-setup-postgresql.sh && \
|
||
|
|
./ubuntu-setup-postgresql.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
### Access Application
|
||
|
|
|
||
|
|
```
|
||
|
|
http://192.168.10.130
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🛠️ Post-Deployment
|
||
|
|
|
||
|
|
### Verify Everything Works
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Check service status
|
||
|
|
sudo systemctl status church-songlyric-backend
|
||
|
|
|
||
|
|
# Test API
|
||
|
|
curl http://192.168.10.130/api/health
|
||
|
|
|
||
|
|
# Check database
|
||
|
|
sudo -u postgres psql -d church_songlyric -c "\dt"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Management Commands
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Restart service
|
||
|
|
sudo systemctl restart church-songlyric-backend
|
||
|
|
|
||
|
|
# View logs
|
||
|
|
sudo journalctl -u church-songlyric-backend -f
|
||
|
|
|
||
|
|
# Database access
|
||
|
|
sudo -u postgres psql -d church_songlyric
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📊 Database Schema
|
||
|
|
|
||
|
|
### Tables
|
||
|
|
|
||
|
|
1. **songs** - Song lyrics and metadata (id, title, artist, lyrics, chords, etc.)
|
||
|
|
2. **profiles** - User/worship leader profiles (id, name, email, role)
|
||
|
|
3. **plans** - Worship service plans (id, title, date, notes)
|
||
|
|
4. **profile_songs** - Links profiles to favorite songs
|
||
|
|
5. **plan_songs** - Links songs to plans with order
|
||
|
|
|
||
|
|
All tables are auto-created by SQLAlchemy on first run.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔄 Data Migration
|
||
|
|
|
||
|
|
Your existing data will be automatically migrated from `data.json`:
|
||
|
|
|
||
|
|
- ✅ All songs with lyrics and chords
|
||
|
|
- ✅ All profiles
|
||
|
|
- ✅ Profile-song relationships (if any)
|
||
|
|
- ✅ Plans and plan-songs (if any)
|
||
|
|
|
||
|
|
The migration script (`migrate_to_postgresql.py`) is safe and idempotent:
|
||
|
|
|
||
|
|
- Won't duplicate data
|
||
|
|
- Can be run multiple times
|
||
|
|
- Reports what was created/updated
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ⚠️ Important Notes
|
||
|
|
|
||
|
|
### Port Change Impact
|
||
|
|
|
||
|
|
The backend now runs on **port 5100** (was 5000). This affects:
|
||
|
|
|
||
|
|
- API endpoint URLs
|
||
|
|
- Firewall rules
|
||
|
|
- Mobile device configurations
|
||
|
|
- Any external integrations
|
||
|
|
|
||
|
|
### Database Change Impact
|
||
|
|
|
||
|
|
Switched from MongoDB to PostgreSQL:
|
||
|
|
|
||
|
|
- Different query syntax (handled by SQLAlchemy)
|
||
|
|
- Better performance for relational data
|
||
|
|
- ACID compliance
|
||
|
|
- Standard SQL queries
|
||
|
|
|
||
|
|
### Current Limitation
|
||
|
|
|
||
|
|
The `backend/app.py` file has been updated with new imports, but **route handlers still need full conversion to use PostgreSQL**. The current code won't work until routes are updated.
|
||
|
|
|
||
|
|
**Two options:**
|
||
|
|
|
||
|
|
1. Keep using MongoDB version and convert gradually
|
||
|
|
2. Request a complete PostgreSQL version of app.py
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🆘 Troubleshooting
|
||
|
|
|
||
|
|
### Can't Connect to Server
|
||
|
|
|
||
|
|
```bash
|
||
|
|
ping 192.168.10.130
|
||
|
|
ssh -v username@192.168.10.130
|
||
|
|
```
|
||
|
|
|
||
|
|
### Service Won't Start
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo journalctl -u church-songlyric-backend -n 50
|
||
|
|
```
|
||
|
|
|
||
|
|
### Database Connection Failed
|
||
|
|
|
||
|
|
```bash
|
||
|
|
psql -h 192.168.10.130 -U songlyric_user -d church_songlyric
|
||
|
|
```
|
||
|
|
|
||
|
|
### Port Already in Use
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo netstat -tulpn | grep 5100
|
||
|
|
sudo lsof -i :5100
|
||
|
|
```
|
||
|
|
|
||
|
|
See **SSH_QUICK_REFERENCE.md** for more troubleshooting commands.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📚 Documentation Index
|
||
|
|
|
||
|
|
| Document | Purpose |
|
||
|
|
|----------|---------|
|
||
|
|
| **POSTGRESQL_QUICK_START.md** | ⭐ Start here for fast deployment |
|
||
|
|
| **POSTGRESQL_DEPLOYMENT_GUIDE.md** | Complete step-by-step guide |
|
||
|
|
| **SSH_QUICK_REFERENCE.md** | SSH commands and server management |
|
||
|
|
| **MIGRATION_STATUS.md** | Technical details of what changed |
|
||
|
|
| **README_POSTGRESQL.md** | This overview document |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ✅ Next Steps
|
||
|
|
|
||
|
|
1. **Review** `POSTGRESQL_QUICK_START.md`
|
||
|
|
2. **Connect** to Ubuntu server via SSH
|
||
|
|
3. **Transfer** project files to server
|
||
|
|
4. **Run** automated setup script
|
||
|
|
5. **Test** application at <http://192.168.10.130>
|
||
|
|
6. **Verify** data migration completed
|
||
|
|
7. **Configure** backups
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎉 You're Ready
|
||
|
|
|
||
|
|
Everything is prepared for deployment. The automated setup script will handle all the complex configuration.
|
||
|
|
|
||
|
|
**Estimated deployment time: 15-20 minutes**
|
||
|
|
|
||
|
|
### Get Started Now
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
# 1. Transfer files (from Windows)
|
||
|
|
scp -r "E:\Documents\Website Projects\Church_SongLyric" username@192.168.10.130:/tmp/
|
||
|
|
|
||
|
|
# 2. SSH and deploy (on Ubuntu)
|
||
|
|
ssh username@192.168.10.130
|
||
|
|
cd /var/www && sudo mv /tmp/Church_SongLyric church-songlyric
|
||
|
|
cd church-songlyric && chmod +x *.sh && ./ubuntu-setup-postgresql.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
**Questions?** See the documentation files listed above!
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Status**: ✅ Ready for Deployment
|
||
|
|
**Date**: December 7, 2025
|
||
|
|
**Target Server**: 192.168.10.130
|
||
|
|
**Port**: 5100
|
||
|
|
**Database**: PostgreSQL
|