CentOS 7 Üzerinde Software Collections Kullanarak LEMP Stack Kurulumu ve Yapılandırması
Giriş
Web uygulamalarının temelini oluşturan sunucu yazılım yığınları, günümüz dijital dünyasında hayati bir rol oynamaktadır. Bu yığınlar arasında en popüler olanlardan biri LAMP (Linux, Apache, MySQL, PHP) iken, son yıllarda performans ve kaynak verimliliği avantajları nedeniyle LEMP (Linux, Nginx, MySQL/MariaDB, PHP) stack’i giderek daha fazla tercih edilmektedir. Nginx, hafif yapısı ve yüksek eşzamanlı bağlantıları işleme yeteneği sayesinde özellikle yüksek trafikli web siteleri ve modern web uygulamaları için ideal bir seçimdir.
CentOS 7, kararlı ve güvenilir bir işletim sistemi olmakla birlikte, paket yöneticisi (YUM) aracılığıyla sunulan yazılım sürümleri genellikle kararlılık ve uzun vadeli destek amacıyla biraz eski olabilir. Ancak modern web uygulamaları genellikle daha yeni PHP, Nginx veya veritabanı sürümlerini gerektirir. İşte bu noktada Software Collections (SCL) devreye girer. SCL, sistemin temel paketlerini etkilemeden farklı, daha güncel yazılım sürümlerini aynı sunucuya kurmanıza olanak tanıyan bir Red Hat girişimdir. Bu sayede, CentOS 7’nin kararlılığından ödün vermeden en son teknolojileri kullanabiliriz.
Bu makalede, CentOS 7 sunucusu üzerinde Software Collections kullanarak nasıl bir LEMP stack’i kurup yapılandıracağınızı adım adım detaylı bir şekilde anlatacağız. Nginx’i web sunucusu olarak, MariaDB’yi veritabanı sunucusu olarak ve PHP-FPM’i (FastCGI Process Manager) PHP uygulamalarını çalıştırmak için kullanacağız. Amacımız, güncel ve performanslı bir web uygulama ortamı oluştururken, sistem kararlılığını korumak ve gelecekteki güncellemeleri kolaylaştırmaktır.
Ön Gereksinimler
Bu rehbere başlamadan önce aşağıdaki ön gereksinimlerin karşılandığından emin olmanız gerekmektedir:
* CentOS 7 Sunucusu: Temiz bir CentOS 7 kurulumu olan bir sanal makine veya fiziksel sunucuya ihtiyacınız olacaktır.
* Root Erişimi veya Sudo Yetkileri: Kurulum ve yapılandırma işlemleri için root kullanıcısı olarak oturum açmış olmanız veya sudo yetkilerine sahip bir kullanıcıya sahip olmanız gerekmektedir.
* İnternet Bağlantısı: Paketleri indirmek ve kurmak için sunucunuzun aktif bir internet bağlantısına sahip olması şarttır.
* Minimum Sistem Kaynakları: En az 1 GB RAM ve 20 GB disk alanı önerilir, ancak bu, barındıracağınız uygulamaların gereksinimlerine göre değişebilir.
Temel Sistem Güncelleştirmeleri ve Araçlar
Kuruluma başlamadan önce, sisteminizin güncel olduğundan ve gerekli depoların etkinleştirildiğinden emin olmalıyız.
1. Sistemi Güncelleme:
İlk adım olarak, sunucunuzdaki tüm mevcut paketleri en son sürümlerine güncelleyelim. Bu, olası güvenlik açıklarını kapatır ve yazılım çakışmalarını önler.
sudo yum update -y
2. EPEL ve Software Collections (SCL) Depolarını Etkinleştirme:
EPEL (Extra Packages for Enterprise Linux) ve SCL depoları, standart CentOS depolarında bulunmayan ek paketleri ve daha güncel yazılım sürümlerini sağlar.
sudo yum install epel-release centos-release-scl -y
Bu komut, hem EPEL deposunu hem de SCL için gerekli olan centos-release-scl paketini kuracaktır.
Nginx Kurulumu
LEMP stack’imizin web sunucusu bileşeni olan Nginx’i Software Collections üzerinden kuracağız. Bu sayede, CentOS 7’nin varsayılan Nginx sürümünden daha güncel bir sürümü kullanabiliriz.
1. Nginx SCL Paketini Seçme ve Kurma:
SCL depolarında genellikle birden fazla Nginx sürümü bulunur (örneğin rh-nginx118, rh-nginx120 vb.). Bu rehber için rh-nginx118 (Nginx 1.18) sürümünü kullanacağız, ancak siz mevcut en güncel sürümü tercih edebilirsiniz.
sudo yum install rh-nginx118 -y
2. Nginx Servisini Başlatma ve Otomatik Başlatmayı Etkinleştirme:
Kurulum tamamlandıktan sonra Nginx servisini başlatmalı ve sunucu yeniden başlatıldığında otomatik olarak başlamasını sağlamalıyız.
sudo systemctl start rh-nginx118-nginx
sudo systemctl enable rh-nginx118-nginx
3. Firewall Yapılandırması:
CentOS 7, varsayılan olarak firewalld ile gelir. Web sunucunuzun dışarıdan erişilebilir olması için HTTP (80) ve HTTPS (443) portlarına izin vermemiz gerekmektedir.
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
Bu komutlar, firewall kurallarını kalıcı olarak ekler ve değişikliklerin uygulanması için firewall’u yeniden yükler.
4. Nginx Durumunu Kontrol Etme:
Nginx’in doğru bir şekilde çalıştığını doğrulamak için durumunu kontrol edebiliriz:
sudo systemctl status rh-nginx118-nginx
Çıktıda active (running) ibaresini görmelisiniz. Ayrıca sunucunuzun IP adresini bir web tarayıcısına yazarak Nginx’in varsayılan “Welcome to Nginx!” sayfasını görmeyi deneyebilirsiniz.
MariaDB Kurulumu ve Yapılandırması
Veritabanı sunucusu olarak MariaDB’yi kullanacağız. MariaDB, MySQL’in topluluk tarafından geliştirilen bir fork’udur ve yüksek uyumluluk, performans ve gelişmiş özellikler sunar.
1. MariaDB SCL Paketini Seçme ve Kurma:
Yine SCL depolarından güncel bir MariaDB sürümü seçeceğiz. Bu rehber için mariadb105 (MariaDB 10.5) sürümünü kullanacağız.
sudo yum install mariadb105-mariadb-server mariadb105-mariadb -y
mariadb105-mariadb-server paketi veritabanı sunucusunu, mariadb105-mariadb ise istemci araçlarını içerir.
2. MariaDB Servisini Başlatma ve Otomatik Başlatmayı Etkinleştirme:
sudo systemctl start mariadb105-mariadb
sudo systemctl enable mariadb105-mariadb
3. MariaDB Güvenlik Yapılandırması:
Yeni kurulan MariaDB sunucunuzu güvence altına almak için mysql_secure_installation betiğini çalıştırmanız şiddetle tavsiye edilir. Bu betik, root şifresi belirleme, anonim kullanıcıları kaldırma, uzak root bağlantılarını devre dışı bırakma ve test veritabanını kaldırma gibi güvenlik adımlarını atmanıza yardımcı olur.
Önemli: SCL paketleri genellikle kendi ortamlarında çalıştırılır. Bu yüzden MariaDB güvenlik betiğini çalıştırmak için scl enable komutunu kullanmalıyız.
sudo scl enable mariadb105 -- mysql_secure_installation
Betik size bir dizi soru soracaktır:
* Enter current password for root (enter for none): İlk kurulumda root şifresi yoktur, bu yüzden direkt Enter tuşuna basın.
* Set root password? [Y/n]: Y yazıp Enter’a basın ve güçlü bir root şifresi belirleyin.
* Remove anonymous users? [Y/n]: Y yazıp Enter’a basın.
* Disallow root login remotely? [Y/n]: Üretim ortamları için Y yazıp Enter’a basmak güvenlik açısından önemlidir.
* Remove test database and access to it? [Y/n]: Y yazıp Enter’a basın.
* Reload privilege tables now? [Y/n]: Y yazıp Enter’a basın.
4. MariaDB Durumunu Kontrol Etme:
sudo systemctl status mariadb105-mariadb
Çıktıda active (running) ibaresini görmelisiniz.
5. Yeni Bir Veritabanı ve Kullanıcı Oluşturma (İsteğe Bağlı):
Web uygulamanız için bir veritabanı ve kullanıcı oluşturmak isteyebilirsiniz. Aşağıdaki adımlar, örnek bir webdb veritabanı ve webuser kullanıcısı oluşturur.
sudo scl enable mariadb105 -- mysql -u root -p
MariaDB root şifrenizi girin. Ardından aşağıdaki SQL komutlarını çalıştırın:
CREATE DATABASE webdb;
CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'GucluSifreBuraya';
GRANT ALL PRIVILEGES ON webdb.* TO 'webuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
GucluSifreBuraya kısmını kendi güçlü şifrenizle değiştirmeyi unutmayın.
PHP-FPM Kurulumu ve Yapılandırması
PHP-FPM (FastCGI Process Manager), Nginx gibi web sunucularıyla PHP uygulamalarını çalıştırmak için kullanılan bir FastCGI uygulamasıdır. Nginx, PHP kodunu doğrudan yorumlayamadığı için PHP-FPM’e istekleri ileterek PHP kodunun işlenmesini sağlar.
1. PHP SCL Paketini ve Gerekli Modülleri Seçme ve Kurma:
SCL depolarından güncel bir PHP sürümü seçeceğiz. Bu rehber için rh-php74 (PHP 7.4) sürümünü kullanacağız. Web uygulamalarının çoğu için temel PHP modüllerini de kuracağız.
sudo yum install rh-php74 rh-php74-php-fpm rh-php74-php-mysqlnd rh-php74-php-gd rh-php74-php-mbstring rh-php74-php-xml rh-php74-php-opcache -y
* rh-php74: Temel PHP paketi.
* rh-php74-php-fpm: PHP FastCGI Process Manager.
* rh-php74-php-mysqlnd: MySQL/MariaDB veritabanı bağlantısı için.
* rh-php74-php-gd: Görüntü işleme için (örneğin captcha, thumbnail).
* rh-php74-php-mbstring: Çok baytlı karakter dizileri için.
* rh-php74-php-xml: XML işleme için.
* rh-php74-php-opcache: PHP performansını artırmak için bir önbellekleme modülü.
İhtiyaç duyduğunuz diğer PHP modüllerini de (örn: rh-php74-php-pdo, rh-php74-php-json, rh-php74-php-intl vb.) bu aşamada kurabilirsiniz.
2. PHP-FPM Yapılandırması:
PHP-FPM’in Nginx ile düzgün bir şekilde iletişim kurabilmesi için bazı yapılandırma değişiklikleri yapmamız gerekiyor. PHP-FPM yapılandırma dosyaları genellikle /etc/opt/rh/rh-php74/php-fpm.d/www.conf yolunda bulunur (kullandığınız PHP sürümüne göre yol değişebilir).
sudo vi /etc/opt/rh/rh-php74/php-fpm.d/www.conf
Aşağıdaki değişiklikleri yapın:
* Kullanıcı ve Grup Ayarları: PHP-FPM’in Nginx kullanıcısı altında çalışması, dosya izinleri sorunlarını önlemeye yardımcı olur.
; user = apache
user = nginx
; group = apache
group = nginx
* Dinleme Ayarları: Nginx’in PHP-FPM ile iletişim kuracağı soket veya TCP portunu belirler. Genellikle Unix soketleri performans açısından tercih edilir.
; listen = 127.0.0.1:9000
listen = /var/opt/rh/rh-php74/run/php-fpm/www.sock
* Soket İzinleri: Soket dosyasına Nginx’in erişebilmesi için izinleri ayarlayın.
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
* Process Manager (pm) Ayarları: PHP-FPM süreçlerinin nasıl yönetileceğini belirler. dynamic çoğu senaryo için iyi bir başlangıç noktasıdır.
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
Bu değerler, uygulamanızın trafik yüküne ve sunucunuzun kaynaklarına göre ayarlanmalıdır.
* php.ini Ayarları (İsteğe Bağlı):
Temel PHP ayarlarını /etc/opt/rh/rh-php74/php.ini dosyasından yapabilirsiniz.
sudo vi /etc/opt/rh/rh-php74/php.ini
Önemli ayarlar:
* memory_limit = 256M (veya ihtiyacınıza göre)
* upload_max_filesize = 32M (veya ihtiyacınıza göre)
* post_max_size = 32M (veya ihtiyacınıza göre)
* date.timezone = Europe/Istanbul (veya kendi saat diliminize göre ayarlayın)
3. PHP-FPM Servisini Başlatma ve Otomatik Başlatmayı Etkinleştirme:
sudo systemctl start rh-php74-php-fpm
sudo systemctl enable rh-php74-php-fpm
4. PHP-FPM Durumunu Kontrol Etme:
sudo systemctl status rh-php74-php-fpm
Çıktıda active (running) ibaresini görmelisiniz.
Nginx ile PHP-FPM Entegrasyonu
Şimdi Nginx’i, gelen PHP isteklerini işlemek üzere PHP-FPM’e yönlendirecek şekilde yapılandırmamız gerekiyor. Nginx yapılandırma dosyaları genellikle /etc/opt/rh/rh-nginx118/nginx/conf.d/ dizininde bulunur. Varsayılan yapılandırma dosyasını düzenleyebilir veya yeni bir sanal ana bilgisayar dosyası oluşturabilirsiniz. Biz varsayılan default.conf dosyasını düzenleyeceğiz.
1. Nginx Yapılandırma Dosyasını Düzenleme:
sudo vi /etc/opt/rh/rh-nginx118/nginx/conf.d/default.conf
server bloğu içinde, PHP dosyalarını işlemek için yorum satırı yapılmış location ~ \.php$ bloğunu bulup aşağıdaki gibi düzenleyin:
server {
listen 80;
server_name localhost; # Buraya kendi alan adınızı veya IP adresinizi yazabilirsiniz.
# Varsayılan kök dizini ve index dosyaları
root /usr/share/nginx/html; # Bu dizini kendi web kök dizininize göre değiştirebilirsiniz.
index index.php index.html index.htm;
# Hata sayfaları
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
# PHP dosyalarını PHP-FPM'e iletmek için bu bloğu etkinleştirin
location ~ \.php$ {
# Web kök dizininizi buraya da ekleyin (root direktifiyle aynı olmalı)
root /usr/share/nginx/html;
fastcgi_pass unix:/var/opt/rh/rh-php74/run/php-fpm/www.sock; # PHP-FPM soket yolunuz
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Dotfile'ları (örn: .htaccess) engelle
location ~ /\. {
deny all;
}
}
Önemli Notlar:
* server_name: Kendi alan adınızı (örneğin example.com) veya sunucunuzun IP adresini buraya yazın.
* root: Web sitenizin dosyalarının bulunduğu dizindir. Varsayılan olarak /usr/share/nginx/html kullanılır, ancak genellikle /var/www/html gibi özel bir dizin oluşturulur. Eğer değiştirirseniz, location ~ \.php$ bloğundaki root direktifini de aynı şekilde güncellemeyi unutmayın.
* fastcgi_pass: PHP-FPM’in dinlediği soket yolunu veya TCP portunu belirtir. Bizim durumumuzda Unix soketi kullanıyoruz.
2. Nginx Yapılandırmasını Test Etme:
Yapılandırma dosyasında sözdizimi hatası olup olmadığını kontrol etmek için Nginx’i test edebiliriz:
sudo scl enable rh-nginx118 -- nginx -t
Eğer her şey yolundaysa, test is successful mesajını görmelisiniz. Herhangi bir hata varsa, hatayı düzeltin ve tekrar test edin.
3. Nginx’i Yeniden Başlatma:
Yapılandırma değişikliklerinin etkili olması için Nginx servisini yeniden başlatın:
sudo systemctl restart rh-nginx118-nginx
LEMP Stack Testi
LEMP stack’inizin doğru bir şekilde çalıştığını doğrulamak için basit bir PHP bilgi dosyası oluşturalım.
1. Web Kök Dizinini Oluşturma (Gerekirse):
Eğer Nginx yapılandırmanızda /usr/share/nginx/html dışında bir root dizini belirttiyseniz (örneğin /var/www/html), bu dizini oluşturmanız gerekebilir.
sudo mkdir -p /var/www/html
sudo chown -R nginx:nginx /var/www/html
sudo chmod -R 755 /var/www/html
Bu örnekte, /var/www/html dizinini oluşturup Nginx kullanıcısına sahip ve uygun izinleri veriyoruz. Eğer /usr/share/nginx/html kullanıyorsanız bu adımı atlayabilirsiniz.
2. info.php Dosyası Oluşturma:
Nginx’in root dizinine (varsayılan olarak /usr/share/nginx/html veya sizin belirlediğiniz dizin) info.php adında bir dosya oluşturun:
sudo vi /usr/share/nginx/html/info.php
Dosyanın içine aşağıdaki kodu yapıştırın:
Kaydedin ve kapatın.
3. Tarayıcıdan Kontrol Etme:
Web tarayıcınızı açın ve sunucunuzun IP adresini veya alan adını takip eden /info.php ile erişin:
http://sunucu_ip_adresi/info.php
Eğer her şey doğru yapılandırıldıysa, PHP’nin yapılandırma bilgilerini içeren bir sayfa görmelisiniz. Bu sayfa, Nginx’in PHP-FPM ile başarılı bir şekilde iletişim kurduğunu gösterir. İşiniz bittiğinde güvenlik nedeniyle bu dosyayı sunucunuzdan silmeyi unutmayın: sudo rm /usr/share/nginx/html/info.php.
Güvenlik İpuçları ve Ek Yapılandırmalar
Bir LEMP stack’i kurmak sadece başlangıçtır. Üretim ortamında güvenlik ve performans için ek yapılandırmalar yapmak önemlidir.
Nginx Güvenliği
* Varsayılan Sunucu Bloklarını Kaldırma: Üretimde kullanmadığınız varsayılan sunucu bloklarını (default.conf gibi) devre dışı bırakın veya silin.
* SSL/TLS Yapılandırması: Tüm web trafiğini HTTPS üzerinden şifrelemek için Let’s Encrypt gibi ücretsiz bir sertifika yetkilisi kullanarak SSL/TLS yapılandırın.
* DDoS Koruması: Nginx’in limit_req modülü ile oran sınırlaması (rate limiting) uygulayarak temel DDoS saldırılarına karşı koruma sağlayabilirsiniz.
* Güvenlik Başlıkları: add_header direktifi ile X-Frame-Options, X-XSS-Protection, Content-Security-Policy gibi güvenlik başlıklarını ekleyerek tarayıcı tabanlı saldırıları azaltın.
MariaDB Güvenliği
* Uzak Erişimi Kısıtlama: mysql_secure_installation betiği root kullanıcısı için uzak erişimi kısıtlamıştır. Uygulama kullanıcıları için de localhost dışından erişimi mümkün olduğunca kısıtlayın.
* Güçlü Şifreler: Tüm veritabanı kullanıcıları için karmaşık ve güçlü şifreler kullanın.
* Ayrıcalıkların Kısıtlanması: Uygulamalarınızın ihtiyaç duyduğundan daha fazla veritabanı ayrıcalığına sahip olmadığından emin olun (örneğin, sadece SELECT, INSERT, UPDATE, DELETE yetkisi, GRANT yetkisi değil).
PHP-FPM Güvenliği
* open_basedir Kısıtlamaları: php.ini veya PHP-FPM havuz yapılandırmasında open_basedir direktifi ile PHP’nin dosya sistemine erişimini belirli dizinlerle kısıtlayın. Bu, bir güvenlik açığının kötüye kullanılması durumunda zararın boyutunu azaltır.
* disable_functions: Kullanılmayan veya potansiyel olarak tehlikeli PHP fonksiyonlarını (exec, shell_exec, passthru vb.) php.ini dosyasında devre dışı bırakın.
* Hata Raporlamayı Kapatma: Üretim ortamında display_errors = Off ve log_errors = On yaparak hata mesajlarının kullanıcıya gösterilmesini engelleyin ve hataları log dosyalarına yazdırın.
* expose_php = Off: PHP sürümünüzün HTTP yanıt başlıklarında görünmesini engelleyerek potansiyel saldırganlara bilgi vermeyi önleyin.
SELinux Yapılandırması
CentOS’ta SELinux (Security-Enhanced Linux) varsayılan olarak etkindir ve ekstra bir güvenlik katmanı sağlar. Ancak, yeni kurulan LEMP bileşenlerinin düzgün çalışabilmesi için SELinux politikalarını ayarlamanız gerekebilir. Aksi takdirde, Nginx’in PHP soketine veya web kök dizininizdeki dosyalara erişiminde sorunlar yaşayabilirsiniz.
1. Web Dizini İçin SELinux Bağlamını Ayarlama:
Eğer /var/www/html gibi özel bir dizin kullanıyorsanız, Nginx’in bu dizine erişmesine izin vermeniz gerekir.
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
sudo restorecon -Rv /var/www/html
Bu komutlar, /var/www/html dizini ve altındaki tüm dosyalar için httpd_sys_content_t SELinux bağlamını ayarlar ve kalıcı hale getirir.
2. Nginx’in PHP-FPM Soketine Erişimi:
Nginx’in PHP-FPM soketine erişimi genellikle httpd_can_network_connect veya benzeri bir boolean ile kontrol edilir. Ancak SCL kurulumlarında bu genellikle otomatik olarak doğru ayarlanır. Eğer nginx kullanıcısı php-fpm soketine erişemezse, loglarda (örneğin /var/log/audit/audit.log) SELinux hataları görebilirsiniz.
Eğer PHP-FPM soketine erişim sorunu yaşarsanız, audit2allow aracı ile özel bir politika oluşturmanız gerekebilir veya geçici olarak SELinux’u Permissive moda alıp test edebilirsiniz (üretim için önerilmez).
3. MariaDB Bağlantısı için SELinux (Gerekirse):
Eğer PHP uygulaması MariaDB’ye bağlanamıyorsa ve SELinux loglarında bağlantı hataları görüyorsanız, httpd_can_network_connect_db boolean’ını etkinleştirmeniz gerekebilir:
sudo setsebool -P httpd_can_network_connect_db 1
Bu, web sunucusunun veritabanı portlarına ağ bağlantıları yapmasına izin verir.
4. SELinux Durumunu Kontrol Etme:
sestatus
Current mode: enforcing olarak görünmelidir. Eğer geçici olarak devre dışı bırakmak isterseniz sudo setenforce 0 komutunu kullanabilirsiniz, ancak bu sunucu yeniden başlatılana kadar geçerlidir ve güvenlik açığı oluşturur.
Sonuç
Bu makalede, CentOS 7 işletim sistemi üzerinde Software Collections’ın gücünü kullanarak modern bir LEMP stack’i (Nginx, MariaDB, PHP-FPM) nasıl kuracağınızı ve yapılandıracağınızı ayrıntılı bir şekilde ele aldık. Software Collections sayesinde, CentOS’un kararlılığından ödün vermeden güncel yazılım sürümlerini kullanma esnekliğine sahip olduk.
Başarılı bir şekilde Nginx’i web sunucusu olarak, MariaDB’yi veritabanı sunucusu olarak ve PHP-FPM’i PHP kodu yorumlayıcısı olarak kurup yapılandırdık. Ayrıca, Nginx ile PHP-FPM arasındaki entegrasyonu sağladık ve kurulumun doğru çalıştığını bir phpinfo() sayfası ile test ettik. Son olarak, LEMP stack’inizin güvenliğini ve performansını artırmak için önemli güvenlik ipuçlarını ve SELinux yapılandırmalarını gözden geçirdik.
Artık CentOS 7 sunucunuzda güçlü, güncel ve performans odaklı bir web uygulama ortamınız var. Bu temel kurulumun üzerine, tercih ettiğiniz bir CMS’i (WordPress, Joomla, Drupal) veya özel bir PHP uygulamasını dağıtabilirsiniz. Unutmayın ki, herhangi bir üretim ortamında güvenlik güncellemelerini düzenli olarak yapmak ve sunucunuzu sürekli izlemek hayati önem taşır. Bu rehber, modern web uygulamalarınızı barındırmak için sağlam bir temel sağlamaktadır.