12 KiB
No-IP Setup Guide for House of Prayer Song Lyric App
Domain: houseofprayer.ddns.net
Date: November 30, 2025
Public IP: 170.254.17.146
Local IP: 192.168.10.178
📋 Overview
This guide will help you configure No-IP Dynamic DNS so your church song lyric application can be accessed from anywhere using houseofprayer.ddns.net.
🎯 What You'll Achieve
- Before: App only accessible on local network (192.168.10.178:3000)
- After: App accessible worldwide at https://houseofprayer.ddns.net:3000
📦 Step 1: Install No-IP Dynamic Update Client (DUC)
Download and Install
-
Visit No-IP Website:
- Go to: https://www.noip.com/download
- Download "Dynamic Update Client (DUC) for Windows"
-
Run Installer:
- Execute the downloaded file (e.g.,
DUC-Win-x64.exe) - Follow installation wizard
- Choose installation directory (default:
C:\Program Files (x86)\No-IP\)
- Execute the downloaded file (e.g.,
-
Launch No-IP DUC:
- Open from Start Menu or desktop shortcut
- Login with your No-IP credentials (same as website login)
Configure DUC
-
Select Hostname:
- In the DUC interface, you should see:
houseofprayer.ddns.net - Check the box next to it to enable automatic updates
- In the DUC interface, you should see:
-
Configure Update Interval:
- Set to update every 5 minutes (recommended)
- This ensures your domain always points to your current public IP
-
Set to Run on Startup:
- In DUC settings, enable "Start on Windows Startup"
- This ensures your domain stays updated even after PC restarts
-
Verify Status:
- DUC should show: ✓ "Up to Date" in green
- Public IP should match:
170.254.17.146
🌐 Step 2: Configure Router Port Forwarding
Why Port Forwarding?
Your router acts as a gateway between the internet and your home network. Port forwarding tells the router to direct external traffic to your PC.
Access Router Settings
-
Open Router Admin Page:
- In browser, go to:
http://192.168.1.1(or192.168.0.1) - Common router IPs:
- Netgear: 192.168.1.1
- TP-Link: 192.168.0.1
- Linksys: 192.168.1.1
- ASUS: 192.168.1.1
- In browser, go to:
-
Login:
- Use your router admin username/password
- Default credentials (if never changed):
- Username:
admin - Password:
adminorpassword(check router label)
- Username:
Create Port Forwarding Rules
Navigate to: Advanced > Port Forwarding (or similar menu)
Rule 1: Frontend (React App)
Service Name: Church_Frontend
Internal IP: 192.168.10.178 (your PC's local IP)
External Port: 3000
Internal Port: 3000
Protocol: TCP
Status: Enabled
Rule 2: Backend API
Service Name: Church_Backend
Internal IP: 192.168.10.178
External Port: 5000
Internal Port: 5000
Protocol: TCP
Status: Enabled
Optional Rule 3: HTTPS (if using SSL later)
Service Name: Church_HTTPS
Internal IP: 192.168.10.178
External Port: 443
Internal Port: 443
Protocol: TCP
Status: Enabled
Important Notes
- Save/Apply changes after adding rules
- Some routers require a reboot
- Your PC must use a static local IP (192.168.10.178) or DHCP reservation
🔧 Step 3: Update Backend Configuration
Update Flask Backend to Accept External Connections
Your backend currently binds to localhost or 0.0.0.0. For external access, ensure it's binding to 0.0.0.0.
File: backend/app.py
Check the last lines of the file (around line 640):
if __name__ == '__main__':
app.run(
host='0.0.0.0', # ✓ Allows external connections
port=5000,
debug=True
)
If it says host='127.0.0.1' or host='localhost', change it to host='0.0.0.0'.
Update CORS Settings (if needed)
Check that CORS allows your domain:
# In app.py, near the top
from flask_cors import CORS
CORS(app, resources={
r"/api/*": {
"origins": [
"http://localhost:3000",
"http://192.168.10.178:3000",
"http://houseofprayer.ddns.net:3000",
"https://houseofprayer.ddns.net:3000"
]
}
})
🌍 Step 4: Update Frontend API Configuration
Update the frontend to use your No-IP domain for external access.
File: frontend/src/api.js
The frontend should detect whether it's running locally or externally and use the appropriate API endpoint.
Option A: Manual Configuration
In Settings page, users can configure:
- Protocol:
https(if SSL) orhttp - Hostname:
houseofprayer.ddns.net - Port:
5000
Option B: Auto-Detection (Recommended)
Update getAPIBase() in frontend/src/api.js to detect environment:
function getAPIBase() {
const settings = getAPISettings();
if (settings.useLocalStorage) return null;
// Auto-detect if accessing via No-IP domain
if (window.location.hostname === 'houseofprayer.ddns.net') {
return `https://houseofprayer.ddns.net:5000/api`;
}
// Otherwise use configured settings
return `${settings.protocol}://${settings.hostname}:${settings.port}/api`;
}
🔒 Step 5: Windows Firewall Configuration
Ensure Windows Firewall allows incoming connections on ports 3000 and 5000.
Create Firewall Rules
Run these commands in PowerShell as Administrator:
# Allow Frontend (Port 3000)
New-NetFirewallRule -DisplayName "Church App Frontend" -Direction Inbound -LocalPort 3000 -Protocol TCP -Action Allow
# Allow Backend (Port 5000)
New-NetFirewallRule -DisplayName "Church App Backend" -Direction Inbound -LocalPort 5000 -Protocol TCP -Action Allow
Verify Rules
Get-NetFirewallRule | Where-Object { $_.DisplayName -like "*Church*" }
🧪 Step 6: Testing External Access
Test from Inside Network
- Open browser on your PC:
- Go to:
http://houseofprayer.ddns.net:3000 - Should see the app (if DUC is working)
- Go to:
Test from Outside Network
Use mobile data (turn off WiFi on phone) or ask someone outside your network:
-
Test Backend API:
- Visit:
http://houseofprayer.ddns.net:5000/api/health - Should see:
{"status":"ok","ts":"..."}
- Visit:
-
Test Frontend:
- Visit:
http://houseofprayer.ddns.net:3000 - Should load the app
- Try selecting a profile and viewing songs
- Visit:
Troubleshooting Tests
If external access doesn't work:
# Check if ports are listening
netstat -an | Select-String ":3000|:5000"
# Should show:
# TCP 0.0.0.0:3000 0.0.0.0:0 LISTENING
# TCP 0.0.0.0:5000 0.0.0.0:0 LISTENING
🔐 Step 7: Security Considerations
Current Setup (HTTP)
- Pros: Easy to set up, works immediately
- Cons: Data transmitted in plain text (not encrypted)
Recommended: Add HTTPS (SSL/TLS)
For secure access, you should add SSL certificates:
-
Get Free SSL Certificate:
- Use Let's Encrypt (free, automated)
- Or use Cloudflare (free proxy + SSL)
-
Install Certificate:
- Configure Flask to use SSL
- Update frontend URLs to
https://
-
Redirect HTTP → HTTPS:
- Force all traffic to use HTTPS
Basic Security Measures
-
Add Authentication:
- Require login before accessing app
- Use session tokens or JWT
-
Rate Limiting:
- Prevent abuse by limiting API requests
- Use Flask-Limiter extension
-
Keep Updated:
- Regularly update dependencies
- Monitor for security vulnerabilities
📱 Step 8: Update Mobile Access Instructions
Once No-IP is configured, update how family members access the app:
For Users at Home (Same WiFi)
- Use local IP:
http://192.168.10.178:3000 - Faster, no internet required
For Users Outside Home
- Use No-IP domain:
http://houseofprayer.ddns.net:3000 - Works from anywhere with internet
For All Users (Universal URL)
- Use No-IP domain everywhere:
http://houseofprayer.ddns.net:3000 - Works both inside and outside home network
🔄 Step 9: Automatic Startup Configuration
Backend Auto-Start
Create a Windows Task Scheduler task or startup script:
File: backend/start-backend.bat
@echo off
cd /d "E:\Documents\Website Projects\Church_SongLyric\backend"
call venv\Scripts\activate
python app.py
Add to Windows Startup:
- Press
Win + R - Type:
shell:startup - Create shortcut to
start-backend.bat
Frontend Auto-Start
File: frontend/start-frontend.bat
@echo off
cd /d "E:\Documents\Website Projects\Church_SongLyric\frontend"
npm start
📊 Verification Checklist
Use this checklist to ensure everything is configured correctly:
✅ No-IP DUC
- DUC installed and running
- Logged in with No-IP account
houseofprayer.ddns.netselected and enabled- Status shows "Up to Date" (green)
- Public IP matches current IP (170.254.17.146)
- Set to start on Windows startup
✅ Router Configuration
- Port 3000 forwarded to 192.168.10.178
- Port 5000 forwarded to 192.168.10.178
- Rules saved and applied
- Router rebooted (if required)
✅ Windows Firewall
- Port 3000 inbound rule created
- Port 5000 inbound rule created
- Rules are enabled
✅ Backend Configuration
app.pybinds to0.0.0.0:5000- CORS allows
houseofprayer.ddns.net - Backend running and accessible locally
✅ Frontend Configuration
- API settings support No-IP domain
- Frontend running on port 3000
✅ Testing
- Can access
http://houseofprayer.ddns.net:5000/api/healthexternally - Can access
http://houseofprayer.ddns.net:3000externally - App loads correctly from outside network
- Can select profiles and view songs
- Database operations work (create/edit/delete)
🆘 Troubleshooting
Problem: Domain doesn't resolve
Check:
nslookup houseofprayer.ddns.net
Solution:
- Ensure No-IP DUC is running and logged in
- Check DUC status (should be green)
- Wait 5 minutes for DNS propagation
- Try from different network (mobile data)
Problem: Connection timeout
Possible Causes:
-
Port forwarding not configured
- Verify router rules are saved
- Check internal IP is correct (192.168.10.178)
-
Firewall blocking
- Check Windows Firewall rules exist
- Temporarily disable firewall to test
-
Services not running
- Ensure backend running:
netstat -an | Select-String ":5000" - Ensure frontend running:
netstat -an | Select-String ":3000"
- Ensure backend running:
Problem: Backend responds but frontend doesn't
Check CORS:
- Backend CORS must allow your domain
- Check browser console for CORS errors
- Update
app.pyCORS origins
Problem: ISP Blocks Ports
Some ISPs block common ports like 80, 443, 8080.
Solution:
- Use non-standard ports (5000, 3000 are usually fine)
- Contact ISP to request port unblocking
- Consider using Cloudflare tunnel (bypasses port blocking)
🚀 Quick Test Commands
Run these to verify setup:
# Test No-IP resolution
nslookup houseofprayer.ddns.net
# Test backend from inside
Invoke-RestMethod -Uri "http://houseofprayer.ddns.net:5000/api/health"
# Test backend from outside (use mobile data)
# curl http://houseofprayer.ddns.net:5000/api/health
# Check listening ports
netstat -an | Select-String ":3000|:5000"
# Check firewall rules
Get-NetFirewallRule | Where-Object { $_.DisplayName -like "*Church*" }
📖 Additional Resources
- No-IP Documentation: https://www.noip.com/support
- Port Forwarding Guide: https://portforward.com
- Let's Encrypt SSL: https://letsencrypt.org
- Flask Security: https://flask.palletsprojects.com/en/2.3.x/security/
📝 Notes
- Keep your No-IP account active (free accounts require login every 30 days)
- Your public IP may change; No-IP DUC automatically updates the DNS
- Consider upgrading to No-IP Plus for better features (no monthly confirmation)
- For production use, strongly recommend adding HTTPS/SSL
Last Updated: November 30, 2025
Domain: houseofprayer.ddns.net
Status: Ready for Configuration
Next Step: Install No-IP DUC and configure router port forwarding