




Web Sitesi-Web Servisleri Icin Host/Cloud Cözümleri Öneri (Asp.Net Core Icin) Ve Diger Sorular
-
Cevaplar icin cok tesekkürler hocam :) eline koluna, yüregine ve emegine saglik
1- c/c++ ile yaz demeni anladim ama asp.net core icinde nasil kullanilir bilmiyorum ama o kadar da kasmaya gerek yok :) obfuscation yeterli olur.. Babel kullaniyorduk sirkette, onu kullanirim.. Bahsettigin upcloud to amazon olayi güzelmis :)
2-3- anladim hocam bu validation olayini ya da sql injection vs. Teorik ve biraz pratik bilgim var. Hatta uyguladim, hatta ajax tabanli bir tane validation da yazmistim ve custom membership ve role provider yazmistim asp.net mvc ile.. Ama sonra webten uzaklastim :)
4- bu söyledigin cok hosuma gitti. Biliyordum ama aklima gelmedi :) bu baya güvenli yapar hocam tesekkürler :)
5- evet bazen tbt'de görünüyor, cs dosyalarinin yolu bile belli oluyor :) onla ilgili de arastirma yaparim
wordpress hosuma gitmiyor hocam, ama kafamda taa eski wordpress var.. Dedigin sey güzelse bakalim hocam :) Ama ücretli vermissen, güzelse satin alirim sorun yok :) diger templatelerini de bekiyorm ayrica.
son yazdigin seyi anladim hocam ama kücük bir sorum olacak. Ben angular ve react bilmiyorum ögrenme niyetimde pek yok ama mecbur kalirsam ögrenirim. SignalR'i bu sekilde kullanmam mümkün müdür? Ya da push notification tarzi bi sey kullanam mi? JS framework alternatiflerine bakiyorum yani.
Tesekkürler tekrar. Kafamdaki tüm sorularin cevabini buldum sayilir.
-
https://www.tahribat.com/forum/themeforest-html-temalar-27-adet-28-aralik-2019-244015
Hocam temalar burda, google slide, email template , image cropper gbi harika seyler de var. Konusunu açtım. Js hakkında detaylı olarak yazacağım.
-
tekrar tesekkürler hocam temalar icin. Aklima bir soru geldi gece gece onu da sorayim..
Simdi benim kafamdaki modele göre web ayagi 3 kisimdan olacak
1- firma websitesi
2- webservis
3- admin paneli
simdi webservisi, mobile uygulama consume edecek (ilerde belki müsteri logini olacak bir site de yapablirim, mobile app ile ayni isleri yapabilen). Burada bir sikinti yok.
Sorum su: admin paneli de bu webservisin fonksiyonlarina erismesi lazim. Bu panel icinde webservisi mi direk cagirayim (ajax ile mesela) yoksa business class'i mi kullansin admin paneli?
bu ayrimi yapmam önemli baslamadan önce.
Tesekkürler
-
@Hannibal_King, hocam yanlışın var. Reacti seo (panel) hizmeti yapmayacağın her projede kullanabilirsin diye düşünüyorum. Projenin başında mimariyi kurunca biraz vakit kaybı oluyor ama ondan sonra o kadar basit oluyor ki herşey. Single page olduğu için sayfa 1 defa yükleniyor. Ondan sonra her seferinde datayı sunucudan çekmiyorsun. Yük client de sadece api çekiyorsun. Sunucundaki yük inanılmaz derece artıyor. Yani sunucunun yükünü azaltmak için çok yöntem var evet. İşte ne bileyim cache olayları vs.
React ile projeyi yazdıktan sonra geliştirmeyi çok rahat yapıyorsun. Artısı çok fazla. React ile server side rendering yapman da mümkün diye biliyorum... Razor, blade vb enginelerin olayı react, angular gibi frameworklerden farklı.
-
-Okudum postlari biraz ama tam bilmiyorum ne kadarina ihtiyacin var. O yuzden sifirdan yazacagim-
1) firma websitesini sal gitsin nginx. arkasina static website dursun.
ssl ile calisan standard bir ayar ve kucuk server isini cok rahat gorur.2) web servis kisminda bunu role based bir yapi ile ayarlayabilirsin. asp yazmadim hic ama kesin vardir onda da. ozet olarak sistemi design ederken rollerini de
dusunurek yapiyorsun. biliyor olabilirsin ama okuyanlara ornek olsun diye:root-> api/{memory_usage,reset_tokens,reset_system}
system spesifik servisleradmin-> api/{users,posts,mails}
user, post, mail iceren tum servislermanager-> api/{posts,mails}
post ve mail iceren sadece okuma izni olan servislermobile-> api/{posts}
mobile application icin gereken servislerpleb-> api/{login,register}
public access ?api level'inde bu tarz ayarlayip admin panel'inden gelen login'leri sadece root, admin, ve manager olacak sekilde kabul edebilirsin. jwt kullaniyorsan decode ettigin data icinde
{
"expire": "1234567890",
"name": "Aytek Fingold",
"userId" : 42,
"role": "admin"
}
gibi tutup direk validation bunun ustunden yapilabilir.
ozet olarak-> user servise request atinca decode edersin role'e bakarsin. mobile user admin'e gitmeye calisiyorsa 403 yapistirirsin sen hayirdir diye.
jwt ya da auth token sistemleri uygun bu gibi bir sistemde. ikisinin de guzel ve sinir bozucu yanlari var.jwt
+ state olmadan kullanilabildigi icin cok rahat. yani kullanici jwt token ile request atinca sen onu validate ettin mi hem `user_id` hem de `role` u biliyorsun. eger user ile
alakali bir islem yapmiyorsan direk baska yere gitmeden request'i process edebilirsin.- bir user'i banlamak istiyoruz veya user parola degistirdi. simdi eski tokenlari nasil silecegiz? kisa cevap silemezsin. bunun icin blacklist tarzi bir sey tutup kontrol etmen gerekiyor. her gelen token once key ile validate ediliyor sonra ya in-memory ya da redis tarzi bir yerde tutulan blacklist icinde var mi diye bakiliyor.
- ikinci kisim nasil token refresh ederim. token suren 1 gun olsun ama sen diyorsun ki user parola girip durmasin eger ip-agent ayni ise. burada ya token bitmesine cok az kala client request atacak ben yeni token istiyorum diye ya da ikinci bir token koyacaksin refresh_token diye. (sure gectikten sonra refresh olmuyor cunku bu useri validate edemiyorsun sistemde.eskiden kabul edilebilir bir token'a sahip olmasi hicbir sey ifade etmiyor jwt icin). refresh token koyarken genel yapi login olunca{ token: {jwt token expires in 3 days}, refreshToken: {jwt token expire in 1 week}}
seklinde ayarlaman lazim. user mobile app kullanirken jwt expire olursa 401 alir. senin client 401 alinca daha once store ettigi refreshToken ile servise gidip benim token'i yenile der. o token hala valid ve blacklist'te falan degilse yeni token'i alir ve user bir onceki request'e geri doner.bu kadar bos konustuktan sonra server ve database
3) bence ilk asamada otomatik storage resize eden bir cloud'dan rds (mysql-postgres) al. hem hicbir isle ugrasmazsin hem de guvenlik-backup tarzi dertlerin olmaz. auto resize eden dedigim mesela baslangicta 10GB lik db aciyorsun ve sistem senin datan 7-8 GB olunca otomatik 20GB'a cikartiyor disk'i database'i kapatmadan. Bunu yapan Google cloud (cok uzun suredir) ve AWS var (birkac aydir) ve bu seviyede free use'a giriyor cogu ya da cok ucuz $10 gibi. Yukarida google cloud kullanmam demis arkadas ama farketmez herhangi bir yerde credit-card fraud durumuna dusersen aynisi olacak. millet calinti kart ile makine alip coin mine ediyor o yuzden bu tarz islemlerde direk hesap kapatilip 6 ay sonra cevap aliyorsun ticket'lara.
- request cache icin ayni makine'de redis kurup cok rahat bir sekilde cache isini halledebilirsin.
- mongo vs icin aman diyorum. rds'ler TB data bile tutup process edebilir. illa ki musterilere bir sey sunmam lazim diyorsan ayir sistemi. storage options normal ve premium diye. hatta bunu marifetmis gibi (50GB datasi olan sirketler 20-makineli distributed sistemler kullanmak istiyor kullandik demek icin o yuzden boyle diyorum) anlatirsin. "Do you have TB's of data? No Problem. Our premium storage option provides horizontal scaling with Cassandra(veya baska db farketmez) for your unlimited data storage needs with ease." - bu konularda maymun seviyesinde turkcem oldugu icin ingilizceye gectim :) --resim vs falan google cloud storage ya da aws s3. db'yi nereden alirsan orada ac bence. ayarlamasi kolay olur.
windows makine isi sinir bozucu genel olarak. ne kadar ihtiyacin var windows'a bilmiyorum. sadece lisans parasi aylik 20-30 euro odeyeceksin makine basi. bir tane windows alip geri kalan makineleri kucuk vps'ler ile halledebilirsin.
- windows makine? yukarida oneriler var. benim kullandigim almanlar satiyor. belki https://www.hetzner.com/dedicated-rootserver/matrix-ax bu tarz makine alip windows ekleyebilirsin 20euro lisans parasi verip. cok uzun suredir kullaniyorum piyasadaki en saglam makineler ama windows ile sifir tecrubem var.
- kucuk vps'ler icin hepsi olur. digitalocean,vultr,hetzner. 5 euro'ya 2vcpu 4GB ram veriyor almanlar (https://www.hetzner.com/cloud). 20 tane falan kullaniyorum ben ve performans digerlerinin abartisiz 1.5-2 kati.- ddos icin cloudflare vs oldukca mantikli. ucretsiz olan hizmetler limitli. herhangi bir parali uyelik alman gerekebilir.
- guvenlik icin cok genel seyler soyleyebilirim. ssl zorunlu. her request https ustunden gitsin. http'yi sadece http gelen request'i https'e redirect icin kullan. makineler'de genelde 80-443 disinda tum portlari kapat. db vs erisim varsa ip limitle key ile login ol. server'lar icin de bu gecerli. root parola ile login'i kapat sadece key bazli erisim olsun (linux icin bunlar). sql injection icin genel kurallari takip etsen sikinti olmaz. ama her turlu https://github.com/sqlmapproject/sqlmap vs ile surekli test et.
- gdpr icin avrupa ulkeleri (almanya-fransa-hollanda vs) olur. rusya'da falan tutarsan anca sikinti. user ile alakali ne tutabilirsin tutamazsin baya detayli ama storage icin bizi ilgilendiren kismi bu tuttugun datayi kabak gibi acik tutmamak. genel olarak sirketler sadece user bilgilerini {"username", "name-surname", "email", "phone"} gibi bir key'le sifreleyip oyle tutuyor. o key de vault tarzi bir yapida (o app'ten ayri direk gomulu key falan degil genelde) tutulup bunlara erisim yaparken geri aciliyor. bunlari yaparken her design decision'i aciklayip belirtiyorsun. bu datalara tekrar ihtiyacim vardi vs. encryption boyle calisiyor cunku diger turlu implement edecek para yoktu. ama ozet olarak duzgun bir avukat'la oturup konusmak lazim detaylari.
verdigim ornekler oldukca genel. gece yazdim gozumden kacan veya hatali olan yer varsa durtebilirsiniz.
-
@musdawdaf hocam cok cok tesekkürler olaya bambaska boyut kattin. Ozellikle bu tokenlardaki acikalamalarin yol gösterici oldu benim icin. Güvenlik isini siki tutmam gerek. DB yi hem disari kapatmam hem de yedeklemem gerek. Müsterilere esit hizmet sunacagim bu proje icin. Firma ya da bireysel paket olacak, baya bir kapsamli isler var :)
projenin lisanslama tarafini ben zaten nodejs ile yaptim, sanirim onu kullanacagim. Ama web servis tarafini da asp.net core ile yapmaya karar verdim. Linux makinelerin avantaji fiyat, windows makinelerin avantaji ise benim icin bilindik olmasi. O yüzden bilmedigim bir deryaya girip risk almak istemiyorum. Cloud cözümler üzerinden gidecegim.
hetzner firmasini cok önceleri incelemistim.. windows sunuculari oldugu aklimdan cikmis. Yine de hala ne icin cloud ne icin vps-dedicated server kullanacagima karar veremedim.
Dedigin gibi sirket sitesi icin cok büyük seylere gerek yok. Onemli olan webservis ve database. NodeJS ile yazilmis admin panelini+license management systemini de eklerim, bunun icin iyi linux bir cözüm sorun olmaz. Suan bu sistemi calistigim sirketin, windows serverina kurdum. Cok fazla is yükü yok, suan 150-200 kisinin lisansini kontrol ediyor ama bu sayi katlanacak. Cünkü yaptigimiz ürün dünyadaki bir cok ülkeye pazarlanmaya basladi..
Benim yapacagim uygulama da bir nevi böyle olacak, isvicre icin hedefim 1000 müsteri, AB ülkeleri icin ise daha fazla olacak ama o sonraki asamalarda. GDPR önemli yer kapliyor. Isvicre de kabul etmis GDPR kurallarini ama tek basina yeter mi bilmiyorum. Daha önce yazdim, kisisel verilerin isvicre'de tutulma zorunlulugu gibi bir sey var ve bunlar da 3. kisilere gösterilmemesi gerekiyor. Ama yine de cok bilgim yok, dedigin gibi belki bir avukat ile konusmak lazim.
Düsündükce daha cok seylerin farkina variyorum ve gittikce derinlesiyor bu da korkutuyor beni :) Tek basima bunlari yaptigim icin, isim daha zor. Ama böyle olmasi bi yandan da iyi, daha cok motive ediyor ve daha cok sey ögrenebiliyorum. Web konusunda bilgim kisitli, daha cok desktop vemobil yazilimlari ve elektronik iyi biliyorum ama web tarafina da baya girmem ve cok yönlü düsünmek zorundayim. Buradan tecrübeli arkadaslarin bilgilerinden faydalaniyorum. Tesekkürler gercekten :)
-
@MhmdAlmz hocam elbette isterseniz Reactı tüm projelerinizde kullanabilirsiniz. Ancak benim söylemek istediğim şudur; Js frameworklerinin ortaya çıkmasındaki temel sebep state managementtır. Örneğin React niçin ortaya çıktı? Facebook anasayfa üzerinde çok sayıda sürekli olarak güncellenmesi gereken alanlara sahipti. Sayfa yenilenmeden chat bölümü, zaman tüneli, bildirimler hepsi sürekli güncelleniyordu. İşte burada bize veri geldikçe UI otomatik olarak güncellensin dediler. Bu sebeple React benzeri frameworkler ortaya çıktı.
https://www.freecodecamp.org/news/do-we-still-need-javascript-frameworks-42576735949b/ bu veya buna benzer makaleleri okursanız Synchronization of state and view gibi gerekçeleri görürsünüz. Yani Js frameworkler insanlar kolayca Single Page Application yapabilsinler diye üretilmediler.
Yoksa bir framework e ihtiyaç duymadanda Single Page Application üretilebilir. Örnek; https://dev.to/itnext/do-i-really-need-a-spa-framework-3occ kodları da burada https://github.com/softchris/vanilla-spa/tree/master/frontend . Eğer bir framework ile SPA oluşturmak istersek Vue, React veya Angular bu kadar popüler olmadan öncede başka birsürü framework vardı ve yine SPA lar oluşturulabiliyordu.
Yani eğer şöyle dersek daha doğru olur; "Js frameworkler Single Page Application yapımını kolaylaştırır." Çünkü içinde bir takım bileşenler vardır; Routing, Component ,Template vs vs... Mesela ben hayatımda hiç Single Page Application yapmadım. Multi Page Application yaptım hep.
Ancak neredeyse tüm uygulamalarımda Vue.Js kullanırım. Neden çünkü illaki bazı ekranlarda veri akışı fazla oluyor işte bu gibi durumlarda kullanıcı sürekli sayfayı yenilemesin, iyi bir kullanıcı deneyimi ortaya çıksın diye yükü javascript e yüklüyorum. Vue.Js yardımı ile durum yönetimini ve UI güncellemelerini yapıyorum.
Elbetteki seninde dediğin gibi Razor ve Js Frameworkleri farklı kulvarlarda. İşte bende o sebeple diyorumki @unbalanced hocam eğerki çok değişken ve sürekli canlı verinin aktığı ekranlara sahip değilse, bu durumda razor işini çok güzel görecektir. Yani tüm rendering işi server side da olacak. Ancak olurda zaman zaman client side rendering yapmak isterse bu durumda da Vue.js i minimal düzeyde kullanabilir. Yine tamamını öğrenmesine gerek yok.
unbalanced hocamın signalr sorusuna istinaden;
Hayır signalr ı js frameworklerinin yerine kullanamazsınız. Signalr ile realtime verileri taşıdınız tamam. Ama onu bağlama işini bir js frameworkü ile yapmanızı tavsiye ederim veya Pure Javascript. Sonuçta client side rendering yapıcaksınız. Diyelim canlı chat yapıyorsunuz. Signalr veriyi getirecek mesela
sonra bu veriyi javascript ile ekranda göstereceksiniz.
Webservis sorusu için
Direk js ile webservisi çağırabilirsiniz hocam. Çünkü eğer önce sunucuya istek atarsanız şöyle olacak; browser -> sunucu -> api ancak siz direk api yi çağırırsanız browser -> api olacak. Doğru anladıysam eğer soruyu sanırım bunu sormak istediniz.
-
@Hannibal_King cevap icin cok tesekkürler hocam. Vue.js ye bakyim. React'e baslamistim iyi gidiyordu ama sonra bi anda bi ic ses duydum :) , ya sen webci degilsin ne diye böyle seyler ögreniyorsun diye.. O dakika tüm react hevesim kacti, ben de kapattim her seyi :) Vue.js yi temel seviyede bilmem isime yarabilir. Bi de type script var ama emin degilim o ne kadar kullanilir bu tür durumlarda
Soruma gelince; tekrar yazayim.. bir web servisim olacak. Mesela login islemi var.. adam telefonla login oluyor ve webservisi kullaniyor. Burada bi sikinti yok. Ben mobile app yerine bi de bunun web versiyonunu yapiyorum diyelim. Ayni login olayi bunda da var.. Simd ben bu servisi nasil kullanacagim? Dedigin gibi direk js üzerinde mi cagirayim? Yoksa bu login metodu benim business projemde ve ben Web versiyonuna bu business projesini referans olarak kullanip mi login oldurayim. Soru buydu. Umarim anlasilir olmustur
-
Ben mobil uygulama geliştirmiyorum hocam ama sanırım servis ile authentication yapmak için tokenları kullaniyorsunuz. Web tarafindada asp.net core cookie authentication kullanacaksiniz. Mobil bilmediğim için çok bişey diyemedim. Ancak web te auth ile ilgili sorunuz olursa cevaplarim.
Hocam angular, react, typescript bence boşverin. Backend geliştiricisiniz siz. Sadece minimal düzeyde js ile dom manipülasyonu veya jquery, birazda temel vue.js gayet yeterli. List rendering vue.js diye bakarsaniz dökumanlara yeterli olur.
-
hocam sorumu anlamadin. olay sadece login degil :) Yani web servisimin arkaplaninda metodlar var. Atiyorum ögrencileri listeleme, ögrenci bilgileri vs. Bunu mobil uygulama ile webservis kullanarak erisebiliyor. Ben ayni seyi web sitesinde de yapmak istiyorum. Yani ögrenci listesi, ögrenci bilgilerini vs göstermek istiyorum. Bunun icin bu websitesinde webservisi mi cagirayim yoksa, web servisin arkasinda olan business projesini mi (MVC'deki controller mesela).
Yani rest webservisi, bir MVC projesinde mi kullanayim yoksa MVC olustururken bunu ayni zamanda APIli yapip, mobilde mi bunu kullanayim :)
farkediyorum türkcem gittikce kötülesiyor :) kendimi ifade edecek kelime bulamiyorum