Header Ads

How to Configure a TURN Server on DigitalOcean (Step by Step Guide)

 



A Complete Setup for WebRTC, Video Call & Real-Time Apps

WebRTC-based app বানাতে গেলে সবচেয়ে বড় সমস্যা হলো NAT Traversal—
মোবাইল নেটওয়ার্ক, WiFi, অফিস নেটওয়ার্ক—অনেক জায়গাতেই Peer-to-Peer সংযোগ ব্যর্থ হয়।

এ সমস্যার একমাত্র সমাধান:

TURN Server (Traversal Using Relay around NAT)

TURN সার্ভার ছাড়া আপনার WebRTC অ্যাপ 100% স্থিতিশীল হবে না।

এই গাইডে দেখাব:
👉 DigitalOcean Droplet-এ TURN Server (Coturn) ইন্সটল
👉 Firewall configuration
👉 Domain + SSL enable
👉 TURN working test
👉 Laravel / Flutter WebRTC integration


What You Need

  • একটি DigitalOcean Ubuntu Droplet (Ubuntu 20.04/22.04)

  • একটি Domain (যেমন: turn.example.com)

  • মৌলিক Linux কমান্ড জানা


🟦 Step 1 — Update Your Server

sudo apt update && sudo apt upgrade -y


🟦 Step 2 — Install Coturn

sudo apt install coturn -y


Coturn হলো সবচেয়ে জনপ্রিয় Open-Source STUN/TURN সার্ভার।

ইন্সটল হয়ে গেলে সার্ভিস disable করা থাকে। আমরা manual চালাব।


🟦 Step 3 — Enable Coturn Service

sudo systemctl enable coturn

🟦 Step 4 — Configure Domain SSL (Let's Encrypt)

আপনার TURN সার্ভার HTTPS/TLS ব্যবহার করবে। এজন্য SSL লাগবে।

Install certbot

sudo apt install certbot -y

Generate SSL

sudo certbot certonly --standalone -d turn.example.com

SSL files পাবেন:

/etc/letsencrypt/live/turn.example.com/fullchain.pem /etc/letsencrypt/live/turn.example.com/privkey.pem

🟦 Step 5 — Open Firewall Ports

TURN সার্ভার ব্যবহার করে:

PortProtocolDescription
3478UDP/TCPSTUN/TURN
5349UDP/TCPTURN over TLS
49152–65535UDPMedia Relay Ports

Commands:

sudo ufw allow 3478/tcp sudo ufw allow 3478/udp sudo ufw allow 5349/tcp sudo ufw allow 5349/udp sudo ufw allow 49152:65535/udp sudo ufw reload

🟦 Step 6 — Configure Coturn

খুলুন:

sudo nano /etc/turnserver.conf

এবং এই কনফিগ দিন:

listening-port=3478 fingerprint # User authentication lt-cred-mech realm=turn.example.com user=turnuser:StrongPasswordHere # Performance / quota settings total-quota=100 bps-capacity=0 stale-nonce=600 # TLS Certificates cert=/etc/letsencrypt/live/turn.example.com/fullchain.pem pkey=/etc/letsencrypt/live/turn.example.com/privkey.pem # Secure Logging no-stdout-log

Save → Ctrl+O
Exit → Ctrl+X

🟦 Step 7 — Restart Coturn

sudo systemctl restart coturn sudo systemctl status coturn

"active (running)" দেখলে বুঝবেন সার্ভার চলছে।


🟦 Step 8 — Verify Ports

sudo ss -lntup | grep turn

আপনি দেখবেন:

udp 3478 tcp 3478 udp random relay ports

TURN সার্ভার সফলভাবে চলছে ✔


🟦 Step 9 — Test TURN Server

একটি Browser-based TURN tester ব্যবহার করুন:

👉 https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

ICE Servers এ দিন:

turn:turn.example.com:3478?transport=udp username: turnuser credential: StrongPasswordHere

Result এ দেখবেন:

typ relay

এটাই প্রমাণ—TURN server working perfectly.

🟦 Step 10 — Using TURN in WebRTC / Flutter / Laravel

Example JSON Response (Laravel API)

Route::get('/turn-server', function () { return response()->json([ 'iceServers' => [ [ 'urls' => [ 'stun:stun.l.google.com:19302' ] ], [ 'urls' => [ 'turn:turn.example.com:3478?transport=udp', 'turn:turn.example.com:3478?transport=tcp' ], 'username' => 'turnuser', 'credential' => 'StrongPasswordHere' ], ], 'iceTransportPolicy' => 'relay', 'sdpSemantics' => 'unified-plan' ]); });


✔ Troubleshooting

❗ TURN সার্ভার চললেও relay candidate না এলে:

sudo ufw status sudo ss -lntup | grep turn

❗ NAT/CGNAT নেটওয়ার্কে কাজ না করলে:

  • TCP transport enable করুন

  • 5349 (TLS) open রাখুন

  • UDP ports 49152–65535 open রাখুন


🎉 Conclusion

এই গাইড অনুসরণ করলে আপনি DigitalOcean-এ একটি পূর্ণ-মাত্রার TURN সার্ভার configure করতে পারবেন, যা WebRTC, Flutter, React, iOS/Android—সব অ্যাপে flawless কাজ করবে।

TURN ছাড়া WebRTC 100% reliable হয় না—
TURN server আপনার অ্যাপকে professional-grade stability দেবে।

No comments

Powered by Blogger.