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.