Files
Church-Music/legacy-site/documentation/md-files/MIGRATION_STATUS.md

290 lines
6.8 KiB
Markdown
Raw Normal View History

2026-01-27 18:04:50 -06:00
# Migration Complete - PostgreSQL on Port 5100
## ✅ What's Been Done
### 1. **Database Migration: MongoDB → PostgreSQL**
- ✅ Created `postgresql_models.py` with SQLAlchemy models
- ✅ Created `migrate_to_postgresql.py` migration script
- ✅ Updated `requirements.txt` (removed pymongo, added SQLAlchemy + psycopg2-binary)
- ✅ Dependencies installed and tested locally
### 2. **Port Change: 5000 → 5100**
- ✅ Updated all backend configuration files
- ✅ Updated frontend proxy in `package.json`
- ✅ Updated deployment scripts
- ✅ Updated documentation
### 3. **Server Configuration: 192.168.10.130**
- ✅ Created deployment scripts for Ubuntu server
- ✅ Updated CORS origins to include server IP
- ✅ Created automated setup script
### 4. **Documentation Created**
-`POSTGRESQL_DEPLOYMENT_GUIDE.md` - Complete step-by-step guide
-`POSTGRESQL_QUICK_START.md` - Quick reference
-`ubuntu-setup-postgresql.sh` - Automated setup script
---
## 📋 Files Changed
### Backend Files
```
backend/postgresql_models.py [NEW] - PostgreSQL models
backend/migrate_to_postgresql.py [NEW] - Data migration script
backend/requirements.txt [UPDATED] - PostgreSQL dependencies
backend/.env [UPDATED] - Port 5100, PostgreSQL URI
backend/.env.example [UPDATED] - New template
backend/.env.ubuntu [UPDATED] - Ubuntu config
backend/app.py [UPDATED] - Import changes (routes need update)
```
### Frontend Files
```
frontend/package.json [UPDATED] - Proxy to port 5100
frontend/.env.ubuntu [UPDATED] - API URL config
```
### Deployment Files
```
ubuntu-setup-postgresql.sh [NEW] - Automated setup
POSTGRESQL_DEPLOYMENT_GUIDE.md [NEW] - Complete guide
POSTGRESQL_QUICK_START.md [NEW] - Quick reference
```
---
## ⚠️ Important: app.py Routes Need Conversion
The `backend/app.py` file has been partially updated with new imports, but **all the route handlers still use MongoDB syntax**.
### What Needs to be Done
You have two options:
#### Option A: Gradual Conversion (Recommended)
Keep the current MongoDB-based `app.py` and gradually convert routes one by one after testing the infrastructure.
#### Option B: Complete Rewrite
Create a new `app.py` that fully uses PostgreSQL. This is more work but cleaner.
### Route Conversion Example
**MongoDB (Old)**:
```python
@app.route('/api/songs', methods=['GET'])
def songs():
items = list(db.songs.find())
return jsonify([SongDocument.to_dict(s) for s in items])
```
**PostgreSQL (New)**:
```python
@app.route('/api/songs', methods=['GET'])
def songs():
db = get_db()
items = get_all_songs(db)
return jsonify([s.to_dict() for s in items])
db.close()
```
---
## 🚀 Next Steps
### On Your Local Machine (Windows)
1. **Test the PostgreSQL models** (Already done ✅)
2. **Update environment variables**:
```powershell
# Edit backend/.env
# Change POSTGRESQL_URI to point to your Ubuntu server after setup
```
3. **Decide on app.py conversion**:
- Either keep MongoDB version and convert gradually
- Or request a complete PostgreSQL version now
### On Ubuntu Server (192.168.10.130)
1. **SSH to the server**:
```bash
ssh username@192.168.10.130
```
2. **Transfer files**:
```powershell
# From Windows
scp -r "E:\Documents\Website Projects\Church_SongLyric" username@192.168.10.130:/tmp/
```
3. **Run setup script**:
```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
```
The script will:
- Install PostgreSQL
- Create database and user: `church_songlyric` / `songlyric_user`
- Install all system dependencies
- Setup Python virtual environment
- Build frontend
- Create systemd service
- Configure Nginx
- Migrate your data
- Start services
4. **Access the application**:
```
http://192.168.10.130
```
---
## 🔧 Configuration Summary
### Database
- **Type**: PostgreSQL
- **Host**: 192.168.10.130
- **Port**: 5432
- **Database**: church_songlyric
- **User**: songlyric_user
- **Connection**: `postgresql://songlyric_user:password@192.168.10.130:5432/church_songlyric`
### Backend
- **Port**: 5100 (changed from 5000)
- **Host**: 0.0.0.0 (listens on all interfaces)
- **API Base**: <http://192.168.10.130:5100/api>
### Frontend
- **Served via**: Nginx on port 80
- **Build folder**: /var/www/church-songlyric/frontend/build
- **Access**: <http://192.168.10.130>
### Services
- **Backend**: `church-songlyric-backend.service`
- **Database**: PostgreSQL system service
- **Web server**: Nginx
---
## 📊 Database Schema
### Tables Created
1. **songs** - Song lyrics and metadata
2. **profiles** - User/worship leader profiles
3. **plans** - Worship service plans
4. **profile_songs** - Links profiles to favorite songs
5. **plan_songs** - Links songs to plans in order
All tables are automatically created by SQLAlchemy on first run.
---
## 🛠️ Management Commands
### Service Management
```bash
sudo systemctl status church-songlyric-backend
sudo systemctl restart church-songlyric-backend
sudo systemctl stop church-songlyric-backend
sudo journalctl -u church-songlyric-backend -f
```
### Database Management
```bash
# Connect to database
sudo -u postgres psql
\c church_songlyric
# List tables
\dt
# Query songs
SELECT id, title, artist FROM songs LIMIT 10;
# Backup database
pg_dump -U songlyric_user -h 192.168.10.130 church_songlyric > backup.sql
```
### Application Updates
```bash
cd /var/www/church-songlyric
# Update backend
cd backend
source venv/bin/activate
pip install -r requirements.txt
sudo systemctl restart church-songlyric-backend
# Update frontend
cd ../frontend
npm install
npm run build
sudo systemctl reload nginx
```
---
## ✅ Pre-Deployment Checklist
- [ ] SSH access to 192.168.10.130 configured
- [ ] Ubuntu server has sudo privileges
- [ ] Project files ready to transfer
- [ ] Decided on database password
- [ ] Backed up current data (data.json exists)
- [ ] Reviewed POSTGRESQL_DEPLOYMENT_GUIDE.md
---
## 🎯 Ready to Deploy
Everything is prepared for PostgreSQL deployment on your Ubuntu server at **192.168.10.130** on port **5100**.
### Quick Deploy Command
```bash
ssh username@192.168.10.130
# Then transfer files and run ubuntu-setup-postgresql.sh
```
### Need Help?
- See `POSTGRESQL_DEPLOYMENT_GUIDE.md` for detailed steps
- See `POSTGRESQL_QUICK_START.md` for quick reference
---
**Status**: Ready for Ubuntu server deployment ✅
**Database**: PostgreSQL ✅
**Port**: 5100 ✅
**Server IP**: 192.168.10.130 ✅