5.2 KiB
5.2 KiB
External Access Checklist
Use this checklist to troubleshoot remote access issues when accessing your Church SongLyric backend from outside your local network.
Prerequisites
- Backend Server Running
- Node.js backend started:
node backend/server.js - Server listening on
0.0.0.0:5000(not127.0.0.1) - Verify locally:
curl http://localhost:5000/api/health
- Node.js backend started:
DNS Configuration
-
No-IP Account Setup
- Free account created at NoIP.com
- Hostname registered (e.g.,
mychurch.noip.org) - No-IP Dynamic Update Client (DUC) installed on server PC
- DUC running and hostname status shows "Up to date"
-
DNS Resolution Test
- Open PowerShell and run:
nslookup yourhost.noip.org - Should return your public IP address
- Wait 5-10 minutes after DUC update if recently changed
- Open PowerShell and run:
Firewall Configuration
- Windows Firewall Inbound Rule
- Open Windows Defender Firewall → Advanced Settings → Inbound Rules
- Create new rule: TCP port
5000, allow connection - Rule applies to: Domain, Private, and Public profiles
- Test:
netstat -ano | findstr :5000should show0.0.0.0:5000listening
Router Configuration
-
Port Forwarding
- Access router admin panel (usually
192.168.1.1or192.168.0.1) - Navigate to Port Forwarding / Virtual Server / NAT
- Create rule:
- External Port:
5000 - Internal IP: Your server's local IP (e.g.,
192.168.10.178) - Internal Port:
5000 - Protocol: TCP
- External Port:
- Save and reboot router if required
- Access router admin panel (usually
-
Static IP Assignment (Recommended)
- Assign static local IP to server PC via router DHCP reservation
- Prevents IP changes after reboot breaking port forward rule
-
Router NAT Loopback
- Note: Some routers don't support accessing external URL from inside network
- If external URL fails from inside network but works from mobile data, this is expected
ISP Considerations
-
CGNAT Check
- Compare public IP (Google "what is my IP") with router WAN IP
- If different, ISP may be using CGNAT (blocks inbound connections)
- Solution: Use Tailscale VPN or cloud tunnel (Cloudflare, ngrok)
-
Port 5000 Not Blocked
- Some ISPs block common server ports
- Test alternative port (e.g.,
8080,3000) if issues persist
Testing
-
Local Network Test
- From same Wi-Fi:
curl http://192.168.10.178:5000/api/health - Should return
{"status":"ok",...}
- From same Wi-Fi:
-
External Test (Critical)
- Disconnect from Wi-Fi, use mobile data
- Run:
curl http://yourhost.noip.org:5000/api/health - Or visit URL in mobile browser
- Success = external access working
-
Health Check Script
- Run from any PC:
.\backend\health-check.ps1 http://yourhost.noip.org:5000 - All three tests should pass
- Run from any PC:
Diagnostics Panel (In-App)
- Run Built-In Diagnostics
- Open Settings → Connectivity Diagnostics
- Click "Run Diagnostics"
- All tests should show ✅:
- DNS Resolution
- Localhost Connectivity
- Backend Connectivity
- Local Network (LAN) Test
Common Failures & Solutions
| Symptom | Likely Cause | Solution |
|---|---|---|
| DNS test fails | No-IP DUC not running or hostname not updated | Start DUC, wait 5 min, retry |
| Localhost works, external fails | Port not forwarded or firewall blocking | Check router port forward + firewall rule |
| Works on mobile data, fails on Wi-Fi | Router NAT loopback unsupported | Expected behavior; use localhost URL when on same network |
| All tests timeout | Backend not running or listening on wrong interface | Restart backend, ensure binding to 0.0.0.0 |
| Connection refused | ISP CGNAT or port blocked | Try alternative port or use Tailscale/tunnel |
Alternative Solutions
If direct port forwarding fails:
-
Tailscale VPN (Recommended)
- Install on server and client devices
- Secure peer-to-peer connection, no port forwarding needed
- See
TUNNEL_SETUP_GUIDE.mdfor setup
-
LocalTunnel
- Quick public HTTPS URL
- Run:
npx localtunnel --port 5000 --subdomain mychurch - See
TUNNEL_SETUP_GUIDE.mdfor setup
-
Cloudflare Tunnel / ngrok
- Enterprise-grade tunneling
- Free tier available
Support Commands
# Check backend process
Get-Process -Name node | Where-Object {$_.Path -like "*Church_SongLyric*"}
# Verify port listening
netstat -ano | findstr :5000
# Test localhost
curl http://localhost:5000/api/health
# Test LAN IP
curl http://192.168.10.178:5000/api/health
# DNS lookup
nslookup yourhost.noip.org
# Firewall rules
netsh advfirewall firewall show rule name=all | Select-String "5000"
# Get local IP
ipconfig | Select-String "IPv4"
Final Verification
Once all checkboxes complete:
- From mobile data: Visit
http://yourhost.noip.org:5000in browser - Should see:
{"message":"House of Prayer Song Lyrics API (Node)","port":5000} - Update frontend Settings → Online Mode with your No-IP hostname
- Save settings and test song sync across devices
✅ Success! Your Church SongLyric system is now accessible remotely.