Kendi sunucunda çalışan uzaktan destek yazılımı
KolayDesk WebRTC yerine WebSocket Relay mimarisi kullanır. Tüm trafik senin sunucundan geçer. Bunun avantajları:
Müşteri tarafında hiçbir port açmaya gerek yok. Normal web trafiği gibi çalışır.
WebRTC P2P için ek altyapıya ihtiyaç yok. Tek sunucu yeterli.
Sadece FastAPI + nginx. Karmaşık P2P handshake mantığı yok.
SSH ile sunucuna bağlan ve aşağıdaki adımları izle:
cd /var/www/clients/client1/web4/web/kolaydesk/server # Sanal ortam python3 -m venv venv source venv/bin/activate # Paketleri yükle pip install -r requirements.txt
cp .env.example .env nano .env
.env içeriği şöyle olmalı:
HOST=0.0.0.0
PORT=8765
SECRET_KEY=buraya_cok_guclu_bir_sifre_yaz_degistir
# Servis dosyasını kopyala sudo cp kolaydesk.service /etc/systemd/system/ # Etkinleştir ve başlat sudo systemctl daemon-reload sudo systemctl enable kolaydesk sudo systemctl start kolaydesk # Çalışıyor mu? sudo systemctl status kolaydesk # Canlı log izle journalctl -u kolaydesk -f
curl http://localhost:8765/health komutu {"status":"ok"} dönüyorsa sunucu çalışıyordur.
# Sanal ortam aktifken: uvicorn main:app --host 0.0.0.0 --port 8765 --reload
ISPConfig panelinde şu adımları izle:
# nginx_ispconfig.txt içeriği — kopyala yapıştır: location /ws/ { proxy_pass http://127.0.0.1:8765; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 86400; proxy_send_timeout 86400; proxy_buffering off; } location /health { proxy_pass http://127.0.0.1:8765; proxy_set_header Host $host; }
wss:// (güvenli WebSocket) için SSL sertifikası aktif olmalı. Let's Encrypt zaten kuruluysa sorun yok. Yoksa ISPConfig'den Let's Encrypt'i etkinleştir.
{"status":"ok"} görünüyorsa nginx proxy çalışıyordur.
Bu uygulamayı kendi bilgisayarında çalıştırırsın (Windows/Mac/Linux). Python kurulu olması yeterli.
pip install -r admin/requirements.txt
# .env'de SECRET_KEY koyduysan onu da gönder: # Windows: set KOLAYDESK_SECRET=buraya_guclu_bir_sifre_yaz_degistir python admin/admin_app.py # Linux/Mac: export KOLAYDESK_SECRET=buraya_guclu_bir_sifre_yaz_degistir python admin/admin_app.py
Müşteri sana telefonla söyler: "Benim ID'm 391847"
Müşterinin ekranı birkaç saniye içinde pencerede belirir.
Her hareket, tıklama ve tuş vuruşu anlık olarak müşterinin bilgisayarına iletilir.
# Python 3.10+ kurulu olmalı python --version # PyInstaller ve bağımlılıkları yükle pip install pyinstaller pip install -r client/requirements.txt
client/client_app.py dosyasının 17. satırında SERVER_URL doğru olmalı:
SERVER_URL = "wss://desk.stokdental.xyz"
Gizli import'lar, UPX sıkıştırma ve tüm ayarlar hazır:
cd client pyinstaller kolaydesk.spec
pyinstaller --onefile --windowed \ --hidden-import=websockets.legacy.client \ --hidden-import=mss \ --hidden-import=pyautogui \ --name KolayDesk \ client/client_app.py
dist/KolayDesk.exe — Bu tek dosyayı müşterilere gönder. Kurulum gerektirmez, çift tıklayıp çalıştırır.
| Bayrak | Ne yapar? |
|---|---|
--onefile | Her şeyi tek .exe'ye sıkıştırır |
--windowed | Konsol penceresi açılmaz (arka planda çalışır) |
--icon=icon.ico | Görev çubuğu ve dosya ikonu atar |
--upx-dir=C:\upx | UPX ile ek sıkıştırma (daha küçük dosya) |
KolayDesk.exe'ye çift tıklar. Ekranda büyük harflerle 6 haneli ID görünür.
Altta "Bağlantı bekleniyor…" yazar.
Telefon, e-posta, chat — hangi yolla olursa olsun. "Benim ID'm 391847" der.
391847 yazıp "Bağlan" basarsın. Birkaç saniye içinde müşterinin ekranı pencerende açılır.
Fare ile ekrana tıklarsın, klavyeye basarsın — her şey anlık olarak müşterinin bilgisayarında gerçekleşir.
| Yön | Format | Açıklama |
|---|---|---|
| Sunucu → İstemci | JSON metin |
session_id, admin_connected, admin_disconnected |
| İstemci → Admin | Binary |
JPEG frame (~20 FPS, maks 1280px genişlik) |
| İstemci → Admin | JSON metin |
screen_info (çözünürlük bilgisi) |
| Admin → İstemci | JSON metin |
mouse_move, mouse_click, mouse_scroll, key_press, hotkey, type_text |
// Fare taşı {"type": "mouse_move", "x": 640, "y": 360} // Sol tık {"type": "mouse_click", "x": 640, "y": 360, "button": "left", "double": false} // Çift tık {"type": "mouse_click", "x": 640, "y": 360, "button": "left", "double": true} // Sağ tık {"type": "mouse_click", "x": 640, "y": 360, "button": "right", "double": false} // Scroll {"type": "mouse_scroll", "x": 640, "y": 360, "amount": 3} // Tuş basma {"type": "key_press", "key": "enter"} {"type": "key_press", "key": "backspace"} {"type": "key_press", "key": "f5"} // Kısayol (Ctrl+C, Ctrl+V vb.) {"type": "hotkey", "keys": ["ctrl", "c"]} {"type": "hotkey", "keys": ["ctrl", "alt", "delete"]} {"type": "hotkey", "keys": ["winleft", "d"]} // Metin yaz {"type": "type_text", "text": "merhaba"}
wss://desk.stokdental.xyz/ws/clientwss://desk.stokdental.xyz/ws/admin/{session_id}