285 lines
5.9 KiB
Markdown
285 lines
5.9 KiB
Markdown
|
|
# SSL and DNS Setup Guide
|
||
|
|
|
||
|
|
## Quick Deployment
|
||
|
|
|
||
|
|
To deploy the entire site with SSL and systemd services:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd /media/pts/Website/Church_HOP_MusicData/new-site
|
||
|
|
sudo ./deploy.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
This will:
|
||
|
|
|
||
|
|
- ✅ Install systemd services for backend and frontend
|
||
|
|
- ✅ Obtain SSL certificate from Let's Encrypt
|
||
|
|
- ✅ Configure Nginx as reverse proxy
|
||
|
|
- ✅ Set up automatic SSL renewal
|
||
|
|
- ✅ Enable services to start on boot
|
||
|
|
|
||
|
|
## Manual Setup
|
||
|
|
|
||
|
|
### Step 1: Install SSL Certificate Only
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd /media/pts/Website/Church_HOP_MusicData/new-site
|
||
|
|
sudo ./setup-ssl.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
### Step 2: Restart Backend with Updated CORS
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo systemctl restart church-music-backend
|
||
|
|
# OR manually:
|
||
|
|
cd /media/pts/Website/Church_HOP_MusicData/new-site/backend
|
||
|
|
pkill -f "node server.js"
|
||
|
|
nohup node server.js > /tmp/backend.log 2>&1 &
|
||
|
|
```
|
||
|
|
|
||
|
|
## Configuration Details
|
||
|
|
|
||
|
|
### Domain
|
||
|
|
|
||
|
|
- **DNS**: houseofprayer.ddns.net
|
||
|
|
- **HTTP**: Port 80 (redirects to HTTPS)
|
||
|
|
- **HTTPS**: Port 443 (SSL/TLS)
|
||
|
|
|
||
|
|
### Backend
|
||
|
|
|
||
|
|
- **Port**: 8080 (internal)
|
||
|
|
- **URL**: <https://houseofprayer.ddns.net/api/>
|
||
|
|
- **CORS**: Allows localhost and houseofprayer.ddns.net
|
||
|
|
|
||
|
|
### Frontend
|
||
|
|
|
||
|
|
- **Port**: 5100 (internal, Vite dev server)
|
||
|
|
- **URL**: <https://houseofprayer.ddns.net/>
|
||
|
|
- **Proxy**: Nginx forwards to localhost:5100
|
||
|
|
|
||
|
|
### SSL Certificate
|
||
|
|
|
||
|
|
- **Provider**: Let's Encrypt
|
||
|
|
- **Location**: `/etc/letsencrypt/live/houseofprayer.ddns.net/`
|
||
|
|
- **Renewal**: Automatic (daily at 3 AM)
|
||
|
|
- **Manual Renewal**: `sudo certbot renew`
|
||
|
|
|
||
|
|
## Service Management
|
||
|
|
|
||
|
|
### Start/Stop Services
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Backend
|
||
|
|
sudo systemctl start church-music-backend
|
||
|
|
sudo systemctl stop church-music-backend
|
||
|
|
sudo systemctl restart church-music-backend
|
||
|
|
sudo systemctl status church-music-backend
|
||
|
|
|
||
|
|
# Frontend
|
||
|
|
sudo systemctl start church-music-frontend
|
||
|
|
sudo systemctl stop church-music-frontend
|
||
|
|
sudo systemctl restart church-music-frontend
|
||
|
|
sudo systemctl status church-music-frontend
|
||
|
|
|
||
|
|
# Nginx
|
||
|
|
sudo systemctl start nginx
|
||
|
|
sudo systemctl stop nginx
|
||
|
|
sudo systemctl restart nginx
|
||
|
|
sudo systemctl status nginx
|
||
|
|
```
|
||
|
|
|
||
|
|
### View Logs
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Backend logs (real-time)
|
||
|
|
sudo journalctl -u church-music-backend -f
|
||
|
|
|
||
|
|
# Frontend logs (real-time)
|
||
|
|
sudo journalctl -u church-music-frontend -f
|
||
|
|
|
||
|
|
# Nginx access logs
|
||
|
|
sudo tail -f /var/log/nginx/church-music-access.log
|
||
|
|
|
||
|
|
# Nginx error logs
|
||
|
|
sudo tail -f /var/log/nginx/church-music-error.log
|
||
|
|
```
|
||
|
|
|
||
|
|
## Firewall Configuration
|
||
|
|
|
||
|
|
Make sure these ports are open:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Check current firewall status
|
||
|
|
sudo ufw status
|
||
|
|
|
||
|
|
# Allow HTTP (for Let's Encrypt)
|
||
|
|
sudo ufw allow 80/tcp
|
||
|
|
|
||
|
|
# Allow HTTPS
|
||
|
|
sudo ufw allow 443/tcp
|
||
|
|
|
||
|
|
# Allow SSH (if not already)
|
||
|
|
sudo ufw allow 22/tcp
|
||
|
|
|
||
|
|
# Enable firewall
|
||
|
|
sudo ufw enable
|
||
|
|
```
|
||
|
|
|
||
|
|
## Router Port Forwarding
|
||
|
|
|
||
|
|
Ensure your router forwards these ports to this server:
|
||
|
|
|
||
|
|
- **Port 80** → Internal IP:80 (HTTP)
|
||
|
|
- **Port 443** → Internal IP:443 (HTTPS)
|
||
|
|
|
||
|
|
## Testing
|
||
|
|
|
||
|
|
### 1. Test SSL Certificate
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Check certificate validity
|
||
|
|
sudo certbot certificates
|
||
|
|
|
||
|
|
# Test SSL configuration
|
||
|
|
curl -I https://houseofprayer.ddns.net
|
||
|
|
|
||
|
|
# Check SSL rating
|
||
|
|
# Visit: https://www.ssllabs.com/ssltest/analyze.html?d=houseofprayer.ddns.net
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Test API Endpoints
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Test backend API
|
||
|
|
curl https://houseofprayer.ddns.net/api/stats
|
||
|
|
|
||
|
|
# Test login
|
||
|
|
curl -X POST https://houseofprayer.ddns.net/api/auth/login \
|
||
|
|
-H "Content-Type: application/json" \
|
||
|
|
-d '{"username":"hop","password":"hopmusic2025"}'
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Test from Browser
|
||
|
|
|
||
|
|
Open: <https://houseofprayer.ddns.net>
|
||
|
|
|
||
|
|
Expected:
|
||
|
|
|
||
|
|
- ✅ Valid SSL certificate (green padlock)
|
||
|
|
- ✅ Login page appears
|
||
|
|
- ✅ Can log in with credentials
|
||
|
|
- ✅ All features work normally
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### SSL Certificate Issues
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Check if certificate exists
|
||
|
|
ls -la /etc/letsencrypt/live/houseofprayer.ddns.net/
|
||
|
|
|
||
|
|
# Verify DNS is pointing to this server
|
||
|
|
nslookup houseofprayer.ddns.net
|
||
|
|
|
||
|
|
# Test port 80 accessibility
|
||
|
|
curl -I http://houseofprayer.ddns.net
|
||
|
|
|
||
|
|
# Force certificate renewal
|
||
|
|
sudo certbot renew --force-renewal
|
||
|
|
```
|
||
|
|
|
||
|
|
### Service Won't Start
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Check service status
|
||
|
|
sudo systemctl status church-music-backend
|
||
|
|
|
||
|
|
# View recent logs
|
||
|
|
sudo journalctl -u church-music-backend -n 50
|
||
|
|
|
||
|
|
# Check if port is already in use
|
||
|
|
sudo lsof -i:8080
|
||
|
|
sudo lsof -i:5100
|
||
|
|
|
||
|
|
# Manually test backend
|
||
|
|
cd /media/pts/Website/Church_HOP_MusicData/new-site/backend
|
||
|
|
node server.js
|
||
|
|
```
|
||
|
|
|
||
|
|
### Nginx Issues
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Test Nginx configuration
|
||
|
|
sudo nginx -t
|
||
|
|
|
||
|
|
# View Nginx error log
|
||
|
|
sudo tail -f /var/log/nginx/error.log
|
||
|
|
|
||
|
|
# Reload Nginx configuration
|
||
|
|
sudo systemctl reload nginx
|
||
|
|
```
|
||
|
|
|
||
|
|
### Can't Access from Outside
|
||
|
|
|
||
|
|
1. **Check DNS**: `nslookup houseofprayer.ddns.net`
|
||
|
|
2. **Check router port forwarding**: Ports 80 and 443
|
||
|
|
3. **Check firewall**: `sudo ufw status`
|
||
|
|
4. **Check if ports are listening**: `sudo netstat -tlnp | grep -E ':(80|443)'`
|
||
|
|
5. **Test from external site**: <https://www.isitdownrightnow.com/houseofprayer.ddns.net.html>
|
||
|
|
|
||
|
|
## Security Recommendations
|
||
|
|
|
||
|
|
### 1. Change Default Passwords
|
||
|
|
|
||
|
|
Update all user passwords from defaults in [CREDENTIALS.md](CREDENTIALS.md)
|
||
|
|
|
||
|
|
### 2. Enable Production CORS
|
||
|
|
|
||
|
|
Edit `backend/server.js` and restrict CORS to only your domain
|
||
|
|
|
||
|
|
### 3. Rate Limiting
|
||
|
|
|
||
|
|
Already enabled (1000 requests per 15 minutes)
|
||
|
|
|
||
|
|
### 4. Keep System Updated
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Update packages
|
||
|
|
sudo apt update && sudo apt upgrade -y
|
||
|
|
|
||
|
|
# Update Node.js packages
|
||
|
|
cd /media/pts/Website/Church_HOP_MusicData/new-site/backend
|
||
|
|
npm update
|
||
|
|
|
||
|
|
cd /media/pts/Website/Church_HOP_MusicData/new-site/frontend
|
||
|
|
npm update
|
||
|
|
```
|
||
|
|
|
||
|
|
### 5. Monitor Logs Regularly
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Set up log rotation (already configured by systemd)
|
||
|
|
# Check logs weekly for suspicious activity
|
||
|
|
sudo journalctl -u church-music-backend --since "1 week ago" | grep -i error
|
||
|
|
```
|
||
|
|
|
||
|
|
## Backup SSL Certificates
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Backup certificates
|
||
|
|
sudo tar -czf ~/letsencrypt-backup-$(date +%Y%m%d).tar.gz /etc/letsencrypt/
|
||
|
|
|
||
|
|
# Restore certificates (if needed)
|
||
|
|
sudo tar -xzf ~/letsencrypt-backup-YYYYMMDD.tar.gz -C /
|
||
|
|
```
|
||
|
|
|
||
|
|
## Additional Resources
|
||
|
|
|
||
|
|
- **Let's Encrypt**: <https://letsencrypt.org/>
|
||
|
|
- **Nginx Documentation**: <https://nginx.org/en/docs/>
|
||
|
|
- **Certbot**: <https://certbot.eff.org/>
|
||
|
|
- **SSL Labs Test**: <https://www.ssllabs.com/ssltest/>
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
Last Updated: January 25, 2026
|