Initial commit - Church Music Database

This commit is contained in:
2026-01-27 18:04:50 -06:00
commit d367261867
336 changed files with 103545 additions and 0 deletions

View File

@@ -0,0 +1,486 @@
# PostgreSQL Ubuntu Server Deployment Guide
## Overview
This guide will help you deploy the Church Song Lyric application to your Ubuntu server at **192.168.10.130** using **PostgreSQL** database on port **5100**.
## Prerequisites
- Ubuntu Server 20.04+ at 192.168.10.130 with sudo access
- SSH access configured
- Minimum 2GB RAM, 2 CPU cores, 20GB disk space
---
## Step 1: Connect to Ubuntu Server
From your Windows machine:
```powershell
ssh username@192.168.10.130
```
---
## Step 2: Install PostgreSQL
```bash
# Update system
sudo apt update && sudo apt upgrade -y
# Install PostgreSQL
sudo apt install postgresql postgresql-contrib -y
# Start and enable PostgreSQL
sudo systemctl start postgresql
sudo systemctl enable postgresql
# Check status
sudo systemctl status postgresql
```
---
## Step 3: Create PostgreSQL Database and User
```bash
# Switch to postgres user
sudo -u postgres psql
# In PostgreSQL prompt, run these commands:
CREATE DATABASE church_songlyric;
CREATE USER songlyric_user WITH ENCRYPTED PASSWORD 'your_secure_password_here';
GRANT ALL PRIVILEGES ON DATABASE church_songlyric TO songlyric_user;
# For PostgreSQL 15+, also grant schema privileges:
\c church_songlyric
GRANT ALL ON SCHEMA public TO songlyric_user;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO songlyric_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO songlyric_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO songlyric_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO songlyric_user;
# Exit psql
\q
```
---
## Step 4: Configure PostgreSQL for Network Access
```bash
# Edit PostgreSQL configuration
sudo nano /etc/postgresql/*/main/postgresql.conf
# Find and uncomment/modify this line:
listen_addresses = '*'
# Save and exit (Ctrl+X, Y, Enter)
# Edit pg_hba.conf to allow connections
sudo nano /etc/postgresql/*/main/pg_hba.conf
# Add this line at the end:
host church_songlyric songlyric_user 192.168.10.0/24 md5
# Save and exit
# Restart PostgreSQL
sudo systemctl restart postgresql
```
---
## Step 5: Transfer Project Files
From your Windows machine (PowerShell):
```powershell
# Transfer entire project
scp -r "E:\Documents\Website Projects\Church_SongLyric" username@192.168.10.130:/tmp/
# Or use WinSCP/FileZilla
```
---
## Step 6: Setup Project on Ubuntu
SSH to the server and run:
```bash
# Move project to installation directory
sudo mkdir -p /var/www
sudo mv /tmp/Church_SongLyric /var/www/church-songlyric
cd /var/www/church-songlyric
# Set ownership
sudo chown -R $USER:www-data .
sudo chmod -R 755 .
# Make scripts executable
chmod +x *.sh
```
---
## Step 7: Install System Dependencies
```bash
sudo apt install -y \
python3 \
python3-pip \
python3-venv \
python3-dev \
libpq-dev \
nodejs \
npm \
nginx \
git \
curl \
ufw \
tesseract-ocr \
poppler-utils \
libtesseract-dev \
libleptonica-dev
```
---
## Step 8: Setup Backend
```bash
cd /var/www/church-songlyric/backend
# Create virtual environment
python3 -m venv venv
# Activate virtual environment
source venv/bin/activate
# Upgrade pip
pip install --upgrade pip
# Install Python dependencies
pip install -r requirements.txt
# Create .env file
nano .env
```
Add this to `.env`:
```env
# PostgreSQL connection
POSTGRESQL_URI=postgresql://songlyric_user:your_secure_password_here@192.168.10.130:5432/church_songlyric
# Flask configuration
FLASK_PORT=5100
FLASK_ENV=production
SECRET_KEY=change-this-to-a-random-secret-key-min-32-chars
# Allowed origins
ALLOWED_ORIGINS=http://192.168.10.130,http://192.168.10.178:3000
# Optional API tokens
GENIUS_TOKEN=your_genius_token_if_needed
```
Save and exit (Ctrl+X, Y, Enter)
---
## Step 9: Migrate Data to PostgreSQL
```bash
# Still in backend folder with venv activated
cd /var/www/church-songlyric/backend
source venv/bin/activate
# Run migration script
python migrate_to_postgresql.py
# This will migrate data from data.json to PostgreSQL
```
---
## Step 10: Test Backend
```bash
# Test the backend
python app.py
# Should show:
# * Running on http://0.0.0.0:5100
# Open another terminal and test:
curl http://192.168.10.130:5100/api/health
# Should return: {"status":"ok","ts":"..."}
# Stop the test server (Ctrl+C)
```
---
## Step 11: Setup Frontend
```bash
cd /var/www/church-songlyric/frontend
# Install dependencies
npm install
# Update .env.production
nano .env.production
```
Add:
```env
REACT_APP_API_URL=http://192.168.10.130/api
GENERATE_SOURCEMAP=false
```
Save and build:
```bash
npm run build
```
---
## Step 12: Create Systemd Service
```bash
sudo nano /etc/systemd/system/church-songlyric-backend.service
```
Paste:
```ini
[Unit]
Description=Church Song Lyric Backend (Flask)
After=network.target postgresql.service
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/var/www/church-songlyric/backend
Environment="PATH=/var/www/church-songlyric/backend/venv/bin"
ExecStart=/var/www/church-songlyric/backend/venv/bin/python app.py
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
```
Save and enable:
```bash
sudo systemctl daemon-reload
sudo systemctl enable church-songlyric-backend
sudo systemctl start church-songlyric-backend
sudo systemctl status church-songlyric-backend
```
---
## Step 13: Configure Nginx
```bash
sudo nano /etc/nginx/sites-available/church-songlyric
```
Paste:
```nginx
server {
listen 80;
server_name 192.168.10.130;
# Serve React frontend
root /var/www/church-songlyric/frontend/build;
index index.html;
# Frontend routing
location / {
try_files $uri $uri/ /index.html;
}
# Proxy API requests to Flask backend
location /api {
proxy_pass http://localhost:5100;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Increase timeouts
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
# Static file caching
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
client_max_body_size 50M;
}
```
Enable and restart:
```bash
sudo ln -sf /etc/nginx/sites-available/church-songlyric /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl restart nginx
```
---
## Step 14: Configure Firewall
```bash
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw allow 5432/tcp # PostgreSQL
sudo ufw enable
sudo ufw status
```
---
## Step 15: Verify Deployment
### Check services
```bash
sudo systemctl status church-songlyric-backend
sudo systemctl status nginx
sudo systemctl status postgresql
```
### Test API
```bash
curl http://192.168.10.130/api/health
```
### Access from browser
Open: `http://192.168.10.130`
---
## Troubleshooting
### Backend won't start
```bash
sudo journalctl -u church-songlyric-backend -n 50 --no-pager
```
### PostgreSQL connection issues
```bash
# Test connection
psql -h 192.168.10.130 -U songlyric_user -d church_songlyric
# Check if PostgreSQL is listening
sudo netstat -tulpn | grep 5432
```
### Port conflicts
```bash
# Check if port 5100 is in use
sudo netstat -tulpn | grep 5100
```
### Permission errors
```bash
sudo chown -R www-data:www-data /var/www/church-songlyric
```
---
## Management Commands
```bash
# Service management
sudo systemctl start church-songlyric-backend
sudo systemctl stop church-songlyric-backend
sudo systemctl restart church-songlyric-backend
sudo systemctl status church-songlyric-backend
# View logs
sudo journalctl -u church-songlyric-backend -f
# PostgreSQL management
sudo -u postgres psql
\c church_songlyric
\dt # List tables
SELECT * FROM songs LIMIT 5;
```
---
## Backup PostgreSQL Database
```bash
# Backup
pg_dump -h 192.168.10.130 -U songlyric_user -d church_songlyric > backup.sql
# Restore
psql -h 192.168.10.130 -U songlyric_user -d church_songlyric < backup.sql
```
---
## Update Application
```bash
# Transfer new files via SCP
# Then on server:
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
```
---
## Success! 🎉
Your Church Song Lyric application is now running on:
- **URL**: <http://192.168.10.130>
- **API**: <http://192.168.10.130/api>
- **Port**: 5100 (backend)
- **Database**: PostgreSQL on 192.168.10.130:5432