Merhaba arkadaşlar.

Bu yazımda shared hostingden sunucuya nasıl geçilir, geçiş sürecinde bizi neler bekliyor gibi soruların yanıtlarını bulabileceksiniz. Şimdiden söyleyeyim sunucu konusunda kesinlikle bir uzman değilim hatta 1 ay öncesine kadar bu konuda hiç bir bilgim yoktu. Ama 1 aylık detaylı araştırmalarım sonucunda sitemi sunucuya taşımayı ve eskisinden çok daha güvenli ve hızlı hale getirmeyi başardım.

Shared hostingde kontrolün tamamen bende olmaması yani birçok kısıtlamanın olması, aynı IP adresinde birçok site barındırıldığı ve bir sitenin aşırı kaynak tüketiminin diğerlerini olumsuz yönde etkilemesi, sitemin oldukça yavaş olması ve en önemlisi de sitemin ziyaretçi sayısının artmasıyla birlikte, aşırı kaynak tüketimi gerekçesiyle hosting firmasının sitemi kapı dışarı etme olasılığının artmasından dolayı artık sunucuya geçmem gerektiğini düşündüm ve siteyi sağlıklı bir şekilde sunucuya taşıyıp yoluna problemsiz devam etmesini sağlamama yetecek bilgi seviyesine gelebilmek için yaklaşık 1 aylık bir araştırma sürecine girdim.

Bu yazımı da tüm tecrübelerimi bu konuya merak salan arkadaşlara yardımcı olabilmek için yazıyorum. Çünkü ben araştırmalarıma başlarken, bu süreci baştan sona anlatan ve bana rehberlik edebilecek hiçbir makaleye denk gelmedim. Ve siteyi sunucuya taşımayı öğrendiğimde, başkaları benim yaşadığım zorlukları yaşamasın diye bir makale yazmaya kendi kendime söz vermiştim.

Şimdi gelelim neler yaşadıklarıma... Sunucu sonuçta genel bir tanımdı benim için. Önce nedir ne değildir diye araştırdım. Firmaların sunucu hizmetini genel olarak VPS, VDS, Dedicated Server ve Bulut (Cloud) Sunucu olarak 4 ayrı kategoride sunduklarını gördüm. Bunlar fiyat ve performans olarak birbirlerinden farklıydı. Ben fiyat performans olarak bana en uygun olan VPS hizmetini tercih ettim. Siz de kendi ihtiyaçlarınıza göre bir seçim yapabilirsiniz.

Bu seçimi yaptıktan sonra sıra güvenilir ve hizmet kalitesi iyi olan bir firma bulmaya gelmişti. Var olan neredeyse tüm firmaların paketlerini inceledim. Tabii ki her firmanın iyi ve kötü yönleri olabilir. Bir firmada iyi tecrübeleri olan müşteriler olduğu gibi kötü tecrübeleri olan müşteriler de vardır. Hiçbir firmayı kötülemek istemiyorum o yüzden memnun kaldığım bir firmadan bahsedeceğim sadece. Uzun araştırmalarım sonucu bulduğum SOLIDNIC firmasından deneme amaçlı bir VPS paketi satın aldım. Alış o alış... Müşterisine bu kadar değer veren başka bir firma daha yoktur herhalde dedirtti bana bu firma. Amacım reklam yapmak değil ama bu süreçte bana o kadar destek verdiler ki, bu iyiliğe bir karşılık olarak onlardan bahsetmezsem olmazdı.

Firmayı da seçmiştim artık Sunucumun işletim sistemini de Centos olarak seçtim. Siz araştırıp kendiniz için en uygun olanı seçebilirsiniz. Uygun gördüğüm paketi satın alınca firma bana bir IP adresi ve bir şifrenin yer aldığı bir mail gönderdi. Ardından sunucumla SSH bağlantısı yapabilmek için PuTTY programını indirdim. Programı kurunca Hostname kısmına IP adresimi, Port kısmını da 22 yazıp Open butonuna tıkladım ve karşıma siyah bir ekran geldi.

İşte karşınızda SSH ekranı... Bu ekran, sunucumuzu komutlar ile yönetebilmemizi sağlayacak. Ekran ilk açıldığında login as: yazısıyla karşılaştım. Yani benden kullanıcı adımı istiyordu. root yazıp ENTER'a bastım. Ardından root@IP's password: yazısı çıktı. Bu da şifremi istiyordu. Bana mail ile gelen şifreyi de buraya yazıp tekrar ENTER'a bastım. Yalnız şifrenizi yazarken ekranda hiçbir değişiklik olmayacak, buna aldırmayın.

Şifreyi de girdikten sonra sunucuma bağlanmıştım sonunda. Eee bundan sonra ne yapmam gerekiyordu? Çok profesyonel kişiler sunucuyla ilgili tüm işlerini komutlar ile halledebilir. Ama ben bu işte yeni olduğumdan bir server kontrol paneli kurmam benim açımdan daha iyi olacaktı. Server kontrol panelinden kastım da hani hostingdeyken kullandığınız şu cPanel, Plesk panel vs. var ya, işte onlar...

Peki ya hangi paneli kullanmalıydım? Hostingdeyken aşina olduğumuz ve ücret ödemeden kullandığımız cPanel ve Plesk panelin aslında ücretli olduğunu öğrenince ücretsiz alternatiflere yöneldim. Acaba cPanel ve Plesk panel kadar iyi olmasa da işlerimi görebileceğim ve bana sorun çıkarmayacak bir kontrol paneli var mı diye uzun uzun araştırdım.

En çok ZPanel, Kloxo, Centos Web Panel (CWP), Webmin, XoPanel, Panilux, Virtualmin, ISPConfig ve Webuzo Panel adı karşıma çıktı. Duyduğum birçok ücretsiz paneli bizzat denedim. DNS ayarları, Host açılışı, FTP hesabı oluşturma, webserver kurulumları, ekstra modül kurulumları vs. gibi işlemler de bana hiç sorun çıkarmayacak bir panel seçmeliydim.

Birçok panelde irili ufaklı sorunlar yaşadım. Tabii bu arada da bir paneli kaldırıp diğerini kurmak için sunucuya format atmak gerektiği için sık sık format atıyordum. Mesela bu işlem için bile diğer firmalar ortalama 5 TL gibi ücret alırken benim tercih ettiğim firma hiç bir ücret almadığı gibi hesap yönetim panelimdeki bir butonla format işlemini kendi başıma halledebilmemi de sağlıyorlardı. Gel de böyle bir firmayı övme

Neyse konumuza dönelim. Diğer panellerde çeşit çeşit sorunlar yaşadım ancak bir panel vardı ki bana hiçbir konuda sorun çıkarmadığı gibi hem hızlı hem de stabil çalışmasıyla kendini hemen sevdirdi. Ayrıca RAM tüketimi de oldukça düşüktü. O yüzden Webuzo paneli seçtim. Diğer paneller kötü demiyorum ama benim için en kolay anlaşılan ve sorunsuz olan panel buydu. Bu panelin tek dezavantajı sadece 1 domain için uygun olmasıdır diyebilirim.

Bu panelin hem ücretli hem de ücretsiz versiyonları var. Wordpress vb. gibi CMS'leri otomatik kurma özelliği olan versiyonu ücretli ve ücreti aylık 2.5$ kadar. Ama bunun dışındaki özelliklerini ücretsiz versiyonunda da bulabileceğiniz için siz de benim gibi ücretsiz versiyonunu kullanabilirsiniz. Diğer panellerden hiçbir eksiğini göremedim ben. Webuzo panel kurulumu için youtube.com/watch?v=7j7_4PFIjXo adresine göz atabilirsiniz.

Artık panelimi de kurduğuma göre yapmam gereken diğer işlere geçebilirdim. Önce DNS ayarlarımı yapmam gerekiyordu. Bunun için Webuzo panelde ekstra bir ayar yapmama gerek kalmadı. Hepsini kendisi halletti sağolsun. Ama alan adımın bulunduğu firmada nameserverlarımı kendi nameserverlarımla değiştirmem gerekiyordu.

Yani alan adımın bulunduğu firma diyelim ki a.com olsun. Benim site adresim de b.com olsun. Alan adımın bulunduğu firmanın nameserver kısmındaki ns1.a.com ve ns2.a.com şeklinde olan nameserverları ns1.b.com ve ns2.b.com diye değiştirmem gerekiyordu. Ayrıca yine alan adımın bulunduğu firmanın DNS ayarları kısmında yer alan A kayıtlarının karşısındaki IP adreslerinin yerine de kendi sunucumun IP adresini girmeliydim. Ve eğer CNAME kayıtlarında www şeklinde bir CNAME kaydı yoksa onu da eklemeliydim.

Tüm bu değişiklikleri yaptıktan sonra DNS ayarlarımın doğru yapılıp yapılmadığını bu siteden kontrol ettim. Kırmızı renkte bir uyarı görmediğim için her şey yolundaydı.

DNS ayarlarımı da hallettikten sonra sıra FTP bağlantımı yapıp dosyalarıma erişmeye gelmişti. Bunun için Filezilla programını kullandım. Filezilla'da sunucu kısmına IP adresimi, Kullanıcı adı kısmına webuzo panel için belirlediğim kullanıcı adımı ve şifre kısmına da yine webuzo panel için belirlediğim şifreyi yazıp giriş yaptım ve dosyalarıma eriştim.

Ben sitem için wordpress altyapısını kullandığım için sıra wordpress kurmaya gelmişti. Ama önce bir veritabanı oluşturmam gerekiyordu. Bunu webuzo üzerinden yaptım. Webuzoya 2002 portundan girerek (ipadresim:2002) Add Database bağlantısına tıklayıp önce bir database ve kullanıcı oluşturup bunları birbirine bağladım. Ardından da wordpresi kurdum. Bu arada veritabanı işlemlerini yürütebilmek için PhpMyAdmine girmek isterseniz aşağıdaki bilgilerle giriş yapabilirsiniz.

Kullanıcı adı: root
Şifre: Şifrenizi SSH ekranına aşağıdaki komutu yazarak görebilirsiniz.

cat /var/webuzo/my.conf
Şifremi aklımda tutmak zor olacağından PhpMyAdmin Genel Ayarlar kısmından değiştirdim. Ama yukarıdaki komut girildiğinde geçerli olmamasına rağmen eski şifremi gördüğümü farkettim. Bu problemi de youtube.com/watch?v=lqfXGEkgxD0 adresindeki videoyu izleyerek hallettim.

Wordpressi de kurduktan sonra mail hesabı oluşturmam gerekiyordu. Bunun için webuzodaki Apps üst menüsüne tıklayıp ardından sol taraftaki Utilities menüsündeki Exim ve Dovecot servisleri Install butonlarına tıklayarak kurdum. Ardından PHP üst menüsüne tıklayıp ana yönetim ekranına geri döndüm. Ve Email Account bağlantısına tıklayarak mail adresimi ekledim. Mail hesabınıza erişmek için yine aynı menüdeki Access Email bağlantısını kullandım.

Bu arada gönderdiğim maillerin Gmail, Yahoo ve Outlook gibi servislerde spama düştüğünü farkettim. Bunun üzerine yaptığım araştırmalarda SPF ve DKIM kayıtları olmayan domainlerin spama düşme ihtimallerinin daha yüksek olduğunu öğrendim. Ve eksik olan bu kayıtlarımı tamamladım.

DNS ayarlarımı yapmış, mail hesabımı oluşturmuş, FTP'ye giriş yapabilmiş, veritabanı oluşturmuş ve wordpress kurup sitemin yedeğini aktarabilmiştim. Geriye optimizasyon ve güvenlik meseleleri kalmıştı.

Optimizasyon konusunda neler yaptım ona bir değineyim. Öncelikle apache web serverının siteyi yavaşlattığını ve RAM tüketiminin fazla olduğunu gördüm. Bu nedenle Nginx ile beraber kullanmayı denedim ama yine site hızından ve RAM tüketiminden memnun kalmadım. O yüzden sadece nginx kullanmaya başladım ve farkı hemen gördüm. Nginx hem siteyi hızlandırmış hem de RAM tüketimini %5 - %10'lara kadar düşürmüştü. Sizde de tavsiye ederim.

Nginx kurmak için webuzoda önce apache'yi kaldırmak gerekiyor. Bunun için Apps üst menüsüne tıklayıp soldaki Web Servers menüsündeki apache ve apache2'yi Uninstall butonlarına tıklayarak kaldırın. Ardından da Stacks menüsündeki LEMP Stack'a tıklayıp Install butonu aracılığıyla nginx kurulumunu tamamlayın. (LEMP = Linux+Nginx+MySQL+PHP demektir.)

Ama eğer wordpress kullanıyorsanız ve sadece nginx'i tercih edecekseniz sitenin permalinkleri çalışmayacak ve .htaccess dosyası da işlevini yitirecektir bilginiz olsun. Bu arada ikisinin de çözümü var tabii ki, benim gibi araştırıp bulabilirsiniz. Çok uzatmamak için buraya yazmıyorum.

Web server olarak nginx'i seçtikten sonra şurada yazılanları uyguladığımda sitem uçuşa geçti diyebilirim. Hızlı bir site istiyorsanız bu yöntemi mutlaka uygulamalısınız.

Optimizasyonu da bitirdiğimde alabileceğim güvenlik önlemlerini araştırdım ve aşağıdaki önlemleri aldım.

1- SSH portunu değiştirdim. Brute force saldırılara maruz kalmamak için 22 olan varsayılan SSH portunu değiştirmemiz gerekir. Belirleyeceğiniz yeni port numarası 1000 ile 65500 arasında bir sayı olabilir. Ancak belirleyeceğiniz port numarasının başka bir uygulama tarafından kullanılmadığından emin olun. Örneğin: 21, 80, 8080, 2082, 2083, 2086, 2087, 2096 gibi portlar diğer servisler tarafından kullanılır.

Varsayılan SSH portunu değiştirmek için önce firewall'da bu porta izin vermek gerekir. İzin vermek için kullanılacak komut:

iptables -A INPUT -p udp --dport PortNo -j ACCEPT
Daha sonra SSH ekranına aşağıdaki komutu yazıp ENTER'a basıyoruz.

nano /etc/ssh/sshd_config
Yukarıdaki komutta geçen nano linux işletim sistemindeki bir text editörüdür. Eğer bir hata alırsanız sisteminizde nano kurulu değil demektir. Kurmak için aşağıdaki komutu kullanın.

yum install nano
sshd_config dosyasını nano editörüyle açtığımda çıkan ekrandaki #Port 22 satırını bulup (arama işlemi için CTRL+W) önündeki # ifadesini silip 22 sayısı yerine istediğiniz bir numara yazıp kaydedin. Ardından aşağıdaki komutu girin.

/etc/init.d/sshd restart
Portun açılıp açılmadığını http://ping.eu/port-chk/ adresinden kontrol edebilirsiniz.

2- Webuzo'da PHP üst menüsüne tıklayıp Configuration başlığı altındaki PHP'ye tıkladım ve disable_functions = ifadesinin hemen karşısına aşağıdakileri (tırnaklar dahil) yapıştırdım. Bu işlem sitem için tehlikeli olan fonksiyonların çalıştırılmasını önlemiş olacak.

"dl, exec, passthru, shell_exec, system, proc_open, allow_url_fopen, popen, curl_exec, curl_multi_exec, show_source"
Ardından değişikliklerin aktif olması için yine PHP üst menüsündeki Server Utilities başlığı altındaki Services menüsünden PHP servisini restart ettim.

3- Küçük çaplı DDoS saldırılarını önlemek amacıyla bu saldırıyı yapan IP adreslerini tespit edip banlamak için aşağıdaki komutları kullandım.

Saldırı yapan IP adreslerini tespit etmek için Komut:
(Karşısındaki sayı 50 ve üzeri olan IP adresleri banlanmalıdır)

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
Banlanacak IP adreslerini tespit ettikten sonra aşağıdaki komutla banlama işlemini yapabilirsiniz.

iptables -A INPUT -s ipadresi -j REJECT
service iptables save
Tabii ki daha ileri seviyede güvenlik önlemleri de mevcut ama bunları sitenize gelecek saldırı türlerine göre belirlemek daha doğru olacaktır. Kullanacağınız webserver için hangi güvenlik önlemlerini alabileceğinizi internetten araştırabilirsiniz. Ben bu yazıyı sunucuya geçmeye karar veren ama nereden başlayacağını ve neler yapmasını gerektiğini bilmeyen arkadaşlara genel hatlarıyla rehberlik etmesi amacıyla yazdım. Umarım birilerine yardımım dokunur.

NOT: Yazının başında da belirttiğim gibi sunucu konusunda uzman değilim ve tamamen kendi deneyimlerimi yazdım. Bir yerlerde yanlış bilgi vermişsem uzman arkadaşlar yorumlarında belirtebilirler, ben de düzeltirim. Ama bu yazdıklarımı kendi sitemde uyguladım ve canavar gibi çalıştığını rahatlıkla söyleyebilirim

Sunucuya geçiş sırasında sorun yaşarsanız size tavsiyem bol bol araştırıp sorunu kendiniz çözmeye çalışın. Böylece o araştırma sırasında başka şeyler de öğrenebilir ve kendinizi daha çabuk geliştirebilirsiniz. Tabii sorunlarınızı buraya yazarsanız da elimden geldiğince yanıtlamaya çalışırım ama bu konuda uzman arkadaşlardan da yardım bekliyorum şimdiden

Sağlıcakla kalın...