Cloudflare olmadan ChatGPT Custom GPT'yi Ubuntu sunucuya bağlama
Bugün Custom GPT içindeki
Eylemler (Actions) özelliğini, kendi Ubuntu sunucumdaki küçük bir HTTPS API'ye bağladım. Böylece ChatGPT; izin verdiğim dosyaları okuyabiliyor, oluşturup düzenleyebiliyor, terminal komutu çalıştırabiliyor, test yapabiliyor ve servis yeniden başlatabiliyor.
Bu yöntem
kota açığı veya sınırsız kullanım yöntemi değildir. Codex CLI yerine ChatGPT içindeki özel GPT kullanıldığı için ChatGPT planınızın/modelinizin kullanım sınırları geçerlidir.
Çok önemli güvenlik uyarısı
Bu örnekte servis root olarak çalışıyor. Yani API anahtarı ele geçirilirse sunucu da ele geçirilebilir. Kod içindeki engeller yalnızca ek korumadır; gerçek bir sandbox değildir.
- GPT'yi Yalnızca ben olarak yayınlayın.
- ChatGPT hesabında MFA açın.
- API anahtarını hiçbir yerde paylaşmayın.
- Güçlü ve benzersiz bir token kullanın; şüphede kalırsanız değiştirin.
- Sunucu ve veritabanı yedeği alın.
- Üretim için root yerine sınırlı yetkili ayrı kullanıcı kullanmak daha güvenlidir.
- Dosya ve web içeriğinden gelebilecek prompt-injection riskini unutmayın.
Gerekenler
- GPT oluşturmayı destekleyen bir ChatGPT planı
- Ubuntu sunucu ve root/sudo erişimi
- Bir alan adı ve sunucuya yönlenen alt alan adı
- Nginx, Python 3 ve Certbot
- Dışarıdan erişilebilen HTTPS/443
Bu anlatımda örnek alan adı siteadi.com, API adresi gptapi.siteadi.com, proje dizini /var/wwwdir.
Eksik paketler varsa:
apt update apt install -y nginx certbot python3-certbot-nginx python3-venv
Sunucu sağlayıcısı veya güvenlik duvarında 80 ve 443 portlarının açık olduğundan emin olun.
1. DNS kaydı
Alan adı panelinde A kaydı oluşturun:
Ad: gptapi Tür: A Değer: SUNUCU_IP
Kontrol:
getent ahostsv4 gptapi.siteadi.com | head -1
2. Nginx için ilk HTTP yapılandırması
Paket içindeki nginx-gptapi-http.conf.example dosyasını alan adınıza göre düzenleyip aşağıdaki konuma koyun:
nano /etc/nginx/sites-available/gptapi ln -s /etc/nginx/sites-available/gptapi /etc/nginx/sites-enabled/gptapi nginx -t && systemctl restart nginx curl
http://gptapi.siteadi.com
gptapi hazir yanıtını görmelisiniz. Sembolik bağlantı zaten varsa ln -s komutunu tekrar çalıştırmayın.
3. HTTPS sertifikası
certbot --nginx -d gptapi.siteadi.com --redirect curl
https://gptapi.siteadi.com
Geçerli ve otomatik yenilenen Let's Encrypt sertifikası kurulmuş olmalı.
4. Köprüyü kurma
mkdir -p /opt/gptbridge
Önce paket içindeki app.py ve requirements.txt dosyalarını /opt/gptbridge/ içine koyun. Ardından:
python3 -m venv /opt/gptbridge/.venv /opt/gptbridge/.venv/bin/pip install --upgrade pip /opt/gptbridge/.venv/bin/pip install -r /opt/gptbridge/requirements.txt
Güçlü token üretin:
openssl rand -hex 32
Çıktıyı kopyalayın ve dosyayı oluşturun:
nano /etc/gptbridge.env
İçerik:
GPTBRIDGE_TOKEN=BURAYA_URETTIGINIZ_UZUN_TOKEN GPTBRIDGE_PROJECT_ROOT=/var/www
İzinleri kapatın:
chmod 600 /etc/gptbridge.env chown root:root /etc/gptbridge.env
5. systemd servisi
Paket içindeki gptbridge.service dosyasını /etc/systemd/system/gptbridge.service konumuna koyun. Ardından:
systemctl daemon-reload systemctl enable --now gptbridge systemctl status gptbridge --no-pager -l
Yerel test:
set -a source /etc/gptbridge.env set +a curl -sS -H "Authorization: Bearer $GPTBRIDGE_TOKEN"
http://127.0.0.1:8787/health unset GPTBRIDGE_TOKEN
Beklenen yanıt:
{"status":"ok"}
6. Nginx reverse proxy
Sertifika kurulduktan sonra paket içindeki nginx-gptapi.conf.example dosyasını alan adınıza göre düzenleyip /etc/nginx/sites-available/gptapi içeriğiyle değiştirin:
nginx -t && systemctl restart nginx curl -i
https://gptapi.siteadi.com/health
Token göndermediğiniz için 401 Unauthorized gelmesi doğrudur. Yetkili test:
set -a source /etc/gptbridge.env set +a curl -sS -H "Authorization: Bearer $GPTBRIDGE_TOKEN"
https://gptapi.siteadi.com/health unset GPTBRIDGE_TOKEN
Beklenen yanıt yine {"status":"ok"} olmalı.
Dizin listeleme testi:
set -a source /etc/gptbridge.env set +a curl -sS -H "Authorization: Bearer $GPTBRIDGE_TOKEN" -H "Content-Type: application/json" -d '{"path":"/var/www","max_entries":20}'
https://gptapi.siteadi.com/v1/files/list unset GPTBRIDGE_TOKEN
7. Custom GPT oluşturma
ChatGPT'de
GPT'ler > Oluştur > Yapılandır bölümüne girin.
- Ad: Sunucu Kod Asistanı
- Açıklama: Bağlı Ubuntu sunucusundaki projeleri inceleyen ve düzenleyen özel kod asistanı.
- Talimatlar: Paketteki talimatlar.txt içeriğini yapıştırın.
- Paylaşım: Yalnızca ben
Eylemler > Yeni eylem oluştur bölümünde:
- Kimlik doğrulama: API Anahtarı
- Yetkilendirme türü: Bearer
- API anahtarı: /etc/gptbridge.env içindeki token
- Şema: Önce openapi-safe.yaml içeriğini yapıştırın.
- Gizlilik politikası: https://gptapi.siteadi.com/privacy
Şemadaki
https://gptapi.siteadi.com adresini kendi alan adınızla değiştirmeyi unutmayın.
8. Güvenli şema mı, tam otomatik şema mı?
- openapi-safe.yaml: Okuma işlemleri sessiz çalışır; yazma, silme ve terminal gibi sonuç doğuran işlemlerde onay çıkabilir. Önerilen sürümdür.
- openapi-full-auto.yaml: Bütün eylemlerde x-openai-isConsequential: false kullanır. Arayüz “Her zaman izin ver” seçeneğini gösterebilir ve tekrar eden izinleri azaltabilir. Root sunucuda yüksek risklidir.
GPT talimatına “onay isteme” yazmak tek başına platformun güvenlik ekranlarını kapatmaz. Şema işareti ve arayüzdeki izin tercihi belirleyicidir; platform yine bazı durumlarda onay isteyebilir.
9. Test komutları
Özel GPT önizlemesinde sırayla deneyebilirsiniz:
Sunucu bağlantısını kontrol et.Sunucudaki /var/www dizinini listele ve yalnızca klasör adlarını yaz./var/www/proje/gptbridge-test.txt dosyasını oluştur, içine "GPTBridge yazma testi başarılı" yaz ve tekrar okuyarak doğrula.whoami, hostname ve pwd komutlarını çalıştır; sonuçları yaz.
Sonra deneme dosyasını çöpe taşımasını isteyebilirsiniz. Köprü kalıcı silmek yerine /var/backups/gptbridge-trash altına taşır; dosya yazmadan önce de /var/backups/gptbridge altında yedek oluşturur.
10. Sık karşılaşılan sorunlar
- 401 Unauthorized: Bearer seçilmemiştir veya token yanlıştır.
- 502 Bad Gateway: gptbridge servisi çalışmıyordur ya da Nginx yanlış porta yönleniyordur.
- Şema hatası: Paketteki düzleştirilmiş YAML dosyasını aynen kullanın.
- Nginx reload hatası: Önce nginx -t, ardından systemctl restart nginx deneyin ve logu inceleyin.
- Uzun komut yarıda kalıyor: GPT Actions çağrıları 45 saniye içinde yanıt vermelidir. Bu örnekte komut arka plan işi olarak başlar, sonra job_id ile durum ve çıktı alınır.
Loglar:
journalctl -u gptbridge -n 100 --no-pager tail -n 100 /var/log/gptbridge/audit.jsonl
Özetle sistem şu şekilde çalışıyor: Custom GPT, HTTPS ile Nginx'e; Nginx yerelde FastAPI köprüsüne; köprü de yetkilendirilmiş dosya ve terminal işlemlerine ulaşıyor. Cloudflare zorunlu değil. Fakat bunun sınırsız/kotasız kullanım olmadığını ve root erişiminin ciddi güvenlik sorumluluğu getirdiğini tekrar hatırlatayım.
Resmî kaynaklar