Söz konusu Laravel olunca genellikle “SSH olmadan olmaz” diye düşünüyoruz. Komut satırından Laravel kullanmak gerçekten işleri çok kolaylaştırıyor. Fakat localhostta geliştirdiğiniz Laravel uygulamanızı paylaşımlı sunucunuza atmak istediğinizde SSH engeline takılıyorsunuz. Sunucuyu sağlayan şirket paylaşımlı sunucular için SSH izni vermediğini söylüyor. Ne yapacağınızı bilemiyorsunuz, araştırmaya başlıyorsunuz ve bu yazıya denk geliyorsunuz. Çok fazla sıkılmadan detaylara geçelim.
Aşağıdaki adımları uygulamadan önce composerın autoload dosyasını tekrar oluşturalım. Komut satırında projenizin dosyasına girdikten sonra şunu yazın:
composer dump-autoload
Aşağıdakileri yapmadan önce serverınızın Laravel’i çalıştırmak için gereken minimum özelliklere sahip olduğundan emin olun:
- PHP >= 5.5.9
- OpenSSL PHP Extension
- PDO PHP Extension
- Mbstring PHP Extension
- Tokenizer PHP Extension
- PHP >= 5.4
- Mcrypt PHP Extension
- OpenSSL PHP Extension
- Mbstring PHP Extension
- Tokenizer PHP Extension
Adımlara geçelim.
- Laravel projenizin içerisinde bulunan tüm dosyaları, public klasörü hariç olmak üzere zipleyin. Serverda public_html ile aynı dizinde “main-laravel” isminde bir klasör oluşturun. “main-laravel” klasörünün içinde projenizin adını vereceğiniz bir klasör daha oluşturun. Biz buna “laravel” diyeceğiz. Ziplediğiniz dosyayı bu klasörünün içine atıp dosyaları çıkartın. Şu anki klasör düzeni şu şekilde:
.main-laravel .laravel .app .bootstrap .diğer laravel dosyaları .public_html
- public klasörünü zipleyin. Sunucuda public_html klasörü içerisine “demo” klasörü oluşturun ve ziplediğiniz dosyayı bu klasörünün içerisine atıp dosyaları çıkartın. Klasör düzeni şu an şu şekilde:
.main-laravel .laravel .app .bootstrap .diğer laravel dosyaları .public_html .demo .index.php .diğer dosyalar
- public_html/demo klasörünün içerisinde bulunan index.php dosyasını açın ve şu değişiklikleri yapın:
- $app değişkeninin tanımlandığı satırın altına şunu yazın:
$app->bind('path.public', function() { return __DIR__; });
Böylece index.php dosyanızın bulunduğu klasör (bu örnekte “demo” klasörü) public dizin olarak belirlenmiş oldu. Upload yapıldığında artık dosyalar bu klasörün içerisinde tutulacak. Aynı zamanda asset() fonksiyonunu (veya benzeri fonksiyonları) kullandığınızda oluşturulacak URLler de bu klasör üzerinden oluşturulacak.
- Aşağıdaki kodu bulun:
require __DIR__.'/../bootstrap/autoload.php';
Bu satır Laravel’in nereden yüklendiğini belirleyen satır. autoload.php dosyasının yolunu belirtmemiz gerekiyor. Klasör düzenini hatırlarsak (2. madde), Laravel dosyalarını yüklediğimiz klasör şu an bulunduğumuz klasöre göre 2 klasör dışarda. Diğer bir deyişle, autoload.php dosyası şurada bulunuyor:
/../../main-laravel/laravel/bootstrap/autoload.php
Burada yapmamız gereken değişiklikler şöyle:
// Aşağıdaki kodu bulun: require __DIR__.'/../bootstrap/autoload.php'; // Aşağıdaki kod ile değiştirin: require __DIR__.'/../../main-laravel/laravel/bootstrap/autoload.php';
// Aşağıdaki kodu bulun $app = require_once __DIR__.'/../bootstrap/app.php'; // Aşağıdaki kod ile değiştirin $app = require_once __DIR__.'/../../main-laravel/laravel/bootstrap/app.php';
- $app değişkeninin tanımlandığı satırın altına şunu yazın:
- Laravel’in çalışabilmesi için bazı dosyalara yazma izni vermemiz gerekiyor. “main-laravel/laravel” klasörünün içerisinde bulunan storage ve vendor klasörlerinin ve alt klasörlerinin CHMODlarının 755 olduğundan emin olun. Eğer bu yazının sonunda web sitenizi görüntüleyemiyorsanız, CHMOD değerlerini 775 yapın. Hala bir sıkıntı varsa 777 yapın. 755 yeterli oluyor fakat bu da aklınızda bulunsun.
- “main-laravel/laravel” klasöründe bulunan .env dosyasının içerisinden veritabanı ayarlarınızı yapmayı unutmayın. Veritabanı oluşturmadıysanız bir veritabanı oluşturun, veritabanına bir kullanıcı ekleyin. SSH bağlantımız olmadığı için php artisan migrate ya da php artisan db:seed komutunu kullanamayacağız. Dolayısıyla localhostta bulunan veritabanınızı indirin ve servera import edin.
- “public_html/demo” klasörü içerisinde bir .htaccess dosyası yoksa bir tane oluşturun ve içerisinde en azından aşağıdakilerin bulunduğundan emin olun:
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews </IfModule> RewriteEngine On # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
Bu kadar. “siteniz.com/demo” adresine girdiğinizde web sitenizin çalışıyor olduğunu görebilirsiniz.
“Paylaşımlı Sunucuya SSH Olmadan Laravel 5 Nasıl Yüklenir” için 4 yanıt
hosting domain var laravel kurdum ama satın aldığım bir php temayı kuramadım 🙁 yardım edermisiniz.Teşekkürler
Merhaba, mail adresinize dönüş yaptım.
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator at webmaster@powerhgroup.com to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
hatası alıyorum.
Tamam hallettim.
Çözüm:
Public_Html klasörünüzde yer alan demo klasörünün alt klasörleri dahil 644 izni verin, fakat demo klasörüne 755 izni verin.