Linux Hosting’den AWS’ye Geçiş-1 (AWS EC2)

Merhabalar.

Yaklaşık 2 hafta önce, bir linux hostingi üzerinden yayınlamakta olduğum (umutonur.com) web sitemi –hosting paketi süresinin dolmasını da fırsat bilerek- AWS ekosistemine taşıma işlemi gerçekleştirdim.

Gerçekten bu taşıma işlemine ihtiyacım var mıydı? Tabii ki de yoktu. 🙂 Mevcuttaki hosting paketimin özellikleri ihtiyaçlarımı fazlasıyla karşılıyordu. Fakat, AWS ekosistemine olan merakım ve içimdeki yeni birşeyler keşfetme dürtüsü böyle bir maceraya girişmeme sebep oldu.

Birçok servisi kurcaladım, dokümanları inceledim, araştırdım. Ve maceranın sonunda AWS hakkındaki pek çok konuda bilgi sahibi oldum.

Bu yazıda da sizlere, umutonur.com’u (WordPress) AWS ekosistemine nasıl taşıdığımı, taşıma esnasında karşılaştığım problemleri ve çözümlerini anlatacağım. Faydalı olması dileğiyle..

Öncelikle;mevzulara yeni olanlar için AWS nedir, ne işe yarar çok kısa bundan biraz bahsedeyim.

Amazon Web Servisleri – AWS (Amazon Web Services); adından da anlaşılacağı gibi, Amazon tarafından kurulmuş ve (Nisan 2018 tarihli verilere göre) 19 ayrı kategoride 142 adet servis ile Sanal Sunucular, Veri tabanları, Veri Depolama, Makine Öğrenmesi, Veri güvenliği, IoT, DevOps, Robotik, Blockhain ve daha bir çok alanda bizlere çözümler sunan canavar gibi bir ekosistemdir.

AWS Ekosistemi içerisinde çok fazla servis barındırdığı için burada hepsinden bahsetmemiz imkansız. Ben sadece bu yazıda kullanacaklarımızdan kısaca bahsedeyim.

EC2 (Elastic Compute Cloud) : Bulut sunucuların yönetildiği servistir. Yazının devamında, EC2 üzerinden sanal bir sunucu oluşturup wordpress dosyalarımızı buraya taşıyacağız.

RDS (Relational Databse Service) : İlişkisel veri tabanı sunucularınızı yönetebildiğiniz servistir. Biz, MySQL veri tabanımızı bu servis üzerinden oluşturacağız. Yani WordPress uygulamamız ile MySQL veri tabanımız birbirinden bağımsız sunucularda çalışacak.

Route 53 : Alan adlarının yönetildiği ve ilgili yönlendirmelerin yapıldığı servistir. Eski hosting firmasında barındırmakta olduğum umutonur.com alan adını EC2 üzerinde koşan wordpress uygulamasına yönlendirmek için bu servisi kullanacağız.

AWS hakkında detaylı bilgi edinmek için https://aws.amazon.com/tr/ adresinden yararlanabilirsiniz.

Ayrıca https://www.mobilhanem.com/amazon-web-service-aws-egitimleri/ adresini de inceleyebilirsiniz.

Ve başlıyoruz…

  • EC2 üzerinden sanal sunucu kurulumu

AWS Management Console sayfasından EC2 servisine geldiğimizde bizi EC2 Dashboard karşılayacaktır. Burada servis üzerinden yönetilen tüm kaynakların listesini görebilirsiniz.

AWS üzerinde sunucular Instance olarak adlandırılmaktadır.

Running Instance bölümünde benim daha önceden oluşturduğum ve şuan çalışmakta olan 2 sanal sunucu görüntülenmektedir.

Launch Instance butonuna basıp sunucumuzu oluşturmaya başlayalım..

Free tier only seçeneğini işaretlediğimizde Ücretsiz üyeliğin kapsadığı AMI (Amazon Machine Image) listesi bize sunulacaktır.

Listedeki sunucu çeşitleri (AMI) Amazon tarafından hazırlanmış olup; farklı işletim sistemleri kullanılarak, belirli amaçlara yönelik özelleştirilmiş sunucu imajlarıdır.

Listeyi incelediğinizde farklı işler için özelleştirilmiş başka sunucu imajları olduğunu göreceksiniz. Biz burada Amazon Linux AMI 2018.03.0 seçip devam ediyoruz.

Sunucu tipi seçiminde; daha yüksek özellikli sunucular seçmek mümkün, fakat ücretini ödemeniz gerekiyor 🙂

Biz ücretsiz hesapta takıldığımız için Configure Instance Details butonuna tıklayarak, seçili olarak gelen sunucuyla yolumuza devam ediyoruz.

Buradaki her bir seçenek, ayrı bir dünya diyebilirim 🙂 o yüzden Add Storage butonuna tıklayarak işlemlere devam ediyoruz.

Disk Ekleme (Add Storage) adımında; sunucumuza disk alanı ekliyoruz. Ücretsiz hesaplarda (General Purpose ve Magnetic Storage tipindeki diskler için) 30 GB‘a kadar izin veriliyor. Sonrası faturanıza yansıtılıyor. Ben Size alanına 25 yazıp devam ettim.

Etiket Ekleme (Add Tags) adımında ise sunucularımıza ve disklerimize çeşitli etiketler tanımlayarak bu sunucu ve disklerin yönetimini daha kolay ve pratik hale getirebiliyoruz. ( “A” etiketine sahip olan sunuculara “X” işlemini uygula gibi..)

Ben, bu sunucuyu, listedeki diğer sunuculardan ayırt edebilmek için değeri umutonur.com Web Server olan bir Name etiketi ekledim.

Güvenlik Grubu Yapılandırma (Security Group Configure) adımında ise sanal sunucumuza erişim sağlanabilecek ip adreslerini ve bu adreslerin hangi bağlantı tipini kullanabileceğini Add Rule butonuna tıklayarak belirliyoruz.

İlk olarak, Type alanından bağlantı tipini belirliyoruz. Linux tabanlı bir sanal sunucu oluşturduğumuz için, sunucuya SSH ile bağlantı sağlayacağız. (Eğer Windows bir sanal sunucu oluştursaydık RDP ile bağlantı saylayacaktık.) Source alanından ise bağlantı kurulmasına izin verilecek IP adresini belirtiyoruz. Ben, sunucuya sadece kendi bilgisayarımdan yapılacak SSH bağlantılara izin verilmesini istediğim için bu alanı My IP olarak belirledim. (My IP seçimini yaptığınızda, o anki IP adresiniz otomatik olarak belirlenmiş olur.) Siz dilerseniz Custom seçeneğinden başka IP adreslerinin erişimine de izin verebilirsiniz.

2. kuralda; sunucu üzerinde web sitemizi yayınlayacağımız için bağlantı tipini (Type) HTTP, bu port üzerinden erişim gerçekleştirebilecek IP adreslerini (Source) ise Anywhere olarak seçiyoruz. Böylece; sunucumuza, HTTP portu üzerinden herkesin erişebilmesine olanak sağlamış oluyoruz.

Ve.. son kez sunucu bilgilerini gözden geçirip Launch butonuna tıklıyoruz.

Anahtar çifti (key pair) belirleme adımında ise sunucuya SSH ile eşirken kullanacağımız anahtar çifti (private key file – *.pem) dosyasını belirliyoruz. Eğer AWS üzerinde daha önce oluşturmuş olduğunuz *.pem dosyaları varsa bunları da kullanabiliyorsunuz. Ben bu sunucu için umutonurcom-key yeni bir .pem dosyası oluşturdum.

Bu pencere ilk açılığında Launch Instance butonunun pasif halde gelecektir. Key pair name alanından anahtar dosyanın ismini belirledikten sonra Download Key Pair butonuna tıklatıp, yeni anahtar dosyasını indirdikten sonra Launch Instance butonu aktif hale gelir.

Anahtar çifti dosyasını da edindiğimizde göre, artık sunucuyu başlatabiliriz.

Sunucumuz artık oluşturuldu ve otomatik olarak başlatıldı.

i-065c4805073ec7d64 değeri oluşturulan sunucunun id’sini (instance id) belirtmektedir.

Şimdi, başlatılmış olan sunucunun bilgilerine bir göz atalım.

Sunucu bilgilerinde;

Instance state alanı; sunucunun o anki durumu hakkında bize bilgi vermektedir. Üst kısımdaki Actions > Instance State menü sekmesini kullanarak sunucuyu durdurabilir (Stop) , yeniden başlatabilir (Reboot) yada komple silebilirsiniz.(Terminate)

Public DNS (IPv4) ve IPv4 Public IP alanları ise sunucu ile bağlantı kurabilmemizi sağlayacak olan IP adresini ve DNS adresini gösterir. Bu IP ve DNS adresleri değişkendir. Yani sunucu her başladığında, yeni bir IP ve DNS adresi alacaktır.

Elastic IPs alanında ise sunucunun sabit IP adresi bilgisi verilmektedir. (yazının ilerleyen kısımlarında bu konuya değineceğim)

Security groups ve Key pair name alanlarında ise, sunucuyu oluştururken belirlemiş olduğumuz güvenlik grupları ve anahtar çifti dosyasının bilgisi gösterilmektedir.

Sunucuyu başlattığımıza göre, artık web server ile ilgili kurulum işlemlerine geçebiliriz. Kendi sunucunuzun bağlantı komutlarını sunucu bilgilerini görüntülediğiniz sayfadaki Connect butonuna tıklayarak öğrenebilirsiniz.

İlk olarak; indirdiğimiz *.pem dosyasına okuma izni veriyoruz. ( chmod 400 dosya-adı.pem )

chmod 400 umutonurcom-key.pem

Hemen ardından *.pem dosyasını kullanarak SSH bağlantısı kuruyoruz. ( ssh -i “dosya-adi.pem” ec2-user@public-ip-adresi )

ssh -i "umutonurcom-key.pem" ec2-user@52.15.84.193

Sunucu bağlantısı sağlandığında aşağıdaki gibi bir karşılama ekranı çıkacaktır.

Sunucudaki son güncellemeleri alıyoruz

sudo yum update -y

Güncellemeler tamamlandıktan sonra Apache web server (Apache+PHP+MySQL) kurulumunu gerçekleştiriyoruz.

sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd

Kurulum tamamlandıktan sonra Apache web server’ı ayağa kaldırabiliriz.

sudo service httpd start

İşlem sonucunda; Starting httpd: [ OK ] cevabını aldıysanız web server’ınız ayağa kalmış demektir. Public IP adresini ( http://public-ip-adresi/ şeklinde) kullanarak son durumu görüntüleyelim.

Görüntüden de anlaşılacağı üzere Apache web server test sayfası, EC2 sunucumuz üzerinden yayına alınmış durumdadır.

Şuana kadar gelmiş olduğumuz aşamada, sunucu her yeniden başladığında: Apache web server‘ı sudo service httpd start komutuyla tekrar ayağa kaldırmamız gerekmektedir.

Apache’nin sunucu başlangıcında otomatik olarak ayağa kaldırılması için:

sudo chkconfig httpd on

komutunu uyguluyoruz. (Bu komutu çalıştırdığımızda, terminalden bize herhangi bir yanıt dönmeyecektir. işlemin gerçekleşip gerçekleşmediğiniz chkconfig --list httpdkomutunu çalıştırarak kontrol edebilirsiniz. )

Yayında olan test sayfası, sunucu üzerindeki /var/www/noindex klasörü altında bulunmaktadır. Web sitemizi çalıştıracak asıl dosyalar ise /var/www/html klasörü altında olacaktır. Fakat şu aşamada kullanmakta olduğumuz ec2-user kullanıcısının /var/www/html klasörü altına dosya yazma izni bulunmamaktadır. Web sitemizin dosyalarını /var/www/html klasörüne taşımak için gerekli izin işlemlerini gerçekleştirelim.

ec2-user kullanıcısını apache grubuna ekliyoruz.

sudo usermod -a -G apache ec2-user

ssh bağlantısını koparıp (exit komutunu kullanabilirsiniz) sunucuya tekrar bağlanıyoruz.

Daha sonra sırasıyla aşağıdaki komutları çalıştırıyoruz.

sudo chown -R ec2-user:apache /var/www
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0664 {} \;

Eğer tüm işlemler başarıyla gerçekleşmiş ise terminalden /var/www/html altında bir php info dosyası oluşturabiliyor olmamız gerek.

echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

(Eğer -bash: /var/www/html/phpinfo.php: Permission denied aldıysanız, tekrar login olun ve grup oluşturma adımından itibaren yapılan işlemleri tekrarlayın.)

Oluşturduğumuz phpinfo.php dosyasının sunucu üzerinde çalışıp çalışmadığını http://public-ip-adresi/phpinfo.php şeklinde tarayıcıdan test edebiliriz.

Evet.. sanırım herşey yolunda gidiyor. Artık wordpress dosyalarını sunucuya gönül rahatlığıyla atabiliriz. Ama öncesinde şu php info dosyasını sunucudan silelim.

rm /var/www/html/phpinfo.php

Yazıyı çok fazla uzatmamak için şimdilik burada bir virgül koymak istiyorum. Bundan sonra yapmamız gereken

  • Veri tabanı oluşturma (AWS RDS üzerinden oluşturulacak)

  • WordPress üzerindeki son ayarlamalar

  • Sitemizin (WordPress) dosyalarını sunucuya (FileZilla ile) aktarma.

  • Domain yönlendirme (AWS Route 53 servisini kullanacağız)

işlemlerini bir sonraki yazı da anlatacağım.

Eğer veri tabanını da mevcut EC2 sunucusuna kurmak isterseniz şuradan devam edebilirsiniz : https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html

Bir sonraki yazıda görüşmek üzere..

Last updated