VPS'e WordPress Kurulumu: Nginx, PHP 8.3 ve MariaDB ile
Ubuntu 24.04 VPS'e WordPress'i elle kurun: Nginx, PHP 8.3-FPM ve MariaDB kurulumu, veritabanı oluşturma, wp-config ayarları, Nginx sunucu bloğu, ücretsiz SSL ve temel güvenlik önlemleri.
WordPress'i kendi VPS'inizde çalıştırmak size tam kontrol verir: PHP sürümünü, önbellek ayarlarını ve sunucu yapılandırmasını siz belirlersiniz. Karşılığında güncellemeler, güvenlik ve yedekleme de sizin sorumluluğunuzdadır. Bu rehberde Ubuntu 24.04 üzerinde LEMP yığınını (Linux, Nginx, MariaDB, PHP) kurup WordPress'i yayına alacağız.
Başlamadan önce alan adınızın DNS A kaydını VPS'in IP adresine yönlendirin; SSL adımında buna ihtiyacımız olacak. Örneklerde ornek.com kullanıyoruz, kendi alan adınızla değiştirin.
1. Nginx, PHP 8.3 ve MariaDB'yi kurun
SSH ile bağlanın ve paketleri güncelleyin. Ubuntu 24.04 depolarındaki varsayılan PHP sürümü 8.3'tür:
sudo apt update && sudo apt upgrade -y
sudo apt install -y nginx mariadb-server php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml php8.3-zip php8.3-intl
Görsel işleme için WordPress'in önerdiği Imagick eklentisini de isteğe bağlı olarak kurabilirsiniz:
sudo apt install -y php8.3-imagick
Servislerin çalıştığını kontrol edin:
systemctl status nginx php8.3-fpm mariadb --no-pager
2. MariaDB'yi güvenli hâle getirin
sudo mariadb-secure-installation
Ubuntu'da MariaDB'nin root kullanıcısı varsayılan olarak unix_socket ile doğrulanır; yani yalnızca sunucudaki root kullanıcısı sudo mariadb ile girebilir. Bu yüzden "Switch to unix_socket authentication" ve "Change the root password" sorularına n diyebilirsiniz. Anonim kullanıcıları kaldırma, root'un uzaktan girişini kapatma, test veritabanını silme ve yetki tablolarını yeniden yükleme sorularına Y deyin.
3. Veritabanı ve kullanıcı oluşturun
WordPress için ayrı bir veritabanı ve yalnızca o veritabanına yetkisi olan bir kullanıcı oluşturun:
sudo mariadb
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'GucluBirSifre123!';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Şifreyi mutlaka kendi belirlediğiniz uzun ve rastgele bir değerle değiştirin. Rastgele bir şifre üretmek için openssl rand -base64 24 komutunu kullanabilirsiniz.
4. WordPress'i indirin ve izinleri ayarlayın
En güncel sürümü doğrudan wordpress.org'dan indirin:
cd /tmp
curl -LO https://wordpress.org/latest.tar.gz
tar xzf latest.tar.gz
sudo mv wordpress /var/www/ornek.com
sudo chown -R www-data:www-data /var/www/ornek.com
sudo find /var/www/ornek.com -type d -exec chmod 755 {} \;
sudo find /var/www/ornek.com -type f -exec chmod 644 {} \;
Dosyaların sahibinin www-data olması, WordPress'in panelden eklenti ve tema kurabilmesini, güncellemeleri kendisi yapabilmesini sağlar. Klasörler için 755, dosyalar için 644 izni WordPress'in önerdiği değerlerdir; dosyalara asla 777 izni vermeyin.
5. wp-config.php dosyasını hazırlayın
cd /var/www/ornek.com
sudo cp wp-config-sample.php wp-config.php
sudo nano wp-config.php
Veritabanı satırlarını 3. adımda oluşturduğunuz bilgilerle doldurun:
define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'wpuser' );
define( 'DB_PASSWORD', 'GucluBirSifre123!' );
define( 'DB_HOST', 'localhost' );
Aynı dosyadaki AUTH_KEY, SECURE_AUTH_KEY gibi sekiz satırlık güvenlik anahtarları bölümünü benzersiz değerlerle değiştirin. Yeni değerleri WordPress'in resmî servisinden alabilirsiniz:
curl -s https://api.wordpress.org/secret-key/1.1/salt/
Çıktıyı kopyalayıp dosyadaki put your unique phrase here içeren satırların yerine yapıştırın. Ardından /* That's all, stop editing! */ satırının üstüne şunu ekleyin; yönetim panelindeki tema ve eklenti dosya düzenleyicisini kapatır:
define( 'DISALLOW_FILE_EDIT', true );
Dosyanın sahibini ve iznini düzeltin:
sudo chown www-data:www-data wp-config.php
sudo chmod 640 wp-config.php
6. PHP yükleme sınırlarını artırın
PHP'nin varsayılan dosya yükleme sınırı 2 MB'tır; bu, tema veya büyük görsel yüklerken hemen sorun çıkarır. Ana php.ini dosyasını düzenlemek yerine ayrı bir ayar dosyası oluşturmak, güncellemelerde değişikliklerinizin korunmasını kolaylaştırır:
sudo nano /etc/php/8.3/fpm/conf.d/99-wordpress.ini
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 120
sudo systemctl restart php8.3-fpm
7. Nginx sunucu bloğunu yazın
sudo nano /etc/nginx/sites-available/ornek.com
server {
listen 80;
server_name ornek.com www.ornek.com;
root /var/www/ornek.com;
index index.php index.html;
client_max_body_size 64M;
location / {
try_files $uri $uri/ /index.php?$args;
}
location = /xmlrpc.php {
deny all;
}
location ~* /wp-content/uploads/.*\.php$ {
deny all;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.(?!well-known) {
deny all;
}
location ~* \.(css|js|jpg|jpeg|png|gif|webp|svg|ico|woff2?)$ {
expires 30d;
access_log off;
}
}
Önemli noktalar:
try_files $uri $uri/ /index.php?$args: Gerçek bir dosya yoksa isteği WordPress'e yönlendirir. Kalıcı bağlantıların (/blog/yazi-adigibi) çalışması bu satıra bağlıdır.fastcgi_pass: PHP isteklerini PHP 8.3-FPM'in soketine iletir. Soket adı PHP sürümüyle aynı olmalıdır.- uploads klasöründe PHP engeli: Bir açık yüzünden yükleme klasörüne PHP dosyası bırakılsa bile çalıştırılamaz. Nginx'te düzenli ifade blokları yukarıdan aşağı denendiği için bu blok, genel
\.php$bloğundan önce gelmelidir. xmlrpc.php: Kaba kuvvet saldırılarında sıkça kullanılır. Jetpack veya WordPress mobil uygulaması gibi XML-RPC kullanan bir araç kullanıyorsanız bu bloğu kaldırın.
Siteyi etkinleştirin:
sudo ln -s /etc/nginx/sites-available/ornek.com /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx
8. Güvenlik duvarı ve SSL
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
Ücretsiz Let's Encrypt SSL sertifikası alın:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d ornek.com -d www.ornek.com
SSL'i WordPress kurulum sihirbazından önce kurmanız iyi olur; böylece WordPress site adresini baştan https:// olarak kaydeder ve sonradan adres değiştirmekle uğraşmazsınız.
9. Kurulum sihirbazını tamamlayın
Tarayıcıda https://ornek.com adresine gidin. Dil seçimi, site başlığı, yönetici kullanıcı adı, şifre ve e-posta adımlarını tamamlayın. Yönetici kullanıcı adı olarak admin gibi tahmin edilebilir bir ad seçmeyin ve güçlü bir şifre kullanın.
Temel güvenlik ve bakım
- Güncellemeler: WordPress çekirdeğini, temaları ve eklentileri güncel tutun. Kullanmadığınız eklenti ve temaları devre dışı bırakmakla yetinmeyin, silin.
- Sunucu güncellemeleri: Ubuntu paketlerini düzenli güncelleyin. SSH anahtarı, root girişini kapatma ve Fail2ban gibi adımlar için Linux sunucu güvenliği rehberimize bakın.
- Giriş denemeleri: Giriş sayfasına yönelik kaba kuvvet denemelerini sınırlayan bir eklenti ve iki aşamalı doğrulama kullanmayı düşünün.
- Yedekleme: Veritabanını ve
wp-contentklasörünü düzenli olarak yedekleyin ve yedekleri sunucu dışında saklayın:
sudo mariadb-dump wordpress | gzip > ~/wordpress-db-$(date +%F).sql.gz
sudo tar czf ~/wordpress-dosyalar-$(date +%F).tar.gz -C /var/www/ornek.com wp-content wp-config.php
Sunucu yönetmek istemiyorsanız
Kendi VPS'inizi yönetmek öğreticidir, ama her işletmenin buna vakti yoktur. Amacınız yalnızca bir WordPress sitesi yayımlamaksa iki alternatif var:
- WordPress hosting: NVMe disk üzerinde çalışır; ödemeden sonra ekibimiz WordPress'i kurar ve siteyi kullanıma hazır şekilde size teslim eder.
- Web hosting: Kendi kontrol paneliniz, phpMyAdmin ve dosya yöneticisiyle gelir; PHP 8.3 ve MariaDB destekler. Güncel fiyatlar (ABD doları) paket sayfasında yer alır. Farkları merak ediyorsanız web hosting nedir yazımıza göz atın.
Birden fazla site, özel PHP ayarları veya WordPress dışında başka uygulamalar da çalıştırmak istiyorsanız root erişimli bir VPS size daha fazla esneklik sağlar.
Sık Sorulan Sorular
Kalıcı bağlantılar 404 hatası veriyor, neden?
Nginx, Apache'nin .htaccess dosyasını okumaz. Sunucu bloğundaki location / içinde try_files $uri $uri/ /index.php?$args; satırının olduğundan emin olun, ardından sudo nginx -t ve sudo systemctl reload nginx çalıştırın.
"Veritabanı bağlantısı kurulurken hata" mesajı alıyorum, ne yapmalıyım?
wp-config.php dosyasındaki DB_NAME, DB_USER ve DB_PASSWORD değerlerinin 3. adımda oluşturduklarınızla birebir aynı olduğunu ve MariaDB'nin çalıştığını (systemctl status mariadb) kontrol edin.
Eklenti kurarken FTP bilgileri isteniyor, neden?
WordPress dosyalara yazamadığında FTP bilgisi ister. Site klasörünün sahibinin www-data olduğunu kontrol edin: sudo chown -R www-data:www-data /var/www/ornek.com.
Dosya yüklerken "413 Request Entity Too Large" hatası alıyorum.
Bu hatayı Nginx verir. Sunucu bloğundaki client_max_body_size değerini ve PHP'deki upload_max_filesize ile post_max_size değerlerini birlikte artırın, sonra Nginx'i ve PHP-FPM'i yeniden yükleyin.
Aynı VPS'te birden fazla WordPress sitesi çalıştırabilir miyim?
Evet. Her site için ayrı bir veritabanı ve kullanıcı, ayrı bir klasör (/var/www/site2.com gibi) ve ayrı bir Nginx sunucu bloğu oluşturmanız yeterlidir.
Bunları da okuyun
512 MB veya 1 GB RAM'li bir VPS'te uygulamalarınız kapanıyorsa swap alanı ilk yardımdır. Ubuntu 24.04'te swap...
Bilgisayarınız kapanınca botunuz da susmasın. Python Telegram botunu Ubuntu 24.04 VPS'te systemd ile 7/24 çalı...
Metin2 sunucusu kuracaksınız ama VPS mi VDS mi alacağınızdan emin değil misiniz? Kaynak paylaşımı, RAM, disk,...