{"id":30808,"date":"2025-10-02T09:42:15","date_gmt":"2025-10-02T06:42:15","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=30808"},"modified":"2025-10-02T09:42:15","modified_gmt":"2025-10-02T06:42:15","slug":"how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/","title":{"rendered":"How to Automatically Deploy Laravel Applications with Deployer on Ubuntu 16.04"},"content":{"rendered":"<p><body><\/p>\n<h2>Giri\u015f<\/h2>\n<p>Laravel uygulamalar\u0131n\u0131 canl\u0131 sunuculara manuel olarak da\u011f\u0131tmak (deployment), \u00f6zellikle b\u00fcy\u00fck ve s\u0131k g\u00fcncellenen projelerde zaman al\u0131c\u0131, hataya a\u00e7\u0131k ve stresli bir s\u00fcre\u00e7 olabilir. Dosyalar\u0131 kopyalamak, Composer ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 kurmak, veritaban\u0131 ge\u00e7i\u015flerini \u00e7al\u0131\u015ft\u0131rmak ve \u00f6nbellekleri temizlemek gibi ad\u0131mlar, her seferinde dikkat gerektirir ve bir ad\u0131m\u0131n unutulmas\u0131 bile uygulaman\u0131z\u0131n \u00e7al\u0131\u015fmamas\u0131na neden olabilir. Otomatik da\u011f\u0131t\u0131m ara\u00e7lar\u0131 tam da bu noktada devreye girerek bu s\u00fcreci standartla\u015ft\u0131rman\u0131za, h\u0131zland\u0131rman\u0131za ve insan hatalar\u0131n\u0131 minimize etmenize olanak tan\u0131r.<\/p>\n<p>Bu rehberde, Laravel uygulamalar\u0131n\u0131z\u0131 Ubuntu 16.04 sunucusuna (eski bir s\u00fcr\u00fcm olsa da, temel ad\u0131mlar di\u011fer Ubuntu s\u00fcr\u00fcmleri i\u00e7in de ge\u00e7erlidir) Deployer kullanarak nas\u0131l otomatik olarak da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. Deployer, PHP tabanl\u0131, SSH \u00fczerinden \u00e7al\u0131\u015fan ve s\u0131f\u0131r kesinti s\u00fcresiyle (zero-downtime) da\u011f\u0131t\u0131m yapabilen g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Bu sayede, uygulaman\u0131z\u0131n yeni s\u00fcr\u00fcm\u00fcn\u00fc yay\u0131nlarken kullan\u0131c\u0131lar\u0131n\u0131z herhangi bir kesinti ya\u015famaz.<\/p>\n<p>Bu k\u0131lavuzun sonunda, bir Laravel uygulamas\u0131n\u0131 yerel geli\u015ftirme ortam\u0131n\u0131zdan bir \u00fcretim sunucusuna g\u00fcvenli ve verimli bir \u015fekilde da\u011f\u0131tmak i\u00e7in gerekli t\u00fcm bilgi ve becerilere sahip olacaks\u0131n\u0131z.<\/p>\n<h2>Deployer Nedir ve Neden Kullanmal\u0131y\u0131z?<\/h2>\n<p>Deployer, PHP projeleri i\u00e7in geli\u015ftirilmi\u015f, SSH tabanl\u0131, a\u00e7\u0131k kaynakl\u0131 bir da\u011f\u0131t\u0131m arac\u0131d\u0131r. Capistrano gibi Ruby tabanl\u0131 ara\u00e7lardan esinlenerek tasarlanm\u0131\u015ft\u0131r ve PHP geli\u015ftiricileri i\u00e7in tan\u0131d\u0131k bir ortam sunar. Temel amac\u0131, bir uygulaman\u0131n yeni bir s\u00fcr\u00fcm\u00fcn\u00fc bir sunucuya h\u0131zl\u0131, g\u00fcvenli ve otomatik bir \u015fekilde da\u011f\u0131tmakt\u0131r.<\/p>\n<h3>Deployer&#8217;\u0131n Temel \u00d6zellikleri ve Avantajlar\u0131:<\/h3>\n<ul>\n<li><strong>S\u0131f\u0131r Kesinti S\u00fcresi (Zero-Downtime) Da\u011f\u0131t\u0131mlar:<\/strong> Deployer, yeni s\u00fcr\u00fcmleri ayr\u0131 bir &#8220;release&#8221; (s\u00fcr\u00fcm) dizinine da\u011f\u0131t\u0131r ve t\u00fcm i\u015flemler bittikten sonra mevcut s\u00fcr\u00fcm\u00fcn sembolik ba\u011flant\u0131s\u0131n\u0131 yeni s\u00fcr\u00fcme y\u00f6nlendirir. Bu sayede, yeni s\u00fcr\u00fcm tamamen haz\u0131r olana kadar eski s\u00fcr\u00fcm \u00e7al\u0131\u015fmaya devam eder ve ge\u00e7i\u015f an\u0131nda herhangi bir kesinti ya\u015fanmaz.<\/li>\n<li><strong>Geri Alma (Rollback) Yetene\u011fi:<\/strong> Bir da\u011f\u0131t\u0131m sonras\u0131 sorun ya\u015fand\u0131\u011f\u0131nda, tek bir komutla uygulaman\u0131z\u0131 \u00f6nceki \u00e7al\u0131\u015fan s\u00fcr\u00fcme geri alabilirsiniz. Bu, hatal\u0131 da\u011f\u0131t\u0131mlar\u0131n riskini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde azalt\u0131r.<\/li>\n<li><strong>Otomatik G\u00f6revler:<\/strong> Git deposundan kodu \u00e7ekme, Composer ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 kurma, veritaban\u0131 ge\u00e7i\u015flerini \u00e7al\u0131\u015ft\u0131rma, \u00f6nbellekleri temizleme, sembolik ba\u011flant\u0131lar\u0131 g\u00fcncelleme gibi yayg\u0131n da\u011f\u0131t\u0131m g\u00f6revlerini otomatikle\u015ftirir.<\/li>\n<li><strong>Kolay Yap\u0131land\u0131rma:<\/strong> Da\u011f\u0131t\u0131m ad\u0131mlar\u0131 ve sunucu ayarlar\u0131, basit bir PHP dosyas\u0131 (<code>deploy.php<\/code>) i\u00e7inde tan\u0131mlan\u0131r. Bu, yap\u0131land\u0131rmay\u0131 okumay\u0131 ve de\u011fi\u015ftirmeyi kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Geni\u015fletilebilirlik:<\/strong> Kendi \u00f6zel g\u00f6revlerinizi tan\u0131mlayabilir ve bunlar\u0131 mevcut da\u011f\u0131t\u0131m ak\u0131\u015f\u0131na entegre edebilirsiniz. Bu, \u00f6zel ihtiya\u00e7lar\u0131n\u0131za g\u00f6re da\u011f\u0131t\u0131m s\u00fcrecini uyarlaman\u0131za olanak tan\u0131r.<\/li>\n<li><strong>Ortak Dosya ve Dizin Y\u00f6netimi:<\/strong> <code>.env<\/code> dosyas\u0131, <code>storage<\/code> dizini gibi uygulaman\u0131n farkl\u0131 s\u00fcr\u00fcmleri aras\u0131nda payla\u015f\u0131lmas\u0131 gereken dosya ve dizinleri y\u00f6netmek i\u00e7in \u00f6zel mekanizmalar sunar.<\/li>\n<\/ul>\n<p>Deployer kullanarak, manuel hatalar\u0131 ortadan kald\u0131r\u0131r, da\u011f\u0131t\u0131m s\u00fcrelerini k\u0131salt\u0131r ve ekibinizin daha \u00e7ok geli\u015ftirme odakl\u0131 \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flars\u0131n\u0131z. Bu, DevOps s\u00fcre\u00e7lerinizin \u00f6nemli bir par\u00e7as\u0131 haline gelebilir.<\/p>\n<h2>\u00d6n Gereksinimler ve Sunucu Haz\u0131rl\u0131\u011f\u0131<\/h2>\n<p>Otomatik da\u011f\u0131t\u0131ma ba\u015flamadan \u00f6nce hem yerel geli\u015ftirme ortam\u0131n\u0131zda hem de hedef Ubuntu 16.04 sunucunuzda baz\u0131 \u00f6n gereksinimlerin kar\u015f\u0131lanmas\u0131 ve belirli ayarlar\u0131n yap\u0131lmas\u0131 gerekmektedir.<\/p>\n<h3>Yerel Geli\u015ftirme Ortam\u0131 \u0130\u00e7in:<\/h3>\n<ul>\n<li><strong>PHP ve Composer:<\/strong> Deployer bir PHP arac\u0131 oldu\u011fu i\u00e7in, yerel makinenizde PHP ve Composer kurulu olmal\u0131d\u0131r.<\/li>\n<li><strong>Git:<\/strong> Uygulama kodunuzu bir Git deposunda (GitHub, GitLab, Bitbucket vb.) bar\u0131nd\u0131rmal\u0131s\u0131n\u0131z.<\/li>\n<li><strong>SSH \u0130stemcisi:<\/strong> Sunucuya SSH ile ba\u011flanabilmek i\u00e7in bir SSH istemcisi gereklidir.<\/li>\n<\/ul>\n<h3>\u00dcretim Sunucusu (Ubuntu 16.04) \u0130\u00e7in:<\/h3>\n<p>Sunucuya SSH ile ba\u011flan\u0131n ve a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izleyerek haz\u0131rl\u0131klar\u0131 yap\u0131n:<\/p>\n<h4>1. Sistem G\u00fcncellemesi ve Temel Ara\u00e7lar\u0131n Kurulumu<\/h4>\n<pre><code class=\"language-bash\">sudo apt update\nsudo apt upgrade -y\nsudo apt install -y nginx php7.0-fpm php7.0-mysql php7.0-mbstring php7.0-xml php7.0-bcmath php7.0-zip php7.0-curl git composer\n<\/code><\/pre>\n<p><strong>Not:<\/strong> Ubuntu 16.04 i\u00e7in varsay\u0131lan PHP s\u00fcr\u00fcm\u00fc 7.0&#8217;d\u0131r. Daha yeni Laravel s\u00fcr\u00fcmleri daha yeni PHP versiyonlar\u0131 gerektirebilir (\u00f6rn. Laravel 8\/9 i\u00e7in PHP 7.3+). Bu durumda PPA (Personal Package Archive) kullanarak PHP&#8217;nin daha yeni bir s\u00fcr\u00fcm\u00fcn\u00fc kurman\u0131z gerekebilir (\u00f6rn. <code>sudo add-apt-repository ppa:ondrej\/php<\/code>).<\/p>\n<h4>2. Nginx Konfig\u00fcrasyonu<\/h4>\n<p>Laravel uygulaman\u0131z i\u00e7in bir Nginx virtual host dosyas\u0131 olu\u015fturun. \u00d6rne\u011fin, <code>\/etc\/nginx\/sites-available\/your_app.conf<\/code>:<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    server_name your_domain.com www.your_domain.com; # Kendi domaininizi yaz\u0131n\n    root \/var\/www\/your_app\/current\/public; # Deployer'\u0131n sembolik ba\u011flant\u0131 yap\u0131s\u0131\n\n    add_header X-Frame-Options \"SAMEORIGIN\";\n    add_header X-XSS-Protection \"1; mode=block\";\n    add_header X-Content-Type-Options \"nosniff\";\n\n    index index.php index.html index.htm;\n\n    charset utf-8;\n\n    location \/ {\n        try_files $uri $uri\/ \/index.php?$query_string;\n    }\n\n    location = \/favicon.ico { access_log off; log_not_found off; }\n    location = \/robots.txt  { access_log off; log_not_found off; }\n\n    error_page 404 \/index.php;\n\n    location ~ \\.php$ {\n        fastcgi_pass unix:\/run\/php\/php7.0-fpm.sock; # PHP-FPM soket yolunu kontrol edin\n        fastcgi_index index.php;\n        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;\n        include fastcgi_params;\n    }\n\n    location ~ \/\\.(?!well-known).* {\n        deny all;\n    }\n}\n<\/code><\/pre>\n<p>Bu dosyay\u0131 etkinle\u015ftirin ve Nginx&#8217;i yeniden ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo ln -s \/etc\/nginx\/sites-available\/your_app.conf \/etc\/nginx\/sites-enabled\/\nsudo rm \/etc\/nginx\/sites-enabled\/default # Varsay\u0131lan Nginx config'ini kald\u0131r\u0131n\nsudo nginx -t # Konfig\u00fcrasyon hatas\u0131 var m\u0131 kontrol edin\nsudo systemctl restart nginx\n<\/code><\/pre>\n<h4>3. Da\u011f\u0131t\u0131m Kullan\u0131c\u0131s\u0131 ve SSH Anahtarlar\u0131<\/h4>\n<p>Da\u011f\u0131t\u0131m i\u015flemleri i\u00e7in \u00f6zel bir kullan\u0131c\u0131 olu\u015fturmak en iyi g\u00fcvenlik uygulamas\u0131d\u0131r. Bu kullan\u0131c\u0131ya sunucunuzda SSH anahtar\u0131 ile eri\u015fim sa\u011flayaca\u011f\u0131z.<\/p>\n<pre><code class=\"language-bash\">sudo adduser deployer\nsudo usermod -aG www-data deployer # Nginx'in kulland\u0131\u011f\u0131 grup, dosya izinleri i\u00e7in \u00f6nemli\n\n<h2>Yerel makinenizdeki SSH genel anahtar\u0131n\u0131 (genellikle ~\/.ssh\/id_rsa.pub) kopyalay\u0131n<\/h2>\n<h2>ve sunucudaki deployer kullan\u0131c\u0131s\u0131n\u0131n authorized_keys dosyas\u0131na yap\u0131\u015ft\u0131r\u0131n.<\/h2>\nsudo su - deployer\nmkdir -p ~\/.ssh\nchmod 700 ~\/.ssh\nnano ~\/.ssh\/authorized_keys\n<h2>Yerel makinenizdeki id_rsa.pub i\u00e7eri\u011fini buraya yap\u0131\u015ft\u0131r\u0131n.<\/h2>\nchmod 600 ~\/.ssh\/authorized_keys\nexit # deployer kullan\u0131c\u0131s\u0131ndan \u00e7\u0131k\u0131n\n<\/code><\/pre>\n<p>Yerel makinenizden <code>ssh deployer@your_server_ip<\/code> komutuyla \u015fifresiz ba\u011flanabildi\u011finizden emin olun.<\/p>\n<h4>4. Uygulama Dizini ve \u0130zinleri<\/h4>\n<p>Deployer&#8217;\u0131n kullanaca\u011f\u0131 k\u00f6k dizini olu\u015fturun ve gerekli izinleri verin:<\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/var\/www\/your_app\nsudo chown -R deployer:www-data \/var\/www\/your_app\nsudo chmod -R 775 \/var\/www\/your_app # Veya daha k\u0131s\u0131tl\u0131 bir izin, ancak www-data'n\u0131n yazma izni olmal\u0131\n<\/code><\/pre>\n<h4>5. Veritaban\u0131 Kurulumu (\u00d6rnek: MySQL)<\/h4>\n<pre><code class=\"language-bash\">sudo apt install -y mysql-server\nsudo mysql_secure_installation # G\u00fcvenli kurulum ad\u0131mlar\u0131n\u0131 takip edin\n\n<h2>MySQL'e ba\u011flan\u0131p veritaban\u0131 ve kullan\u0131c\u0131 olu\u015fturun<\/h2>\nsudo mysql -u root -p\nCREATE DATABASE your_app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\nCREATE USER 'your_app_user'@'localhost' IDENTIFIED BY 'your_password';\nGRANT ALL PRIVILEGES ON your_app_db.* TO 'your_app_user'@'localhost';\nFLUSH PRIVILEGES;\nEXIT;\n<\/code><\/pre>\n<p>Art\u0131k sunucunuz Deployer ile da\u011f\u0131t\u0131ma haz\u0131r!<\/p>\n<h2>Laravel Projesi ve Deployer Kurulumu<\/h2>\n<h3>1. Laravel Projenizi Haz\u0131rlama<\/h3>\n<p>E\u011fer hen\u00fcz bir Laravel projeniz yoksa, yeni bir tane olu\u015fturabilir ve Git deposuna y\u00fckleyebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">composer create-project --prefer-dist laravel\/laravel my-laravel-app\ncd my-laravel-app\ngit init\ngit add .\ngit commit -m \"Initial Laravel project\"\ngit remote add origin git@github.com:your-username\/my-laravel-app.git # Kendi Git URL'nizi girin\ngit push -u origin master\n<\/code><\/pre>\n<p>Mevcut bir projeniz varsa, t\u00fcm de\u011fi\u015fikliklerin Git deposuna i\u015flendi\u011finden ve <code>master<\/code> (veya da\u011f\u0131t\u0131m yapaca\u011f\u0131n\u0131z dal) dal\u0131n\u0131n g\u00fcncel oldu\u011fundan emin olun.<\/p>\n<h3>2. Deployer Kurulumu (Yerel Makine)<\/h3>\n<p>Deployer&#8217;\u0131 projenizin <code>dev<\/code> ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 olarak kurun:<\/p>\n<pre><code class=\"language-bash\">cd my-laravel-app\ncomposer require deployer\/deployer --dev\n<\/code><\/pre>\n<p>Kurulum tamamland\u0131ktan sonra, Deployer&#8217;\u0131 ba\u015flat\u0131n. Bu, ana yap\u0131land\u0131rma dosyas\u0131 olan <code>deploy.php<\/code>&#8216;yi olu\u015fturacakt\u0131r:<\/p>\n<pre><code class=\"language-bash\">vendor\/bin\/dep init\n<\/code><\/pre>\n<p>Bu komut size birka\u00e7 soru soracakt\u0131r. Laravel i\u00e7in genellikle &#8220;Laravel&#8221; tarifini se\u00e7melisiniz. Bu, Laravel&#8217;e \u00f6zg\u00fc da\u011f\u0131t\u0131m ad\u0131mlar\u0131n\u0131 otomatik olarak ekleyecektir.<\/p>\n<h3>3. <code>deploy.php<\/code> Dosyas\u0131n\u0131 Yap\u0131land\u0131rma<\/h3>\n<p><code>deploy.php<\/code> dosyas\u0131n\u0131 a\u00e7\u0131n ve sunucunuza ve projenize uygun \u015fekilde yap\u0131land\u0131r\u0131n. \u0130\u015fte temel bir yap\u0131land\u0131rma \u00f6rne\u011fi ve a\u00e7\u0131klamalar\u0131:<\/p>\n<pre><code class=\"language-php\"><?php\nnamespace Deployer;\n\nrequire 'recipe\/laravel.php'; \/\/ Laravel'e \u00f6zg\u00fc g\u00f6revleri i\u00e7erir\n\n\/\/ Proje ad\u0131\nset('application', 'MyLaravelApp');\n\n\/\/ Git deposu URL'si\nset('repository', 'git@github.com:your-username\/my-laravel-app.git'); \/\/ Kendi Git URL'nizi buraya yaz\u0131n\n\n\/\/ Ortak dosyalar ve dizinler. Bu dosyalar\/dizinler her da\u011f\u0131t\u0131mda g\u00fcncellenmez,\n\/\/ mevcut s\u00fcr\u00fcmden yeni s\u00fcr\u00fcme sembolik olarak ba\u011flan\u0131r.\n\/\/ .env dosyas\u0131 ve storage dizini Laravel i\u00e7in olmazsa olmazd\u0131r.\nadd('shared_files', ['.env']);\nadd('shared_dirs', ['storage']);\n\n\/\/ Uygulaman\u0131n yazma iznine sahip olmas\u0131 gereken dizinler.\n\/\/ Nginx kullan\u0131c\u0131s\u0131 (www-data) bu dizinlere yazabilmelidir.\nadd('writable_dirs', [\n    'bootstrap\/cache',\n    'storage',\n    'storage\/app',\n    'storage\/app\/public',\n    'storage\/framework',\n    'storage\/framework\/cache',\n    'storage\/framework\/sessions',\n    'storage\/framework\/views',\n    'storage\/logs',\n]);\n\n\/\/ Sunucu tan\u0131mlar\u0131\nhost('your_server_ip_or_domain') \/\/ Sunucunuzun IP adresi veya domaini\n    ->set('hostname', 'your_server_ip_or_domain')\n    ->set('remote_user', 'deployer') \/\/ SSH ile ba\u011flanaca\u011f\u0131m\u0131z kullan\u0131c\u0131\n    ->set('deploy_path', '\/var\/www\/your_app') \/\/ Uygulaman\u0131n sunucudaki k\u00f6k dizini\n    ->set('branch', 'master') \/\/ Hangi Git dal\u0131ndan da\u011f\u0131t\u0131m yap\u0131laca\u011f\u0131\n    \/\/ ->set('labels', ['stage' => 'production']) \/\/ Birden fazla ortam i\u00e7in etiketleme\n    ->set('php_fpm_socket', 'unix:\/run\/php\/php7.0-fpm.sock'); \/\/ PHP-FPM soket yolu (Ubuntu 16.04 i\u00e7in)\n\n\/\/ \u00d6zel g\u00f6revler eklemek isterseniz buraya yazabilirsiniz.\n\/\/ \u00d6rne\u011fin, da\u011f\u0131t\u0131mdan sonra bir optimizasyon komutu \u00e7al\u0131\u015ft\u0131rma:\n\/\/ task('deploy:optimize_clear', function () {\n\/\/     run('{{bin\/php}} {{release_or_current_path}}\/artisan optimize:clear');\n\/\/ });\n\/\/ after('deploy:update_code', 'deploy:optimize_clear');\n\n\/\/ Da\u011f\u0131t\u0131m sonras\u0131 veritaban\u0131 ge\u00e7i\u015flerini \u00e7al\u0131\u015ft\u0131rmak i\u00e7in Laravel tarifindeki varsay\u0131lan g\u00f6revi etkinle\u015ftirme\n\/\/ (varsay\u0131lan olarak zaten eklenmi\u015f olabilir, kontrol edin)\n\/\/ before('deploy:symlink', 'artisan:migrate');\n\n\/\/ Da\u011f\u0131t\u0131m sonras\u0131 \u00f6nbellekleri temizlemek i\u00e7in\n\/\/ after('artisan:migrate', 'artisan:cache:clear');\n\/\/ after('artisan:cache:clear', 'artisan:config:cache');\n\/\/ after('artisan:config:cache', 'artisan:route:cache');\n\/\/ after('artisan:route:cache', 'artisan:view:cache');\n\n\/\/ Da\u011f\u0131t\u0131m sonras\u0131 gereksiz s\u00fcr\u00fcmleri temizle\nafter('deploy:failed', 'deploy:rollback'); \/\/ Bir hata durumunda otomatik geri al\n<\/code><\/pre>\n<h3>4. <code>.env<\/code> Dosyas\u0131 Y\u00f6netimi<\/h3>\n<p><code>.env<\/code> dosyas\u0131 hassas bilgiler (veritaban\u0131 kimlik bilgileri, API anahtarlar\u0131 vb.) i\u00e7erir ve Git deposuna asla eklenmemelidir. Deployer, bu dosyay\u0131 <code>shared_files<\/code> listesine ekledi\u011fimiz i\u00e7in \u00f6zel olarak y\u00f6netir.<\/p>\n<p><strong>\u0130lk Da\u011f\u0131t\u0131mdan \u00d6nce Yap\u0131lmas\u0131 Gereken:<\/strong><\/p>\n<ol>\n<li>Sunucuya SSH ile ba\u011flan\u0131n (<code>ssh deployer@your_server_ip<\/code>).<\/li>\n<li>Uygulaman\u0131n k\u00f6k dizinine gidin: <code>cd \/var\/www\/your_app<\/code>.<\/li>\n<li><code>shared<\/code> dizinini olu\u015fturun: <code>mkdir shared<\/code>.<\/li>\n<li><code>.env<\/code> dosyas\u0131n\u0131 olu\u015fturun ve i\u00e7eri\u011fini doldurun:<\/li>\n<pre><code class=\"language-bash\">cp .env.example shared\/.env\nnano shared\/.env\n<\/code><\/pre>\n<p><code>shared\/.env<\/code> dosyas\u0131n\u0131n i\u00e7ine veritaban\u0131 ba\u011flant\u0131 bilgilerini, <code>APP_ENV=production<\/code>, <code>APP_DEBUG=false<\/code> gibi \u00fcretim ortam\u0131 ayarlar\u0131n\u0131 ve bo\u015f bir <code>APP_KEY<\/code> de\u011ferini girin.<\/p>\n<li>\u0130zinleri ayarlay\u0131n: <code>chmod 664 shared\/.env<\/code><\/li>\n<\/ol>\n<p>Deployer ilk da\u011f\u0131t\u0131m\u0131nda bu <code>shared\/.env<\/code> dosyas\u0131n\u0131 al\u0131p <code>current\/.env<\/code> olarak sembolik ba\u011f kuracakt\u0131r. Ayr\u0131ca, Laravel tarifinde genellikle <code>artisan:key:generate<\/code> g\u00f6revi bulunur ve bu, e\u011fer <code>APP_KEY<\/code> bo\u015fsa otomatik olarak yeni bir anahtar olu\u015fturur.<\/p>\n<h2>Otomatik Da\u011f\u0131t\u0131m ve Y\u00f6netim<\/h2>\n<h3>1. \u0130lk Da\u011f\u0131t\u0131m\u0131n\u0131z\u0131 Yapma<\/h3>\n<p>T\u00fcm haz\u0131rl\u0131klar\u0131 tamamlad\u0131ktan sonra, yerel makinenizden ilk da\u011f\u0131t\u0131m\u0131n\u0131z\u0131 ba\u015flatabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">vendor\/bin\/dep deploy\n<\/code><\/pre>\n<p>Deployer, SSH \u00fczerinden sunucunuza ba\u011flanacak ve a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 s\u0131ras\u0131yla ger\u00e7ekle\u015ftirecektir:<\/p>\n<ol>\n<li><strong><code>deploy:prepare<\/code>:<\/strong> Da\u011f\u0131t\u0131m dizinlerini (<code>releases<\/code>, <code>shared<\/code>, <code>current<\/code>) olu\u015fturur.<\/li>\n<li><strong><code>deploy:release<\/code>:<\/strong> Yeni bir s\u00fcr\u00fcm dizini (\u00f6rn. <code>releases\/1<\/code>) olu\u015fturur.<\/li>\n<li><strong><code>deploy:update_code<\/code>:<\/strong> Git deposundan kodu yeni s\u00fcr\u00fcm dizinine \u00e7eker.<\/li>\n<li><strong><code>deploy:vendors<\/code>:<\/strong> Composer ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 kurar (<code>composer install<\/code>).<\/li>\n<li><strong><code>deploy:shared<\/code>:<\/strong> <code>.env<\/code> ve <code>storage<\/code> gibi payla\u015f\u0131ml\u0131 dosyalar\u0131\/dizinleri sembolik olarak ba\u011flar.<\/li>\n<li><strong><code>deploy:writable<\/code>:<\/strong> Belirtilen dizinlere yazma izinleri verir.<\/li>\n<li><strong><code>artisan:storage:link<\/code>:<\/strong> Laravel&#8217;in <code>storage:link<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131r.<\/li>\n<li><strong><code>artisan:migrate<\/code>:<\/strong> Veritaban\u0131 ge\u00e7i\u015flerini \u00e7al\u0131\u015ft\u0131r\u0131r.<\/li>\n<li><strong><code>artisan:cache:clear<\/code>, <code>artisan:config:cache<\/code>, <code>artisan:route:cache<\/code>, <code>artisan:view:cache<\/code>:<\/strong> Laravel \u00f6nbelleklerini temizler ve optimize eder.<\/li>\n<li><strong><code>deploy:symlink<\/code>:<\/strong> <code>current<\/code> sembolik ba\u011flant\u0131s\u0131n\u0131 yeni s\u00fcr\u00fcm dizinine y\u00f6nlendirir. Bu, uygulaman\u0131z\u0131n yeni s\u00fcr\u00fcm\u00fcn\u00fc etkinle\u015ftirir.<\/li>\n<li><strong><code>deploy:cleanup<\/code>:<\/strong> Eski s\u00fcr\u00fcmleri temizler (varsay\u0131lan olarak son 5 s\u00fcr\u00fcm\u00fc tutar).<\/li>\n<\/ol>\n<p>Da\u011f\u0131t\u0131m ba\u015far\u0131l\u0131 olursa, taray\u0131c\u0131n\u0131zdan <code>your_domain.com<\/code> adresine giderek uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<h3>2. Sonraki Da\u011f\u0131t\u0131mlar<\/h3>\n<p>Uygulaman\u0131zda de\u011fi\u015fiklikler yapt\u0131\u011f\u0131n\u0131zda:<\/p>\n<ol>\n<li>De\u011fi\u015fiklikleri Git deposuna i\u015fleyin ve da\u011f\u0131t\u0131m dal\u0131na (\u00f6rn. <code>master<\/code>) push edin.<\/li>\n<li>Yerel makinenizden tekrar <code>vendor\/bin\/dep deploy<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131n.<\/li>\n<\/ol>\n<p>Deployer, ayn\u0131 ad\u0131mlar\u0131 tekrarlayacak, ancak bu sefer yeni bir s\u00fcr\u00fcm dizini olu\u015fturacak ve mevcut <code>current<\/code> sembolik ba\u011flant\u0131s\u0131n\u0131 yeni s\u00fcr\u00fcm haz\u0131r oldu\u011funda ona y\u00f6nlendirecektir. Bu sayede s\u0131f\u0131r kesinti s\u00fcresiyle da\u011f\u0131t\u0131m ger\u00e7ekle\u015fir.<\/p>\n<h3>3. Geri Alma (Rollback)<\/h3>\n<p>Yeni bir da\u011f\u0131t\u0131m sonras\u0131 uygulaman\u0131zda kritik bir hata fark ederseniz, Deployer ile kolayca \u00f6nceki \u00e7al\u0131\u015fan s\u00fcr\u00fcme geri d\u00f6nebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">vendor\/bin\/dep rollback\n<\/code><\/pre>\n<p>Bu komut, <code>current<\/code> sembolik ba\u011flant\u0131s\u0131n\u0131 bir \u00f6nceki s\u00fcr\u00fcm dizinine y\u00f6nlendirir ve uygulaman\u0131z an\u0131nda \u00f6nceki haline d\u00f6ner. Bu i\u015flem de neredeyse s\u0131f\u0131r kesinti s\u00fcresiyle ger\u00e7ekle\u015fir.<\/p>\n<h3>4. Di\u011fer Faydal\u0131 Komutlar<\/h3>\n<ul>\n<li><strong><code>vendor\/bin\/dep status<\/code>:<\/strong> Sunucudaki da\u011f\u0131t\u0131m durumunu, mevcut s\u00fcr\u00fcm\u00fc ve \u00f6nceki s\u00fcr\u00fcmleri g\u00f6sterir.<\/li>\n<li><strong><code>vendor\/bin\/dep current<\/code>:<\/strong> Mevcut aktif s\u00fcr\u00fcm\u00fcn tam yolunu g\u00f6sterir.<\/li>\n<li><strong><code>vendor\/bin\/dep cleanup<\/code>:<\/strong> Manuel olarak eski s\u00fcr\u00fcmleri temizler (varsay\u0131lan olarak da\u011f\u0131t\u0131m sonunda otomatik \u00e7al\u0131\u015f\u0131r).<\/li>\n<li><strong><code>vendor\/bin\/dep artisan <command><\/code>:<\/strong> Sunucudaki uygulaman\u0131z i\u00e7in Laravel Artisan komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131r\u0131r. \u00d6rne\u011fin:\n<pre><code class=\"language-bash\">vendor\/bin\/dep artisan db:seed # Veritaban\u0131n\u0131 seed etmek i\u00e7in\n        vendor\/bin\/dep artisan queue:restart # Kuyruk i\u015f\u00e7ilerini yeniden ba\u015flatmak i\u00e7in\n        <\/code><\/pre>\n<\/li>\n<\/ul>\n<h3>5. \u00d6zel G\u00f6revler (Custom Tasks)<\/h3>\n<p>Deployer&#8217;\u0131n varsay\u0131lan g\u00f6revleri d\u0131\u015f\u0131ndaki \u00f6zel ihtiya\u00e7lar\u0131n\u0131z i\u00e7in kendi g\u00f6revlerinizi tan\u0131mlayabilirsiniz. \u00d6rne\u011fin, bir \u00f6nbellek temizleme beti\u011fi \u00e7al\u0131\u015ft\u0131rmak veya bir bildirim g\u00f6ndermek:<\/p>\n<pre><code class=\"language-php\">\/\/ deploy.php dosyas\u0131nda\ntask('my_custom_task', function () {\n    \/\/ Sunucuda \u00e7al\u0131\u015facak komutlar\n    run('echo \"\u00d6zel g\u00f6rev \u00e7al\u0131\u015f\u0131yor!\"');\n    run('{{bin\/php}} {{release_or_current_path}}\/artisan cache:clear');\n});\n\n\/\/ Bu g\u00f6revi da\u011f\u0131t\u0131m ak\u0131\u015f\u0131nda belirli bir noktaya ekleyin\nafter('deploy:symlink', 'my_custom_task'); \/\/ Sembolik ba\u011flant\u0131dan sonra \u00e7al\u0131\u015ft\u0131r\n<\/code><\/pre>\n<p><code>{{bin\/php}}<\/code> ve <code>{{release_or_current_path}}<\/code> gibi de\u011fi\u015fkenler, Deployer taraf\u0131ndan otomatik olarak doldurulur.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<p>Bu rehberde, Laravel uygulamalar\u0131n\u0131z\u0131 Deployer kullanarak Ubuntu 16.04 sunucusuna nas\u0131l otomatik olarak da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011frendiniz. Art\u0131k manuel da\u011f\u0131t\u0131m\u0131n getirdi\u011fi zorluklar\u0131 a\u015farak, daha h\u0131zl\u0131, daha g\u00fcvenli ve hatas\u0131z da\u011f\u0131t\u0131mlar yapabilirsiniz. Otomatik da\u011f\u0131t\u0131m, geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131r\u0131r, tak\u0131m\u0131n\u0131z\u0131n verimlili\u011fini art\u0131r\u0131r ve uygulaman\u0131z\u0131n s\u00fcrekli olarak g\u00fcncel kalmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Unutmay\u0131n, bu rehber Ubuntu 16.04&#8217;\u00fc referans alsa da, Deployer&#8217;\u0131n temel prensipleri ve yap\u0131land\u0131rmas\u0131 di\u011fer Linux da\u011f\u0131t\u0131mlar\u0131 ve Ubuntu&#8217;nun daha yeni s\u00fcr\u00fcmleri i\u00e7in de b\u00fcy\u00fck \u00f6l\u00e7\u00fcde ayn\u0131d\u0131r. Sadece PHP-FPM soket yolu veya paket isimleri gibi k\u00fc\u00e7\u00fck farkl\u0131l\u0131klar olabilir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>S: <code>APP_KEY<\/code> nas\u0131l ayarlan\u0131r?<\/strong><br \/>\nC: \u0130lk da\u011f\u0131t\u0131mdan \u00f6nce <code>\/var\/www\/your_app\/shared\/.env<\/code> dosyas\u0131n\u0131 manuel olarak olu\u015fturup i\u00e7ine <code>APP_KEY=<\/code> \u015feklinde bo\u015f bir de\u011fer ekleyin. Deployer&#8217;\u0131n Laravel tarifi, da\u011f\u0131t\u0131m s\u0131ras\u0131nda <code>artisan key:generate<\/code> komutunu otomatik olarak \u00e7al\u0131\u015ft\u0131rarak bu alan\u0131 dolduracakt\u0131r.<\/p>\n<p><strong>S: <code>storage<\/code> dizini neden payla\u015f\u0131ml\u0131 olmal\u0131?<\/strong><br \/>\nC: Laravel&#8217;in <code>storage<\/code> dizini, kullan\u0131c\u0131 taraf\u0131ndan y\u00fcklenen dosyalar, oturumlar, \u00f6nbellek dosyalar\u0131 ve loglar gibi uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 s\u0131ras\u0131nda olu\u015fan dinamik verileri i\u00e7erir. Bu verilerin her da\u011f\u0131t\u0131mda kaybolmamas\u0131 ve farkl\u0131 s\u00fcr\u00fcmler aras\u0131nda payla\u015f\u0131lmas\u0131 gerekti\u011fi i\u00e7in <code>shared_dirs<\/code> listesine eklenmelidir.<\/p>\n<p><strong>S: <code>.env<\/code> dosyas\u0131 nas\u0131l g\u00fcvenli tutulur?<\/strong><br \/>\nC: <code>.env<\/code> dosyas\u0131 hassas veriler i\u00e7erdi\u011fi i\u00e7in asla Git deposuna eklenmemelidir. Deployer, bu dosyay\u0131 sunucudaki <code>shared<\/code> dizininde tutarak ve her yeni s\u00fcr\u00fcme sembolik olarak ba\u011flayarak g\u00fcvenli\u011fi sa\u011flar. Ayr\u0131ca, sunucudaki dosya izinlerinin (\u00f6rne\u011fin <code>chmod 600 shared\/.env<\/code> veya <code>chmod 664 shared\/.env<\/code>) do\u011fru ayarland\u0131\u011f\u0131ndan emin olun.<\/p>\n<p><strong>S: Da\u011f\u0131t\u0131m hatalar\u0131n\u0131 nas\u0131l gideririm?<\/strong><br \/>\nC: Deployer, hatalar\u0131 genellikle a\u00e7\u0131k\u00e7a belirtir. En yayg\u0131n sorunlar \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>SSH Ba\u011flant\u0131 Sorunlar\u0131:<\/strong> SSH anahtarlar\u0131n\u0131z\u0131n do\u011fru yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131ndan ve <code>deployer<\/code> kullan\u0131c\u0131s\u0131n\u0131n sunucuya \u015fifresiz ba\u011flanabildi\u011finden emin olun.<\/li>\n<li><strong>Dosya \u0130zinleri:<\/strong> Sunucudaki <code>\/var\/www\/your_app<\/code> dizininin ve alt dizinlerinin (\u00f6zellikle <code>storage<\/code> ve <code>bootstrap\/cache<\/code>) <code>deployer<\/code> kullan\u0131c\u0131s\u0131 ve web sunucusu kullan\u0131c\u0131s\u0131 (<code>www-data<\/code>) taraf\u0131ndan yaz\u0131labilir oldu\u011fundan emin olun.<\/li>\n<li><strong>Composer Hatalar\u0131:<\/strong> Sunucuda gerekli PHP uzant\u0131lar\u0131n\u0131n y\u00fckl\u00fc oldu\u011fundan ve Composer&#8217;\u0131n g\u00fcncel oldu\u011fundan emin olun.<\/li>\n<li><strong><code>.env<\/code> Dosyas\u0131 Eksikli\u011fi:<\/strong> \u0130lk da\u011f\u0131t\u0131mdan \u00f6nce <code>shared\/.env<\/code> dosyas\u0131n\u0131n olu\u015fturuldu\u011fundan ve do\u011fru yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131ndan emin olun.<\/li>\n<\/ul>\n<p>Daha detayl\u0131 hata mesajlar\u0131 i\u00e7in <code>vendor\/bin\/dep deploy -vvv<\/code> komutunu kullanarak daha fazla detay alabilirsiniz.<\/p>\n<p><strong>S: Hangi PHP versiyonunu kullanmal\u0131y\u0131m?<\/strong><br \/>\nC: Laravel&#8217;in her s\u00fcr\u00fcm\u00fc belirli PHP versiyonlar\u0131n\u0131 gerektirir. \u00d6rne\u011fin, Laravel 6 i\u00e7in PHP 7.2+, Laravel 8\/9 i\u00e7in PHP 7.3+ veya 7.4+ \u00f6nerilir. Ubuntu 16.04 varsay\u0131lan olarak PHP 7.0 ile gelir. E\u011fer daha yeni bir Laravel s\u00fcr\u00fcm\u00fc kullan\u0131yorsan\u0131z, <code>ondrej\/php<\/code> PPA&#8217;s\u0131 gibi bir depodan daha yeni bir PHP s\u00fcr\u00fcm\u00fcn\u00fc kurman\u0131z gerekecektir.<\/p>\n<p><strong>S: Ubuntu 16.04 yerine ba\u015fka bir versiyon kullanabilir miyim?<\/strong><br \/>\nC: Evet, kesinlikle. Bu rehberdeki ad\u0131mlar Ubuntu 18.04, 20.04, 22.04 veya di\u011fer Debian tabanl\u0131 da\u011f\u0131t\u0131mlar i\u00e7in de b\u00fcy\u00fck \u00f6l\u00e7\u00fcde ge\u00e7erlidir. Sadece PHP ve Nginx kurulum komutlar\u0131nda veya PHP-FPM soket yollar\u0131nda k\u00fc\u00e7\u00fck farkl\u0131l\u0131klar olabilir. \u00d6rne\u011fin, Ubuntu 20.04&#8217;te <code>php7.0-fpm<\/code> yerine <code>php7.4-fpm<\/code> kullanman\u0131z gerekebilir.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Giri\u015f\nLaravel uygulamalar\u0131n\u0131 canl\u0131 sunuculara manuel olarak da\u011f\u0131tmak (deployment), \u00f6zellikle b\u00fcy\u00fck ve s\u0131k g\u00fcncellenen projelerde zaman al","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1468],"tags":[],"class_list":{"0":"post-30808","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ubuntu","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to Automatically Deploy Laravel Applications with Deployer on Ubuntu 16.04 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Automatically Deploy Laravel Applications with Deployer on Ubuntu 16.04\" \/>\n<meta property=\"og:description\" content=\"Giri\u015f Laravel uygulamalar\u0131n\u0131 canl\u0131 sunuculara manuel olarak da\u011f\u0131tmak (deployment), \u00f6zellikle b\u00fcy\u00fck ve s\u0131k g\u00fcncellenen projelerde zaman al\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-02T06:42:15+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"How to Automatically Deploy Laravel Applications with Deployer on Ubuntu 16.04\",\"datePublished\":\"2025-10-02T06:42:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/\"},\"wordCount\":2173,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Ubuntu\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/\",\"name\":\"How to Automatically Deploy Laravel Applications with Deployer on Ubuntu 16.04 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-02T06:42:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Automatically Deploy Laravel Applications with Deployer on Ubuntu 16.04\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to Automatically Deploy Laravel Applications with Deployer on Ubuntu 16.04 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/","og_locale":"tr_TR","og_type":"article","og_title":"How to Automatically Deploy Laravel Applications with Deployer on Ubuntu 16.04","og_description":"Giri\u015f Laravel uygulamalar\u0131n\u0131 canl\u0131 sunuculara manuel olarak da\u011f\u0131tmak (deployment), \u00f6zellikle b\u00fcy\u00fck ve s\u0131k g\u00fcncellenen projelerde zaman al","og_url":"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-02T06:42:15+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"7 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"How to Automatically Deploy Laravel Applications with Deployer on Ubuntu 16.04","datePublished":"2025-10-02T06:42:15+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/"},"wordCount":2173,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Ubuntu"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/","url":"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/","name":"How to Automatically Deploy Laravel Applications with Deployer on Ubuntu 16.04 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-02T06:42:15+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/how-to-automatically-deploy-laravel-applications-with-deployer-on-ubuntu-16-04\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to Automatically Deploy Laravel Applications with Deployer on Ubuntu 16.04"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30808","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=30808"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30808\/revisions"}],"predecessor-version":[{"id":30809,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30808\/revisions\/30809"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=30808"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=30808"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=30808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}