# Quick Migration to Ubuntu Server

## Summary

Your Church Song Lyric application is now ready to migrate to Ubuntu server. All necessary files have been created.

## What's Been Created

### 📄 Documentation

- **UBUNTU_DEPLOYMENT_GUIDE.md** - Complete step-by-step deployment guide

### 🔧 Scripts

- **ubuntu-setup.sh** - Automated installation script (run first)
- **ubuntu-deploy.sh** - Quick deployment script (for updates)
- **ubuntu-services.sh** - Service management script

### ⚙️ Configuration Files

- **church-songlyric-backend.service** - Systemd service for backend
- **nginx-church-songlyric.conf** - Nginx HTTP configuration
- **nginx-church-songlyric-ssl.conf** - Nginx HTTPS configuration
- **backend/.env.ubuntu** - Backend environment template
- **frontend/.env.ubuntu** - Frontend environment template

---

## Quick Start (3 Steps)

### 1️⃣ Transfer Files to Ubuntu Server

From your Windows machine (PowerShell):

```powershell
# Replace with your server details
scp -r "E:\Documents\Website Projects\Church_SongLyric" username@your-server-ip:/tmp/
```

Or use WinSCP/FileZilla to transfer the entire folder.

### 2️⃣ Run Setup Script on Ubuntu

SSH into your Ubuntu server, then:

```bash
# Move files to installation directory
sudo mv /tmp/Church_SongLyric /var/www/church-songlyric
cd /var/www/church-songlyric

# Make scripts executable
chmod +x ubuntu-setup.sh ubuntu-deploy.sh ubuntu-services.sh

# Run the setup script
./ubuntu-setup.sh
```

The script will:

- Install all dependencies (Python, Node.js, Nginx, etc.)
- Create virtual environment
- Build the frontend
- Configure Nginx
- Create systemd services
- Set up firewall

### 3️⃣ Configure and Start

```bash
# Copy and edit environment file
cd /var/www/church-songlyric/backend
cp .env.ubuntu .env
nano .env
# Add your MongoDB URI and other settings

# Start services
sudo systemctl daemon-reload
sudo systemctl enable church-songlyric-backend
sudo systemctl start church-songlyric-backend
sudo systemctl restart nginx

# Check status
./ubuntu-services.sh status
```

---

## Access Your Application

- **HTTP**: `http://your-server-ip` or `http://your-domain.com`
- **HTTPS** (after SSL setup): `https://your-domain.com`

---

## Optional: Enable HTTPS

```bash
# Install Certbot
sudo apt install certbot python3-certbot-nginx -y

# Get SSL certificate (replace with your domain)
sudo certbot --nginx -d your-domain.com -d www.your-domain.com

# Auto-renewal is configured automatically
```

---

## Useful Commands

```bash
# Service management
./ubuntu-services.sh start    # Start all services
./ubuntu-services.sh stop     # Stop all services
./ubuntu-services.sh restart  # Restart all services
./ubuntu-services.sh status   # Check status
./ubuntu-services.sh logs     # View live logs

# Manual service commands
sudo systemctl status church-songlyric-backend
sudo systemctl restart church-songlyric-backend
sudo systemctl restart nginx

# View logs
sudo journalctl -u church-songlyric-backend -f
sudo tail -f /var/log/nginx/error.log

# Update application
cd /var/www/church-songlyric
git pull  # if using git
./ubuntu-deploy.sh
```

---

## MongoDB Setup

You need MongoDB for the application to work. Two options:

### Option A: MongoDB Atlas (Recommended)

1. Sign up at [https://www.mongodb.com/cloud/atlas/register](https://www.mongodb.com/cloud/atlas/register)
2. Create a FREE M0 cluster
3. Add your server's IP to IP whitelist (or 0.0.0.0/0 for all IPs)
4. Create a database user
5. Get connection string and add to `/var/www/church-songlyric/backend/.env`

Example:

```
MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/songlyric?retryWrites=true&w=majority
```

### Option B: Local MongoDB

```bash
# Install MongoDB on Ubuntu
sudo apt install mongodb -y
sudo systemctl start mongodb
sudo systemctl enable mongodb

# Use local connection string
MONGODB_URI=mongodb://localhost:27017/songlyric
```

---

## Migrate Existing Data

If you have an existing SQLite database (`app.db`):

```bash
# Copy app.db to server backend folder
cd /var/www/church-songlyric/backend
source venv/bin/activate
python migrate_to_mongodb.py
```

---

## Troubleshooting

### Backend won't start

```bash
sudo journalctl -u church-songlyric-backend -n 50
cd /var/www/church-songlyric/backend
source venv/bin/activate
python app.py  # Test manually
```

### Nginx errors

```bash
sudo nginx -t  # Test configuration
sudo tail -f /var/log/nginx/error.log
```

### MongoDB connection issues

```bash
cd /var/www/church-songlyric/backend
source venv/bin/activate
python -c "from mongodb_models import get_db; db = get_db(); print('Connected:', db.name)"
```

### Port already in use

```bash
sudo netstat -tulpn | grep 5000
sudo lsof -i :5000
```

### Permission errors

```bash
sudo chown -R www-data:www-data /var/www/church-songlyric
sudo chmod -R 755 /var/www/church-songlyric
```

---

## Security Checklist

- [ ] Change default passwords in `.env`
- [ ] Set strong `SECRET_KEY` in `.env`
- [ ] Configure firewall (only ports 22, 80, 443)
- [ ] Enable HTTPS with Let's Encrypt
- [ ] Restrict MongoDB IP whitelist
- [ ] Use SSH keys instead of passwords
- [ ] Keep system updated: `sudo apt update && sudo apt upgrade -y`
- [ ] Set up automatic backups for MongoDB

---

## Support Files Location

All configuration files are in your project root:

- `/var/www/church-songlyric/UBUNTU_DEPLOYMENT_GUIDE.md` - Full guide
- `/var/www/church-songlyric/ubuntu-setup.sh` - Setup script
- `/var/www/church-songlyric/ubuntu-services.sh` - Service manager

---

## Next Steps After Deployment

1. ✅ Test the application thoroughly
2. ✅ Set up HTTPS with Certbot
3. ✅ Configure automatic backups
4. ✅ Set up monitoring (optional)
5. ✅ Document your server credentials securely

---

**You're all set! Your Church Song Lyric system is ready for Ubuntu deployment.** 🎉

For detailed instructions, see **UBUNTU_DEPLOYMENT_GUIDE.md**
