<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alperen kr</title>
    <description>The latest articles on DEV Community by Alperen kr (@milkitea).</description>
    <link>https://dev.to/milkitea</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F803926%2F4577dc64-a45b-4c66-b7f1-06fb0dc99842.jpeg</url>
      <title>DEV Community: Alperen kr</title>
      <link>https://dev.to/milkitea</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/milkitea"/>
    <language>en</language>
    <item>
      <title>asdasd</title>
      <dc:creator>Alperen kr</dc:creator>
      <pubDate>Tue, 23 Aug 2022 10:39:53 +0000</pubDate>
      <link>https://dev.to/milkitea/asdasd-33n9</link>
      <guid>https://dev.to/milkitea/asdasd-33n9</guid>
      <description>&lt;p&gt;asdasd&lt;/p&gt;

</description>
    </item>
    <item>
      <title>asdsad</title>
      <dc:creator>Alperen kr</dc:creator>
      <pubDate>Tue, 23 Aug 2022 10:39:52 +0000</pubDate>
      <link>https://dev.to/milkitea/asdsad-1aco</link>
      <guid>https://dev.to/milkitea/asdsad-1aco</guid>
      <description>&lt;p&gt;asdasdasdasd&lt;/p&gt;

</description>
    </item>
    <item>
      <title>entity entity manager repository service nedir?</title>
      <dc:creator>Alperen kr</dc:creator>
      <pubDate>Sun, 26 Jun 2022 21:39:35 +0000</pubDate>
      <link>https://dev.to/milkitea/entity-entity-manager-repository-service-nedir-4p4c</link>
      <guid>https://dev.to/milkitea/entity-entity-manager-repository-service-nedir-4p4c</guid>
      <description>&lt;p&gt;Selamlar ben Alperen,&lt;br&gt;
Bu yazıda sizlere entity entity manager repository ve service'den bahsedeceğim.&lt;/p&gt;

&lt;p&gt;Entity veritabanımız ile kod arasında ilişki kurmamızı sağlayan kalıcı nesneler olarak tanımlanabilir.&lt;br&gt;
Örneğin veritabanımızda &lt;code&gt;user&lt;/code&gt; tablosunda &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt; ve &lt;code&gt;age&lt;/code&gt; olduğunu varsayalım. Bu tabloya kodda erişmek için bir entity yazalım.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/**
 * @Entity(repositoryClass="App\Repositories\UserRepository")
 * @Table(name="users")
 */
class User
{
    /**
     * @var int
     * @Column(name="id", type="integer", nullable=false)
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string|null
     *
     * @Column(name="name", type="string", length=100, nullable=true)
     */
    private $name;

    /**
     * @var int|null
     *
     * @Column(name="age", type="integer", nullable=true)
     */
    private $age;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;bu kısımda tablomuzdaki columnları özellikleri ile tanlımladık. Şimdi ise getters ve setters'larını yazıp entity'mizi hazır hale getireceğiz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    public function getId(): int
    {
        return $this-&amp;gt;id;
    }

    public function setId(int $id): void
    {
        $this-&amp;gt;id = $id;
    }

    public function getAge(): ?int
    {
        return $this-&amp;gt;age;
    }

    public function setAge(?int $age): void
    {
        $this-&amp;gt;age = $age;
    }

    public function getName(): ?string
    {
        return $this-&amp;gt;name;
    }

    public function setName(?string $name): void
    {
        $this-&amp;gt;name = $name;
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;EntityManager, sağladığı metodlar aracılığı ile entityler üzerinde işlemler gerçekleştirilir.&lt;/p&gt;

&lt;p&gt;Oluşturduğumuz User entity'si için bir insert işlemi yapmak istediğimizde&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   public  function  insert()
{
        $user = new User();
        $user-&amp;gt;setName('alperen');
        $user-&amp;gt;setAge('17');
     $this-&amp;gt;getEntityManager()-&amp;gt;persist($user);
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;EntityManager'ın bize sağlamış olduğu persist metodu sayesinde tablomuza yeni bir kayıt ekledik.  &lt;/p&gt;

&lt;p&gt;Repository temel olarak veritabanı sorgulama işlemlerinin bir merkezden yapılmasını sağlayarak iş katmanına taşınmasını önler ve bu şekilde sorgu ve kod tekrarına engel olmuş olur. Yani asıl amaç veri işlem ve sorgulamaların tekrarlardan kaçınılarak merkezi bir yapıya çekilmesidir.&lt;/p&gt;

&lt;p&gt;Repositorylerin en iyi özelliği ise find, findby, findOneBy ve findAll gibi query methodlarına sahip olması.&lt;br&gt;
Örneğin user tablosundan yaşı 17 olanları listelemek istediğimiz zaman;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$entityManager-&amp;gt;getRepository(User::class)-&amp;gt;findby([
'age' =&amp;gt; 17
]);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Service, genel bir görevi gerçekleştirmesi için oluşturduğumuz koddur.&lt;/p&gt;

&lt;p&gt;Mesela insert ve update işlemlerinde girilen yaş 18 den küçükse yani çocuk ise sisteme kayıt olmamalı.&lt;br&gt;
bu işlem için hem insert hemde update fonksiyonunda aynı kodu yazmak gerekir. &lt;/p&gt;

&lt;p&gt;bunun yerine bir UserService oluşturup içerisine isChild fonksiyonunu yazalım.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public function isChild($age): bool
{
  if($age &amp;gt; 18) {
    return true;
} else {
   return false;
 }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Daha sonra yazdığımız bu kodu kullanalım.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public  function  insert()
{
  /** @var UserService $userService */
   $userService = $this-&amp;gt;container-&amp;gt;get(UserService::class);

        if($userService-&amp;gt;isChild($age))
        {
          $user = new User();
          $user-&amp;gt;setName('alperen');
          $user-&amp;gt;setAge('17');
          $this-&amp;gt;getEntityManager()-&amp;gt;persist($user);
         }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aynı işlemi update içinde yaptığımız zaman benzer kodları tekrar tekrar kullanmamış ve daha düzenli bir koda sahip olacağız.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Laravel ile Crypto Projesi</title>
      <dc:creator>Alperen kr</dc:creator>
      <pubDate>Fri, 27 May 2022 13:17:40 +0000</pubDate>
      <link>https://dev.to/milkitea/laravel-ile-crypto-projesi-3bg8</link>
      <guid>https://dev.to/milkitea/laravel-ile-crypto-projesi-3bg8</guid>
      <description>&lt;p&gt;Selamlar ben Alperen,&lt;br&gt;
Bu yazıda sizlere Laravel ile yaptığımız Crypto projesinden bahsedeceğim.&lt;/p&gt;

&lt;p&gt;Bunu yaparken sırası ile Projeyi yaparken neler kullandığımızdan ve nasıl Deploy ettiğimizi anlatacağım.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kurulum
&lt;/h2&gt;

&lt;p&gt;Öncelikle bir Laravel projesi oluşturduk. Laravel nedir ? &lt;/p&gt;

&lt;p&gt;Laravel, özel uygulamalar geliştirmek için kullanılan bir web framewoküdür. PHP üzerinde çalışır ve tamamen ücretsiz ve açık kaynaklıdır.&lt;/p&gt;

&lt;p&gt;Laravel'i kurmak için gerekli olan en önemli &lt;br&gt;
araç &lt;strong&gt;composer&lt;/strong&gt;. Composer nedir ? &lt;/p&gt;

&lt;p&gt;Composer, PHP programlama dili için tasarlanmış çoklu platform bir paket yönetim sistemidir. PHP uygulamaları ve uygulama içerisinde kullanılan kütüphaneler için bağımlılık yönetimi sağlar.&lt;/p&gt;

&lt;p&gt;Daha sonra oluşturduğumuz bu projeye anlık Crypto verilerini kullanabileceğimiz bir API ile destekledik. API nedir ? &lt;/p&gt;

&lt;p&gt;API, iki uygulamanın birbiriyle konuşmasına olanak tanıyan bir yazılım aracısı olan Uygulama Programlama Arayüzü’nün kısaltmasıdır. Örnek vermek gerekirse WhatsApp gibi bir uygulamayı her kullandığınızda, her anlık mesaj gönderdiğinizde veya telefonunuzda hava durumunu her kontrol ettiğinizde bir API kullanıyorsunuz.&lt;/p&gt;

&lt;p&gt;Tasarımsal olarak da CSS kütüphanesi olan Tailwind kullandık.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy
&lt;/h2&gt;

&lt;p&gt;Laravel ile yapılmış bir projeyi her hosting sitesine deploy etmeniz mümkün değil. Deploy etseniz bile düzgün çalışmayabilir. Çünkü Laravel arka planda birçok komut çalıştırıyor. Bu yüzden Laraveli destekleyen bir hosting tercih etmelisiniz. Bunlardan en bilinen ve bir kısıma kadar ücretsiz olan &lt;strong&gt;Heroku&lt;/strong&gt;. Deploy ederken dökümanına bakarak hızlı bir kurulum yaptık.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://crypvel.herokuapp.com/"&gt;http://crypvel.herokuapp.com/&lt;/a&gt;&lt;br&gt;
Teşekkürler&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Redis ile veri cachelenmesi    | Symfony </title>
      <dc:creator>Alperen kr</dc:creator>
      <pubDate>Sun, 13 Feb 2022 13:42:50 +0000</pubDate>
      <link>https://dev.to/milkitea/redis-ile-veri-cachelenmesi-symfony-58im</link>
      <guid>https://dev.to/milkitea/redis-ile-veri-cachelenmesi-symfony-58im</guid>
      <description>&lt;p&gt;Selamlar ben Alperen,&lt;br&gt;
Bu yazıda sizlere Redis'in ne işe yaradığını  ve nasıl kullanıldığını bahsedeceğim.&lt;/p&gt;

&lt;p&gt;Bunu yaparken sırası ile Redis nedir ? , nasıl kurulur , Symfony redis config ve son olarak  Redis ile veri cachelenmesini anlatarak sunumu tamamlayacağım . &lt;/p&gt;

&lt;h2&gt;
  
  
  Redis nedir ?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;REmote DIctionary Server&lt;/strong&gt;&lt;br&gt;
Redis bir veri yapısı sunucusudur. Açık kaynak, bellek kullanımlı, anahtar-değer deposudur. Redis "Uzak Sözlük Sunucusu" anlamına gelmektedir. Çeşitli kaynaklara göre en çok kullanılan anahtar-değer veritabanıdır.&lt;br&gt;
 Daha fazla bilgi için &lt;a href="https://devnot.com/2020/redis-nedir-temel-kullanim-alanlari-nelerdir/"&gt;bu kaynaktan yararlanabilirsiniz .&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Redis nasıl kurulur ? (Ubuntu)
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;sudo apt install redis-server&lt;/code&gt;&lt;br&gt;
Terminalde bu komutu çalıştırdıktan sonra localimizde redis-server'i kurmuş olacağız. Redis'in çalışması için config ayarlarımızı tamamlamamız gerekiyor . &lt;br&gt;
&lt;code&gt;sudo nano /etc/redis/redis.conf&lt;/code&gt;&lt;br&gt;
&lt;code&gt;supervised&lt;/code&gt; kısmı default olarak &lt;code&gt;no&lt;/code&gt; geliyor görseldeki gibi değiştirelim .&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VQqSHY2r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yf9gy2efszmzsf8ill5i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VQqSHY2r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yf9gy2efszmzsf8ill5i.png" alt="Image description" width="685" height="224"&gt;&lt;/a&gt;&lt;br&gt;
bu düzenlemeden sonra redis server'ımızı tekrar başlatalım.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo systemctl restart redis.service&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo systemctl status redis&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IzM09XEx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w4ijuki2owfngprusqej.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IzM09XEx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w4ijuki2owfngprusqej.png" alt="" width="731" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sizde de görseldeki bir görüntü varsa kurulum başarılı demektir.&lt;/p&gt;

&lt;h2&gt;
  
  
  Symfony Redis Config
&lt;/h2&gt;

&lt;p&gt;Symfony'nin işimizi kolaylaştırmak için bir paketi bulunmakta  , onu kurarak başlayalım .&lt;br&gt;
&lt;code&gt;composer req symfony-bundles/redis-bundle&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;cache.yaml dosyamıza girelim.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--beZ11Yez--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dw6ijh0ou31vfowtflmc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--beZ11Yez--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dw6ijh0ou31vfowtflmc.png" alt="Image description" width="412" height="131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Görselde gördüğümüz &lt;code&gt;pools&lt;/code&gt; verilerimizin tutulacağı kısım &lt;code&gt;cache.my_redis&lt;/code&gt; ise poolumuzun adı oluyor . &lt;br&gt;
Biraz önce kurmuş olduğumuz redis-bundle'ın bize sağlamış olduğu &lt;code&gt;cache.adapter.redis&lt;/code&gt; 'i adapter kısmına yazalım redis ile verilerimiz arasında köprü görevi görüyor. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;Provider&lt;/code&gt; redis ile bağlantımızı sağlıyor . Peki  &lt;code&gt;app.my_custom_redis_provider&lt;/code&gt; ne anlama geliyor ? &lt;br&gt;
aslında orada bir servis adı belirtiyoruz.&lt;/p&gt;

&lt;p&gt;cache.yaml dosyamızın alt kısmına &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fKWhmS1O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lg06pts6br4hwj5jgh9y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fKWhmS1O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lg06pts6br4hwj5jgh9y.png" alt="Image description" width="720" height="205"&gt;&lt;/a&gt;&lt;br&gt;
Görseldeki gibi bir servis oluşturuyoruz. Bu servis &lt;br&gt;
poolumuzun hangi portta olduğunu ve &lt;code&gt;createConnection&lt;/code&gt; ile  yanındaki &lt;code&gt;Redis adapter componenti&lt;/code&gt;çağrıldığında çalışacağını belirtiyoruz.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verilerimizi Cacheleyelim
&lt;/h2&gt;

&lt;p&gt;Verilerimizi cachelemek için Controllerımıza poolumuzu dahil edelim ama önce hangi pool nasıl çağırılır bunu öğrenelim. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;php bin/console debug:autowiring cache&lt;/code&gt;&lt;br&gt;
 komutunu terminale yazalım. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--J_xk2nIa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pyp7sonxzh3r6gad4vwf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--J_xk2nIa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pyp7sonxzh3r6gad4vwf.png" alt="Image description" width="691" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Görselde gördündüğü gibi parantez içinde olanlar pool adları yanlarındaki ise nasıl kullanacağımızı belirten parametreler&lt;br&gt;
Biz burda &lt;code&gt;cache.my_redis&lt;/code&gt;poolunu kullanacağız. &lt;/p&gt;

&lt;p&gt;Veritabanında post tablomuz olduğunu ve içindeki veriler cacheleyeceğimizi varsayalaım. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dbHKScs3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ror8s8hnp1jovugeotbs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dbHKScs3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ror8s8hnp1jovugeotbs.png" alt="Image description" width="880" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Görsel'i açıklamak gerekirse ;&lt;/p&gt;

&lt;p&gt;Poolumuza 'key' adlı bir &lt;code&gt;key&lt;/code&gt; oluştur ve bu keyin value'si yani değerini &lt;code&gt;$postRepository&lt;/code&gt; de findby  koşullarını sağlayan verileri &lt;code&gt;$post&lt;/code&gt; yap ve return et . Son olarak &lt;code&gt;dd&lt;/code&gt; ile &lt;code&gt;$cacheItem&lt;/code&gt;'ı bastır. Çıktı şu şekilde olacaktır.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sETrcKu_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/23dm49dxul6clu33lqoh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sETrcKu_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/23dm49dxul6clu33lqoh.png" alt="Image description" width="367" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sitemizin ön tarafında cache işlemi gerçekleşti . Peki bunu arka tarafta nasıl kontrol edebiliriz ? &lt;/p&gt;

&lt;p&gt;Symfony bizim için bunları &lt;code&gt;localhost:8000/_profiler&lt;/code&gt;de tutuyor . öncelikle bastırdığımız &lt;code&gt;dd&lt;/code&gt;'yi kaldıralım ve sayfayı yenileyelim . &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--plw6wfAM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hmtalvbzknje0mv58y8u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--plw6wfAM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hmtalvbzknje0mv58y8u.png" alt="Image description" width="880" height="116"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Görseldeki gibi sizde de olan menüden cache ile ilgili olana tıklayalım. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UdGgEF1V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fauri6vczt6j4zgefw4x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UdGgEF1V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fauri6vczt6j4zgefw4x.png" alt="Image description" width="880" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bütün pool'lar burda ve bizim verilerimiz &lt;code&gt;cache.my_redis&lt;/code&gt;pool' unda tutuluyor. Arka taraftada bu işlemi doğruladık.   &lt;/p&gt;

&lt;p&gt;Teşekkürler  -_-&lt;/p&gt;

</description>
    </item>
    <item>
      <title>NGINX ile Symfony 5 projesi nasıl Deploy edilir ? Ubuntu </title>
      <dc:creator>Alperen kr</dc:creator>
      <pubDate>Wed, 26 Jan 2022 14:22:36 +0000</pubDate>
      <link>https://dev.to/milkitea/nginx-ile-symfony-5-projesi-nasil-deploy-edilir-ubuntu-4m3</link>
      <guid>https://dev.to/milkitea/nginx-ile-symfony-5-projesi-nasil-deploy-edilir-ubuntu-4m3</guid>
      <description>&lt;p&gt;Selamlar ben Alperen,&lt;/p&gt;

&lt;p&gt;Bu yazıda sizlere &lt;code&gt;NGINX&lt;/code&gt; ile Symfony 5 projesi nasıl Deploy edilir açıklayamaya çalışıcağım.&lt;/p&gt;

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

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

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

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

&lt;p&gt;Webserver'ı ayağa kaldırmak için gerekli kurulumları yapalım &lt;/p&gt;
&lt;h2&gt;
  
  
  PHP 8.1
&lt;/h2&gt;

&lt;p&gt;Kuruluma başlamadan önce PHP nedir ? sorusunun cevabına bakalım &lt;/p&gt;

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

&lt;p&gt;Php kurulumu için repo'muzu ekleyelim ;&lt;br&gt;
&lt;code&gt;add-apt-repository ppa:ondrej/php -y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Php 8.1 ve gerekli extensionları kuralım ;&lt;br&gt;
&lt;code&gt;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&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Php kurulumunu  doğrulamak için ;&lt;br&gt;
&lt;code&gt;php -v&lt;/code&gt;&lt;br&gt;
Kurduğumuz extansionları görmek için ise ;&lt;br&gt;
&lt;code&gt;php -m&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  MYSQL 8
&lt;/h2&gt;

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

&lt;p&gt;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 &lt;code&gt;yeni_kullanıcı&lt;/code&gt; ile mysql'e tekrar giriş yapın .&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mysql -u yeni_kullanici -p 'sifre'&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;Ngınx webserver'i ayağa kaldıracak hızlı stabil ve hafif bir web sunucudur.&lt;br&gt;
&lt;code&gt;sudo apt install nginx&lt;/code&gt;&lt;br&gt;
&lt;code&gt;systemctl start nginx&lt;/code&gt;&lt;br&gt;
&lt;code&gt;systemctl status nginx&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  REDIS
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;sudo apt install redis-server&lt;/code&gt;&lt;br&gt;
redis.conf dosyasını düzenleyelim;&lt;br&gt;
&lt;code&gt;sudo nano /etc/redis/redis.conf&lt;/code&gt;&lt;br&gt;
&lt;code&gt;supervised&lt;/code&gt; kısmı default olarak &lt;code&gt;no&lt;/code&gt; geliyor görseldeki gibi değiştirelim &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JsBlUshS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uvmn7gy7nkmuboaybhlo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JsBlUshS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uvmn7gy7nkmuboaybhlo.png" alt="Image description" width="702" height="225"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  COMPOSER
&lt;/h2&gt;

&lt;p&gt;Symfony projemizi ayağa kaldıracak bunu unutmayalım ;&lt;br&gt;
&lt;code&gt;curl -sS https://getcomposer.org/installer | php ; mv composer.phar /usr/local/bin/composer ; chmod +x /usr/local/bin/composer&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Sunucu üzerinde gerekli tüm kurulumları bitirdiğimizde aşağıdaki adımları takip ederek deployment işlemine başlayabiliriz.
&lt;/h2&gt;

&lt;p&gt;Projemizi çekeceğimiz dizine girelim;&lt;br&gt;
&lt;code&gt;cd /var/www/html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git clone https://{gitlab-username}:{access_token}@{git-url}&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;code&gt;git clone https://alper: abcdf_1234ae@gitlab.com/alper/test.git&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NOT&lt;/strong&gt; bu kısımda ben acces-token kullandım fakat deploy-token da kullanılabilir.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Projeyi çektikten sonra sahiplendirme ve izin işlemleri için ;&lt;br&gt;
&lt;code&gt;chown -R www-data:www-data /var/www/html/ ; chmod -R 755 /var/www/html/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Projemiz symfony projesi olduğu için gerekli paketleri yükleyelim;&lt;br&gt;
&lt;code&gt;Composer install&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;.env dosyasını ayarlayalım&lt;br&gt;
bunun için ilk olarak proje dizinine girelim . &lt;br&gt;
&lt;code&gt;cd /var/www/test&lt;/code&gt;&lt;br&gt;
&lt;code&gt;nano .env&lt;/code&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R9B_hWpU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t5u1fywoykxf4pr6z4jq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R9B_hWpU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t5u1fywoykxf4pr6z4jq.png" alt="Image description" width="880" height="77"&gt;&lt;/a&gt;&lt;br&gt;
ekte olduğu gibi MYSQL Kısmında oluşturduğunuz database'i &lt;code&gt;.env&lt;/code&gt; dosyamıza ekliyoruz .&lt;/p&gt;
&lt;h2&gt;
  
  
  NGINX Config
&lt;/h2&gt;

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

&lt;p&gt;dosyamızın içini düzenleyelim;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; 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;
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;kaydetme işlemi için &lt;code&gt;CTRL+O&lt;/code&gt; &lt;code&gt;ENTER&lt;/code&gt; &lt;code&gt;CTRL+X&lt;/code&gt;&lt;br&gt;
config dosyamıza sembolik link oluşturalım ;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;daha sonra  &lt;code&gt;nginx.service&lt;/code&gt; tekrar başlatalım ;&lt;br&gt;
&lt;code&gt;sudo systemctl restart nginx.service&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;her şey tamam . &lt;/p&gt;

&lt;p&gt;&lt;code&gt;http://domain.com/&lt;/code&gt; sitenizi görebilirsiniz...&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
