🖥️ KolayDesk

Kendi sunucunda çalışan uzaktan destek yazılımı

Python 3.10+ FastAPI + WebSocket PyQt5 PyInstaller .exe ISPConfig

İçindekiler

  1. Nasıl Çalışır?
  2. Dosya Yapısı
  3. Sunucu Kurulumu (VPS)
  4. Nginx / ISPConfig Ayarı
  5. Admin Uygulaması
  6. Müşteri .exe Oluşturma
  7. Kullanım Akışı
  8. Protokol Referansı

Nasıl Çalışır?

KolayDesk WebRTC yerine WebSocket Relay mimarisi kullanır. Tüm trafik senin sunucundan geçer. Bunun avantajları:

✅ NAT/Firewall sorunu yok

Müşteri tarafında hiçbir port açmaya gerek yok. Normal web trafiği gibi çalışır.

✅ STUN/TURN sunucusu gerektirmez

WebRTC P2P için ek altyapıya ihtiyaç yok. Tek sunucu yeterli.

✅ Kurulumu basit, yönetimi kolay

Sadece FastAPI + nginx. Karmaşık P2P handshake mantığı yok.

Bağlantı Akışı

Müşteri
KolayDesk.exe
desk.stokdental.xyz
FastAPI Relay
Admin
admin_app.py
Nasıl eşleşir? Müşteri bağlandığında sunucu rastgele 6 haneli bir ID üretir. Müşteri bu ID'yi sana söyler, sen admin uygulamasına yazarsın → iki taraf eşleşir.

Dosya Yapısı

kolaydesk/ ├── server/ │ ├── main.py ← FastAPI relay sunucusu │ ├── requirements.txt │ ├── .env.example ← .env olarak kopyala │ └── kolaydesk.service ← systemd servis dosyası │ ├── client/ ← Müşteri uygulaması (.exe olacak) │ ├── client_app.py ← GUI + ekran + giriş kontrolü │ ├── requirements.txt │ └── kolaydesk.spec ← PyInstaller paketi │ ├── admin/ │ ├── admin_app.py ← Sen kullanırsın │ └── requirements.txt │ ├── nginx_ispconfig.txt ← ISPConfig'e yapıştır └── KURULUM.txt

1 Sunucu Kurulumu (VPS)

SSH ile sunucuna bağlan ve aşağıdaki adımları izle:

Sanal ortam oluştur ve bağımlılıkları yükle

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

.env dosyasını ayarla

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
SECRET_KEY boş bırakılırsa herhangi biri herhangi bir ID'ye admin olarak bağlanabilir. Mutlaka güçlü bir değer gir.

Systemd servisi olarak kur

# 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
Doğrulama: curl http://localhost:8765/health komutu {"status":"ok"} dönüyorsa sunucu çalışıyordur.

Test başlatma (servis kurmadan önce)

# Sanal ortam aktifken:
uvicorn main:app --host 0.0.0.0 --port 8765 --reload

2 Nginx / ISPConfig Ayarı

ISPConfig panelinde şu adımları izle:

  1. Sitesdesk.stokdental.xyzOptions sekmesi
  2. Nginx Directives alanını bul
  3. Aşağıdaki kodu yapıştır
  4. Save — ISPConfig nginx'i otomatik yeniden yükler
# 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;
}
SSL zorunlu: 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.
Doğrulama: Tarayıcıda https://desk.stokdental.xyz/health açıldığında {"status":"ok"} görünüyorsa nginx proxy çalışıyordur.

3 Admin Uygulaması

Bu uygulamayı kendi bilgisayarında çalıştırırsın (Windows/Mac/Linux). Python kurulu olması yeterli.

Kurulum

pip install -r admin/requirements.txt

Çalıştırma

# .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

Admin arayüzü nasıl kullanılır?

1. ID kutusuna müşterinin ID'sini yaz

Müşteri sana telefonla söyler: "Benim ID'm 391847"

2. "Bağlan" butonuna bas

Müşterinin ekranı birkaç saniye içinde pencerede belirir.

3. Farenle görüntü üzerine tıkla / klavyeye bas

Her hareket, tıklama ve tuş vuruşu anlık olarak müşterinin bilgisayarına iletilir.

4 Müşteri .exe Oluşturma

Windows bilgisayarda yapılmalı! PyInstaller her platformda o platforma ait çalıştırılabilir dosya üretir. .exe için Windows'ta derle.

Ön koşullar (Windows)

# Python 3.10+ kurulu olmalı
python --version

# PyInstaller ve bağımlılıkları yükle
pip install pyinstaller
pip install -r client/requirements.txt

Sunucu URL'sini kontrol et

client/client_app.py dosyasının 17. satırında SERVER_URL doğru olmalı:

SERVER_URL = "wss://desk.stokdental.xyz"

Yöntem A — .spec dosyasıyla (önerilen)

Gizli import'lar, UPX sıkıştırma ve tüm ayarlar hazır:

cd client
pyinstaller kolaydesk.spec

Yöntem B — Tek satır komut

pyinstaller --onefile --windowed \
  --hidden-import=websockets.legacy.client \
  --hidden-import=mss \
  --hidden-import=pyautogui \
  --name KolayDesk \
  client/client_app.py
Çıktı: dist/KolayDesk.exe — Bu tek dosyayı müşterilere gönder. Kurulum gerektirmez, çift tıklayıp çalıştırır.

Seçenekler

BayrakNe yapar?
--onefileHer şeyi tek .exe'ye sıkıştırır
--windowedKonsol penceresi açılmaz (arka planda çalışır)
--icon=icon.icoGörev çubuğu ve dosya ikonu atar
--upx-dir=C:\upxUPX ile ek sıkıştırma (daha küçük dosya)

5 Kullanım Akışı

Adım 1 — Müşteri uygulamayı açar

KolayDesk.exe'ye çift tıklar. Ekranda büyük harflerle 6 haneli ID görünür.
Altta "Bağlantı bekleniyor…" yazar.

Adım 2 — Müşteri ID'yi sana söyler

Telefon, e-posta, chat — hangi yolla olursa olsun. "Benim ID'm 391847" der.

Adım 3 — Sen admin uygulamasına ID'yi yazarsın

391847 yazıp "Bağlan" basarsın. Birkaç saniye içinde müşterinin ekranı pencerende açılır.

Adım 4 — Uzaktan kontrol

Fare ile ekrana tıklarsın, klavyeye basarsın — her şey anlık olarak müşterinin bilgisayarında gerçekleşir.

Protokol Referansı

WebSocket Mesaj Tipleri

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

Komut JSON Örnekleri

// 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"}
Sunucu bağlantı adresleri:
İstemci: wss://desk.stokdental.xyz/ws/client
Admin: wss://desk.stokdental.xyz/ws/admin/{session_id}
Sağlık: https://desk.stokdental.xyz/health