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 [email protected] 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 "[email protected]"
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 [email protected]
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