
FreeBSD'de Nginx + PHP Web Sunucusu Kurulumu
FreeBSD üzerinde pkg ile Nginx, PHP-FPM ve MariaDB kurarak çalışan bir web sunucusu ayağa kaldırmayı; pf firewall ve performans ayarlarını adım adım anlatıyoruz.
FreeBSD'de Nginx + PHP Web Sunucusu Kurulumu
FreeBSD, Linux dağıtımlarının gölgesinde kalsa da web sunucusu olarak kullanıldığında kararlılığı ve öngörülebilir davranışıyla dikkat çeken bir işletim sistemidir. pkg paket yöneticisinin sadeliği, pf güvenlik duvarının esnekliği ve ZFS dosya sisteminin sunduğu veri bütünlüğü, özellikle uzun süre kesintisiz çalışması beklenen üretim sunucularında tercih sebebi olur. Bu yazıda sıfırdan bir FreeBSD kurulumu üzerinde Nginx ve PHP-FPM ikilisini nasıl ayağa kaldıracağınızı, veritabanı katmanını nasıl ekleyeceğinizi ve temel güvenlik ayarlarını nasıl yapacağınızı adım adım anlatıyoruz.
Yazı boyunca komutları doğrudan kopyalayıp yapıştırabilirsiniz; her adımda hangi dosyanın neyi kontrol ettiğini de açıklıyoruz ki sadece komutu çalıştırmış değil, ne yaptığınızı da anlamış olun.
Kurulum Öncesi Hazırlık
FreeBSD'yi bir web sunucusu olarak çalıştırmadan önce birkaç temel karar vermeniz gerekir: hangi FreeBSD sürümünü kullanacaksınız, sunucuya nasıl erişeceksiniz ve disk düzeniniz ne olacak.
Güncel kararlı sürüm serisi (14.x) üzerinden ilerlemenizi öneririz; hem paket deposu daha taze paketler barındırır hem de güvenlik yamaları daha uzun süre desteklenir. Sanal sunucu tarafında FreeBSD desteği arıyorsanız, kurulum panelinden hazır FreeBSD şablonunu seçerek dakikalar içinde temiz bir kurulumla başlayabilirsiniz — ayrı bir ISO indirip yükleme derdi yoktur, şablon zaten güncel ve minimal bir taban imaj olarak gelir.
Büyükweb notu: VDS paketlerimizde FreeBSD, kurulum panelinden hazır işletim sistemi şablonu olarak seçilebiliyor. Sunucuyu sipariş ettikten sonra panelden FreeBSD şablonunu seçmeniz yeterli; kurulum otomatik tamamlanıyor ve SSH erişim bilgileri size iletiliyor.
Kurulum tamamlandıktan sonra ilk yapmanız gereken şey sistemi güncellemek:
freebsd-update fetch install
pkg update
pkg upgrade -y
Eğer pkg komutu ilk kez çalıştırılıyorsa sistem sizden pkg bootstrap paketini onaylamanızı isteyecektir; y diyerek devam edin. Bu noktadan sonra tüm paket kurulumları pkg install üzerinden ilerleyecek.
Disk düzeni konusunda ZFS kullanan bir şablonla başladıysanız, snapshot alma imkânınız olduğunu unutmayın — büyük bir değişiklik öncesi (örneğin PHP sürüm yükseltmesi) hızlıca bir snapshot almak, geri dönüş sürenizi dakikalara indirir:
zfs snapshot zroot/ROOT/default@once-per-degistir
Kaynak boyutu konusunda da gerçekçi olmakta fayda var: küçük trafikli bir kurumsal site için 2 çekirdek / 4 GB RAM seviyesindeki bir VDS Sunucu paketi Nginx + PHP-FPM + MariaDB üçlüsünü rahatlıkla taşır; trafik arttıkça PHP-FPM worker sayısını ve MariaDB bellek ayarlarını büyütmeniz yeterli olur.
FreeBSD ve Linux Arasındaki Farkları Bilerek İlerlemek
FreeBSD'ye Linux tarafından geçen sistem yöneticileri için en çok kafa karıştıran nokta, servislerin systemctl yerine service komutuyla, kalıcı servis ayarlarının ise /etc/rc.conf dosyası yerine sysrc komutuyla yönetilmesidir. Paket yöneticisi de apt veya dnf değil pkg'dir; paketler /usr/local/ altına kurulur, sistemin kendi ikilileri ise /bin, /sbin gibi klasik yollarda kalır. Bu ayrım FreeBSD felsefesinin bir parçasıdır: temel işletim sistemi (base system) ile üçüncü parti yazılımlar net şekilde birbirinden ayrılır.
Bu farkları daha derinlemesine görmek isterseniz FreeBSD Nedir? Linux FreeBSD Temel Farklar yazımıza bakabilirsiniz. VDS ile paylaşımlı hosting arasındaki farkı netleştirmek isteyenler için de VPS VDS Farkları Hosting Türleri Karşılaştırması yazısı faydalı bir başlangıç noktası olur; bu yazıda anlattığımız kurulum, kaynaklara tam kontrolünüzün olduğu bir VDS ortamını varsayıyor.
Nginx Kurulumunu Yapmak
Paket deposundan Nginx kurulumu tek satırlık bir işlemdir:
pkg install nginx
Kurulum bittikten sonra servisi kalıcı olarak açık duruma getirin ve başlatın:
sysrc nginx_enable=YES
service nginx start
sysrc komutu aslında /etc/rc.conf dosyasına nginx_enable="YES" satırını ekler; bu satır olmadan sunucu yeniden başladığında Nginx otomatik açılmaz. Servisin ayakta olup olmadığını şu şekilde kontrol edebilirsiniz:
service nginx status
Ana yapılandırma dosyası /usr/local/etc/nginx/nginx.conf konumundadır. Varsayılan server bloğunu, kendi site köküne işaret edecek şekilde düzenleyelim. Öncelikle site dosyalarınız için bir dizin oluşturun:
mkdir -p /usr/local/www/site
chown -R www:www /usr/local/www/site
Ardından nginx.conf içindeki server bloğunu şu şekilde güncelleyin:
server {
listen 80;
server_name ornekalanadi.com;
root /usr/local/www/site;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Değişikliği kaydettikten sonra yapılandırmayı test edip yeniden yükleyin:
nginx -t
service nginx reload
nginx -t çıktısında syntax is ok ve test is successful ifadelerini görmeden yeniden yükleme yapmayın — bu küçük alışkanlık, hatalı bir konfigürasyonla sunucuyu çevrimdışı bırakmanızı engeller.
PHP-FPM Kurulumu ve Nginx Entegrasyonu
FreeBSD paket deposunda PHP sürümleri numaralandırılmış ayrı paketler olarak gelir (örneğin php83). Güncel bir sürümle başlamanızı öneririz:
pkg install php83 php83-extensions
php83-extensions meta paketi, çoğu web uygulamasının ihtiyaç duyduğu mbstring, mysqli, pdo, pdo_mysql, curl, gd, zip, opcache gibi uzantıların tamamını tek seferde kurar. İhtiyacınıza göre tek tek uzantı da kurabilirsiniz, örneğin sadece OPcache eksikse:
pkg install php83-opcache
PHP kurulumundan sonra yapılandırma dosyasını üretim moduna uygun şablondan oluşturun:
cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
Şimdi PHP-FPM servisini etkinleştirip başlatalım:
sysrc php_fpm_enable=YES
service php-fpm start
FPM havuz ayarları /usr/local/etc/php-fpm.d/www.conf dosyasında tutulur. Varsayılan olarak listen = /var/run/php-fpm.sock satırı zaten Unix socket kullanır, bu Nginx tarafındaki fastcgi_pass unix:/var/run/php-fpm.sock; satırıyla birebir eşleşir — TCP port yerine socket kullanmak, aynı makine üzerindeki iletişimde hem daha hızlıdır hem de dışarıya port açma ihtiyacını ortadan kaldırır.
Trafiği artan sitelerde www.conf içindeki process manager ayarlarını da gözden geçirmekte fayda var:
pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
Bu değerleri sunucunuzdaki RAM miktarına göre ölçeklendirin; her PHP-FPM worker'ının bellekte ortalama ne kadar yer kapladığını ps aux | grep php-fpm ile gözlemleyip pm.max_children değerini buna göre ayarlamak, ani trafik artışlarında sunucunun takılmasını önler.
Büyükweb perspektifi: VDS ortamında kaynaklar tamamen size ait olduğu için PHP-FPM havuz ayarlarını agresif şekilde büyütebilirsiniz — paylaşımlı hosting'de olduğu gibi komşu hesapların etkisini düşünmenize gerek yok. Bu da FreeBSD + Nginx + PHP-FPM kombinasyonunu VDS'te özellikle verimli kılan noktalardan biri.
Değişiklikten sonra servisi yeniden başlatmayı unutmayın:
service php-fpm restart
Kurulumu doğrulamak için site kök dizininize kısa bir test dosyası ekleyin:
echo "<?php phpinfo();" > /usr/local/www/site/info.php
Tarayıcıdan http://sunucu-ip-adresiniz/info.php adresine gittiğinizde PHP bilgi sayfasını görmelisiniz. Test bittikten sonra bu dosyayı silmeyi ihmal etmeyin; phpinfo() çıktısı sunucu yapılandırması hakkında saldırganlara işe yarar bilgi verebilir.
rm /usr/local/www/site/info.php
Veritabanı Katmanı: MariaDB Kurulumu
Çoğu PHP uygulaması (WordPress, Laravel tabanlı projeler, özel geliştirilen paneller) bir ilişkisel veritabanına ihtiyaç duyar. FreeBSD deposunda MariaDB paketi hazır bulunur:
pkg install mariadb106-server mariadb106-client
Servisi etkinleştirip başlatın:
sysrc mysql_enable=YES
service mysql-server start
İlk kurulumdan sonra güvenlik sihirbazını çalıştırarak anonim kullanıcıları kaldırın, root parolasını belirleyin ve uzaktan root girişini kapatın:
mysql_secure_installation
Ardından uygulamanız için ayrı bir veritabanı ve ayrı bir kullanıcı oluşturun — root hesabını uygulama bağlantısında kullanmayın:
CREATE DATABASE uygulama_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'uygulama_user'@'localhost' IDENTIFIED BY 'guclu-bir-parola';
GRANT ALL PRIVILEGES ON uygulama_db.* TO 'uygulama_user'@'localhost';
FLUSH PRIVILEGES;
PHP tarafında pdo_mysql veya mysqli uzantısının kurulu olduğundan emin olun (yukarıda php83-extensions ile zaten geldi). Bu üçlü — Nginx, PHP-FPM, MariaDB — pratikte Linux dünyasındaki LEMP dizilimine denk gelir; sadece işletim sistemi katmanı FreeBSD'dir. Aynı dizilimi Linux tarafında nasıl kurduğumuzu merak ediyorsanız Ubuntu Server 22.04 LTS Kurulumu LEMP Stack yazımızla karşılaştırma yapabilirsiniz; mimari mantık aynı, komutlar farklıdır.
Güvenlik Duvarı: pf ile Trafiği Sınırlamak
FreeBSD'nin yerleşik paket filtresi pf, iptables'a göre daha okunabilir bir kural sözdizimine sahiptir. Web sunucusu için tipik bir kural seti /etc/pf.conf içine şöyle yazılabilir:
ext_if = "vtnet0"
set skip on lo
block in all
pass out all keep state
pass in on $ext_if proto tcp from any to any port 22 keep state
pass in on $ext_if proto tcp from any to any port { 80, 443 } keep state
pass in on $ext_if proto icmp all
Ağ arayüzü adınızı ifconfig çıktısından kontrol edin; VDS ortamlarında genellikle vtnet0 görülür ama bu farklılık gösterebilir. Kuralları etkinleştirmek için:
sysrc pf_enable=YES
service pf start
pfctl -f /etc/pf.conf
Bu kural seti SSH (22), HTTP (80) ve HTTPS (443) dışındaki tüm gelen bağlantıları reddeder. SSH portunu varsayılan 22'den farklı bir porta taşımak, otomatik brute-force denemelerinin büyük kısmını dışarıda bırakan basit ama etkili bir önlemdir.
TLS sertifikası için Let's Encrypt istemcisini kurabilirsiniz:
pkg install py311-certbot-nginx
certbot --nginx -d ornekalanadi.com
Certbot, Nginx yapılandırmanıza otomatik olarak 443 portu için sunucu bloğu ekler ve sertifika yenileme işini cron üzerinden planlar; siz sadece yenileme cron görevinin gerçekten kurulu olduğunu crontab -l ile doğrulayın.
Test, Performans İnceliği ve Sorun Giderme
Kurulum bittikten sonra düzenli olarak log dosyalarını takip etmek, sorunları müşteri şikayeti gelmeden fark etmenizi sağlar. Nginx erişim ve hata logları varsayılan olarak /var/log/nginx/ altında, PHP-FPM logları ise /var/log/php-fpm.log konumunda tutulur.
tail -f /var/log/nginx/error.log
tail -f /var/log/php-fpm.log
Sık karşılaşılan hatalardan biri "502 Bad Gateway"dir; genellikle PHP-FPM servisinin çalışmadığı veya socket yolunun Nginx konfigürasyonuyla eşleşmediği durumlarda görülür. service php-fpm status ile servis durumunu, ardından www.conf içindeki listen satırı ile nginx.conf içindeki fastcgi_pass satırının birebir aynı yolu gösterdiğini kontrol edin.
Performans tarafında OPcache'i aktif etmek, PHP betiklerinin her istekte yeniden derlenmesini önleyerek gözle görülür bir hız kazancı sağlar. /usr/local/etc/php.ini içine şu satırları ekleyin:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
Nginx tarafında da statik dosyalar için gzip sıkıştırmasını açmak ve worker sayısını çekirdek sayısına göre ayarlamak mantıklıdır:
worker_processes auto;
gzip on;
gzip_types text/css application/javascript application/json image/svg+xml;
Sanallaştırma katmanının performansı nasıl etkilediğini merak ediyorsanız, hangi teknolojinin sunucunuzun altında çalıştığını anlatan sanallaştırma teknolojilerini karşılaştıran yazımıza göz atabilirsiniz — VDS'te disk G/Ç ve ağ gecikmesi büyük ölçüde bu katmandan etkilenir.
Büyükweb notu: FreeBSD'nin ZFS ile gelen anlık görüntü (snapshot) özelliği, PHP sürüm yükseltmesi veya büyük bir dağıtım öncesi güvenli bir geri dönüş noktası sağlar. Bir VDS Sunucu üzerinde snapshot alışkanlığı edinmek, üretim ortamında yapılan hataların bedelini dakikalara indirir.
Sıkça Sorulan Sorular
FreeBSD üzerinde hangi PHP sürümünü seçmeliyim?
Paket deposunda güncel desteklenen sürümlerden birini (örneğin php83) seçmeniz önerilir. Kullanacağınız uygulamanın (CMS, framework) minimum PHP sürüm gereksinimini kontrol edip depoda o sürümün karşılığı olan paketi kurun; çok eski bir sürümle devam etmek hem güvenlik yaması almamak hem de yeni uzantı desteğinden mahrum kalmak anlamına gelir.
Nginx yerine Apache kullanamaz mıyım?
Kullanabilirsiniz, FreeBSD deposunda Apache paketleri de mevcuttur. Ancak statik dosya sunumunda düşük bellek tüketimi ve yüksek eşzamanlı bağlantı kapasitesi isteyen kurulumlarda Nginx + PHP-FPM kombinasyonu genellikle daha hafif çalışır. Seçim, uygulamanızın .htaccess gibi Apache'ye özgü mekanizmalara bağımlı olup olmamasına göre değişir.
PHP-FPM socket mi yoksa TCP port mu kullanmalıyım?
Nginx ve PHP-FPM aynı sunucuda çalışıyorsa Unix socket (/var/run/php-fpm.sock) kullanmak hem daha hızlıdır hem de gereksiz bir ağ portu açmaz. PHP-FPM'i ayrı bir sunucuda çalıştırmayı planlıyorsanız (örneğin ölçeklenebilir bir mimaride), o zaman TCP port (127.0.0.1:9000 yerine dış IP ve güvenlik duvarı kısıtlamasıyla) tercih edilir.
FreeBSD'de WordPress çalıştırabilir miyim?
Evet, WordPress standart bir PHP + MySQL/MariaDB uygulaması olduğu için bu yazıdaki Nginx + PHP-FPM + MariaDB dizilimi üzerinde sorunsuz çalışır. Yalnızca WordPress'in önerdiği PHP uzantılarının (mbstring, curl, gd, xml, zip) kurulu olduğundan emin olun.
VDS'te FreeBSD kurulumu için ISO yüklemem mi gerekiyor?
Hayır. Büyükweb VDS panelinde FreeBSD, hazır işletim sistemi şablonu olarak sunulur; kendi ISO dosyanızı yüklemenize gerek kalmadan panelden şablonu seçip birkaç dakika içinde temiz bir kurulumla başlayabilirsiniz.
Firewall kurallarını yanlış yazarsam SSH erişimimi kaybeder miyim?
Bu, pf ile en sık yapılan hatalardan biridir. Kural setini değiştirmeden önce mevcut SSH bağlantınızı açık tutun, yeni kuralları ikinci bir terminal oturumundan test edin ve SSH portuna izin veren satırın kural listesinde mutlaka bulunduğunu iki kez kontrol edin. Sorun yaşarsanız VDS kontrol panelindeki konsol erişimi, SSH bağlantısı kesilse bile sunucuya ulaşmanızı sağlar.
MariaDB yerine PostgreSQL kullanabilir miyim?
Evet, FreeBSD paket deposunda PostgreSQL de mevcuttur (pkg install postgresql16-server). Uygulamanızın veritabanı tercihine göre PHP tarafında pdo_pgsql uzantısını kurup bağlantı ayarlarınızı buna göre düzenlemeniz yeterlidir.
Büyükweb Hizmetleri
FreeBSD tabanlı bir web sunucusunu sıfırdan kurmak istiyorsanız, kaynaklarınıza tam kontrol sağlayan ve panelden hazır FreeBSD şablonuyla dakikalar içinde başlayabileceğiniz altyapıya ihtiyacınız var:
Kurulum sırasında takıldığınız bir adım olursa veya sunucu seçimi konusunda yönlendirmeye ihtiyaç duyarsanız 0850 302 60 70 numaralı satış öncesi destek numaramızdan bize ulaşabilir, ya da iletişim sayfası üzerinden mesaj bırakabilirsiniz.
İşletim Sistemleri İlgili Hizmetlerimiz
Bu yazıda anlatılan teknik konuyu profesyonel altyapıyla deneyimleyin
Etiketler:



