13 Aralık 2016 Salı

BASİT BİR WEB UYGULAMASI GELİŞTİRME (Ubuntu Server ve Node.js)

Merhaba ben Recep Sızlanan öncelikle bize lazım olacak olan programları tanıtmak ile başlayalım.

Kullanacağımız Programlar : 

Ubuntu Server 16.10
VirtualBox 5.1.08
Node.js 4.2.6
MySQL 14.14

Ubuntu Server 16.10 :  Bilgisayarlar, sunucular ve akıllı telefonlara yönelik olarak geliştirilmektedir. Ubuntu projesi Linux ve özgür yazılımın, bilgisayar kullanıcılarının günlük yaşamının bir parçası haline gelmesi amacıyla başlatılmış[2] olup ilk kararlı masaüstü sürümü Ekim 2004'te yayınlanmıştır. Ubuntu’nun masaüstü sürümü günümüzde 40 milyonu [3] aşkın kullanıcı sayısıyla dünyanın en yaygın kullanılan masaüstü Linux dağıtımı konumundadır.[4]Akıllı telefon ve tabletlere yönelik Ubuntu Touch türevi ise ilk kez Şubat 2015'te piyasaya sürülmüştür.

VirtualBox 5.1.10     :  VirtualBox en yalın haliyle bir sanal makine yazılımıdır. VirtualBox ile bilgisayarınızda sanal olarak farklı işletim sistemleri çalıştırabilirsiniz.


Node.js 4.2.6 : Node.js sunucu tarafında javascript ile kod geliştirilmesini sağlayan bir platformdur.


MySQL 14.14 : MySQL daha çok web uygulamalarında kullanılan çoklu iş parçacıklı, çok kullanıcılı, hızlı ve sağlam bir ilişkisel veritabanı yönetim sistemidir. Linux altında daha hızlı bir performans sergilemektedir. Kaynak kodu açıktır.

Kısa bir tanıtmadan sonra kurulum aşamalarını ve ne yapmamız gerektiğini  resimli olarak aşağıda bulabilirsiniz ...


Öncesinde tabi ki dediğimiz programları indirelim ve devam edelim ...


Öncelikle VirtualBox kurulumu yapıyoruz; Resimlere göz atarak kurulum aşamalarını gerçekleştirelim ?


















    Kurulumu gerçekleştirdikten sonra programımızı açıyoruz. Karşımıza aşağıdaki gibi boş bir ekran gelecek ;

Sol tarafta yeni yazan kısıma tıkladıktan sonra aşağıdaki gibi bir ekran çıkacaktır

Next diyerek ilerliyoruz.

 Burası aynı kalabilir.


 Oluştura tıklayarak aşağıdaki seçime geliyoruz
 Disc kalıbı oluşturacağımız için aynı kalabilir.
 Burda değişken yada sabit yapmamız tamamen bize kalmış.
Ve işlem şimdilik tamamdır.Çift Tıklayarak aşağıdaki görüntüye geliyoruz


 Burada da sağ alttaki dosya seçme ikonuna tıklayarak ISO olarak indirdiğimiz Ubuntu Server'ı seçerek sanal makinemize Ubuntu Server işletim sistemini yüklemeye başlıyoruz. Yine burada da klasik şekilde yükleme yapacağız ben önemli olan yerleri ekleyeceğim. Kurulumda ilerledikten sonra karşmıza şu ekran çıkıyor :



Seçimimizi yaptıktan sonra kuruluma geçildi.







 "Guided - use entire disk and set up LVM" seçili olarak geliyor. LVM en basit haliyle disk yönetimi sağlamaktır. Boyut tahmini yapılamadığı durumlarda LVM ile depolamaya disk ekleme, çıkarma gibi işlemler yapılarak dosya sisteminin genişletilmesi veya daraltılması sağlanır. Biz basit bir uygulama yapacağımız için buna ihtiyacımız yok burada bir üst seçenek olan "Guided - use entire disk" seçilmesi yeterli olacaktır.




"Configuring Tasksel" ekranında da "No Automatic Updates" kısmını seçebiliriz. Yani otomatik olarak güncelleme yapılmayacak. Biz zaten Ubuntu Server'ı yükledikten sonra güncellemeleri yapacağız.


"Software Selection" kısmında da "OpenSSH server" varsayılan olarak seçili değil; ancak biz seçebiliriz. SSH ağ üzerindeki başka bir sunucuya uzakta bulunan başka bir makineden bağlantı sağlayan bir protokoldür. SSH "Secure Shell" yani güvenli kabuk anlamına gelmektedir. Seçmeyi unutursanız da sorun yok Ubuntu Server'ı kurduktan sonra da bunu yükleyebilirsiniz.

 Böylece Ubuntu Server kurulumunu tamamladık. Kullanıcız adımızı ve şifremizi girdikten sonra bizi aşağıdaki ekran karşılıyor.



Kurulum aşamasında bir yerde otomatik güncelleştirmeleri iptal etmiştik. Şimdi kendimiz kod ile güncelleştirmeleri yükleyeceğiz. Öncelikle sudo apt update komutunu yazarak güncelleştirmeleri görüyoruz. Daha sonra sudo apt upgrade komutunu girerek bu güncelleştirmeleri yüklüyoruz. Bu komutlardan biraz bahsetmek gerekirse başlarına yazdığımız sudo "Super User DO" anlamına geliyor. Yani yaptığımız işlemi süer kullanıcı olarak yapıyoruz. Bu bize bir yetki aslında bir güç veriyor. Sudo kullanılan komutlar bazen tehlikeli olabiliyor. Çünkü pek bir engel tanımadan yazılan kodun yapılması isteniyor(emir gibi düşünülebilir).



Gerekli güncelleştirmeler yapıldıktan sonra şimdide VirtualBox'ın ağ yapılandırmasından bahsedelim. Bunun için sudo poweroff komutunu kullanarak sanal makinemizi kapatalım. Daha sonra VirtualBox ekranında kurduğumuz sanal makineyi tıklayarak ayarlar kısmını açıyoruz.

Daha sonra açılan menüde "Ağ" sekmesini seçiyoruz ;ve şuna takıldı kısmında varsayılan olarak NAT seçili olduğunu görüyoruz. 

Ağ yapılandırması var bunlar NAT ve Köprü Bağdaştırıcısı (Bridged). Bunlardan kısaca bahsetmek gerekirse Bridged seçilirse ana bilgisayar ve sanal bilgisayar aynı ağda gibi bir durum ortaya çıkıyor. Bu aslında birçok avantaj getirse de aynı IP sanal bilgisayara da verildiğinde ortaya sorunlar çıkabiliyor. NAT'ta ise ana bilgisayarın IP adresini bütün sanal makinelerde kullanıyor. Bunun kötü yanı ise dışarıdaki bir bilgisayar sanal bilgisayara IP ile bağlanamıyor çünkü sanal bilgisayarın bir IP'si yok. Bu durumda en iyi çözümlerden birisi NAT kullanarak üstüne port yönlendirme yapmak. Bunun için yine aynı kısımdaki Gelişmiş sekmesini açarak B.Noktası Yönlendirme (Bağlantı Noktası Yönlendirme) butonunu tıklıyoruz. Karşımıza boş bir ekran çıkıyor.

 Sağ üstteki + simgesini tıklayarak yeni bir bağlantı yönlendirme kuralı ekliyoruz. Ben üstteki şekilde kendi kullanacağım portlara göre ayarlama yaptım. Benim yazdığım kurala göre sanal makineden 7182 portuna gelen istekler ana makinede de 7182 ye yönlendiriliyor. Bu ayrıca bir karışıklık olmasını engelliyor. Mesela kullandığınız bir framework belli bir portu ana bilgisayarınızda kullanıyor olabilir sanal makinenizde aynı portu kullanırsa ortaya bir karışıklık çıkabilir ;ama benim ana bilgisayarımda 7182 portu zaten boş olduğu için aynı porta yönlendirmem de bir sorun yok. Kısaca protokolden de bahsetmem gerekirse burada seçebileceğimiz iki tane protokol var bunlar : TCP ve UDP. Bu protokolleri Murat Hocamız bize çok güzel bir örnekle açıklamıştı ben de aynı şekilde açıklayacağım. TCP protokolü telefonla arama yapmak gibi düşünülebilir. Eğer birisi telefonu açarsa konuşursunuz anlatırsınız ve anlamadığınız yer olursa sorabilirsiniz. UDP protokolü ise mesaj atmak gibidir. Attığınız mesaj ulaştı mı ? Gönderdiğiniz telefon açık mı ? Mesaj görüldü mü ? gibi şeyleri bilemezsiniz. En özet şekilde böyle anlatılabilir. Biz TCP protokolünü seçerek devam ediyoruz. Gerekli ayarlamaları yaptıktan sonra tekrar sanal makinemizi çalıştırıyoruz.

 Artık gerekli programları yüklemeye başlayabiliriz. Öncelikle Node.js'yi yüklüyoruz bunun için sudo apt-get install nodejs komutunu kullanıyoruz. Daha sonra sudo apt-get install npm yazıyoruz. Bu bize Node.js'yi kullanarak kolayca paket ve modül yükleyebilmeyi sağlıyor. Zaten npm "Node Package Modules" anlamına geliyor. Daha sonra sudo apt-get install mysq-server yazarak MySQL'i yüklüyoruz. Bizden MySQL veritabanına erişim için kullanacağımız parolayı belirlememizi istiyor. Unutmayacağımız bir şifreyi yazarak devam ediyoruz. Artık kullanacağımız temel bileşenleri yükledik MySQL veritabanının komut sistemine bağlanmak için mysql -u root -pkomutunu yazıyoruz. MySQL komut sistemine bağlandıktan sonra unutmamamız gereken 2 önemli şey var. Bunlar MySQL'i ilk kullandığımda benim içinde sorun olmuştu.

1 - Bütün MySQL kodları noktalı virgül ile biter. Noktalı virgül koymazsanız kod çalışmayacaktır.
2 - Genellikle MySQL komutları büyük harfle yazılır ;ancak veritabanı ismi, tablo isimleri ve kullanıcı adı gibi kısımlar küçük harfle yazılır. Bunların yanı sıra MySQL büyük-küçük harf duyarlı değildir.

 Bu yazdıklarıma dikkat etmeyi unutmayın. Şimdi MySQL'de kullanılan genel kodlardan bahsedeceğim.

create database veritabani_ismi; : Belirtilen isimdeki veritabanini ekler.
show databases; : Bulunan veritabanlarını göstermeyi sağlar.
show tables; : Bulunan tabloları göstermeyi sağlar.
use veritabani_ismi; : Belirtilen veritabanını kullanmayı sağlar.
describe tablo_ismi; : Belirtilen tablodaki id,isim gibi kısımların türlerini vs. gösterir.

 İşe yeni bir veritabanı ekleyerek devam ediyoruz create database ornek; yazarak ornek isimli veritabanini ekliyoruz. Daha sonra kullanılan veritabanını ornek olarak değiştiriyoruz ve bir tablo ekliyoruz.

 Daha sonra describe tablo_ornek yazarak eklediğimiz tabloyu görebiliriz.

 Sıra geldi bu tablomuza veri eklemeye bunun için insert into tablo_adi values (Değerler);komutunu kullanıyoruz.
  Aynı şekilde istediğimiz kadar veri ekleyebiliriz ben birkaç tane daha kayıt ekliyorum. Daha sonrada select * from tablo_ornek komutunu kullanarak tüm kayıtların gösterilmesini sağlıyorum.

  Böylece MySQL ile bir veritabanı ve bir tablo ekledik. Artık MySQL'den çıkabiliriz bunun için \qkomutunu kullanıyoruz. Daha sonra sudo vim uygulama.js komutunu kullanarak uygulama adında Node.js kullanacağımız bir javascript dosyası oluşturuyoruz. Buradaki vim kullanacağımız editörü belirtiyor aslında nano vime göre daha kolay bir editör ancak ben vime alıştığım için bunu kullanıyorum. uygulama.js dosyasına aşağıdaki kodu yazıyoruz.
 Bu kodu biraz açıklamak gerekirse ilk iki satırda MySQL'i ve httpyi kullanacağımızı belirterek bunları bazı değişkenlere atıyoruz gibi düşünebiliriz. 3-8. satırlar arasında bağlantı diye bir değişken oluşturuyoruz ve bu değişkene MySQL ile oluşturduğumuz bağlantıyı atıyoruz. Bu bağlantıda host olarak localhostu yani o anda kullandığımız bilgisayarı veya ip adresini kullanacağımızı belirtiyoruz. User kısmında root yani asıl kullanıcı olduğumuzu belirtiyoruz. password kısmına MySQL veritabanı şifremizi giriyoruz ,ve database kısmına da veritabanımızın ismini yazıyoruz.9-16. satırlar arasında da for döngüsü ile "SELECT * FROM tablo_ornek" kodu ile MySQL veritabanımızda ki tüm verileri JSON formatında ekrana yazdırmayı sağlıyoruz.15. satırda da ağ yapılandırmasında da kullandığımız 7182 portunu kullanacağımızı belirtiyoruz. Bu portu ana makinedeki yine 7182 ye yönlendirmiştik. Bu kodu yazdıktan sonra sudo apt install nodejs-legacy komutunu yazarak nodejs nin node komutunu kullanabilmeyi sağlıyoruz. Daha sonra da npm install mysql komutunu yazarak Node.js ile MySQL'i kullanabilmeyi sağlıyoruz. Daha sonra node uygulama.js yazarak uygulamamızı çalıştırıyoruz. Ana bilgisayarda 7182 portuna giderek verilerimizi web üzerinden görebiliyoruz.

Karşılaşılabilecek sorunlar:

- MySQL'i sadece normal yüklemek yetmez ayrıca npm ile Node.js kullanarakta yüklenmeli.

- Nodejs-legacy komutu kullanılmazsa node uygulama.js komutu çalışmaz node komutu her ne kadar Node.js ile birlikte çalışsada ayrıca Nodejs-legacy komutu ile yüklenmesi gerekir.

- Veritabanında ID kısmını Auto Icrement yani otomatik olarak arttırılmasını sağladığımız için veri eklerken ID kısmına NULL yazıyoruz çünkü o zaten kendisi artıyor.

-  Port yönlendirmesi yapılırken ana makineye yönlendirilen portun boş olmasına dikkat edilmeli.


Kaynaklar:

http://www.koodla.com/2010/02/24/ubuntu-lamp-rehberi/
http://harunozer.com/makale/nodejs_nedir.htm
http://www.putty.org/
https://www.virtualbox.org/wiki/Downloads
http://tecadmin.net/connect-nodejs-with-mysql/#
https://www.ubuntu.com/download/server
https://help.ubuntu.com/community/Nano