Skip to content
DnsLister Forum

Where domain hunters compare notes

Asıl zor kısım panel değilmiş, para toplamakmış | PNLCS hikayesi

Panelica'yı yazarken en çok korktuğum kısım hep teknik taraftı: farklı PHP

sürümleri, kullanıcı izolasyonu, Nginx/Apache, mail, DNS… Aylarca kafa

patlattığımız yer burasıydı. Sonunda panel oturdu.

Ama hosting sadece panel değil. Bir sağlayıcı için asıl döngü şu: müşteri gelir,

sipariş verir, ödeme alınır, hesap otomatik açılır, her ay fatura kesilir,

ödemezse askıya alınır. Yani faturalandırma ve provizyon. Biz de en başta "bunu

WHMCS'e bırakırız" dedik.

Sonra WHMCS'e yakından baktık: kapalı kaynak ve müşteri başına ücretli. Yani

büyüdükçe daha çok ödüyorsun, kaynağını göremiyorsun, istediğin gibi

genişletemiyorsun. Tam da Panelica'yı yazarken kaçtığımız "sisteme kilitlenme"

hissi. "Ne kadar zor olabilir ki, sonuçta CRUD" dedik. Ürün, plan, sipariş,

fatura… Klasik. İşte o cümleyi kuran herkesin başına gelen şey bizim de

başımıza geldi.

Faturalandırma sinsi çıktı, çünkü:

– Para işin içinde. Ödeme geçidinden (Stripe/PayPal) gelen webhook iki kere

gelirse, ağ koparsa ya da sıra karışırsa müşteriyi iki kere faturalandırma

riskin var. Idempotency'yi baştan doğru kurmadan billing yazmak, sonradan

"bu adam neden iki kere ödemiş?" diye log kurcalamak demek. Bu tek başına

panelin yarısı kadar uğraştırdı.

– Provizyon her panelde farklı. cPanel'in API'si başka, Plesk başka, Proxmox

bambaşka. "Hesap aç / askıya al / kapat" gibi basit görünen şeyi, her panele

ayrı ayrı değil de tek bir modül arayüzünün arkasına almak gerekiyordu. Bu

soyutlamayı kaç kez baştan yazdık, saymadım.

– Geri kalan "küçük" şeyler: müşteri paneli, ticket, reseller, çoklu dil, çoklu

tema, iade, para birimi… Her biri tek başına küçük, hepsi birden bir ürün.

Sonunda ortaya PNLCS çıktı: Laravel ile yazılmış, kendi sunucunda çalıştırdığın,

açık kaynak (MIT) bir hosting faturalandırma platformu. Panelica'ya bağlı değil,

bilerek cPanel/Plesk/DirectAdmin/Proxmox ile de çalışıyor. WHMCS bizi kilitlediği

için yazdık; o yüzden başkasını kilitlemesin diye açık bıraktık.

En büyük dersim şu oldu: bir üründe "sıkıcı" sandığın CRUD kısmı, çoğu zaman asıl

mühendisliğin saklandığı yerdir. Panel görünürde zor, ama para + dış sistemler +

idempotency bir araya gelince billing beni daha çok yıprattı.

Repo (MIT): https://github.com/Panelica/pnlcs

Merak ettiğim: ödeme/webhook tarafında idempotency'yi siz nasıl çözdünüz? Bir de

"kolay sanıp altından zor kalktığınız" bir CRUD projeniz oldu mu?

Source: r/minikdev · by /u/SatoshiTURK

Leave a Reply

Your email address will not be published. Required fields are marked *