Railway, Render ve Fly.io, kapsayıcıların internete taşınmasını sağlamak için hızlı çözümler sunar. Ancak bu süreçte karşılaşılan zorluklar kısa vadede göz ardı edilebilir. Örneğin, altı ay sonra, kuyruk işleyiciniz ayrı bir “hizmet” olarak faturalandırılmaya başlanır ve Postgres desteğiniz, bir sunucunun maliyetinden daha fazla bir hizmete dönüşebilir. PHP, Node ve Go için tasarlanmış platformlarda ikinci sınıf bir vatandaş gibi muamele görebilir, dolayısıyla Laravel’in temel saydığı özellikler, scheduler veya Horizon gibi hissettirilerek eklenmiş olur.
<p>Bu durumu ele almanın tam bir rehberi için, <a href="https://deploynix.io/blog/why-laravel-developers-are-leaving-generic-paas" target="_blank" rel="noopener noreferrer">nedeni bıraktıklarına dair daha fazla bilgi</a> bulabilirsiniz. Bu yazı ise çıkış yolu: nasıl? Bu hafta sonu uygulayabileceğiniz numaralı bir rehber, her platform için gerçek komutlarla birlikte, kesinti süresini dakikalara indiren bir veritabanı göç planı ve herhangi bir sorun durumunda geri dönüş yolu sunar.</p>
<p>Bu adımı atmakta yalnız değilsiniz. Barclays CIO anketine göre, <a href="https://www.hivelocity.net/blog/cloud-repatriation-why-workloads-are-moving-off-aws/" target="_blank" rel="noopener noreferrer">CIO’ların %86'sı en az bazı yükleri kamu bulutlarından geri taşıma niyetindedir</a>, 2020'de bu oran %43 idi. 37signals, AWS'den ayrılmanın <a href="https://northflank.com/blog/cloud-repatriation" target="_blank" rel="noopener noreferrer">yılda yaklaşık 2 milyon dolar, beş yılda ise yaklaşık 10 milyon dolar tasarruf sağladığını</a> bildirmiştir. Sizin sayılarınız daha küçük olabilir, ama yön aynı.</p>
<h2><a name="step-1-inventory-everything-youre-actually-running" href="#step-1-inventory-everything-youre-actually-running"></a>Adım 1: Gerçekten Çalışan Her Şeyi Envanterleyin</h2>
<p>Bir sunucuya dokunmadan önce, uygulamanızın her hareketli parçasını not alın. PaaS platformları, birçok şeyi geçiş düğmeleri arkasında gizler. Yanlış giden göçler genellikle birisinin bir cron job veya bir webhook URL'sini unuttuğu durumlarda ortaya çıkar.</p>
<p>Kontrol listeniz:</p>
<ul>
<li>Web süreci: kaç örnek, ne kadar RAM, hangi PHP versiyonu</li>
<li>Kuyruk işleyicileri: kaç, hangi kuyruklar, Horizon mı yoksa düz <code>queue:work</code> mi</li>
<li>Scheduler: <code>schedule:run</code> bir cron servisi mi yoksa özel bir süreç mi</li>
<li>Veritabanı: motor, versiyon, diskteki boyut</li>
<li>Redis/Valkey: sadece önbellek için mi yoksa kuyruklar ve oturumlar için de mi kullanılıyor</li>
<li>Obje depolama: platform hacimleri, Tigris, veya harici S3</li>
<li>Çevresel değişkenler: her biri, yıllardır ayarlananlar dahil</li>
<li>Geri gelen entegrasyonlar: Stripe webhook'ları, OAuth dönüş URL'leri, mevcut URL'nize işaret eden herhangi bir şey</li>
</ul>
<h3><a name="exporting-environment-variables" href="#exporting-environment-variables"></a>Çevresel Değişkenleri Dışa Aktarma</h3>
<p>Bu adım çoğu kişi tarafından elle, kötü bir şekilde, saat 23:00'te yapılır. Bunun yerine CLI'yi kullanın.</p>
<p><strong>Railway:</strong><br/></p>
<div class="highlight js-code-highlight">
<pre class="highlight shell"><code>npm i <span class="nt">-g</span> @railway/clirailway login
railway link # projenizi ve ortamınızı seçin
railway variables –kv > railway.env
<p><strong>Render:</strong> kontrol panelindeki Çevre sekmesi küçük uygulamalar için çalışır, ancak API daha hızlı ve kapsamlıdır:<br/></p>
<div class="highlight js-code-highlight">
<pre class="highlight shell"><code>curl <span class="nt">-s</span> <span class="nt">-H</span> <span class="s2">"Authorization: Bearer </span><span class="nv">$RENDER_API_KEY</span><span class="s2">"</span> <span class="se">\</span>“https://api.render.com/v1/services/$SERVICE_ID/env-vars?limit=100″ \
| jq -r ‘.[].envVar | “(.key)=(.value)”‘ > render.env


