Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

Herkese merhabalar.

Bir ubuntu yada windows sunucu üzerinde, docker ile yada docker olmadan, domain ekleyerek mesela mehmet.xyz
ahmet.xyz gibi domainler bağlayıp laravel uygulamaları çalıştırmak istiyorum.

Kodlarım github üzerinde private repo olarak barınacak. Yerel bilgisayarımda geliştirmeler yaparak bu repoya push edeceğim.

https://www.ilkbyte.com/ üzerinden de bir sunucu kiralayacağım. Yukarıda bahsettiğim gibi bir senaryo ile projelerimi yayınlayacağım.

Bunun için okumamı ve araştırmamı tavsiye edebileceğiniz kaynakları paylaşırsanız, kendi yöntemlerinizi, deneyimlerinizi de paylaşırsanız çok memnun olurum.

İyi çalışmalar.

Bu işi docker ile çok kolay bir şekilde yapman mümkün. Benimde kullandığım bir yöntem olduğu için eğer sunucu kaldırıyorsa docker ile yapmanı tavsiye ederim. 512 MB veya 1GB RAM'li sistemlerde pek önermiyorum çünkü kaynakların bir kısmı docker ve containerler tarafından tüketiliyor. Sık sık çökmelerle karşılaşabilirsin (tabi bu containerlerin içeriğine de bağlı.)

Bu süreç reverse proxy olarak geçiyor. Hem docker içinde reverse proxy ile 3-4 uygulamayı sanki tek bir uygulamaymış gibi dışarı çıkartabilirsin (mikro servis mimarisi ile oluşturulan API'ları tek bir endpoint altına toplamak gibi) hem de dışarıda bunu istediğin domain altında yayınlayabilirsin (bunun için de yine reverse proxy gerekli).

Bu durumda içeride reverse proxy yapmak için bir nginx containerine ve içerideki portlardan çıkan uygulamaları configte bir endpointe ataman gerekiyor. Mesela laravel uygulaması 8000 portundan çıksın, python API'de 9000'den çıksın ama içerideki nginx ile localhost:8000/api altında serve etmen mümkün. Doğrudan container isimlerini de kullanabiliriz. Burada Nginx containeri 8081 portu ile dünyaya açılıyorsa içerdeki işimiz tamam.

location / {

    proxy_pass http://my-app-container:8000;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $server_name;

    proxy_buffer_size 128k;
    proxy_buffers 4 256k;
    proxy_busy_buffers_size 256k;
}

location ~* ^/api/(.*)$ {

    rewrite ^/api/(.*)$ /$1 break;

    proxy_pass         http://another-container-name;
    proxy_redirect     off;
    proxy_set_header   Host $host;
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Host $server_name;

    proxy_buffer_size          128k;
    proxy_buffers              4 256k;
    proxy_busy_buffers_size    256k;
}

Şimdi sunucudaki nginx conf'a gidip hangi domain lazımsa onu ekleyip sonra localhost'tan çıkan ilgili portu tanımlıyoruz.

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

    server_name example.com;

    location ~* / {

        rewrite /(.*) /$1 break;

        proxy_pass         http://127.0.0.1:8081;
        proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;

        proxy_buffer_size          128k;
        proxy_buffers              4 256k;
        proxy_busy_buffers_size    256k;
    }
}

Burada dışarıdan 80 ve 443 portuyla gelen domaini 8081 portuyla dünyaya açılan docker'a yönlendirik.

Yukarıdaki configler ve senaryolar sadece fikir vermesi açısından önemli. Birebir uygulamak yerine örnek üzerinden nasıl ve neleri araştıracağın konusunda yararlı olacaktır. Sonuçta her projede farklı senaryolar söz konusu oluyor.

Merhaba, önerilerinizi için teşekkür ederim.

https://github.com/sfx101/deck adında araç buldum.
Farklı farklı uygulamaları çalıştırabiliyor. Denemelerimde 1 adet Laravel v8.83.23 (PHP v7.4.26) , 2 adet Laravel v9.28.0 (PHP v8.1.6) , 1 adet mysql+phpmyadmin uygulamaları çalıştırdım. Local bilgisayarımda https ile https://XXXXX.stacks.run/ şeklinde domainlerle erişime açtı. Deck uygulamasının dockerfile ve diğer konfigürasyon dosyalarını inceleyeceğim. Uygulamaya ihtiyaç olmadan bu şekilde docker compose ile servisleri bir araya toplamaya çalışacağım.

    Rica ederim, Düzgün bir yapı ortaya çıkarabilirsem bir blog yazısı hazırlamayı düşünüyorum.