VPS WordPress Kurulumu: Nginx, PHP-FPM ve Ücretsiz SSL
VPS WordPress kurulumu, WordPress’i paylaşımlı hosting yerine root yetkisine sahip olduğunuz bir VPS sunucuda; web sunucusu, PHP ve veritabanı ayarları tamamen sizin denetiminizde olacak şekilde elle kurmaktır. Kontrol paneli lisansı gerektirmez, önbellekten PHP sınırlarına kadar her ayarı sitenizin ihtiyacına göre belirlemenizi sağlar; karşılığında güncelleme, yedekleme ve güvenlik sorumluluğu da size geçer.
Adımlar, Nginx, MariaDB ve PHP-FPM’in LEMP stack kurulumu rehberindeki gibi hazır olduğunu varsayar; komutlar Ubuntu 24.04 LTS ve PHP 8.3 içindir. Sunucu yönetmek istemiyorsanız önbellek ve güncellemeleri hazır gelen WordPress hosting ya da Softaculous ile birkaç dakikada biten cPanel WordPress kurulumu daha kısa yollardır.
Kısa cevap
VPS WordPress kurulumu, LEMP yığını hazır bir sunucuda WordPress dosyalarını web köküne açıp siteye özel bir MariaDB veritabanı ve kullanıcısı tanımlamakla başlar. Dosyaların sahibi www-data yapılır, wp-config.php içine veritabanı bilgileri ve güvenlik anahtarları yazılır, Nginx’e try_files $uri $uri/ /index.php?$args; kuralı eklenir. Son adımda certbot --nginx ile Let’s Encrypt sertifikası alınır ve otomatik yenileme certbot renew --dry-run ile doğrulanır.
VPS WordPress kurulumu için neler hazır olmalı?
Kurulumdan önce sunucu tarafında beş koşulu kontrol edin; eksik bir adım genellikle en sonda, SSL ya da kalıcı bağlantı aşamasında ortaya çıkar.
| Gereksinim | Kontrol komutu | Beklenen sonuç |
|---|---|---|
| PHP-FPM çalışıyor | systemctl is-active php8.3-fpm | active |
| PHP eklentileri | php -m | mysqli, curl, gd, mbstring, xml, zip, intl |
| DNS kayıtları | dig +short ornek.com | Sunucu IP’si (ör. 203.0.113.10), www için de aynı |
| 80 ve 443 portları | sudo ufw status | Nginx Full ya da 80/443 kuralları |
| Nginx yapılandırması | sudo nginx -t | syntax is ok |
DNS kaydı özellikle önemlidir: Let’s Encrypt, sertifikayı vermeden önce alan adına 80 portu üzerinden ulaşarak doğrulama yapar. Eksik eklentileri sudo apt install php8.3-EKLENTI biçiminde kurup PHP-FPM’i yeniden başlatın; görsel işleme için php8.3-imagick isteğe bağlı ama yararlıdır. LIONFIN VPS’lerinde root yetkisi tamamen size ait olduğundan bu ayarların hiçbiri için destek talebi açmanız gerekmez.
WordPress için veritabanı nasıl hazırlanır?
WordPress’e yalnızca kendi veritabanında yetkili bir MariaDB kullanıcısı verin; aynı sunucuda birden fazla site varsa her birine ayrı veritabanı ve ayrı kullanıcı açın. Önce tahmin edilmesi zor bir parola üretin:
openssl rand -base64 24Ardından sudo mariadb ile konsola girip parolayı GUCLU_PAROLA yerine yazın:
CREATE DATABASE wp_ornek CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wp_ornek_user'@'localhost' IDENTIFIED BY 'GUCLU_PAROLA';
GRANT ALL PRIVILEGES ON wp_ornek.* TO 'wp_ornek_user'@'localhost';
EXIT;Bu üç değer birazdan wp-config.php dosyasına yazılacağı için bir parola yöneticisine kaydedin. Kullanıcının localhost ile sınırlanması, veritabanına yalnızca sunucunun içinden bağlanılabilmesini sağlar.
WordPress dosyaları nasıl indirilir?
En güncel sürüm wordpress.org’dan arşiv olarak indirilip web köküne kopyalanır:
cd /tmp
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
sudo mkdir -p /var/www/ornek.com/html
sudo cp -a /tmp/wordpress/. /var/www/ornek.com/html/
rm -rf /tmp/wordpress /tmp/latest.tar.gzNginx testinden kalan bir index.html varsa silin ki WordPress’in önüne geçmesin. Arayüz dilini kurulum sihirbazının ilk ekranında seçeceğiniz için ayrı bir dil paketi indirmeniz gerekmez.
Komut satırını tercih ediyorsanız WP-CLI aynı işi tek komutla yapar ve sonraki güncellemeleri de kolaylaştırır. WP-CLI kuruluysa ve web kökü www-data kullanıcısına aitse dosyaları o kullanıcı adına indirin:
sudo -u www-data wp core download --path=/var/www/ornek.com/html --locale=tr_TR
Dosya sahipliği ve izinleri nasıl olmalı?
Önerilen düzen; dosyaların www-data kullanıcısına ait olması, klasörlerin 755, dosyaların 644 izinle çalışmasıdır:
sudo chown -R www-data:www-data /var/www/ornek.com/html
sudo find /var/www/ornek.com/html -type d -exec chmod 755 {} \;
sudo find /var/www/ornek.com/html -type f -exec chmod 644 {} \;Bu düzende WordPress eklenti ve tema güncellemelerini, medya yüklemelerini doğrudan diske yazar; panel sizden FTP bilgisi istemez. Bedeli, güvenlik açığı olan bir eklentinin de aynı yetkiyle dosya değiştirebilmesidir. Daha sıkı bir model isteyenler dosyaların sahibini kendi kullanıcıları yapıp yalnızca wp-content/uploads klasörünü www-data’ya bırakır ve güncellemeleri WP-CLI ile komut satırından yapar.
Hangi modeli seçerseniz seçin 777 izni kullanmayın; sorunu çözüyormuş gibi görünse de sunucudaki her sürecin dosyalarınızı değiştirmesine kapı açar. Diğer koruma katmanları için WordPress güvenliği yazısına bakabilirsiniz.
wp-config.php nasıl hazırlanır?
wp-config.php, WordPress’in veritabanına nasıl bağlanacağını ve oturum çerezlerini hangi anahtarlarla imzalayacağını belirleyen dosyadır. Örnek dosyadan kopyalayıp açın:
cd /var/www/ornek.com/html
sudo -u www-data cp wp-config-sample.php wp-config.php
sudo nano wp-config.phpVeritabanı sabitlerini kendi değerlerinizle doldurun:
define( 'DB_NAME', 'wp_ornek' );
define( 'DB_USER', 'wp_ornek_user' );
define( 'DB_PASSWORD', 'GUCLU_PAROLA' );
define( 'DB_HOST', 'localhost' );Ardından put your unique phrase here yazan sekiz satırı, WordPress’in resmî anahtar üretecinden alacağınız rastgele değerlerle değiştirin:
curl -s https://api.wordpress.org/secret-key/1.1/salt/Çıktıdaki AUTH_KEY, SECURE_AUTH_KEY ve benzeri sekiz satırı olduğu gibi yapıştırın. Tema ve eklenti dosyalarının panelden düzenlenmesini kapatmak için define( 'DISALLOW_FILE_EDIT', true ); satırını eklemeniz önerilir. Son olarak dosyayı yalnızca sahibinin ve grubunun okuyabileceği hâle getirin: sudo chmod 640 wp-config.php.
Nginx server block’u WordPress için nasıl ayarlanır?
Kalıcı bağlantıların (permalink) çalışması için Nginx, diskte bulunmayan her adresi index.php’ye iletmelidir; bunu try_files satırı yapar. /etc/nginx/sites-available/ornek.com dosyasını şöyle düzenleyin:
server {
listen 80;
listen [::]:80;
server_name ornek.com www.ornek.com;
root /var/www/ornek.com/html;
index index.php index.html;
client_max_body_size 64M;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~* \.(css|js|jpg|jpeg|png|gif|webp|svg|ico|woff2)$ {
expires 30d;
access_log off;
}
}Son blok görsel, stil ve betik dosyalarının tarayıcıda 30 gün önbelleğe alınmasını sağlar; süreyi sitenizin güncellenme sıklığına göre değiştirebilirsiniz. Paylaşımlı hostingde .htaccess ile yapılan WordPress yönlendirmesinin Nginx’teki karşılığı try_files satırıdır. Değişikliği sudo nginx -t ve sudo systemctl reload nginx ile uygulayın.
Medya yükleme sınırı nasıl artırılır?
Yükleme sınırını iki katman birlikte belirler: Nginx’in client_max_body_size değeri ve PHP’nin upload_max_filesize ile post_max_size ayarları. Nginx sınırı aşıldığında istek “413 Request Entity Too Large” yanıtıyla reddedilir (WordPress yükleyicisi bunu çoğu zaman genel bir HTTP hatası olarak gösterir); PHP sınırı aşıldığında ise WordPress dosyanın sitenin azami yükleme boyutunu aştığını bildirir.
- Server block’ta
client_max_body_size 64M;satırının bulunduğundan emin olun; Nginx’in varsayılan değeri yalnızca 1 MB’tır. /etc/php/8.3/fpm/php.inidosyasında şu değerleri düzenleyin:upload_max_filesize = 64M post_max_size = 64M memory_limit = 256M- Servisleri yeniden yükleyin:
sudo systemctl restart php8.3-fpm sudo systemctl reload nginx
post_max_size değeri upload_max_filesize’tan küçük olmamalıdır; yükleme formu dosyayla birlikte başka alanlar da gönderir. Yeni sınırı WordPress’in medya yükleme ekranında görünen azami dosya boyutundan doğrulayabilirsiniz.
Let’s Encrypt SSL nasıl kurulur ve yenilenir?
Ücretsiz SSL için certbot’un Nginx eklentisi sertifikayı alır; server block’a 443 dinleyicisini ve sertifika yollarını kendisi ekler:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d ornek.com -d www.ornek.comİlk çalıştırmada bir e-posta adresi ve kullanım koşullarının onayı istenir. Certbot, sürümüne göre HTTP’den HTTPS’e yönlendirmeyi kendisi ekler ya da size sorar; eklenmediyse kuralı HTTP → HTTPS yönlendirme rehberindeki gibi elle yazın.
Ubuntu paketi, yenilemeyi günde iki kez çalışan bir systemd zamanlayıcısıyla otomatikleştirir. Zamanlayıcıyı ve yenileme sürecini şöyle doğrulayın:
systemctl list-timers | grep certbot
sudo certbot renew --dry-runLet’s Encrypt 2025’te süre dolumu hatırlatma e-postalarını sonlandırdı; yenileme başarısız olursa bunu ancak kendi izlemenizle fark edersiniz. Bu yüzden 80 portunu açık tutun ve sertifikanın bitiş tarihini sunucu izleme aracınıza ekleyin.
Kurulum sihirbazı ve ilk ayarlar nasıl tamamlanır?
Sertifika kurulduktan sonra alan adınızı tarayıcıda HTTPS ile açtığınızda WordPress kurulum sihirbazı başlar:
- Dil olarak Türkçe’yi seçin.
- Site başlığını, tahmin edilmesi zor bir yönetici kullanıcı adını (
admindeğil), güçlü bir parolayı ve erişebildiğiniz bir e-posta adresini girin. - WordPress’i kur düğmesine basıp
/wp-adminadresinden giriş yapın. - Ayarlar → Kalıcı bağlantılar ekranında Yazı adı yapısını seçin; Nginx’teki
try_fileskuralı sayesinde yeni adresler hemen çalışır.
Ayarlar → Genel ekranındaki iki adresin https ile başladığını kontrol edin; eski içerikten kalan şifresiz bağlantılar için mixed content hatası rehberine bakın. Yeni kurulan bir Ubuntu sunucuda çoğunlukla e-posta gönderen bir MTA (Postfix gibi) kurulu gelmez; şifre sıfırlama ve form bildirimleri bu yüzden gönderilemeyebilir. Bir SMTP eklentisiyle SmartHost SMTP relay bağlantısı kurun, ayrıntılar WordPress SMTP ayarları rehberinde. Düzenli yedek için VPS yedekleme adımlarını da ilk gün uygulayın.
Sık Sorulan Sorular
VPS’e WordPress kurmak için cPanel ya da Plesk gerekir mi?
Hayır. WordPress yalnızca bir web sunucusu, PHP ve MariaDB ya da MySQL ister; Nginx, PHP-FPM ve MariaDB ile panelsiz kurulabilir. Panel; e-posta, DNS ve yedekleme gibi işleri arayüzden yönetmek istediğinizde kolaylık sağlar ama lisans maliyeti ve ek kaynak tüketimi getirir. Tek site barındıran ve komut satırına alışkın kullanıcılar için panelsiz kurulum yeterlidir.
Mevcut WordPress sitemi VPS’e nasıl taşırım?
Eski sunucudan wp-content klasörünü ve veritabanı dökümünü alın, yeni sunucuda boş bir kurulum ortamı hazırlayıp dosyaları kopyalayın ve dökümü yeni veritabanına aktarın. wp-config.php içindeki veritabanı bilgilerini güncelleyin; alan adı değişiyorsa adresleri WP-CLI search-replace komutuyla değiştirin. DNS’i yeni sunucuya çevirmeden önce siteyi bilgisayarınızın hosts dosyası üzerinden test etmek kesintiyi önler.
WordPress eklenti yüklerken neden FTP bilgisi istiyor?
WordPress, PHP’nin çalıştığı kullanıcıyla dosyaları doğrudan yazamadığını tespit ettiğinde FTP bilgisi ister. Nginx ve PHP-FPM kurulumlarında bunun nedeni genellikle web kökündeki dosyaların sahibinin www-data olmamasıdır. Sahipliği chown -R www-data:www-data komutuyla düzeltmek sorunu çözer. Bilinçli olarak daha sıkı bir izin modeli kullanıyorsanız güncellemeleri panel yerine WP-CLI ile yapmanız gerekir.
Certbot sertifikayı yenileyemezse site kapanır mı?
Site çalışmaya devam eder, ancak sertifikanın süresi dolduğu anda tarayıcılar ziyaretçilere tam sayfa güvenlik uyarısı göstermeye başlar. Yenileme çoğunlukla 80 portunun kapatılması, DNS kaydının başka bir sunucuya çevrilmesi ya da Nginx yapılandırmasındaki bir hata yüzünden başarısız olur. sudo certbot renew --dry-run komutunu düzenli çalıştırmak ve bitiş tarihini izlemek bu riski büyük ölçüde ortadan kaldırır.
Aynı VPS’e birden fazla WordPress sitesi kurulabilir mi?
Evet. Her site için ayrı bir web kökü, ayrı bir server block, ayrı bir veritabanı ve kullanıcı oluşturup adımları tekrarlamanız yeterlidir; certbot her alan adı için ayrı sertifika alır. Siteler arasındaki yalıtımı artırmak isterseniz her biri farklı bir Linux kullanıcısıyla çalışan ayrı PHP-FPM havuzları tanımlayabilirsiniz. Kaç site barındırabileceğinizi sunucunun bellek ve işlemci kapasitesi belirler.
Bu makale yardımcı oldu mu?
Geri bildiriminiz için teşekkürler!
kişi faydalı buldu