RustDesk + BetterDesk Console Kurulum Rehberi

Bu rehber, temiz bir Ubuntu/Debian sunucusunda RustDesk Server ve BetterDesk Console'u sıfırdan kurmak için gereken tüm adımları içerir.


Gereksinimler


Adım 1: Repo'yu Klonla

cd /root
git clone https://github.com/UNITRONIX/Rustdesk-FreeConsole.git
cd Rustdesk-FreeConsole

Adım 2: Docker Kurulumu

curl -fsSL https://get.docker.com | sh

Kurulumu doğrula:

docker --version
docker compose version

Adım 3: docker-compose.yml Düzeltmeleri

Orijinal dosyada RustDesk image'ı shell içermediği için hatalar oluşuyor. Aşağıdaki düzeltmeleri yap:

3.1: HBBS servisini düzelt

docker-compose.yml dosyasını aç:

nano docker-compose.yml

HBBS bölümünü şu şekilde değiştir (satır 8-40 arası):

  # RustDesk HBBS (Signal Server) with BetterDesk API
  hbbs:
    image: rustdesk/rustdesk-server:latest
    container_name: betterdesk-hbbs
    hostname: betterdesk-hbbs
    command: hbbs -k _
    ports:
      - "21115:21115"           # TCP hole punching
      - "21116:21116/tcp"       # TCP relay
      - "21116:21116/udp"       # UDP hole punching
    volumes:
      - rustdesk-data:/root     # RustDesk data persistence
    environment:
      - ALWAYS_USE_RELAY=N
      - ENCRYPTED_ONLY=1
    networks:
      - betterdesk-net
    restart: unless-stopped

Not: command satırındaki sh -c "..." bloğunu kaldırıp sadece hbbs -k _ yap. Healthcheck bölümünü tamamen kaldır.

3.2: HBBR servisini düzelt

HBBR bölümünü şu şekilde değiştir (satır 42-66 arası):

  # RustDesk HBBR (Relay Server) with BetterDesk
  hbbr:
    image: rustdesk/rustdesk-server:latest
    container_name: betterdesk-hbbr
    hostname: betterdesk-hbbr
    command: hbbr -k _
    ports:
      - "21117:21117"           # Relay port
    volumes:
      - rustdesk-data:/root     # Shared data with HBBS
    networks:
      - betterdesk-net
    restart: unless-stopped
    depends_on:
      - hbbs

Not: command satırındaki sh -c "..." bloğunu kaldırıp sadece hbbr -k _ yap. depends_on altındaki condition: service_healthy satırını kaldır.

3.3: Console volume'unu düzelt

betterdesk-console bölümünde (satır 78):

# ÖNCE (hatalı):
      - rustdesk-data:/opt/rustdesk:ro    # Read-only access to RustDesk data

# SONRA (düzeltilmiş):
      - rustdesk-data:/opt/rustdesk        # RustDesk data access

Not: :ro (read-only) kısmını kaldır, yoksa veritabanına yazılamaz.


Adım 4: docker-entrypoint.sh Düzeltmesi

Orijinal entrypoint dosyası peer tablosuna gerekli sütunları eklemiyor. Düzelt:

nano docker-entrypoint.sh

print('🔧 Creating indexes...') satırını bul ve öncesine şu bloğu ekle:

print('🔧 Adding columns to peer table...')
# Add columns to peer table for BetterDesk features
peer_columns = [
    ('is_deleted', 'INTEGER DEFAULT 0'),
    ('deleted_at', 'DATETIME'),
    ('is_banned', 'INTEGER DEFAULT 0'),
    ('banned_at', 'DATETIME'),
    ('banned_by', 'TEXT'),
    ('ban_reason', 'TEXT'),
    ('last_online', 'DATETIME'),
]

# Get existing columns
cursor.execute('PRAGMA table_info(peer)')
existing_columns = [row[1] for row in cursor.fetchall()]

for col_name, col_def in peer_columns:
    if col_name not in existing_columns:
        try:
            cursor.execute(f'ALTER TABLE peer ADD COLUMN {col_name} {col_def}')
            print(f'  ✓ Added {col_name}')
        except Exception as e:
            print(f'  ⚠ {col_name}: {e}')

Ayrıca print('🔧 Creating indexes...') bölümünün sonuna şu satırları ekle:

cursor.execute('CREATE INDEX IF NOT EXISTS idx_peer_is_banned ON peer(is_banned)')
cursor.execute('CREATE INDEX IF NOT EXISTS idx_peer_is_deleted ON peer(is_deleted)')
cursor.execute('CREATE INDEX IF NOT EXISTS idx_peer_last_online ON peer(last_online)')

Adım 5: Data Dizini Oluştur

mkdir -p data

Adım 6: Docker Build ve Başlat

export FLASK_SECRET_KEY=$(openssl rand -hex 32)
docker compose build --no-cache
docker compose up -d

Adım 7: Data Dizini İzinlerini Düzelt

Container başladıktan sonra veritabanı dosyaları oluşur. İzinleri düzelt:

# 5 saniye bekle (veritabanının oluşması için)
sleep 5

# İzinleri düzelt
chmod 777 data
chmod 666 data/db_v2.sqlite3*

Adım 8: Console Container'ını Yeniden Başlat

docker restart betterdesk-console

Adım 9: Kurulumu Doğrula

# Container durumlarını kontrol et
docker compose ps

# Tüm container'lar "Up" durumunda olmalı
# betterdesk-hbbs, betterdesk-hbbr, betterdesk-console

Logları kontrol et:

docker logs betterdesk-console --tail=30

Şuna benzer çıktı görmelisin:

✅ Created default admin user

============================================================
🔐 DEFAULT ADMIN CREDENTIALS:
============================================================
   Username: admin
   Password: XXXXXXXXXXXXXXXX
============================================================

Önemli: Bu şifreyi not al!


Adım 10: Sunucu Bilgilerini Al

# Sunucu IP adresi
hostname -I | awk '{print $1}'

# Public Key (RustDesk client için gerekli)
cat data/id_ed25519.pub

Kurulum Tamamlandı!

Erişim Bilgileri

Servis URL/Port
Web Console http://SUNUCU_IP:5000
HBBS Signal Port 21115, 21116
HBBR Relay Port 21117

RustDesk Client Yapılandırması

RustDesk uygulamasında Settings → Network → ID/Relay Server:


Hızlı Komutlar

# Durumu kontrol et
docker compose ps

# Logları izle
docker compose logs -f

# Tüm servisleri yeniden başlat
docker compose restart

# Servisleri durdur
docker compose down

# Servisleri başlat
docker compose up -d

# Admin şifresini tekrar görüntüle
docker logs betterdesk-console 2>&1 | grep -A5 "DEFAULT ADMIN"

Sorun Giderme

"Error loading devices: no such column: is_banned"

Veritabanına eksik sütunlar eklenmemiş. Manuel ekle:

docker exec betterdesk-console sqlite3 /opt/rustdesk/db_v2.sqlite3 "
ALTER TABLE peer ADD COLUMN is_deleted INTEGER DEFAULT 0;
ALTER TABLE peer ADD COLUMN deleted_at DATETIME;
ALTER TABLE peer ADD COLUMN is_banned INTEGER DEFAULT 0;
ALTER TABLE peer ADD COLUMN banned_at DATETIME;
ALTER TABLE peer ADD COLUMN banned_by TEXT;
ALTER TABLE peer ADD COLUMN ban_reason TEXT;
ALTER TABLE peer ADD COLUMN last_online DATETIME;
CREATE INDEX IF NOT EXISTS idx_peer_is_banned ON peer(is_banned);
CREATE INDEX IF NOT EXISTS idx_peer_is_deleted ON peer(is_deleted);
CREATE INDEX IF NOT EXISTS idx_peer_last_online ON peer(last_online);
"
docker restart betterdesk-console

"attempt to write a readonly database"

Data dizini izinleri yanlış:

chmod 777 data
chmod 666 data/db_v2.sqlite3*
docker restart betterdesk-console

Container başlamıyor (OCI runtime error)

docker-compose.yml'daki shell komutları düzeltilmemiş. Adım 3'ü tekrar uygula.

Admin şifresini unuttum

docker logs betterdesk-console 2>&1 | grep -A5 "DEFAULT ADMIN"

veya

cat /var/lib/docker/volumes/rustdesk-freeconsole_console-data/_data/admin_credentials.txt

Firewall (Opsiyonel)

UFW kullanıyorsan:

ufw allow 21115:21117/tcp
ufw allow 21116/udp
ufw allow 5000/tcp
ufw reload

Tek Satırda Kurulum (İleri Düzey)

Tüm düzeltmeler yapıldıktan sonra, bu script ile hızlı kurulum yapabilirsin:

#!/bin/bash
set -e

# Docker kur
curl -fsSL https://get.docker.com | sh

# Repo'yu klonla
cd /root
git clone https://github.com/UNITRONIX/Rustdesk-FreeConsole.git
cd Rustdesk-FreeConsole

# Data dizini oluştur
mkdir -p data

# docker-compose.yml düzelt (sed ile)
sed -i 's/command: >$/command: hbbs -k _/' docker-compose.yml
sed -i '/sh -c "/,/fi"/d' docker-compose.yml
sed -i 's/:ro.*# Read-only/        # RustDesk/' docker-compose.yml
sed -i '/condition: service_healthy/d' docker-compose.yml
sed -i '/healthcheck:/,/start_period:/d' docker-compose.yml

# Build ve başlat
export FLASK_SECRET_KEY=$(openssl rand -hex 32)
docker compose build
docker compose up -d

# Bekle ve izinleri düzelt
sleep 10
chmod 777 data
chmod 666 data/db_v2.sqlite3* 2>/dev/null || true

# Veritabanı sütunlarını ekle
docker exec betterdesk-console sqlite3 /opt/rustdesk/db_v2.sqlite3 "
ALTER TABLE peer ADD COLUMN is_deleted INTEGER DEFAULT 0;
ALTER TABLE peer ADD COLUMN deleted_at DATETIME;
ALTER TABLE peer ADD COLUMN is_banned INTEGER DEFAULT 0;
ALTER TABLE peer ADD COLUMN banned_at DATETIME;
ALTER TABLE peer ADD COLUMN banned_by TEXT;
ALTER TABLE peer ADD COLUMN ban_reason TEXT;
ALTER TABLE peer ADD COLUMN last_online DATETIME;
" 2>/dev/null || true

# Yeniden başlat
docker restart betterdesk-console

# Bilgileri göster
echo ""
echo "========================================"
echo "KURULUM TAMAMLANDI!"
echo "========================================"
echo "Web Console: http://$(hostname -I | awk '{print $1}'):5000"
echo "Public Key: $(cat data/id_ed25519.pub)"
echo ""
docker logs betterdesk-console 2>&1 | grep -A5 "DEFAULT ADMIN"

Son Güncelleme: 2026-02-01