Amazon EC2 üzerine LAMP Ortamı Kurulumu

Popüler cloud servisi Amazon EC2 üzerine, PHP uygulamalarını çalıştırabilmek için gerekli araçları kuralım.

Öncelikle AWS Management Console‘dan EC2 sayfasına girip Launch Instance butonuna basarak ihtiyaca göre bir adet instance açıyoruz. Classic Wizard‘ı kullanıp CHOOSE AN AMI aşamasında Ubuntu Server 14.04 LTS‘i seçip (64 bit) devam ediyoruz. Create Key Pair aşamasında yeni bir keypair oluşturup kaydetmeyi unutmayın. Bu keypair SSH ile sunucumuza bağlanmak için lazım olacak.

Kurulum bittikten sonra EC2 Dashboard’da, NETWORK & SECURITY menüsü altında Elastic IPs sayfasına giriyoruz. Buradan Allocate New Address butonuna basıp yeni bir IP alıyoruz. Daha sonra bu IP’nin üzerine tıklayıp Associate Address butonuna basarak biraz önce oluşturduğumuz instance ile ilişkilendiriyoruz. Böylece instance’ımıza bir adet IP bağlamış olduk. Yine NETWORK & SECURITY menüsü altından Security Group sayfasına girip HTTP portunu (80) açmamız gerekiyor. Kullandığınız security group’un üzerine tıklayıp Inbound tab’ından HTTP rule’unu eklemeniz ve kaydetmeniz yeterli.

Şimdi keypair ile EC2 sunucumuza ubuntu kullanıcısı ile bağlanalım (önce keypair dosya modunu güvenlik nedeniyle 600 yapıyoruz):

sudo chmod 600 <keypair.pem>
ssh -i <keypair.pem> ubuntu@elastic_ip

Temel Ayarlar

Öncelikle hostname’i değiştirelim. plato yerine istediğiniz hostname’i yazabilirsiniz.

sudo vim /etc/hostname

Yukarıdaki dosyada mevcut hostname yerine “plato” yazıp kaydediyoruz. Ardından aşağıdaki komutla hostname değişikliğini gerçekleştiriyoruz.

sudo hostname -F /etc/hostname

/etc/hosts dosyasını açıp aşağıdaki host’u tanımlayalım:

127.0.0.1 plato

Timezone’u değiştirelim:

dpkg-reconfigure tzdata

Gelen arayüzden Europe, ardından Istanbul’u seçiyoruz.

Apt güncellemesi yapalım:

sudo apt-get update
sudo apt-get upgrade --show-upgraded

Apache

Apache’yi kuralım:

sudo apt-get install apache2

Hostname ekleyip mod_rewrite’ı açalım:

echo "ServerName localhost" | sudo tee /etc/apache2/conf-available/servername.conf
sudo a2enconf servername
sudo a2enmod rewrite
sudo service apache2 restart

Şimdi siteleri host etmek için name-based virtual hosts yöntemini kullanacağız. Varsayılan apache virtual host’unu iptal edelim:

sudo a2dissite default

Siteleri /var/www altında host ettiğimizi varsayarsak:

cd /var/www
sudo mkdir -p domain.com/{public,log,backup}
sudo chown -R www-data:www-data /var/www
sudo chmod a+rx /var/www/
sudo chmod -R a+rx /var/www/

Yukarıdaki dizinlerden anlaşıldığı üzere domain.com adresli sitenin document root’u /var/www/domain.com/public‘i işaret edecek.

domain.com için virtual host tanımlayalım:

sudo vim /etc/apache2/sites-available/domain.com

Bu dosyaya aşağıdaki virtual host kodunu ekleyelim:

<VirtualHost *:80>
  ServerAdmin info@domain.com
  ServerName  www.domain.com
  ServerAlias domain.com

  # Index file and Document Root (where the public files are located)
  DirectoryIndex index.html index.php
  DocumentRoot /var/www/domain.com/public

  # Log file locations
  LogLevel warn
  ErrorLog  /var/www/domain.com/log/error.log
  CustomLog /var/www/domain.com/log/access.log combined
</VirtualHost>

Ardından virtual host’u aktif edip apache’yi yeniden başlatalım:

sudo a2ensite domain.com
sudo service apache2 restart

MySQL

MySQL’i kuralım:

sudo apt-get install mysql-server
sudo mysql_secure_installation

Eğer InnoDB ayarları yapmak istiyorsanız /etc/mysql/my.cnf dosyasına girip [mysqld] altına aşağıdaki ayarları (ya da her ne değiştirmek istiyorsanız) girin (aşağıdaki değerleri sunucu özelliklerinize göre değiştirebilirsiniz):

innodb_buffer_pool_size   = 3G
innodb_log_file_size      = 512M
innodb_thread_concurrency = 8
innodb_flush_method       = O_DIRECT

Bu ayarları yaptıktan sonra MySQL’i durduralım:

sudo service mysql stop

Eğer InnoDB ayarlarını değiştirdiyseniz /var/lib/mysql altındaki ib_logfile0 ve ib_logfile1 dosyalarını silin ve mysql’i yeniden başlatın:

sudo service mysql start

Bonus: Running MySQL on Amazon EC2 with EBS (Elastic Block Store) (Özgür Orhan‘a teşekkürler)

PHP

Sıra geldi PHP ve extension kurulumlarına:

sudo apt-get install php5 php5-dev php-pear php5-mysql php5-imagick php5-curl php-apc php5-sqlite

Xdebug kurulumunu yapalım:

sudo apt-get install build-essential
sudo pecl install xdebug

Xdebug başarılı bir şekilde kurulmuşsa size xdebug.so dosyasının yerini söyleyecektir. php.ini dosyalarına extension’ı ekleyelim (hem /etc/php5/cli/php.ini hem de /etc/php5/apache2/php.ini dosyasının en sonuna):

zend_extension="/xdebugun/verdigi/tam/path/xdebug.so"

Ant

Jenkins’deki build işlemleri için Apache Ant’ı yükleyelim:

sudo apt-get -u install ant

Git

Git’i kuralım:

sudo apt-get install git

Github

Eğer www-data kullanıcı ile Github’daki private reponuzla ilgili işlem yapmak istiyorsanız aşağıdaki adımları izleyin:

cd /var/www
sudo mkdir .ssh
sudo chown -R www-data:www-data .ssh
sudo -u www-data ssh-keygen -t rsa -C "server@domain.com"

SSH keygen oluştururken passphrase kısmını boş bırakın (şifre girmeyin). Keygen başarıyla oluştuysa aşağıdaki komutla public key’i alıp Github’da SSH Keys sayfasından ekliyoruz:

sudo cat /var/www/.ssh/id_rsa.pub

Eğer her şey yolunda gitmişse aşağıdaki komut sonucunda “Hi username! You’ve successfully authenticated” yazısını görmeniz lazım:

sudo -u www-data ssh -T git@github.com

Redis

Burada yer alan adımları takip edip redis kurulumunu yapalım:

wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make

Komut satırından redis-server’a ve redis-cli’a erişmek için redis-stable/src dosyasına girip aşağıdaki komutları çalıştıralım:

sudo cp redis-server /usr/local/bin/
sudo cp redis-cli /usr/local/bin/

Redis config dosyası ve data’lar için dizinleri açalım:

sudo mkdir /etc/redis sudo mkdir /var/redis

Sunucu başlangıcında redis’in çalışması için init script’nini /etc/init.d altına kopyalayalım. redis-stable/utils altına girip aşağıdaki komutları çalıştıralım:

sudo cp redis_init_script /etc/init.d/redis_6379

redis-stable dizininde yer alan config dosyasını da kopyalayalım:

sudo cp redis.conf /etc/redis/6379.conf

Redis data’ları için dizin açalım:

sudo mkdir /var/redis/6379

Şimdi sıra geldi redis ayarlarını yapmaya. /etc/redis/6379.conf dosyasını sudo ile açıp aşağıdaki ayarları bulup değiştirelim:

daemonize yes
pidfile /var/run/redis_6379.pid
logfile /var/log/redis_6379.log
dir /var/redis/6379

Son olarak init script’ini aktif hale getirelim:

sudo update-rc.d redis_6379 defaults

Artık redis’i başlatabiliriz:

sudo /etc/init.d/redis_6379 start

Çalışıp çalışmadığını kontrol etmek için aşağıdaki komut bize ‘PONG‘ cevabını dönmesi gerekiyor:

redis-cli ping

MongoDB

Kurulum için burdaki adımları takip edelim:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
sudo touch /etc/apt/sources.list.d/10gen.list
sudo nano /etc/apt/sources.list.d/10gen.list

Açılan dosyaya aşağıdaki satırı ekleyelim:

deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen

Kurulumu yapalım:

sudo apt-get update
sudo apt-get install mongodb-10gen

Kullanılan Kaynaklar