154 lines
5.2 KiB
Markdown
154 lines
5.2 KiB
Markdown
|
|
# 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` (not `127.0.0.1`)
|
||
|
|
- Verify locally: `curl http://localhost:5000/api/health`
|
||
|
|
|
||
|
|
## DNS Configuration
|
||
|
|
|
||
|
|
- [ ] **No-IP Account Setup**
|
||
|
|
- Free account created at [NoIP.com](https://www.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
|
||
|
|
|
||
|
|
## 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 :5000` should show `0.0.0.0:5000` listening
|
||
|
|
|
||
|
|
## Router Configuration
|
||
|
|
|
||
|
|
- [ ] **Port Forwarding**
|
||
|
|
- Access router admin panel (usually `192.168.1.1` or `192.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
|
||
|
|
- Save and reboot router if required
|
||
|
|
|
||
|
|
- [ ] **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",...}`
|
||
|
|
|
||
|
|
- [ ] **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
|
||
|
|
|
||
|
|
## Diagnostics Panel (In-App)
|
||
|
|
|
||
|
|
- [ ] **Run Built-In Diagnostics**
|
||
|
|
- Open Settings → Connectivity Diagnostics
|
||
|
|
- Click "Run Diagnostics"
|
||
|
|
- All tests should show ✅:
|
||
|
|
1. DNS Resolution
|
||
|
|
2. Localhost Connectivity
|
||
|
|
3. Backend Connectivity
|
||
|
|
4. 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:
|
||
|
|
|
||
|
|
1. **Tailscale VPN** (Recommended)
|
||
|
|
- Install on server and client devices
|
||
|
|
- Secure peer-to-peer connection, no port forwarding needed
|
||
|
|
- See `TUNNEL_SETUP_GUIDE.md` for setup
|
||
|
|
|
||
|
|
2. **LocalTunnel**
|
||
|
|
- Quick public HTTPS URL
|
||
|
|
- Run: `npx localtunnel --port 5000 --subdomain mychurch`
|
||
|
|
- See `TUNNEL_SETUP_GUIDE.md` for setup
|
||
|
|
|
||
|
|
3. **Cloudflare Tunnel / ngrok**
|
||
|
|
- Enterprise-grade tunneling
|
||
|
|
- Free tier available
|
||
|
|
|
||
|
|
## Support Commands
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
# 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:
|
||
|
|
|
||
|
|
1. From mobile data: Visit `http://yourhost.noip.org:5000` in browser
|
||
|
|
2. Should see: `{"message":"House of Prayer Song Lyrics API (Node)","port":5000}`
|
||
|
|
3. Update frontend Settings → Online Mode with your No-IP hostname
|
||
|
|
4. Save settings and test song sync across devices
|
||
|
|
|
||
|
|
✅ **Success!** Your Church SongLyric system is now accessible remotely.
|