HTTP doğrulama/redirect ve HTTPS trafiği için firewall ile servis dinleme durumunu birlikte kontrol edin.
“Nginx kuruldu, PHP çalışıyor” production tanımı değildir. DNS’den TLS’ye, FPM socket’inden deploy dizinine, loglardan health-check ve rollback’e kadar tüm zincir gözlenebilir olmalıdır.
PHP-FPM sürüm/socket yolu Ubuntu sürüm ve kurulu PHP paketine göre değişebilir. `ls /run/php/` ile gerçek socket’i görmeden örnek config’i kör kopyalamayın.
Önce uygulamayı HTTP/localhost üzerinde health-check ile doğrulayın, sonra domain ve TLS ekleyin. 502 hatasında DNS ile uğraşmadan önce PHP-FPM socket ve Nginx upstream’i kontrol edin; TLS hatasında ise uygulama kodundan önce DNS/80-443 erişimini doğrulayın.
Önce uygulamayı HTTP/localhost üzerinde health-check ile doğrulayın, sonra domain ve TLS ekleyin. 502 hatasında DNS ile uğraşmadan önce PHP-FPM socket ve Nginx upstream’i kontrol edin; TLS hatasında ise uygulama kodundan önce DNS/80-443 erişimini doğrulayın.
Ubuntu 26.04 üzerinde production web stack kurun: Nginx server block, PHP-FPM socket, Let’s Encrypt/TLS, UFW, log rotasyonu, health check, deployment dizini ve geri dönüş düzeni.
HTTP doğrulama/redirect ve HTTPS trafiği için firewall ile servis dinleme durumunu birlikte kontrol edin.
Kurulu PHP-FPM socket’lerini gerçek sistemden görün; config’i sürüm tahminiyle yazmayın.
Nginx config değişikliğinde reload’dan önce syntax testi zorunlu alışkanlık olmalıdır.
Ana sayfa 200 dönse bile DB/queue bozuk olabilir; uygulama sağlık endpoint’i daha anlamlıdır.
Production’da kod, public web root ve kalıcı upload/config alanlarını ayırmak rollback’i kolaylaştırır.
| Yol | Amaç |
|---|---|
| /var/www/app/releases/20260817-2200 | Değişmez release kodu |
| /var/www/app/current | Aktif release symlink |
| /var/www/app/shared | Upload, .env benzeri kalıcı veriler |
sudo install -d -o www-data -g www-data /var/www/app/releases /var/www/app/sharedsudo ln -sfn /var/www/app/releases/20260817-2200 /var/www/app/currentTLS eklemeden önce domain → sunucu → Nginx → uygulama zincirinin düz HTTP üzerinde çalıştığını kanıtlayın.
sudo apt install nginx -ysudo nginx -tsudo systemctl enable --now nginxcurl -I http://127.0.0.1ss -lntp | grep -E ":80|:443"Nginx 502’nin sık nedeni yanlış socket yoludur. İkinci neden FPM process limitleri veya çöken worker’lardır.
ls -lah /run/php/systemctl list-units --type=service | grep phpgrep -R "^pm\.\|^listen" /etc/php/*/fpm/pool.d/www.confjournalctl -u php*-fpm --since "20 min ago" --no-pager 2>/dev/null | tail -80ACME doğrulama hatalarının önemli bölümü yanlış A/AAAA kaydı, kapalı port veya proxy/origin yönlendirmesinden çıkar.
dig +short A example.comdig +short AAAA example.comsudo ufw allow "Nginx Full"sudo apt install certbot python3-certbot-nginx -ysudo certbot --nginx -d example.com -d www.example.comsystemctl list-timers | grep certbotÜretimde logların amacı olay anında “hangi katman bozuldu?” sorusunu hızlı cevaplamaktır. Nginx, PHP-FPM ve uygulama logları korelasyon kimliğiyle bağlanabiliyorsa teşhis hızlanır.
sudo tail -f /var/log/nginx/error.logsudo logrotate -d /etc/logrotate.d/nginxjournalctl -u nginx -u php*-fpm --since today --no-pager 2>/dev/null | tail -100Release symlink modeli, bir önceki sürüme dönüşü dosyaları tekrar kopyalamadan sağlar. DB migration geri dönüşü ayrıca tasarlanmalıdır.
readlink -f /var/www/app/currentsudo ln -sfn /var/www/app/releases/ONCEKI_SURUM /var/www/app/currentsudo nginx -t && sudo systemctl reload nginxSunucunun kendisinden yapılan curl testi ağ, DNS ve CDN katmanını atlayabilir. Harici probe kullanın.
curl -fsS https://example.com/healthcurl -o /dev/null -sS -w "code=%{http_code} connect=%{time_connect} ttfb=%{time_starttransfer} total=%{time_total}
" https://example.com/openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -dates -issuerPHP-FPM worker sayısı, cache, DB ve disk I/O aynı VPS’in kaynaklarını paylaşır. Eka Sunucu üzerinde staging + production veya tek sunuculu daha sade mimariyi gerçek trafiğe göre seçebilirsiniz.
Rehber hazırlanırken esas alınan birincil dokümantasyon ve teknik kaynaklar.
İlgili altyapı ve uygulama rehberleriyle devam edin.
Ubuntu 26.04 Web Sunucusu
Kodda kör biçimde sürüm/soket yolu yazmayın. Kurulu paketi `php -v`, `ls /run/php/` ve `systemctl` ile keşfedin; PPA veya panel farklı sürüm getirebilir.
Hayır. Upstream servis kapalı olabilir, socket yolu yanlış olabilir, izin sorunu olabilir veya reverse proxy yanlış hedefe gidiyor olabilir.
Cloudflare proxy arkasında origin TLS için kullanılabilir; ancak tarayıcıdan origin’e doğrudan erişim senaryosu ve SSL modu buna göre tasarlanmalıdır.
Release dizini + symlink, önceden dependency build ve kontrollü PHP-FPM reload ile dosya değişim penceresini küçültebilirsiniz. Stateful uygulamalarda DB migration ayrıca planlanmalıdır.