CakePHP Uygulamasını Ubuntu 18.04 Üzerinde LAMP ile Kurulumu: Kapsamlı Bir Rehber
Web geliştirme dünyasında, hızlı ve verimli uygulamalar oluşturmak için güçlü bir çerçeveye ve sağlam bir altyapıya sahip olmak hayati önem taşır. CakePHP, Model-View-Controller (MVC) mimarisine dayalı, açık kaynaklı, hızlı geliştirme (RAD) felsefesini benimsemiş popüler bir PHP web çerçevesidir. Geliştiricilere kod tekrarını azaltma, güvenlik ve yapılandırma kolaylığı gibi birçok avantaj sunar. LAMP (Linux, Apache, MySQL, PHP) ise web uygulamaları için en yaygın ve güvenilir sunucu yığınlarından biridir. Linux işletim sistemi üzerinde Apache web sunucusu, MySQL (veya MariaDB) veritabanı ve PHP programlama dilinin bir araya gelmesiyle oluşur. Bu rehberde, Ubuntu 18.04 LTS (Long Term Support) işletim sistemi üzerinde bir LAMP yığını kurarak ve bu yığın üzerine CakePHP uygulamasını adım adım nasıl kuracağınızı detaylı bir şekilde ele alacağız. Ubuntu 18.04, kararlılığı ve uzun süreli desteği nedeniyle birçok sunucu ortamında tercih edilen bir sürümdür.
Bu kapsamlı rehberin sonunda, kendi CakePHP uygulamanızı geliştirme ortamınızda veya üretim sunucunuzda başarıyla çalışır hale getirebileceksiniz. Her adımı dikkatlice takip etmek, olası sorunları minimize etmenize yardımcı olacaktır.
Ön Koşullar ve Sistem Güncellemesi
Kuruluma başlamadan önce, aşağıdaki ön koşulların yerine getirildiğinden emin olmalısınız:
- Ubuntu 18.04 LTS yüklü bir sunucu veya sanal makine (VM).
sudoyetkilerine sahip, root olmayan bir kullanıcı hesabı. Güvenlik nedeniyle root kullanıcısı ile doğrudan işlem yapmak yerinesudokullanılması önerilir.- İnternet bağlantısı.
Sisteminizi güncel tutmak, hem güvenlik hem de paket uyumluluğu açısından kritik öneme sahiptir. Kuruluma başlamadan önce sisteminizdeki tüm paketleri en son sürümlerine güncelleyelim:
sudo apt update
sudo apt upgrade -y
apt update komutu, yerel paket indeksini günceller ve mevcut paketlerin yeni sürümleri hakkında bilgi edinir. apt upgrade -y komutu ise bu bilgilere dayanarak sisteminizdeki tüm yüklü paketleri onay istemeden yükseltir. Bu işlem biraz zaman alabilir.
LAMP Yığınını Kurulumu
Şimdi, CakePHP uygulamamız için temel oluşturacak LAMP yığınını kurmaya başlayabiliriz.
Apache Web Sunucusu Kurulumu
Apache, internetin en popüler web sunucularından biridir ve PHP uygulamaları için mükemmel bir seçimdir. Kurulumu oldukça basittir:
sudo apt install apache2 -y
Kurulum tamamlandıktan sonra, Apache servisinin otomatik olarak başlaması gerekir. Durumunu kontrol etmek için aşağıdaki komutu kullanabilirsiniz:
systemctl status apache2
Çıktıda “active (running)” ifadesini görmelisiniz. Eğer çalışmıyorsa, sudo systemctl start apache2 komutuyla başlatabilirsiniz.
Ubuntu 18.04, varsayılan olarak UFW (Uncomplicated Firewall) güvenlik duvarı ile gelir. Web sunucusunun dışarıdan erişilebilir olması için UFW’de Apache’ye izin vermemiz gerekiyor. UFW, Apache için önceden tanımlanmış profillerle gelir:
sudo ufw app list
Bu komut, mevcut uygulama profillerini listeler. “Apache Full” profili, hem HTTP (80) hem de HTTPS (443) trafiğine izin verir. Şimdilik sadece HTTP’ye ihtiyacımız olsa da, gelecekte HTTPS kullanmayı düşünerek “Apache Full” profilini etkinleştirmek iyi bir uygulamadır:
sudo ufw allow 'Apache Full'
sudo ufw enable
sudo ufw status
ufw enable komutu güvenlik duvarını etkinleştirir (eğer daha önce etkin değilse). ufw status komutu, kuralların başarıyla uygulandığını doğrulamanızı sağlar. Şimdi sunucunuzun IP adresini (örneğin, http://sunucu_ip_adresiniz) bir web tarayıcısına girerek Apache’nin varsayılan “It works!” sayfasını görmelisiniz.
MySQL/MariaDB Veritabanı Sunucusu Kurulumu
CakePHP, verilerini depolamak için bir veritabanına ihtiyaç duyar. Bu rehberde MySQL’i (veya onun açık kaynaklı bir çatalı olan MariaDB’yi) kullanacağız. Ubuntu 18.04 depolarında MySQL sunucusu mevcuttur:
sudo apt install mysql-server -y
Kurulum tamamlandıktan sonra, veritabanı sunucunuzun güvenliğini artırmak için bir betik çalıştırmanız önerilir:
sudo mysql_secure_installation
Bu betik size birkaç soru soracaktır:
- VALIDATE PASSWORD PLUGIN: Bu eklenti, kullanıcı parolalarının güçlü olmasını sağlamak için tasarlanmıştır. İsterseniz etkinleştirebilirsiniz, ancak geliştirme ortamında bu adımı atlamak isteyebilirsiniz. Seçiminiz size kalmış.
- Set root password? Evet (Y) diyerek root kullanıcısı için güçlü bir parola belirleyin. Bu parola, veritabanı sunucusuna yönetimsel erişim için kullanılacaktır.
- Remove anonymous users? Anonim kullanıcıları kaldırmak, güvenlik açısından iyi bir uygulamadır. Evet (Y) seçin.
- Disallow root login remotely? Root kullanıcısının uzaktan giriş yapmasını devre dışı bırakmak, sunucunuzun güvenliğini artırır. Evet (Y) seçin.
- Remove test database and access to it? Test veritabanını kaldırmak güvenliği artırır. Evet (Y) seçin.
- Reload privilege tables now? Ayrıcalık tablolarını hemen yeniden yüklemek, yaptığınız değişikliklerin geçerli olmasını sağlar. Evet (Y) seçin.
Bu adımları tamamladıktan sonra, MySQL sunucunuz daha güvenli bir yapılandırmaya sahip olacaktır. Durumunu kontrol etmek için:
systemctl status mysql
Yine “active (running)” ifadesini görmelisiniz.
PHP ve Gerekli Uzantıların Kurulumu
CakePHP bir PHP çerçevesi olduğundan, PHP’nin kendisini ve CakePHP’nin düzgün çalışması için gerekli olan bazı uzantıları kurmamız gerekiyor. Ubuntu 18.04, varsayılan olarak PHP 7.2 ile gelir ki bu CakePHP 4.x için yeterlidir.
sudo apt install php libapache2-mod-php php-mysql php-cli php-json php-gd php-curl php-intl php-mbstring php-xml php-zip -y
Yukarıdaki komutlar:
php: PHP çekirdek paketini kurar.libapache2-mod-php: Apache’nin PHP kodunu işleyebilmesi için gerekli olan modülü sağlar.php-mysql: PHP’nin MySQL/MariaDB veritabanlarıyla iletişim kurmasını sağlar.php-cli: Komut satırından PHP betiklerini çalıştırmak için gereklidir (örneğin Composer için).php-json: JSON verilerini işlemek için gereklidir.php-gd: Görüntü işleme işlevleri için gereklidir (isteğe bağlı ancak birçok uygulama için faydalı).php-curl: HTTP istekleri yapmak için cURL kütüphanesini sağlar.php-intl: Uluslararasılaştırma ve yerelleştirme işlevleri için gereklidir (CakePHP için önerilir).php-mbstring: Çok baytlı dizeleri işlemek için gereklidir (CakePHP için önerilir).php-xml: XML verilerini işlemek için gereklidir.php-zip: Zip arşivlerini işlemek için gereklidir.
Bu uzantılar, çoğu CakePHP uygulamasının sorunsuz çalışması için yeterli olacaktır. Kurulum tamamlandıktan sonra, PHP sürümünüzü kontrol edebilirsiniz:
php -v
Çıktı, yüklü PHP sürümünü göstermelidir (örn. PHP 7.2.x).
Apache PHP Entegrasyonu ve Sanal Host Yapılandırması
PHP modülünün Apache ile düzgün çalışmasını sağlamak için Apache’yi yeniden başlatmamız gerekiyor:
sudo systemctl restart apache2
PHP’nin Apache ile doğru şekilde çalıştığını test etmek için, web sunucusu kök dizininde (/var/www/html) basit bir PHP bilgi dosyası oluşturalım:
sudo nano /var/www/html/info.php
Dosyanın içine aşağıdaki içeriği ekleyin:
Kaydedip kapatın (CTRL+X, Y, Enter). Şimdi web tarayıcınızda http://sunucu_ip_adresiniz/info.php adresine gidin. PHP yapılandırmanız hakkında ayrıntılı bilgileri içeren bir sayfa görmelisiniz. Bu sayfa, PHP’nin Apache ile başarıyla entegre olduğunu gösterir.
ÖNEMLİ: Güvenlik nedeniyle, bu info.php dosyasını testten sonra silmelisiniz. Bu dosya, sunucunuz hakkında hassas bilgiler içerebilir.
sudo rm /var/www/html/info.php
Composer Kurulumu
Composer, PHP için bir bağımlılık yöneticisidir. CakePHP ve birçok modern PHP projesi, bağımlılıklarını yönetmek için Composer’ı kullanır. Composer’ı global olarak erişilebilir hale getirmek için aşağıdaki adımları izleyin:
cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
Bu komutlar, Composer kurulum betiğini indirir ve Composer’ı /usr/local/bin dizinine composer adıyla yükler, böylece sistem genelinde kullanılabilir hale gelir. Kurulumun başarılı olduğunu doğrulamak için:
composer -V
Composer’ın sürüm numarasını görmelisiniz.
CakePHP Uygulaması Oluşturma
Artık LAMP yığını ve Composer hazır olduğuna göre, yeni bir CakePHP uygulaması oluşturabiliriz.
CakePHP Projesi Başlatma
Web sunucusu kök dizinine gidin ve Composer kullanarak yeni bir CakePHP projesi oluşturun:
cd /var/www/html
sudo composer create-project --prefer-dist cakephp/app my_cakephp_app
Bu komut, my_cakephp_app adında yeni bir dizin oluşturacak ve içine CakePHP uygulamasının iskeletini Composer aracılığıyla kuracaktır. Bu işlem, CakePHP’nin tüm bağımlılıklarını indirip yükleyeceği için biraz zaman alabilir.
Dizin İzinlerini Ayarlama
CakePHP uygulamalarının düzgün çalışabilmesi için belirli dizinlerin web sunucusu kullanıcısı (genellikle www-data) tarafından yazılabilir olması gerekir. Özellikle tmp ve logs dizinleri için doğru izinleri ayarlamalıyız:
sudo chown -R www-data:www-data /var/www/html/my_cakephp_app
sudo chmod -R 775 /var/www/html/my_cakephp_app/tmp
sudo chmod -R 775 /var/www/html/my_cakephp_app/logs
sudo chmod -R 775 /var/www/html/my_cakephp_app/webroot
Bu komutlar:
- İlk komut, tüm proje dizininin sahipliğini
www-datakullanıcısı ve grubuna verir. - Sonraki üç komut,
tmp,logsvewebrootdizinlerine ve içindeki dosyalara grup yazma izni verir. Bu, CakePHP’nin geçici dosyalar, oturum verileri ve günlükler oluşturabilmesi için gereklidir.
Veritabanı Yapılandırması
CakePHP uygulamanızın veritabanı ile etkileşim kurabilmesi için bir veritabanı oluşturmamız ve CakePHP’yi bu veritabanına bağlanacak şekilde yapılandırmamız gerekiyor.
MySQL/MariaDB Veritabanı ve Kullanıcı Oluşturma
MySQL sunucusuna root kullanıcısı olarak bağlanın:
sudo mysql -u root -p
Parola istendiğinde, mysql_secure_installation sırasında belirlediğiniz root parolasını girin. Ardından, CakePHP uygulamanız için bir veritabanı ve özel bir kullanıcı oluşturun. Kendi veritabanı adınızı, kullanıcı adınızı ve parolanızı seçtiğinizden emin olun:
CREATE DATABASE my_cakephp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'cakephp_user'@'localhost' IDENTIFIED BY 'cok_guclu_sifreniz';
GRANT ALL PRIVILEGES ON my_cakephp_db.* TO 'cakephp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Bu komutlar:
CREATE DATABASE ...:my_cakephp_dbadında yeni bir veritabanı oluşturur ve UTF-8 desteği sağlar.CREATE USER ...:cakephp_useradında, yalnızcalocalhost‘tan erişebilen ve belirttiğiniz parola ile kimlik doğrulayan yeni bir kullanıcı oluşturur.GRANT ALL PRIVILEGES ...:cakephp_userkullanıcısınamy_cakephp_dbveritabanı üzerindeki tüm ayrıcalıkları verir.FLUSH PRIVILEGES;: Ayrıcalık tablolarını yeniden yükler, böylece değişiklikler hemen geçerli olur.EXIT;: MySQL istemcisinden çıkar.
CakePHP Veritabanı Bağlantısını Yapılandırma
CakePHP, veritabanı bağlantı bilgilerini config/app_local.php dosyasında saklar. Bu dosya, app_local.example.php dosyasından kopyalanarak oluşturulur:
cd /var/www/html/my_cakephp_app/config
sudo cp app_local.example.php app_local.php
sudo nano app_local.php
app_local.php dosyasını açın ve 'Datasources' bölümünü bulun. 'default' bağlantısı için aşağıdaki gibi düzenleyin, oluşturduğunuz veritabanı adını, kullanıcı adını ve parolasını girin:
'Datasources' => [
'default' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => 'localhost',
// 'port' => '3306', // Varsayılan port genellikle belirtilmeye gerek yoktur.
'username' => 'cakephp_user', // Oluşturduğunuz kullanıcı adı
'password' => 'cok_guclu_sifreniz', // Oluşturduğunuz parola
'database' => 'my_cakephp_db', // Oluşturduğunuz veritabanı adı
'encoding' => 'utf8mb4',
'timezone' => 'UTC',
'cacheMetadata' => true,
'quoteIdentifiers' => false,
'log' => false,
// 'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
'url' => env('DATABASE_URL', null),
],
// ... diğer veritabanı yapılandırmaları ...
],
Değişiklikleri kaydedip dosyayı kapatın.
Apache Sanal Host Yapılandırması
CakePHP uygulamanızın web üzerinden erişilebilir olması için Apache’de bir sanal host (Virtual Host) yapılandırması oluşturmamız gerekiyor. Bu, Apache’ye belirli bir alan adı veya IP adresi için hangi dizinden içerik sunacağını söyler.
Sanal Host Dosyası Oluşturma
Yeni bir sanal host yapılandırma dosyası oluşturalım:
sudo nano /etc/apache2/sites-available/my_cakephp_app.conf
Dosyanın içine aşağıdaki içeriği ekleyin. ServerName kısmına sunucunuzun IP adresini veya alan adını yazmayı unutmayın. DocumentRoot‘un CakePHP uygulamanızın webroot dizinini işaret ettiğinden emin olun.
ServerAdmin webmaster@localhost
ServerName sunucu_ip_adresiniz_veya_alan_adiniz
DocumentRoot /var/www/html/my_cakephp_app/webroot
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Buradaki önemli noktalar:
ServerName: Tarayıcınızda uygulamanıza erişmek için kullanacağınız IP adresi veya alan adı.DocumentRoot: Apache’nin dosyaları sunacağı ana dizin. CakePHP uygulamaları için bu, projeninwebrootdizini olmalıdır (örneğin,/var/www/html/my_cakephp_app/webroot).bloğu: Bu dizin için özel yapılandırmalar içerir.Options Indexes FollowSymLinks: Dizin listelemeyi ve sembolik bağlantıları takip etmeyi etkinleştirir.AllowOverride All:.htaccessdosyalarının yapılandırma geçersiz kılmalarına izin verir. CakePHP’nin URL yeniden yazma (mod_rewrite) kurallarını kullanabilmesi için bu zorunludur.Require all granted: Apache 2.4 ve sonrası için bu dizine erişime izin verir.
Dosyayı kaydedip kapatın.
Sanal Hostu Etkinleştirme ve Apache’yi Yeniden Başlatma
Yeni sanal host dosyasını etkinleştirmek ve Apache’nin URL yeniden yazma modülünü (mod_rewrite) etkinleştirmek için aşağıdaki komutları kullanın:
sudo a2ensite my_cakephp_app.conf
sudo a2enmod rewrite
sudo a2dissite 000-default.conf # Varsayılan Apache sayfasını devre dışı bırakmak isteyebilirsiniz
sudo systemctl restart apache2
Bu komutlar:
a2ensite my_cakephp_app.conf: Yeni sanal host yapılandırmanızı etkinleştirir.a2enmod rewrite: Apache’nin URL yeniden yazma modülünü etkinleştirir. CakePHP’nin “güzel URL’ler” (pretty URLs) kullanabilmesi için bu modülün etkin olması şarttır.a2dissite 000-default.conf: (İsteğe bağlı) Apache’nin varsayılan “It works!” sayfasını devre dışı bırakır, böylece sunucunuza erişildiğinde doğrudan CakePHP uygulamanız görünür.systemctl restart apache2: Tüm değişikliklerin geçerli olması için Apache servisini yeniden başlatır.
CakePHP Uygulamasını Test Etme
Şimdi her şeyin doğru kurulup kurulmadığını kontrol etme zamanı. Web tarayıcınızı açın ve http://sunucu_ip_adresiniz_veya_alan_adiniz adresine gidin. CakePHP’nin varsayılan hoş geldiniz sayfasını görmelisiniz. Bu sayfa, CakePHP’nin başarıyla yüklendiğini ve Apache ile doğru şekilde yapılandırıldığını gösterir.
Hoş geldiniz sayfasında, veritabanı bağlantınızın da yeşil bir tik ile onaylandığını görmelisiniz. Eğer veritabanı bağlantısı bir hata gösteriyorsa, config/app_local.php dosyasındaki veritabanı kimlik bilgilerini (kullanıcı adı, parola, veritabanı adı) ve MySQL sunucusundaki kullanıcı/veritabanı ayarlarını tekrar kontrol edin.
Sorun Giderme ve İpuçları
Kurulum sırasında veya sonrasında karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:
Apache Mod_Rewrite Etkinleştirme
Eğer CakePHP’nin hoş geldiniz sayfasını göremiyor ve bunun yerine “Not Found” hatası alıyorsanız veya URL’ler düzgün çalışmıyorsa, mod_rewrite etkinleştirilmemiş veya sanal host yapılandırmasında AllowOverride All ayarı eksik olabilir. Yukarıdaki adımları kontrol edin:
sudo a2enmod rewrite
sudo systemctl restart apache2
Ve my_cakephp_app.conf dosyasındaki bloğunda AllowOverride All olduğundan emin olun.
Hata Günlüklerini Kontrol Etme
Sorunlarla karşılaştığınızda, hata günlüklerini kontrol etmek en iyi başlangıç noktasıdır. Apache hata günlükleri ve CakePHP uygulama günlükleri size ipuçları verecektir:
- Apache Hata Günlükleri:
/var/log/apache2/error.log - CakePHP Uygulama Günlükleri:
/var/www/html/my_cakephp_app/logs/error.log
Günlükleri gerçek zamanlı olarak izlemek için tail -f komutunu kullanabilirsiniz:
sudo tail -f /var/log/apache2/error.log
tail -f /var/www/html/my_cakephp_app/logs/error.log
Güvenlik İpuçları
- Varsayılan Parolaları Değiştirin: MySQL root parolası ve diğer tüm varsayılan kimlik bilgilerini güçlü, benzersiz parolalarla değiştirin.
- UFW’yi Doğru Yapılandırın: Yalnızca gerekli portları açın (genellikle HTTP için 80 ve HTTPS için 443).
- SSL/TLS Kullanın: Üretim ortamında her zaman HTTPS kullanın. Let’s Encrypt gibi araçlarla ücretsiz SSL sertifikaları alabilirsiniz.
- Dizin İzinleri: Dosya ve dizin izinlerini mümkün olan en kısıtlı seviyede tutun.
777gibi geniş izinlerden kaçının.775veya755genellikle yeterlidir. - PHP Yapılandırması:
php.inidosyasındaki (genellikle/etc/php/7.2/apache2/php.ini)display_errorsayarını üretim ortamındaOffolarak ayarlayın. Hataların kullanıcıya gösterilmesi yerine günlüklere yazılmasını sağlayın.
Sonuç
Bu kapsamlı rehberde, Ubuntu 18.04 LTS işletim sistemi üzerinde bir LAMP yığını kurmayı ve ardından bu altyapı üzerine bir CakePHP uygulamasını adım adım nasıl yapılandıracağınızı öğrendiniz. Apache web sunucusundan MySQL veritabanına, PHP’nin gerekli uzantılarından Composer bağımlılık yöneticisine ve son olarak CakePHP’nin kendi kurulum ve yapılandırmasına kadar tüm önemli adımları tamamladık.
Artık temel bir CakePHP geliştirme ortamına sahipsiniz. Bu ortam, web uygulamaları geliştirmeye başlamak, CakePHP’nin güçlü özelliklerini keşfetmek ve projelerinizi hayata geçirmek için sağlam bir temel sunar. CakePHP’nin MVC yapısı, ORM (Object-Relational Mapping), doğrulama (validation), form oluşturma (form building) ve güvenlikle ilgili yerleşik özellikleri sayesinde, web uygulamalarınızı daha hızlı, daha güvenli ve daha sürdürülebilir bir şekilde geliştirebilirsiniz.
Unutmayın ki bu kurulum bir başlangıç noktasıdır. Uygulamanızı geliştirdikçe, muhtemelen ek PHP uzantılarına, Apache yapılandırma ayarlarına veya veritabanı optimizasyonlarına ihtiyaç duyabilirsiniz. Ancak bu rehberde sunulan adımlar, başarılı bir CakePHP projesinin temellerini atmak için gerekli tüm bilgileri sağlamaktadır. İyi geliştirmeler!