# Quick SSH Commands for Ubuntu Server Deployment

## Connect to Server

```powershell
ssh username@192.168.10.130
```

Replace `username` with your actual Ubuntu username.

---

## Transfer Files to Server

### Method 1: SCP (Recommended)

```powershell
# From Windows PowerShell
scp -r "E:\Documents\Website Projects\Church_SongLyric" username@192.168.10.130:/tmp/
```

### Method 2: rsync (if available)

```powershell
rsync -avz --progress "E:\Documents\Website Projects\Church_SongLyric/" username@192.168.10.130:/tmp/Church_SongLyric/
```

### Method 3: WinSCP (GUI)

1. Download WinSCP from <https://winscp.net>
2. Connect to 192.168.10.130
3. Drag and drop the Church_SongLyric folder

---

## One-Line Deployment

After SSH'ing to the server:

```bash
sudo mv /tmp/Church_SongLyric /var/www/church-songlyric && cd /var/www/church-songlyric && chmod +x *.sh && ./ubuntu-setup-postgresql.sh
```

---

## Troubleshooting SSH

### Can't Connect

```powershell
# Test if server is reachable
ping 192.168.10.130

# Test if SSH port is open
Test-NetConnection -ComputerName 192.168.10.130 -Port 22
```

### Permission Denied

```bash
# On Ubuntu server, ensure SSH is running
sudo systemctl status ssh
sudo systemctl start ssh
```

### SSH Keys (Optional Setup)

```powershell
# Generate SSH key on Windows (if not exists)
ssh-keygen -t ed25519

# Copy key to server
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh username@192.168.10.130 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

# Now you can connect without password
ssh username@192.168.10.130
```

---

## Quick Commands After Connection

```bash
# Check system info
uname -a
lsb_release -a

# Check disk space
df -h

# Check memory
free -h

# Check if PostgreSQL is installed
psql --version

# Check if Python3 is installed
python3 --version

# Check if Node.js is installed
node --version
```

---

## Post-Deployment Verification

```bash
# Check service status
sudo systemctl status church-songlyric-backend

# View logs
sudo journalctl -u church-songlyric-backend -n 50

# Test API
curl http://192.168.10.130:5100/api/health

# Test via Nginx
curl http://192.168.10.130/api/health

# Check PostgreSQL
sudo -u postgres psql -c "\l" | grep church_songlyric
```

---

## Common Management Tasks

### Restart Services

```bash
sudo systemctl restart church-songlyric-backend
sudo systemctl restart nginx
sudo systemctl restart postgresql
```

### View Live Logs

```bash
# Backend logs
sudo journalctl -u church-songlyric-backend -f

# Nginx access logs
sudo tail -f /var/log/nginx/access.log

# Nginx error logs
sudo tail -f /var/log/nginx/error.log
```

### Database Access

```bash
# Connect to PostgreSQL
sudo -u postgres psql

# Or directly to your database
sudo -u postgres psql -d church_songlyric

# List all tables
\dt

# Exit
\q
```

### Update Application

```bash
# After transferring new files to /tmp/
cd /var/www/church-songlyric
sudo rm -rf backend frontend  # Backup first!
sudo cp -r /tmp/Church_SongLyric/* .
sudo chown -R www-data:www-data .

# Rebuild
cd frontend
npm install
npm run build

cd ../backend
source venv/bin/activate
pip install -r requirements.txt

# Restart
sudo systemctl restart church-songlyric-backend
```

---

## Emergency Commands

### Stop Everything

```bash
sudo systemctl stop church-songlyric-backend
sudo systemctl stop nginx
```

### Check Port Usage

```bash
# Check if port 5100 is in use
sudo netstat -tulpn | grep 5100

# Check who's using port 5100
sudo lsof -i :5100
```

### Kill Process on Port

```bash
# Find process
sudo lsof -i :5100

# Kill it (replace PID with actual process ID)
sudo kill -9 PID
```

### Database Backup

```bash
# Quick backup
pg_dump -h 192.168.10.130 -U songlyric_user -d church_songlyric > ~/backup_$(date +%Y%m%d_%H%M%S).sql

# Restore from backup
psql -h 192.168.10.130 -U songlyric_user -d church_songlyric < ~/backup_file.sql
```

---

## Server Maintenance

### Update System

```bash
sudo apt update
sudo apt upgrade -y
sudo apt autoremove -y
```

### Check Disk Space

```bash
df -h
du -sh /var/www/church-songlyric
```

### Monitor Resources

```bash
# CPU and memory usage
htop

# Or simpler
top

# Disk I/O
iotop
```

---

## Security

### Firewall Status

```bash
sudo ufw status verbose
```

### Add Firewall Rules

```bash
sudo ufw allow 5100/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
```

### Check Failed Login Attempts

```bash
sudo grep "Failed password" /var/log/auth.log | tail -20
```

---

**Quick Reference Card** - Print or save this for easy access!
