I L K B Y T E

Deployer ile Laravel deploy işlemleri

Deployer ile Laravel deploy işlemleri

Deployer php deploy işlemlerini otomatik hale getiren oldukça kullanışlı bir uygulamadır. Deployer kişisel olarak en değer verdiğim özelliklerinden biri deploy işlemlerinizi oldukça hızlı bir hale getirmesidir. Saniyeler içerisinde deploy işleminiz gerçekleşir ve istediğiniz sıklıkla deploy işlemi yapabilirsiniz.

Bu yazıda Laravel uygulamamızı deployer yardımıyla sunucumuza nasıl deploy edebiliriz bunu göreceğiz. Temelden en son aşamaya kadar anlattığım için yazımız biraz uzun oldu bu yüzden gerek gördüğünüz kısımları atlayabilirsiniz.

Lokal Gereksinimler

Deployer bir php uygulaması olduğu için bilgisayarınızda php yüklü olmalı ve eğer windows kullanıyorsanız tavsiyem CMDER veya Git Bash benzeri bir emülatörden yararlanmanız. Laravel’le uğraştığımızı göz önüne alarak bilgisayarınızda php’nin yüklü olduğunu varsayıyorum.

Diğer bir gereklilik ise ssh keyine sahip olmanızdır. Bu hep git sunucunuza erişim,deploy süreci ve sunucumuzu kurarken gerekli olacaktır.

SSH anahtarı oluşturma

Eğer bilgisayarında ssh anahtarınız yoksa bir anahtar oluşturmanız oldukça yararlı olacaktır. Mac ve Linux için adımlar aynı olmakla birlikte Windows kullanıyorsanız CMDER adlı programı kullanarak aşağıdaki aynı adımlarla ssh keyinizi oluşturabilirsiniz.

Terminalimizi açtıysak şimdi ssh-keylerimizi oluşturalım.

ssh-keygen

Tüm soruları Enter tuşuna basarak geçebilirsiniz. Eğer şifre girerseniz ssh anahtarınızla giriş yapmak istediğinizde ssh anahtarınızın şifresini her seferinde soracaktır ve pek tavsiye etmiyorum ama keylerinizin birinin eline geçme durumunda karşı esktra bir güvenlik katmanı oluşturur.

Deployer kurulumu

Deployer kurulumu oldukça basittir.

// Deployer'ı download edelim.
curl -LO https://deployer.org/deployer.phar
// Deployer lokal bin dizinimize atalım eğer bu 
// dizin yoksa oluşturmanızda fayda var
sudo mv deployer.phar /usr/local/bin/dep
// Son olarak çalıştırma iznini dosyamıza verelim.
sudo chmod +x /usr/local/bin/dep

Sunucu Gereksinimleri

Başlamadan önce Ubuntu 16.04 kurulu bir sunucunuz olması gerekiyor. Bunun için bir süredir üzerinde çalıştığımız ilkbyte.com projemizden Ubuntu 16.04 kurulumu gerçekleştiriyorum. Kurulumdan önce sizden ssh keyinizi isteyecektir ve id_rsa.pub dosyasının içerisindeki keyi siteye ekleyebilirsiniz.

Sunucunuz hazırsa gerekli kurulumlara giriş yaparak başlayalım.

ssh root@sunucu-ip-adresiniz

Root kullanıcısı

Root kullanıcısı işletim sistemi üzerinde çok büyük yetkilere sahiptir bu yüzden genelde işletim sistemine root kullanıcısı olarak girme yetkisinin kısıtlanması tavsiye edilen bir yöntemdir.

Tabi bu işleme geçmeden önce yeni bir kullanıcı oluşturmamız gerek.

Yeni kullanıcı eklemek

Ben kullanıcı olarak xuma adını kullanmak istiyorum,sizler türkçe karakter içermeyen herhangi bir isim verebilirsiniz.

adduser xuma

Bu komut sizden yeni şifrenizi girmenizi isteyecektir, güvenli şifrenizi girdikten sonra geri kalan soruları Enter tuşuna basarak geçebilirsiniz.

Neden bu soruları sorduklarını merak ediyorsanı işte
size geçmişi. Gecos

Kullanıcınıza root yetkileri verin

Artık yeni bir kullanıcımız var ancak birçok işlem için tekrar tekrar root yetkilerine ihtiyaç duyacağız. Bunun için kullanıcımıza superuser yetkisi verebiliriz. Bu sayede komutlarımızın başına sudo yazarak root kullanıcızına giriş yapmadan root işlemleri yapabiliriz.

usermod -aG sudo xuma

SSH anahtarınızı sunucuya ekleyin

SSH ile sunucunuza erişim sağlamanız şifre ile giriş yapmaya göre daha güvenlidir. Hatta şifre ile sunucunuza girişi tamamen kapatmanız tavsiye edilir ancak ben herzaman güvenli bir ana şifreyi bir kenarda tutmayı tercih ediyorum.

ssh-copy-id xuma@sunucumuzun-ipsi

Artık sunucumuza ssh keyimiz ile şifresiz giriş yapabiliriz.

ssh xuma@sunucumuzun-ipsi

Güvenlik duvarını aktif edin

Ubuntu standart olarak güvenlik duvarı için UFW kullanmakta ve OpenSSH servisi kurulumda kendisini UFW listesine eklemekte. Aşağıdaki komutla katılı uygulamaları görebiliriz.

sudo ufw app list

Sunucumuza SSH üzerinden giriş yapabilmemiz için OpenSSH’a izin vermemiz gerekmekte.

sudo ufw allow OpenSSH

OpenSSH’a izin verdikten sonra güvenlik duvarımızı aktif edebiliriz.

sudo ufw enable

Bu komut devam etmek isteyip istemediğinizi soracaktır, “y” tuşuna basarak devam etmek istediğinizi onayladıktan sonra enter tuşuyla devam edebilirsiniz. Sonuş olarak aşağıdaki gibi bir çıktı alacaksınız.

Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Güvenlik duvarı statüsünü kontrol etmek için aşağıdaki komutu kullanabiliriz.

sudo ufw status

Size aşağıdaki gibi bir çıktı vermesi gerek.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             

Buradaki gibi bir çıktı aldıysanız artık LEMP kurulumuna geçmek için hazırsınız.

LEMP Kurulumu

LEMP basitçe LINUX,NGINX,MYSQL ve PHP’nin kısatlmasıdır. E harfi Nginx’in okunuşu olan engine-x’ten gelmektedir.

Nginx Kurulumu

Tüm kurulumlarımızın için ubuntu paket yöneticisini kullanacağız ve ubuntu paket yöneticisini kullanırken genel olarak güncelleme komutu ile başlamak güzel bir alışkanlıktır. Aşağıdaki komutlarla paketleri güncelleyip sonrasında Nginx’i kuralım.

sudo apt-get update
sudo apt-get install nginx

Kurulum sonrasında Nginx’imiz otomatik olarak başlayacaktır. Ancak IP üzerinden ulaşmaya çalıştığımızda herhangi bir yanıt alamadığımızı göreceksiniz. Bunun nedeni güvenlik duvarımızda henüz Nginx’e izin vermemiş olmamız. Aşağıdaki komutla Nginx’e izin verelim.

sudo ufw allow 'Nginx HTTP'

Artık IP üzerinden sitemize ulaşmaya çalıştığımızda varsayılan Nginx Hoşgeldin sayfasına ulaşacağız. Biz yinede güvenlik duvarımızın durumunu kontrol edelim.

sudo ufw status

Aşağıdakine benzer bir sonuç almamız gerek.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)             

Nginx hazır olduğuna göre sonraki adıma geçebiliriz.

MySql Kurulumu

MySql kurulumu oldukça basittir ama yinede birkaç dikkat edilecek konu üstünde duracağız. Aşağıdaki komutla kuruluma başlayalım.

sudo apt-get install mysql-server

Bu komut kurulum işlemine başladıktan sonra sizden mysql root kullanıcısı için bir şifre isteyecektir ve sonrasında şifrenizi onaylamanızı isteyecektir.Her zaman olduğu gibi güvenli bir şifre vermenizde yarar var.

Kurulum işlemi tamamlandıktan şekilde kurulumu tamamladıktan sonra aşağıdaki scripti çalıştırabiliriz. Bu script bize bazı sorularla mysql varsayılan ayarlarını değiştirecektir.

mysql_secure_installation

Bu komut ilk olarak sizden mysql root kullanıcısı için biraz önce oluşturduğumuz şifreyi isteyecektir. Sonrasında güvenli şifreler için şifre güvenliği için bir eklenti kurup kurmayacağını soracaktır. Burada kurulumu onaylamanızı tavsiye etsemde genelde ben bu seçeneği kullanmıyorum o yüzden “n” harfine basarak bu soruyu geçeceğim. Bu sorular ve sonrasındaki sorularla ilgili cevapları aşağıda görebilirsiniz.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No: n


Change the password for root ? ((Press y|Y for Yes, any other key for No) : n
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

MySql servisimizi kontrol etmek için aşağıdaki komutu kullanalım.

sudo systemctl status mysql

Eğer servisimiz çalışıyorsa aşağıdaki gibi bir sonuç almamız gerek. Burada active kısmında active (running) yazması çalıştığını ifade ediyor.

 mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: e
   Active: active (running) since Sun 2018-09-30 22:25:21 +03; 10min ago
 Main PID: 22238 (mysqld)
   CGroup: /system.slice/mysql.service
           └─22238 /usr/sbin/mysqld

Son bir kontrol için aşağıdaki komutu kullanarak mysql’e giriş yapabiliriz burada sizden biraz önce oluşturduğumuz root şifresini isteyecektir. Sonrasında çıkış yapmak için exit; yazarak çıkabilirsiniz.

sudo mysql -u root -p

Aşağıdaki gibi bir ekran bizi karşılayacaktır.

Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.23-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit;
Bye

PHP Kurulumu

PHP kurulumu için son stabil versiyonu 7.2’i kullanacağız ancak php kurulumu ubuntu üzerinde normalde oldukça basit olsada Ubuntu versiyonumuz (16.04) için 7.2 sürümü maalesef mevcut değil bunun için yeni bir depo ekleyip kurulumumuzu o şekilde gerçekleştireceğiz.

İlk olarak aşağıdaki paketi yükleyerek yeni depolar ekleyebilmemizi sağlayalım.

sudo apt-get install python-software-properties

Yeni depolar eklerken her zaman dikkatli olmamız gerek. Biz uzun süredir PHP depoları için güvenli bir kaynak olan Ondřej Surý’nin depolarını kullanacağız. Aşağıdaki komutla depoyu ekleyelim. Komut yükleme için onay isteyecektir bunun için ENTER’a basmanız yeterlidir.

sudo add-apt-repository ppa:ondrej/php

Özellikle yeni bir depo ekledikten sonra paket listenizi güncellemeniz gerekir hatta her kurulumdan önce yenilemeniz güzel bir alışkanlık olabilir.

sudo apt-get update

Artık php7.2 kurulumuna geçebiliriz. Aslında kurulum sudo apt-get install php7.2* komutu kadar basit olsada Laravel için birkaç ekstra eklenti ve sistem paketi gereklidir.

sudo apt-get install unzip zip nginx php7.2 php7.2-mysql php7.2-fpm php7.2-mbstring php7.2-xml php7.2-curl

Bu işlemler sonucunda php kurulumu başarılı bir şekilde tamamlanmış olacaktır. Bunu php -v komutu ile test edelim. Aşağıdakine benzer bir sonuç almamız gerek.

PHP 7.2.9-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Aug 19 2018 07:16:12) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.9-1+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies

MySql’e benzer şekilde sudo systemctl status php7.2-fpm bu komutlada servisimizin durumunu kontrol edebiliriz.

Nginx ve php

Varsayılan olarak Nginx, Php ile nasıl iletişim kuracağını bilmiyor bunun için birkaç Nginx konfigurasyonu yapacağız. Bunun için ilk olarak Nginx varsayılan sunucu ayar dosyasını nano ile açalım.

sudo nano /etc/nginx/sites-available/default

Dosyamızı aşağıdaki şekilde değiştirebilirsiniz. Basitçe artık php ile Nginx arasında ileşimi sağlamış olduk. Aşağıdaki ayar dosyanızda sadece BURAYA_SUNUCU_IP_ADRESI_YAZIN kısmına sunucu IP adresinizi yazmanız yeterli.

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name BURAYA_SUNUCU_IP_ADRESI_YAZIN;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

Nginx konfigurasyonunu değiştirdikten sonra her zaman konfigurasyon dosyanızı test etmenizde yarar var bunun için nginx -t komutunu kullanabilirsiniz. Eğer her şey yolundaysa aşağıdaki gibi bir sonuç alacaksınız ve her şey yolunda demektir.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Artık Nginx servisimizi yeniden başlatabiliriz.

sudo systemctl reload nginx

PHP Testi

Artık sunucumuz PHP dosyalarımıza yanıt verecektir bunun için basit bir test dosyası oluşturalım. Nano ile yeni bir dosya oluşturup kaydedelim.

sudo nano /var/www/html/info.php

Dosya içeriği olarak aşağıdaki basit satırları ekleyelim ve kaydedelim.

<?php
phpinfo();

Bu işlem sonucunda sunucu IP adresimiz üzerinden info.php ulaştığımıza Php info sayfasını görebilmemiz gerek. Artık deployer kurulumuna geçebiliriz.

Deployer ile Deploy

Deployer hali hazırda kendi bilgisayarımızda kurulu olduğuna göre artık depley işlemi için gerekli ayarları yapmaya başlayabiliriz.

Deployer kullanıcısı oluşturma

Deployer uzak sunucunuzda komutlar çalıştırmak için yeni bir kullanıcı kullanmanızı tavsiye eder, biz hali hazırda bir kullanıcı oluşturduk ancak ben kendi kullanım ile deploy yapmak istemiyorum ve deployerda yeni bir kullanıcı eklemenizi tavsiye ediyor. Bizde sunucumuzda deployer kullanıcısı oluşturalım. Sunucumuza giriş yaptıktan sonra deployer kullanıcısını ekleyelim.

sudo adduser deployer

Temel dosya işlemlerinin Nginx tarafından yapılabilmesi için kullanımızı www-data grubuna eklememiz gerekir.

sudo adduser deployer

Bu komut sunucumuza yeni kullanıcı eklediğimiz bölümdeki soruların aynısını size soracaktır.

Deployer tarafından oluşturulan dosyalar 644 ve dizinler 755 iznine sahip olmalı böylece deployer yazma/okuma işlemleri yapabilirken gruptaki diğer kullanıcılar sadece okuma iznine sahip olacaktır.

sudo chfn -o umask=022 deployer

Deployer ssh anatharı

Deployer deploy işlemini yapabilmek için git reponuza bağlanıp dosyaları indirecektir. Bunun için deployer kullanıcısı için ssh keyi oluşturmamız gerek ve bu ssh keyini git sunucumuza eklememiz gerek.

Deployer kullanıcımıza geçiş yapalım

su - deployer

Sonrasında kullanıcı için ssh keyi oluşturalım

ssh-keygen -t rsa -b 4096

Sonrasında oluşturduğumuz anahtarı görüntüleyip git sunucumuza ekleyelim.

cat ~/.ssh/id_rsa.pub

Nginx ayarları

Bu kısma başlamadan önce 2 tane websitesi barındıracağımızı ve bunların ornek1.com ve ornek2.com olacağını varsayalım.

Yeni konfigurasyon

Ornek1.com için yeni bir konfigurasyon ekleyerek başlayalım. Konfigurasyon isminizi istediğiniz isimde verebilirsiniz ancak yönetimi daha rahat olduğu için gendel site ismiyle oluşturmak daha kullanışlıdır.

sudo nano /etc/nginx/sites-available/ornek1.com 

Sonrasında aşağıdaki konfigurasyonu ekleyelim.

server {
        listen 80;
        listen [::]:80;

        root /home/deployer/Sites/ornek1/current/public;
        index index.php index.html index.htm index.nginx-debian.html;

        server_name ornek1.com www.ornek.com;
}

Yukarıda basit birkaç kısım üzerinden geçelim;

Sitelerimizi barındırmak için genelde /var/www/html kabul edilsede genel olarak home dizinini daha kullanışlı buluyorum bunun için sitelerimizi barındırmak için /home/deployer/Sites dizinin oluşturdum.

Deployer deploy işlemi için site-adi/current yolunu izler ve laravelde public dizinini kullandığından sitemizin çalışacağı dizin site-adi/current/public olacaktır. Yukardaki örneğimiz için sonuç olarak root /home/deployer/Sites/ornek1/current/public; dizinini kullanacağız.

server_name ornek1.com www.ornek1.com; sitenizin adını barındırmalı. Nginx headerda site adını kontrol eder ve buna göre konfigurasyonu çalıştırır.

Laravel için requesti nasıl kullanacağını nginx’e söylememiz gerek. Bunun için aşağıdaki kısmı eklememiz yeterli olacaktır.

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
server {
        listen 80;
        listen [::]:80;

        root /home/deployer/Sites/ornek1/current/public;
        index index.php index.html index.htm index.nginx-debian.html;

        server_name ornek1.com www.ornek.com;
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }
}

Bu konuyu ayrı bir başlıkta açma nedenim daha önce bu konuda çok problem yaşamış olmam.

Deployer yukarıda bahsettiğimiz gibi current dizinini sitenizin son versiyonuna symbolic link ile bağlar. Normal şartlar altında nginx symbolic link ile karşılaştığında bu konumu önbelleğe alır ve tekrar başlayana kadar bu konumu kullanır.

Böyle bir durum her deploydan sonra yeniden başlatma gerektirebilir buda pek isteyeceğimiz bir durum değildir. Bunun için nginx’e symbolic linkleri takip etmesini fastcgi direktifi olarak girebiliriz. Bunun yanında ekstra olarak nginx’e php ile ilişim kurmak için php7-fpm kullanmasını söyleyeceğiz.

location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # Nginx artık gerçek dizini takip edecektir.
    fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    fastcgi_param DOCUMENT_ROOT $realpath_root;
    # Php7-fpm kullanarak php dosyalarıyla iletişim kurmasını sağlayalım.
    fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
server {
        listen 80;
        listen [::]:80;

        root /home/deployer/Sites/ornek1/current/public;
        index index.php index.html index.htm index.nginx-debian.html;

        server_name ornek1.com www.ornek.com;
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;

            # Nginx artık gerçek dizini takip edecektir.
            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
            fastcgi_param DOCUMENT_ROOT $realpath_root;
            # Php7-fpm kullanarak php dosyalarıyla iletişim kurmasını sağlayalım.
            fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        }
}

Artık konfigurasyon dosyamız temel olarak hazır olduğuna göre ayar dosyamızı sites-enabled’a symbolic link ile bağlayalım.

sudo ln -s /etc/nginx/sites-available/ornek1.com /etc/nginx/sites-enabled/

Alışkanlık olarak edinmeniz gereken nginx konfigurasyon test kmutunu çalıştıralım.

sudo nginx -t

Eğer herhangi bir hata görmüyorsanız nginx’i yeniden başlatabiliriz.

sudo systemctl restart nginx

### Uygulamayı deploy edelim.

Laravel proje dizinimize geçiş yapalım ve dep komutumuzla yeni bir deployer konfigurasyonu oluşturalım.

dep init -t Laravel

-t parametresi ile Laravel tarifini kullanmasını söyleyebiliriz.

Standar ayarlar deployer.php içerisinde yer alacaktır. Şimdi gerekli alanları ayarlayalım. Oluşturduğunuz git depo url’sini girmeyi unutmayalım.

// Project name
set('application', 'Ornek 1');

// Project repository, git adresiniz.
set('repository', 'git@domain.com:username/repository.git');

Aşağıdaki kısımda ise uzak sunucumuza bağlantı ayarlarımızı yapmamız gerek.Host kısmına sunucu ip adresimizi yazabiliriz ve ekstra olarak hangi kullanıcıyı kullanmak istediğimizi belirtmemiz gerek.

host('project.com')
    ->set('deploy_path', '~/{{application}}');
host('sucunu-ip-adresi')
    ->user('deployer')
    ->set('deploy_path', '~/Sites/{{application}}');    

Eğer farklı bir ssh key kullanıyorsanız ->identityFile(‘~/.ssh/deployerkey’) direktifini kullanabilirsiniz.

Şimdilik database migrationlarını kullanmayacağımız için before(‘deploy:symlink’, ‘artisan:migrate’); kısmını yorum satırına alalım.

//before('deploy:symlink', 'artisan:migrate');

Artık deploy işlemimizi yapabiliriz. Aşağıdaki basit komutla deploy işlemini yapabilirsiniz.

dep deploy

Eğer herşey yolundays aşağıdakine benzer bir çıktı almanız lazım.

✈︎ Deploying master on sunucu-ip-adresi
✔ Executing task deploy:prepare
✔ Executing task deploy:lock
✔ Executing task deploy:release
✔ Executing task deploy:update_code
✔ Executing task deploy:shared
✔ Executing task deploy:vendors
✔ Executing task deploy:writable
✔ Executing task artisan:storage:link
✔ Executing task artisan:view:clear
✔ Executing task artisan:cache:clear
✔ Executing task artisan:config:cache
✔ Executing task artisan:optimize
✔ Executing task deploy:symlink
✔ Executing task deploy:unlock
✔ Executing task cleanup
Successfully deployed!

ornek1.com adlı bir sitemiz olmadığından kendi bilgisayarımızda /etc/hosts dosyamıza ornek1.com’u ip adresimizde kullanmasını söyleyebiliriz. Aşağıdaki satırı eklemeniz yeterli olacaktır. Gerçek bir alan adı kullanıyor ve alan adınızı sunucu ip adresine yönlendirdiyseniz bu adımı yapmanız gerek yok.

ip-adresiniz ornek1.com

Artık ornek1.com’a erişebiliriz ancak ilk erişimde 500 hatası aldığımızı göreceksiniz. Çünkü henüz herhangi bir env değişkeni ayarlamadık. Bunun için sunucumuza girelim.

Sites dizinimize girdiğimizde ornek1 klasörünü görmemiz ve örnek klasörünü girdiğimizde aşağıdakine benzer bir klasör yapısı görmemiz gerek.

.dep
current/
releases/
shared

Dizinlerden basitçe bahsedecek olursak curren şuan çalışmakta olan uygulamaya symbolic link ile bağlıdır. releases dizini altında önceki deploy ettiğiniz versiyonları görebilirsiniz. Bu deploylar en eskisi silinecek şekilde belirli sayıda olacak şekilde ayarlanmıştır. shared klasöründe ise her deployda sabit kalmasını istediğimiz dizinler bulunmaktadır. Daha önce kullandığımız Laravel tarifi bizim için bu dizinler halleder, eğer bu dizine girerseniz storage dizinin hali hazırda paylaşıldığını görebilirsiniz.

.env dosyamızı shared dizini içine oluşturalım. Ben hali hazırda gelen standart .env dosyasını ekleyeceğim.

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:BoybpzIUeutQw8L2KME8JQzEAyRaCrUSIu8owPHNeWE=
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

Ve tekrar deploy işlemi yaptığımızda artık sitemiz çalışıyor halde olacaktır. Ve yeni bir siteyide rahatlıkla aynı sunucumuza nginx konfigurasyonu ile deploy edebiliriz.

İleri Nginx ayarları

Yaptığımız nginx konfigurasyonu yeterli olsada bazı ekstra ayarlarla performansımız artırabiliriz. Bu kısımda ssl ayarlarında bahsetmiyeceğim, bu konuyu letencrypt başlıklı yazımızda yakında bulabilirsiniz.

fastcgi_cache_path /dev/shm levels=1:2 keys_zone=laravel:100m;
fastcgi_cache_key "$scheme$request_method$host$request_uri$query_string";


server {
        listen 80;
        listen [::]:80;

        server_name ornek1.com www.ornek.com;

        #ssl    on;
        #ssl_certificate    /etc/ssl/certs/ssl.cert;
        #ssl_certificate_key    /etc/ssl/private/ssl.key;

        root /home/deployer/Sites/ornek1/current/public;
        index index.php index.html index.htm index.nginx-debian.html;

        client_max_body_size 5M;

        # Gzip sikistirmayi aktif edelim.
        gzip on;

        # Hem http1.0 ve 1.1 için sikistirmayi aktif edelim.
        gzip_http_version  1.1;

        # Sikistirma seviyesi (1-9 arasi) Genelde 5 tavsiye edilir.
        gzip_comp_level    5;

        # Zaten cok kucukse sikistirmaya gerek yok.
        gzip_min_length    256;

        # Proxy ile olsa bile gelen kullanicilar icin sikistirma
        gzip_proxied       any;

        gzip_vary          on;

        # Asagidaki MIME-typelarsa sahip herseyi sikistir.
        gzip_types
            application/atom+xml
            application/javascript
            application/json
            application/rss+xml
            application/vnd.ms-fontobject
            application/x-font-ttf
            application/x-web-app-manifest+json
            application/xhtml+xml
            application/xml
            font/opentype
            image/svg+xml
            image/x-icon
            text/css
            text/plain
            text/x-component;
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;

            fastcgi_cache laravel;
            fastcgi_cache_valid 200 204 1m;
            fastcgi_ignore_headers Cache-Control;
            fastcgi_no_cache $http_authorization $cookie_laravel_session;
            fastcgi_cache_lock on;
            fastcgi_cache_lock_timeout 10s;
            fastcgi_read_timeout 900s;
            add_header X-Proxy-Cache $upstream_cache_status;

            # Nginx artık gerçek dizini takip edecektir.
            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
            fastcgi_param DOCUMENT_ROOT $realpath_root;
            # Php7-fpm kullanarak php dosyalarıyla iletişim kurmasını sağlayalım.
            fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        }
         location ~* \.(jpg|jpeg|png|gif|ico|css|js|eot|ttf|woff|woff2)$ {
            expires max;
            add_header Cache-Control public;
            add_header Access-Control-Allow-Origin *;
            access_log off;
            try_files $uri $uri/ /index.php?$query_string;
        }

        # .htaccess varsa bunlari kullanicya gosterme.
        location ~ /\.ht {
            deny all;
        }
}
  • Etiketler:
  • Ubuntu

Yorumlar

Hiç Yorum Yapılmamış

Yorum Ekleyin

Yorumunuzu göndermek için oturum açın veya hesabınız yoksa kaydolun.

Giriş Yapın