290 lines
6.8 KiB
Markdown
290 lines
6.8 KiB
Markdown
|
|
# 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 ✅
|