DEV Community

Alperen kr
Alperen kr

Posted on

NGINX ile Symfony 5 projesi nasıl Deploy edilir ? Ubuntu

Selamlar ben Alperen,

Bu yazıda sizlere NGINX ile Symfony 5 projesi nasıl Deploy edilir açıklayamaya çalışıcağım.

Bunu yaparken sırasıyla PHP, Mysql, NGINX ,Redis , Composer , Gitlab repository'sinden projeyi çekmek ve NGINX Config kurulum ve ayarlamalarına da değineceğim.

Öncelikli olarak deploy etmek istediğimiz projenin düzgün bir şekilde Gitlab üzerinde bir repository'de bulunduğunu varsayalım.

Webserver'a nasıl geçicez açıkçası o kısmını ben de bilmiyorum . Bana gökten indi :D

lsb_release -cd ; hostname ; hostname -I ; whoami ; getconf LONG_BIT;
Size de gökten indiyse bu komutları çalıştırarak webserverınız hakkında bilgi alabilirsiniz .

Webserver'ı ayağa kaldırmak için gerekli kurulumları yapalım

PHP 8.1

Kuruluma başlamadan önce PHP nedir ? sorusunun cevabına bakalım

PHP, HTML içine gömülebilen bir betik dilidir.Dilin amacı site geliştirenlere dinamik olarak hızla üretilen sayfalar yazabilme imkanı vermektir.

Php kurulumu için repo'muzu ekleyelim ;
add-apt-repository ppa:ondrej/php -y

Php 8.1 ve gerekli extensionları kuralım ;
sudo apt install php8.1 php8.1-cli php8.1-cgi php8.1-bcmath php8.1-curl php8.1-gd php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-sqlite3 php8.1-xml php8.1-zip php8.1-snmp php8.1-imap php8.1-common php8.1-tidy php8.1-pgsql php8.1-ldap php8.1-soap php8.1-xsl php8.1-redis php8.1-xmlrpc php8.1-zip php-imagick php-pear php-memcache php-apcu

Php kurulumunu doğrulamak için ;
php -v
Kurduğumuz extansionları görmek için ise ;
php -m

MYSQL 8

Mysql kurulumda dikkat etmemiz gereken bir konu Yetkilendirme
eğer yetkilendirmeyi yapmayı unutursanız database oluşturamaz silemez veya düzenleyemezsiniz.
sudo apt install mysql-server
Mysql'e girş yapalım ;
mysql -u root
Yeni kullanıcı oluşturalım ;
CREATE USER 'yeni_kullanici'@'localhost' IDENTIFIED BY 'sifre';
Yeni kullanıcıya yetkilendirme verelim ;
GRANT ALL PRIVILEGES ON * . * TO 'yeni_kullanici'@'localhost';

Komuttaki yıldızlar (*) database ve tabloları referans vermek içindir. Komut kullanıcıya belirli database ve tablolara izin vermeye olanak sağlar. İşlemi bitirmeden önce yetkileri yenilediğinizden emin olun Daha sonra yeni_kullanıcı ile mysql'e tekrar giriş yapın .

mysql -u yeni_kullanici -p 'sifre'

Şimdi bir database oluşturalım . Peki bu database ne işimize yarayacak ?
Symfony projemizdeki verileri tutacak .
Projemizdeki .env dosyasını ayarlarken kullanacağız, database'i ekteki komut ile oluşturalım ;
CREATE DATABASE deneme;

NGINX

Ngınx webserver'i ayağa kaldıracak hızlı stabil ve hafif bir web sunucudur.
sudo apt install nginx
systemctl start nginx
systemctl status nginx

REDIS

sudo apt install redis-server
redis.conf dosyasını düzenleyelim;
sudo nano /etc/redis/redis.conf
supervised kısmı default olarak no geliyor görseldeki gibi değiştirelim
Image description

COMPOSER

Symfony projemizi ayağa kaldıracak bunu unutmayalım ;
curl -sS https://getcomposer.org/installer | php ; mv composer.phar /usr/local/bin/composer ; chmod +x /usr/local/bin/composer

Sunucu üzerinde gerekli tüm kurulumları bitirdiğimizde aşağıdaki adımları takip ederek deployment işlemine başlayabiliriz.

Projemizi çekeceğimiz dizine girelim;
cd /var/www/html

git clone https://{gitlab-username}:{access_token}@{git-url}

daha anlaşılır olması için bir örnek verelim;
gitlab-username : alper
acces_token : abcdf_1234ae
git-url : gitlab.com/alper/test.git

git clone https://alper: abcdf_1234ae@gitlab.com/alper/test.git

NOT bu kısımda ben acces-token kullandım fakat deploy-token da kullanılabilir.

Projeyi çektikten sonra sahiplendirme ve izin işlemleri için ;
chown -R www-data:www-data /var/www/html/ ; chmod -R 755 /var/www/html/

Projemiz symfony projesi olduğu için gerekli paketleri yükleyelim;
Composer install

.env dosyasını ayarlayalım
bunun için ilk olarak proje dizinine girelim .
cd /var/www/test
nano .env
Image description
ekte olduğu gibi MYSQL Kısmında oluşturduğunuz database'i .env dosyamıza ekliyoruz .

NGINX Config

Projemizi ayağa kaldırmak için en önemli adım NGINX config düzenlemesidir.
Ekteki komutta belirtilen dizine default isimli bir dosya oluşturur;
nano /etc/nginx/sites-available/default

dosyamızın içini düzenleyelim;

 server {
    listen 80;
    listen [::]:80;
    server_name domain www.domain.com;
    root   /var/www/test/public;
     index  index.php;

    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;

    client_max_body_size 100M;

    autoindex off;

    location / {

    try_files $uri /index.php$is_args$args;
      }

    location ~ \.php$ {
         include snippets/fastcgi-php.conf;
         fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
         include fastcgi_params;
         fastcgi_intercept_errors on;
    }
}

Enter fullscreen mode Exit fullscreen mode

kaydetme işlemi için CTRL+O ENTER CTRL+X
config dosyamıza sembolik link oluşturalım ;

sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/

daha sonra nginx.service tekrar başlatalım ;
sudo systemctl restart nginx.service

her şey tamam .

http://domain.com/ sitenizi görebilirsiniz...

Top comments (1)

Collapse
 
leslieeeee profile image
Leslie

Eğer bir macOS kullanıcısıysanız, ServBay.dev denemeye değer. Herhangi bir şeyi kurmak için zaman harcamanıza veya günlerce uğraşmanıza gerek yok. Sadece indirin ve hemen kullanmaya başlayabilirsiniz. Birden fazla PHP sürümünü aynı anda çalıştırabilir ve aralarında kolayca geçiş yapabilirsiniz.
Dürüst olmak gerekirse, bu araç PHP geliştirmemi büyük ölçüde kolaylaştırdı ve kesinlikle denemeye değer!