Minimum gereksinimlerle development ortamı için Redis Server kurulumu.
Windows Subsystem for Linux
Ubuntu installation sonrasında UNIX için username ve password oluşturma ekranı geldi, tanımlamalardan sonra sistem otomatik olarak login oldu.
wsl --install
Sırasıyla aşağıdaki komutlar çalıştırıldı, kodları redis.io dokümanından kopyalayabilirsiniz.
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install redis
Kurulum bir hata vermeden tamamlandı ve otomatik başlatıldı.
sudo service redis-server status
komutu ile Redis Server'ın aktif olarak çalışıp çalışmadığını görebiliriz.
Active : active (running) ifadesi Redis-Server servisinin aktif olarak çalıştığını gösteriyor.
Herhangi bir konfigürasyon değişikliği yapmadan sıfırdan oluşturduğumuz bir uygulamanın nasıl bağlanacağına bakalım.
Hem local ortamda hem de remote sunucularda uygulamadan bağımsız olarak, yani yazdığınız koddan bağımsız olarak redis server erişimini test etmek ve gerektiğinde komut göndermek için Redis Insight (https://redis.io/insight/) kullanıyorum.
Redis Insight uygulamasını açtığınızda +Add Redis Database ekranında bir değişiklik yapmadan sol altta bulunan Test Connection'a tıkladığımızda Connection is successful mesajını gördüm.
Redis Server kurulumunda default olarak gelen konfigürasyonda localhost ( 127.0.0.1) adresinde 6379 numaralı porttan authentication olmadan yani bir kullanıcı adı / parola gerekmeden bağlantı sağlanabiliyor.
Eğer yalnızca deneyimlemek için kuruyorsanız Redis Server için daha fazla bir işlem yapmanıza gerek yok.
3. Redis bağlantı bilgilerinin tanımlanması:
ABP Template'i olarak non-tiered ve public web site seçili kullanmıştık. Bu durumda .Web ve .Web.Public projeleri Redis Cache'e ihtiyaç duyuyor.
ABP Suite 8.2.x sürümünü kullandığım için Redis bağlantı bilgisi appsettings.json içerisine otomatik olarak geliyor.
Bendeki konfigürasyon şu şekilde geldi :
Web uygulamasını çalıştırdığımda development ortamı ve ABP Startup Template'i ortak default konfigürasyona sahip olduğu için bir hata almadım.
Bir uygulama dışarıya açılacak bir uygulama olsa da olmasa da aşağıdaki pratikleri her durumda uygulamaya çalışıyorum.
- Uygulamanın Development, Test ve Production ortamlarını ve konfigürasyonlarını ayarlayıp sıfır noktasında yani hiç bir kod geliştirmesi yapmadan deployment yapıp kontrol ediyorum.
- Uygulamanın çalışması için gerekli olan veritabanı, cache gibi gereksinimleri default ayarları ile bırakmadan çalışma ortamları için ayrı ayrı konfigüre ediyorum.
- Güvenlik açısından sunucu ve uygulama erişimlerini en sıkı politikadan gereksinim oldukça yetkileri arttırıyorum.
Redis server için yapılabilecek temel güvenlik konfigürasyonu şöyle olabilir :
Redis 6 sürümü ile birlikte Redis Access Control List özelliğini kullanabiliriz.
- Redis Server'a komut göndermek için Redis Insight uygulmasındaki CLI arayüzünü kullanıyorum.
Connection ayarlarında bir username girmedik ancak varsayılan olarak default isimli kullanıcı ile bağlanıyor.
CLI arayüzünde ACL whoami komutu ile hangi kullanıcı ile işlem yaptığınızı görebilirsiniz.
Redis server içerisindeki kullanıcıları listelemek için ACL LIST komutunu kullanabilirsiniz. Bu komutun dönüşünde default isimli kullanıcının parolasının olmadığını ve tüm komutları çalıştırmaya yetkisi olduğunu anlıyorum.
default kullanıcısına şifre oluşturalım:
Random bir parola ürettim :
Lgss32uIrfwgr$F7WY0n$25*$yRm6DI3z*HD$4SvjG6ymD1WaNExvr^r2nRqGMZSCco0mB2@#f#HzzF!syxRXN5FRTImj&LrG84j3*phJznSV5VdY@Nhx#hCSE&@0T0F
ACL SETUSER -> Yeni bir kullanıcı oluşturmak veya mevcut bir kullanıcının ayarlarını düzenlemek için kullanılan komuttur.
ACL SETUSER [username] [rules] şeklinde bir kullanımı var.
Üstteki görüntüde default olarak yazdığımız kullanıcı adı ve devamında ">" simgesini kullandığıma dikkat edin.
ACL SETUSER ile yapabileceğiniz işlemlere şu adresten erişebilirsiniz : https://redis.io/docs/latest/commands/acl-setuser/
[password] plain text olarak girdiğiniz parolanızı SHA256 ile hashleyerek kaydeder. Eğer doğrudan hashlenmiş değeri kaydetmek isterseniz > yerine # simgesini prefix olarak kullanabilirsiniz.
default kullanıcısına şifre oluşturduğumuz için, sonraki bağlantılarda komutları göndermeden önce AUTH işlemi yapmamız gerekiyor, yani redis-server'da oturum açacağız. Bunu deneyimlemek için;
quit komutunu kullanabilirsiniz.
Aynı CLI ekranında ACL LIST komutunu çalıştırdığımda login olmadığım için aşağıdaki hatayı alıyorum.
Redis Insight için connection ayarlarından bilgileri girip bağlantı yaparken bunun kullanılmasını sağlayabilirsiniz.
Eğer development yaptığınız ortam haricinde başka bir sunucuda Redis çalışıyorsa, örneğin docker desktop üzerinde de çalışıyor olabilir. Bu durumda redis ayarlarından protected mode'u kapatıp Redis ortamını network olarak dışarıya açmanız gerekecek. Özellikle Production ortamlarında sunucu tarafındaki firewall ayarlarının mutlaka yapılması ve mümkünse Redis connection portunun 6379 yerine başka bir porta alınması iyi olacaktır.
Referanslar
https://learn.microsoft.com/en-us/windows/wsl/install
https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/
https://redis.io/docs/latest/operate/oss_and_stack/management/security/acl/