Merhabalar,
Bu makalemde, CentOS 7 üzerinde WordPress Web sunucu kurulumunu anlatmak istiyorum.
Kendi web sitesinizi yapmayı düşünüyor olabilirsiniz ve nereden başlayacağınızı bilmiyorsanız wordpress tam size göre. Hem kurulumu, hem de yapılandırması oldukça basit olduğundan, çok kısa sürede öğrenip, yaratıcı web siteleri hazırlayabileceğiniz bir ortamı size sağlamakta. Web hosting firmaları da uygun fiyatlarla bu altyapıyı sizlere sağlamaktalar. Ben tamamen kendi ortamınızda, bu altyapıyı size sağlayacak olan bir sunucunun nasıl kurulacağını paylaşacağım. Böylece, kendi ortamınızda kurduğunuz bir web sunucuyu, sabit IP’niz üzerinden dış dünyaya yayınlayabilir, ya da iç network’te bir intranet web server olacak şekilde kullanabilirsiniz. Kendi yayınınızı yapmayı düşünüyorsanız, elbette ki bir firewall çözümünüz de olmalı. Yoksa çeşitli ataklara maruz kalıp, zarar görebileceğinizi unutmayınız.
Bu makalede anlatacağım metodlar, linux bilmeyenlere ya da az bilenlere karışık gelebilir. Oldukça sistematik ve adım adım anlatarak, hangi başlıkta o an neleri yaptığınızı açıklayarak devam edeceğim. Böylece, hem ne yaptığınızın farkına varacaksınız, hem de metodolojiyi anlayarak, bu tip kurulumlarda hangi adımların gerçekleşebileceğini kafanızda canlandırabileceksiniz.
Kullanacağım sistem:
1 CPU
1 GB RAM
10 GB harddisk
Hostname : websrv.isleyen.net
1. CentOS minimal sunucu kurulumu ve update edilmesi
2. Kurulum depolarının yüklenmesi ve konfigürasyonu
3. Apache web server ve PHP kurulumu
4. Database kurulumu
- Database güvenlik ayarlarının yapılması
- Yeni bir database oluşturma
- Yeni bir database kullanıcısı oluşturma
- Bu yeni kullanıcıya, database’e erişim yetkisi verme
5. WordPress kurulumu ve konfigürasyonu
- Apache için sanal host oluşturulması
- WordPress yönetim arabiriminin yapılandırması
Şimdi kurulum adımlarına başlayalım.
1. CentOS minimal sunucu kurulumu ve update edilmesi
Bloğumdaki linux kurulum makalelerini takip ederek, bir CentOS linux işletim sistemini kurabilirsiniz. İster grafik mod, isterseniz de minimal modda kurabilirsiniz. Minimal kurulumların kaynak tüketimleri çok daha düşük olacağı için, web sunucular minimal mod tercih edilebilir.
Bu adımda sunucu için hostname bilgisini tanımlıyorum ve update ediyorum.
hostnamectl set-hostname websrv.isleyen.net
yum update -y
Sunucuyu restart etmeniz iyi olacaktır update işleminden sonra.
2. Kurulum repository’lerinin yüklenmesi ve konfigürasyonu
Linux’ta, kurulum yapacağınız lokasyon bilgisine sahip dosyalara “repository” diyoruz. Komut satırından verdiğiniz install/update komutları, ilgili kurulum dosyasını, bu lokasyonlara gidip arayarak download eder ve sisteminize kurar.
Bu adımda da, sonraki aşamalarda kurulumunu yapacağımız, Apache ve PHP paketlerinin, nereden download edilip yükleneceğini tanımlayacağız.
Kullanacağımız repository ismi “remi” olacak. Aşağıdaki komutla remi kurulumunu yapınız.
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
Remi deposunda, php’nin 5.4-5.5 versiyonları bulunmakta ve default olarak, gidip bu versiyon paketlerden birini kuracak. Fakat php’nin 7.3 versiyonu çıkmışken neden bu düşük versiyonu kurup sonra update edelim ki? Bundan dolayı, remi deposu içindeki düşük versiyon kurulumları disable edip, daha yeni versiyonu enable edelim ki, default olarak gidip bu yeni versiyonu kursun…
Bunun için yum-utils araçlarını kuracağız.
yum install yum-utils
Sonrasında da aşağıdaki komutlarla 5.4 versiyonu disable edip, 7.3 versiyonu enable edelim.
yum-config-manager –disable remi-php54
yum-config-manager –enable remi-php73
Sonraki adıma hazırız.
3. Apache Web Server ve PHP kurulumu
CentOS 7 minimal sunucu kurmuştunuz zaten. Yum update komutuyla full olarak güncellenmesini sağlayın öncelikle. Daha sonra Apache kurulumu yapacağız.
Tek komutla hem Apache hem de PHP kurulumunu yapalım.
yum install httpd mariadb mariadb-server php php-common php-mysql php-gd php-xml php-mbstring php-mcrypt
Web servisini, başlangıçta start olarak başlaması için enable edip, şu anda çalışmaya başlaması için de start edelim.
systemctl start httpd
systemctl enable httpd
Ayrıca işletim sisteminde gömülü gelen firewall içinde, http isteklerine izin vermek için aşağıdaki komutları kullanalım.
firewall-cmd –permanent –add-service=http
firewall-cmd –reload
Web servislerinin çalışıp çalışmadığını görmek için de, web browser’ınızdan sunucu IP yazarak test yapabilirsiniz.
Test sayfasında problem yok, web servislerimiz çalışıyor.
Sonraki adım için hazırız.
4. Database kurulumu ve konfigürasyonu
Database kurulumu:
Bu adımda database kurulumunu yapacağız ve biraz güvenli hale getirmek için birkaç ayar yapacağız. Ardından web sistemiz için yeni bir database, bu database’e bağlanacak bir kullanıcı ve bu kullanıcıya da, oluşturduğumuz database için erişim izinlerini tanımlayacağız.
Kuracağımız paket olan “mariadb” kurulumunu aşağıdaki komutla yapıyoruz.
yum install mariadb-server mariadb -y
Aslında bu komutu bir önceki adımda kullandım ve kurulumu orada yapmıştım 🙂 Dolayısıyla komutu uyguladığınızda yükleme yapmayacak, çünkü bir önceki aşamada yaptık…
Şimdi bu servisi enable edip, start duruma getirelim.
systemctl start mariadb
systemctl enable mariadb
Firewall üzerinde, database erişimi için gerekli izinleri de tanımlayalım.
firewall-cmd –permanent –add-service=mysql
firewall-cmd –reload
Bir database kurulumu yapıyorsanız, yapacağınız en kötü şey, default ayarlarla bırakmaktır. Bundan dolayı şimdi default birkaç ayarı değiştirelim. Mesela, ilk kurulumda gelen Anonymous kullanıcısını ve test database’ini silelim. Ayrıca root erişimi için ilk kurulumda password sorulmaz ve root password de belirleyelim. Bu root password, işetim sistemi root password değil, database root password olmakta.
Database güvenlik ayarları:
Aşağıdaki komutla, mysql güvenlik ayarlarını değiştirmeye başlayalım.
mysql_secure_installation
Burada, birkaç soru ile basit güvenlik ayarlarınızı yapmanız istenecek. Kendinize göre bu ayarları değiştirin.
Yeni bir database ve kullanıcı oluşturarak yetkilendirme:
Bu birkaç adımı tek bir alanda yapacağız. Aşağıdaki komutla tek adımda bunu yapalım.
mysql -u root -p
Bu komuttan sonra, güvenlik adımında belirlediğiniz root password ile database’e bağlanacağız.
Ardından sırasıyla:
create database wordpressdb; (wordpressdb adında yeni bir DB oluşturdum.)
create user wpuser@localhost identified by ‘Qwer1234’; (yeni bir kullanıcı ve password tanımladım)
grant all privileges on wordpressdb.* to wpuser@localhost; (kullanıcı için DB’ye full yetki verdim.)
flush privileges; (yetkileri kaydettim.)
exit (ayarlardan çıkış yaptık.)
Bu adımı da bitirdik ve sonraki adım için hazırız.
5. WordPress kurulumu ve konfigürasyonu
Artık son aşamada, wordpress kurulumumuzu yapabiliriz.
Minimal mod’da kurulum yapmışsanız, muhtemelen wget komutu yoktur. Öncelikle bu komutu kullanmak için, wget paketini yükleyelim.
yum install wget -y
Şimdi tek komutla hem /tmp dizinine gideceğiz, hem de wordpress kurulum dosyasının /tmp altına download edilmesini sağlayacağız.
cd /tmp && wget http://wordpress.org/latest.tar.gz
Ardından, sıkıştırılmış olan bu dosyayı, web dizinimize açalım.
tar -xvzf latest.tar.gz -C /var/www/html
Bu komut sonrasında, aşadaki dizinde, wordpress dizini oluşturulacaktır.
/var/www/html/wordpress
Şimdi bu dizinin sahipliğini “apache” kullanıcısı olarak değiştirelim.
chown -R apache /var/www/html/wordpress
WordPress için Apache sanal host oluşturulması:
Buraya kadar herşey yolunda. Fakat şunu gözden kaçırmamanız gerekiyor : ben en başta sunucuma websrv.isleyen.net ismini vermiştim. Fakat barındırmak istediğim web sitesi bu değil ki!!! Bu, benim sunucumun internal hostname’i. Dolayısıyla siz wordpress’i bu şekilde yapılandırırsanız, websrv.isleyen.net sayfası hazırlıyormuşsunuz gibi olacak. Eğer bu şekilde bir ayar yapmak istiyorsanız şimdi yapacağımız adımları geçin.
Eğer bu sunucu üzerinde, başka isimde bir web sitesi yapılandıracaksak, yapacağımız işlem, bu sunucuya gelen isteklerin, ilgili dizine ve isme yönlendirilmesini sağlamak olmalı.
Kuracağım örnek web sitesi : www.vexpert.club
Bu arada, bir sonraki hedefim konusunda spoiler da vermiş oluyorum… 🙂
Aşağıdaki konfigürasyonu yapmamız gerekiyor.
/etc/httpd/conf/httpd.conf dosyasını metin düzenleyici ile açarak, kendi sitenize uygun olarak aşağıdaki kodu değiştirip, sayfanın en altına yapıştırarak kaydedin.
vi /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
ServerAdmin yusuf@vexpert.club
DocumentRoot /var/www/html/wordpress
ServerName vexpert.club
ServerAlias www.vexpert.club
ErrorLog /var/log/httpd/vexpert-error-log
CustomLog /var/log/httpd/vexpert-acces-log common
</VirtualHost>
Değişikliklerin etkin olması için servisi yeniden başlatıyoruz.
systemctl restart httpd
WordPress yönetim arabiriminin yapılandırması
Web Browser’a sunucu IP ya da ismi yazarak aşağıdaki konfigürasyon linkini çağırıyoruz. Ben bu web sunucumun IP adresini, local host dosyama yazdım ve isimle yazarak bu linki çağıracağım.
http://www.vexpert.club/wp-admin/setup-config.php
Belki ingilizce sorunu olanlar olabilir, dolayısıyla Türkçe seçerek kuruluma devam edeceğim. Kurulum dilini seçip, devam ediyoruz.
Başlayalım seçeneği ile devam ediyoruz.
Bu arayüzde tanımlayacağımız bilgiler, az önce database oluşturma adımında tanımladığımız bilgilerdir. Bu bilgileri girerek Gönder tuşuna basıyoruz.
Ben burada ekstra olarak Tablo ön eki’ni değiştiriyorum. WordPress’te bu ön ek wp_ olarak geliyor ve tahmin edilebilir olduğu için, bu default ön eki değiştiriyorum.
Burada, wp-config.php dosyasına yazılamadığına dair bir uyarı alacağız. Çünkü bu dizine gidip baktığımızda, bu isimde bir dosya yok. Bu sayfa şimdilik açık kalsın.
Yapacağımız işlem, bu lokasyona gidip, bu isimde boş bir dosya oluşturmak ve aşağıda, dosyaya yazılamıyor ekranındaki tüm text’i kopyalayıp, bu dosya içine yapıştırmak olacak.
cd /var/www/html/wordpress/
ls -l
Dosyayı göremiyoruz.
Aşağıdaki komutla bu dosyayı oluşturalım.
vi wp-config.php
Ekranda gördüğünüz tüm text’i kopyalayıp bu dosya içine yapıştırıyoruz.
Kaydedip çıkıyoruz ve değişikliklerin etkin olması için httpd web servisini restart ediyoruz.
Az önce açık bıraktığımız sayfaya tekrar gidip, komutu çalıştır seçeneği ile işlemi tekrarlıyoruz.
Hoşgeldiniz ekranındaki bilgileri kendi seçeneklerinize göre doldurunuz. Burada belirleyeceğiniz kullanıcı adı, wordpress panele bağlanırken kullanacağınız kullanıcı adı olacak. Tanımları yaptıktan sonra wordpress’i kur seçeneği ile devam edebiliriz.
İşlemin başarılı bittiğine dair ekranı göreceksiniz. Giriş seçeneği ile panelimize bağlanabiliriz.
Web wordpress yönetim panelimiz karşımızda.
Normalde bu arabirimde anlatacağım başka birşey olmayacak ama, can sıkıcı olabilecek bir konuyu da hemen yazmak istiyorum. Bu ayarlarla, örnek sitenize 2 MB üstü hiçbirşey upload edemezsiniz. Resim, video, var olan hazır temanız vs gibi upload’lar yapmak istediğinizde, izin verilenden yüksek kapasiteli olduğu için hata mesajları alırsınız.
Örneğin, Ortam > Yeni ekle seçeneği altından durum kontrolü yapabilirsiniz.
Bu limitleri değiştirmek için, php.ini dosyasında tanımlı olan limitleri değiştirelim. Bu dosya, /etc/php.ini dosyası olacak.
find / -name “php.ini” -print
vi /etc/php.ini
upload_max_filesize = 100M olarak değiştirdiğimde,max upload boyutunu 100 MB yapmış oluyorum.
Birkaç değeri daha değiştirmenizi öneriyorum.
memory_limit 256M – Bir scriptin kullanabileceği max. Memory miktarı.
post_max_size 128M – Toplam POST body datasının max değeri.
max_execution_time 600 – Bir scriptin Max çalışma zamanı (saniye)
max_input_time 900 – Bir scriptin, giriş datasını parse edebileceği max. zaman. (saniye)
Dosyayı kaydedip çıkış yapın ve web servisini restart edin.
systemctl start httpd
Yeniden kontrol ettiğinizde, max upload değerinin değiştiğini göreceksiniz.
Bütün kurulum adımlarımız bu kadar. Artık dilediğiniz gibi web sitenizi geliştirebilir, ilgili portlar için firewall konfigürasyonunuzu da yaparak, internet üzerinden yayın yapabilirsiniz.
Buraya kadar anlattığım tüm adımları, CentOS 8 ve Redhat sistemler üzerinde de aynı şekilde uygulayabilirsiniz. Kurduğunuz bu yapıya LAMP server da denmektedir. (Linux, Apache, Mysql, PHP)
O zaman son olarak, bu makaleyi okuyup uygulayanlar için bir ödev vereyim:
Soru : Bu sunucu üzerinde, başka bir web sitesi daha yayınlayabilir miyiz? Böyle birşey mümkünse neler yapmamız gerek?
Anlattıklarımı bir adım daha öteye götürmek isteyen arkadaşlarımız, bu soruya yanıt bulabilirlerse, gerçekten birşeylerin mantığını kavramaya başlamış olacaklar.
Yararlı olması dileğiyle.
Yusuf İşleyen
WordPress plesk’e göre daha mı hızlı olur? Olursa plesk’te 10 saniyede açılan bu sunucuda kkaç saniyede açılır?
Bu tip testleri malesef yapmadım ve zaten o konunun uzmanı da değilim. Olaya web sunucu ve altyapı gözüyle yaklaşıyorum. Fakat sizin uygulama imkanınız olursa, paylaşmanız güzel olur.