DOKÜMANTASYON

Kendi sunucunuzda kurmak

Captivo Access, Apache 2.0 lisanslıdır ve yayımlanmış konteyner imajları olarak dağıtılır. Bu rehber tek bir herkese açık Linux sunucuyu boş halinden otomatik HTTPS ile çalışan bir konsola götürür; sonrası (Connector, kaynaklar, kişiler) Cloud ile aynıdır.

Kurulum istemiyorsanız: kontrol düzlemini bizim işletmemizi tercih ediyorsanız Cloud ile başlamak rehberiyle başlayın; o yolda sizin tarafınızda yalnızca Connector çalışır.

Neler kurulur

Tek bir herkese açık sunucuda dört sürekli konteyner ve iki yardımcı. Manager konsoldur: kurulum, giriş, davetler, politika. Go ile yazılmış data-plane connector tünelini sonlandırır ve tedarikçilerin gerçekte konuştuğu kimlik denetimli vekildir. Postgres yapılandırmayı ve denetim kaydını tutar. Caddy 80 ve 443 portlarında TLS'i sonlandırır ve her sertifikayı sizin için alır. Tek seferlik access-migrate servisi Manager başlamadan önce veritabanı şemasını uygular; access-cron zamanlanmış işleri çalıştırır.

Connector bu sunucunun parçası değildir. Ayrı olarak, uygulamaların bulunduğu ağın içindeki bir makinede çalışır ve bu sunucuya dışarıdan bağlanır; konsol ayağa kalkınca Connector rehberine geçin.

1Sunucu ve portlar

Herkese açık IP'si olan bir Linux sunucu (bu rehberde Ubuntu 22.04 ya da üstü). 80 ve 443 portları internetten erişilebilir olmalıdır: Let's Encrypt her sertifikayı bu portlar üzerinden doğrular. İçeri başka hiçbir portun açık olması gerekmez; Connector daha sonra yalnızca dışarı bağlanır.

bash
apt update && apt -y upgrade
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force enable

2Docker kurulumu

Compose v2 ile Docker Engine; eski docker-compose ikilisi değil, docker compose alt komutu.

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

3DNS kayıtları

Her şeyin altında yaşayacağı alt alan adını seçin, örneğin access.sirketiniz.com, ve sunucunun herkese açık IP'sine üç A kaydı oluşturun. Üçüncüsü bir joker (wildcard) kayıttır: yayımlayacağınız her tedarikçi uygulamasını kapsayan tek kayıt; böylece uygulama başına DNS'e bir daha dokunulmaz.

TürAdDeğer
Amanager.access.example.comsunucu IP
Aconnect.access.example.comsunucu IP
A*.access.example.comsunucu IP
Joker DNS kaydı, joker sertifika demek değildir ve DNS API anahtarına ihtiyacınız yoktur. Caddy her uygulamanın sertifikasını adres ilk ziyaret edildiğinde ve yalnızca konsolda gerçek bir kaynak olan adresler için düzenler. Her DNS sağlayıcısı çalışır.

Devam etmeden önce kayıtların çözülmesini bekleyin: dig +short manager.access.sirketiniz.com ve dig +short herhangi.access.sirketiniz.com ikisi de sunucu IP'sini yazmalı; ikincisi joker kaydın çalıştığını gösterir.

4Kurulum dosyaları ve .env

Depoyu sunucuda klonlayın ve deploy dizinine girin. En hızlı yol kurulum betiğidir: verdiğiniz alan adından çerez alanını, genel adresi ve passkey relying-party kimliğini türetir, her gizli anahtarı bir kez üretir, yayımlanmış imajları çeker ve yığını başlatır. Tekrar çalıştırmak güvenlidir.

bash
git clone https://github.com/captivo-io/captivo-access.git
cd captivo-access/deploy
./setup.sh access.example.com

Dosyayı elle doldurmayı tercih ederseniz .env.prod.example dosyasını .env olarak kopyalayın ve her gizli anahtarı openssl rand -hex 32 ile üretin. Önemli değişkenler:

DeğişkenÖrnekNe işe yarar
ACCESS_DOMAINaccess.example.comHer şeyin altında sunulduğu taban alan adı.
COOKIE_DOMAIN.access.example.comBaştaki nokta önemli: giriş çerezi böylece her uygulama adresinde de geçerli olur. Noktasız yazılırsa tedarikçi giriş yapar ve giriş sayfasına geri döner.
MANAGER_PUBLIC_URLhttps://manager.access.example.comKonsolun genel adresi; giriş yönlendirmelerinde kullanılır.
WEBAUTHN_RP_IDaccess.example.comÇıplak access alan adı, manager değil. Tarayıcıdaki adresle uyuşmazsa passkey çalışmaz.
POSTGRES_PASSWORDopenssl rand -hex 32Veritabanı parolası.
SESSION_SECRETopenssl rand -hex 32Oturum belirteçlerini imzalar.
ENCRYPTION_KEYopenssl rand -hex 32Kurtarma sırlarını saklarken şifreler.
DATAPLANE_SECRETopenssl rand -hex 32Manager ile data-plane arasındaki ortak sır.
CRON_SECRETopenssl rand -hex 32Zamanlanmış iş uç noktalarını yetkilendirir.
AUDIT_RETENTION_DAYS730Başlangıçtaki denetim kaydı saklama süresi; sonradan Policy sayfasından değiştirilir.

Dört yetenek anahtarı RECORDING_ENABLED, NATIVE_GATEWAY, VAULT_ENABLED ve ISOLATED_ENABLED varsayılan olarak açıktır; yorum satırı olarak bırakın, yalnızca kapatmak istediğinizi 0 yapın. İşletme ayarlarının çoğu (saklama süreleri, oturum sınırları, izin listesi, webhook) daha sonra Infrastructure → Policy altından yönetilir; konsolda girilen değer ortam değişkenine her zaman üstün gelir.

.env dosyasını asla depoya göndermeyin. Kurulumun bütün gizli anahtarları içindedir.

5Yığını ayağa kaldırın

Kurulum betiğini kullandıysanız bu adım zaten gerçekleşti. Aksi halde yığını başlatın ve Caddy'nin manager ve connect adresleri için ilk iki sertifikayı almasını izleyin; 80 ve 443 portlarının açık olması bunun içindi.

bash
docker compose -f docker-compose.prod.yml up -d
docker compose -f docker-compose.prod.yml ps
docker compose -f docker-compose.prod.yml logs -f caddy

Veritabanı geçişini elle çalıştırmazsınız. access-migrate servisi şemayı her up -d komutunda uygular, değişiklik yoksa hiçbir şey yapmaz ve veri silebilecek hiçbir değişikliği kabul etmez. Manager başlamazsa önce docker compose -f docker-compose.prod.yml logs access-migrate çıktısını okuyun.

Zamanlanmış işler de otomatiktir: access-cron konteyneri kaynak erişilebilirliğini beş dakikada bir kontrol eder; denetim kaydı saklama, kayıt saklama ve denetim zinciri mühürleme işlerini günde bir çalıştırır. Sunucuda crontab gerekmez.

6İlk yöneticiyi oluşturun

https://manager.access.sirketiniz.com/setup adresini açın ve ilk hesabı bir passkey ile kaydedin: Touch ID, Windows Hello ya da bir güvenlik anahtarı. Bu hesap Admin olur. Varsayılan ya da hazır bir hesap yoktur, parola da yoktur.

Passkey kaydı belirsiz bir hatayla düşüyorsa sebep neredeyse her zaman WEBAUTHN_RP_ID değerinin adres çubuğundaki adresle uyuşmamasıdır. Bkz. Passkey ile giriş yapılamıyor.

7DNS ve TLS'i konsoldan doğrulayın

Konsolda Infrastructure → Custom domain sayfasını açın. Alan adınız için tam joker kaydı ve sunucunuzun IP'sini, bir Verify DNS düğmesiyle birlikte gösterir. Yeşil sonuç, joker kaydın canlı olduğu ve yayımlayacağınız her uygulamanın ilk ziyaretinde HTTPS alacağı anlamına gelir. Kırmızı, 3. adımdaki *.access kaydının eksik olduğu ya da henüz yayılmadığı anlamına gelir.

Buradan sonrası Cloud ile aynıdır: ağınızın içine bir Connector kurun, kaynakları tanımlayın, kişileri davet edin. Bir uygulama adresi sonradan sertifika hatası ya da 502 veriyorsa Uygulama açılmıyor rehberiyle başlayın.

Kayıtlar nerede saklanır

Bu sunucuda değil. Oturum kayıtları (ekran akışları, tuş vuruşu günlükleri, izole tarayıcı videosu) Connector'ın kendi diskine, /data altına yazılır; Connector'ın ilk açılışta ürettiği ve /data/recording.key dosyasında tuttuğu bir anahtarla AES-256-GCM ile şifrelenir. Kontrol düzlemi içeriği hiç almaz ve çözemez. Bundan dört sonuç çıkar:

  1. Connector'ın veri hacmini yedekleyin. Başka kimsede kopyası yoktur; hacim giderse kayıtlar kalıcı olarak gider.
  2. recording.key dosyasını da yedekleyin. Anahtar olmadan kayıtlar okunamaz ve anahtar yeniden üretilemez.
  3. Bir kayıt yalnızca Connector'ı çevrimiçiyken oynatılır ve aranır.
  4. Silme, Connector bir sonraki bağlanışında tamamlanır; o zamana kadar kayıt beklemede görünür.

Saklama süresi ve silme akışı dahil kalanı Oturum kaydı ve canlı izleme rehberinde.

Güncelleme

Konsolun Infrastructure → Updates sayfası yeni bir sürüm çıktığında haber verir ve tam komutları gösterir. Sunucuda komutlar şunlardır:

bash
cd captivo-access/deploy
git pull
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d
docker image prune -a -f --filter label=org.opencontainers.image.title=captivo-access

Şema up -d ile kendiliğinden geçer. Son satır değiştirilen imajların diskini geri alır; -a zorunludur çünkü compose dosyası sürümleri sabitler, değiştirilen imaj etiketini korur ve düz bir prune hiçbir şey silmez. Çalışan sürüm asla silinmez. Connector'lar başka makinelerde çalışır ve bu komuttan etkilenmez: her birini yeni connector imajını çekip konteyneri yeniden oluşturarak güncelleyin; /data içindeki belirteç kalır, yeniden eşleme gerekmez.

Ürün geneli sorunlar için: Connector çevrimdışı görünüyor · Uygulama açılmıyor · Passkey ile giriş yapılamıyor

Bu yazı yardımcı oldu mu?