Centos 7 Panelsiz Web Server Kurulumu (LAMP) + PowerDNS

0
9001

Bu makalede sizlere panelsiz web server kurulumunu anlatacağım. Neden panelsiz bir web server’a ihtiyaç duyarız veya ne gibi durumlarda tercih etmeliyiz önce onu tartışalım. Sektörde lider konumda olan başlıca Web Server kontrol panelleri bildiğiniz üzere şunlardır;
Ücretli

  • CPanel (VPS Ücreti : 20 Dolar & Dedicated Ücreti : 45 Dolar)
  • Plesk (VPS Ücreti : 25 Dolar & Dedicated Ücreti : 41.25 Dolar)
  • DirectAdmin (29 Dolar) Kesinlikle tavsiye etmediğim bir kontrol paneli

Ücretsiz

  • CyberPanel
  • CentosPanel
  • VestaPanel

Bir server’a Centos 7 kurduğunuzda 100MB – 150MB ram tüketimi olur ancak kontrol paneli kurduğunuzda ham halde 1GB yakın bir ram tüketimi söz konusu olur. Bu paneller bize sunucu üzerinde rahatça işlem yapmamıza olanak sağlar. Zaten eğer birden fazla web sitesi barındıracaksınız bir kontrol paneliniz mutlaka olsun en kötü panel bile kendiliğinden ufakta olsa bir güvenlik optimizasyonu ile gelir. Bir projeniz için LAMP (Linux + Apache + Mysql + PHP) sarf olarak kurup yayına almak istiyorsanız projenizi riske atabilirsiniz, gerçek anlamda Linux yapısına AMP konfigürasyonundan gerçekten iyi derecede anlamanız gerekiyor Bu makalede sizlere sıfırdan LAMP kurulumunu ve ayarlarını ve bir siteyi nasıl tam anlamıyla yayına alacağınızı anlatacağım ancak Güvenlik ve Optimizasyon işlemlerini anlatmayacağım 🙁 Lafı fazla uzatmadan işlemlere başlayalım;
Bu makale için Digitalocean üzerinden bir sunucu oluşturacağım özellikleri;

  • Centos 7.6
  • 6 Core CPU
  • 16 GB RAM
  • 320 GB SSD

Sunucuyu oluşturduktan sonra Alan adı panelinizden name server oluşturma işlemini yapın. Ardından Putty yardımı ile SSH bağlanın. Bağlantı sağladıktan sonra ilk her şeyden önce yapmanız gereken işletim sistemini güncellemek bunun için aşağıdaki komutu uygulayın.

sudo yum update -y

Ardından işinize yarayacak bazı ek programlar kurmamız gerekiyor aşağıdaki adımları sırası ile uygulayın;

yum install wget -y
yum install nano -y

bunların ne olduğunu ilerleyen kısımlarda anlatacağım işlemler işlemler bittikten sonra sunucu resetleyin;

reboot

Apache Kurulumu

İlk olarak apache kurulumundan başlayalım arkadaşlar

sudo yum install httpd -y

Apache Kurulumu
Apache Kurulumu

Şimdi kurulumu gerçekleştirdiğimiz apache sunucusunu çalıştıralım

sudo systemctl start httpd

Ardından gerçekten çalışıp çalışmadığını kontrol etmek için aşağıdaki komutu uygulayalım;

sudo systemctl status httpd

Apache Kurulumu Test
Apache Kurulumu Test

Gördüğünüz gibi sorusnuz şekilde çalıştığına dair bir çıktı aldık arkadaşlar. İp adresinizi tarayıcınıza yazdığınızda aşağıdaki gibi bir ekran ile karşılaşmanız gerekiyor.
Apache Test Sayfası
Apache Test Sayfası

Apache sorunsuz şekilde çalışıyor ancak sanal konakcılar üreterek birden fazla domain kullanıla bilir hale getirmemiz gerekiyor ancak ondan önce çok fazla kullanacağımız ve bilmemiz gereken bazı komutlar var;
Apache server durdurmak

sudo systemctl stop httpd

Apache sunucuyu başlatmak

sudo systemctl start httpd

Apache sunucusunu yeniden başlatmak

sudo systemctl restart httpd

Apache ilk kurulduğunda varsayılan olarak sunucu resetlendiğinde otomatik oalrak yeniden başlar bunu kapatmak için aşağıdaki komutu uygulayın

sudo systemctl disable httpd

Üst deki komutun tersi

sudo systemctl enable httpd

Apache Virtual Hosts Yapılandırması

Apache web sunucusunu kullanırken, tek bir sunucuda birden fazla etki alanı barındırmak için sanal alanlar kullanabilirsiniz. Bu adımda bir alan adı belirleyin ben elimde boşta olan odur.net kullanacağım sizde ona göre değişikleri gerçekleştirin.
Müzik eşliğinde bu işlemleri yapın benden tavsiye 🙂

Domain dosyalarımızın barınacağı alanı yaratalım şimdi;

sudo mkdir -p /var/www/odur.net/public_html

Şimdide sitenin loglarının tutulacağı yeri yaratalım;

sudo mkdir -p /var/www/odur.net/log

Kök dizinin yazma izinlerini gerçekleştirelim

sudo chmod -R 755 /var/www

Ardından bir html dosyası oluşturalım

sudo vi /var/www/odur.net/public_html/index.html

Üstteki komutu girdikten sonra i tuşuna basalım en alt kısımda INSERT moduna girdiğini göre bilirsiniz ardından aşağıdaki basit html dosyasını yapıştıralım;

<html>
  <head>
    <title>Odur.NET!</title>
  </head>
  <body>
    <h1>Başarılı! Sanal alan oluşturuldu odur.net için!</h1>
  </body>
</html>

Yapıştırma işleminden sonra ESC tuşuna basalım ve ardından :wq yazıp ENTER diyelim
Şimdi oluşturduğumuz bu sanal dizinleri apache tanıtmamız gerekiyor

sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled

Ardından Apache’ye sites-enabled dizinde sanal ana dizinleri aramasını söyleyeceksiniz. Bunu yapmak için Apache’nin ana yapılandırma dosyasını düzenleyeceğiniz;

sudo vi /etc/httpd/conf/httpd.conf

Aşağıdaki satırı açtığınız httpd.conf dosyasının en alt kısmına yapıştırın; (i basıt insert moduna geçmeyi unutmayın!)

IncludeOptional sites-enabled/*.conf

Bu satırı ekledikten sonra ESC ardından :wq yazıp ENTER diyerek kaydedip çıkın.
Şimdide oluşturduğumuz sanal alanın .conf dosyasını yaratmak kaldı;

sudo vi /etc/httpd/sites-available/odur.net.conf

Aşağıdaki yapıalndırma bloğunu ekleyip kaydetip çıkın arkadaşlar (Değiştirmeniz gereken yerleri değiştirin lütfen)

<VirtualHost *:80>
    ServerName odur.net
    ServerAlias www.odur.net
    ServerAdmin webmaster@odur.net
    DocumentRoot /var/www/odur.net/public_html
    <Directory /var/www/odur.net/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
    </Directory>
    ErrorLog /var/www/odur.net/log/error.log
    CustomLog /var/www/odur.net/log/requests.log combined
</VirtualHost>

Bu yapılandırma dosyası web site dosyalarının nerede barındığını ve Apache hatalarının & günlüklerinin nerede saklanacağını bildirir. Aşağıdaki komutu uygulayarak ayarları bitirelim;

sudo ln -s /etc/httpd/sites-available/odur.net.conf /etc/httpd/sites-enabled/odur.net.conf

Başta belirtmeyi unuttum ancak bu LAMP kurulumun en çok ayar yapılacağı kısım Apache arkadaşlar o yüzden biraz daha ayarımız var şuan apache restart ettiğinizde çalışmayacağını görürsünüz sorunsuz şekilde çalışması için Centos 7 ile gelen SELinux izinlerini yapmamız gerekiyor.

Apache SELinux İzinlerinin Ayarlanması

SELinux, varsayılan olarak Apache default yapılandırması ile çalışacak şekilde gelir. Ancak sanal alanlar yapılandırma dosyasında özel bir günlük dizini kurduğunuzda, Apache servisini başlatmak istediğinizde aşağıdaki hata mesajı ile karşılaşırsınız;

Bunu çözmek için Apache’nin gerekli dosyalara yazmasını sağlamak için SELinux ilkelerini güncellememiz gerekiyor. SELinux, Centos 7 ortamınıza yüksek güvenlik sağlar o yüzden devre dışı bırakmanızı tavsiye etmiyorum.
Bir evrensel Apache politikası ayarlamak için aşağıdaki komutu çalıştırın;

sudo setsebool -P httpd_unified 1

Apache ayarları tamamlandı arkadaşlar ancak şuan hala domain den direk giriş yapamayacağınızı görürsünüz bunun nedeni dns server olmaması o yüzden endişelenmeyin.

MySql Server Kurulumu

Açıkçası makaleye başlarken MySql 5.7 kurulumu yaparım diye düşünmüştüm ancak ileriye dönük ve performans açısından MySql 8.0 kurmak çok daha iyi olacağına karar verdim arkadaşlar.

rpm -Uvh  https://repo.mysql.com/mysql80-community-release-el7-2.noarch.rpm

Repoyu yükledikten sonra aşağıdaki komut ile mysql yükleyelim;

yum install mysql-server -y

Yüklemeyi yaparken size tekrar bir soru soracak “y” diyerek devam edin. Kurulum bittikten sonra aşağı ki da iki komutu sırası ile çalıştın;

systemctl enable mysqld.service
systemctl start mysqld.service

Kurulumdan sonra MySql otomatik olarak geçici bir root şifresi oluşturdu şimdi bu şifrenin ne olduğunu öğrenelim

grep "A temporary password" /var/log/mysqld.log | tail -n1

Aşağıda ki gibi bir çıktı alacaksınız arkadaşlar
Şifremizi değiştirmek ve gereki güncellik ayarlarını yapmak için aşağıdaki komutu çalıştıralım(Basit bir şifre tanımlamanıza izin vermeyecektir büyük harf özel karakter girmeniz şarttır);

mysql_secure_installation

Komutu çalıştırdığınızda sizden root şifrenizi isteyecektir (geçici şifrenizi giriniz)

Size sorduğu tüm sorulara y diyip geçin arkadaşlar

Change the password for root? - y
Remove anonymous users? - y
Disallow root login remotely? - y
Remove test database and access to it? - y
Reload privilege tables now? - y

Bu işlemlerden sonra MySql sunucumuzun versiyonunu kontrol edelim ;

mysql --version

Çıktı;

mysql Ver 8.0.15 for Linux on x86_64 (MySQL Community Server - GPL)	 	%LS

PHP 7.3 Kurulumu

sudo yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum -y install epel-release yum-utils

Yukarıdaki komutları girdikten sonra default olarak 5.4 kurulumu aktif olacaktır o yüzden 5.4 kapatıp 7.3 açmamız gerekiyor

sudo yum-config-manager --disable remi-php54
sudo yum-config-manager --enable remi-php73

Şimdi gelelim kurulumuna aşağıda ki kodu girerek kurulumu tamamlayalım (En çok ihtiyaç duyacağınız eklentileri de kuracaktır aşağıdaki kod)

sudo yum -y install php php-cli php-fpm php-opcache php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json

son olarak sürümü kontrol edip bi yanlış yapıp yapmadığımızı kontrol edelim

php -v

Çıktı;

PHP 7.3.4 (cli) (built: Apr 2 2019 13:48:50) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.4, Copyright (c) 1998-2018 Zend Technologies
 with Zend OPcache v7.3.4, Copyright (c) 1999-2018, by Zend Technologies

phpMyAdmin Kurulumu

Şimdide bizi MySql yardımcı olacak phpMyAdmin kuralım;

yum --enablerepo=remi,remi-test  install phpMyAdmin

Kurulumu tamamladıktan sonra ayarları yapalım;

sudo nano /etc/httpd/conf.d/phpMyAdmin.conf

Komutu girince aşağıdaki gibi düzenliyelim(Aşağıdaki ayar ile phpmyadmin her yerden ulaşabiliriz ancak sadece kendi ip ulaşmanız daha güvenli olur);

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin
<Directory /usr/share/phpMyAdmin/>
 AddDefaultCharset UTF-8
 <IfModule mod_authz_core.c>
 # Apache 2.4
 Require all granted
 </IfModule>
 <IfModule !mod_authz_core.c>
 # Apache 2.2
 Order Deny,Allow
 Deny from All
 Allow from 127.0.0.1
 Allow from ::1
 </IfModule>
</Directory>

Sonrasında CRTL+X ardından y tuşuna basarak kaydedin. Ardından Apache restart atalım;

systemctl restart httpd

ipadresiniz/phpmyadmin şekilinde girmeye çalıştığınızda hata alacaksınız hiç endişelenmeyin aşağıdaki adımları uygulayıp sonrasında giriş yapabilirsiniz;

mysql -u root -p

Sizden root şifrenizi soracak giriniz ve aşağıdaki komutu kendinize göre düzenleyip uygulayınız;

alter user 'root'@'localhost' identified with mysql_native_password by 'ŞİFRENİZİ GİRİNİZ';

Sonrasında phpmyadmin giriş yapabilirsiniz.

PowerDNS Kurulumu

Sıra geldi powerdns kurulumuna sonrasında geriye pek bişey kalmıyor arkadaşlar;

yum install epel-release yum-plugin-priorities
curl -o /etc/yum.repos.d/powerdns-rec-41.repo https://repo.powerdns.com/repo-files/centos-rec-41.repo
yum -y install pdns pdns-backend-mysql

Kurulum tamamlandıktan sonra phpmyadmin girerek powerdns diye bir veritabanı üretin ardından aşağıki sql sorgusunu çalıştırın;

CREATE TABLE domains (
 id INT AUTO_INCREMENT,
 name VARCHAR(255) NOT NULL,
 master VARCHAR(128) DEFAULT NULL,
 last_check INT DEFAULT NULL,
 type VARCHAR(6) NOT NULL,
 notified_serial INT DEFAULT NULL,
 account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
 PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE TABLE records (
 id BIGINT AUTO_INCREMENT,
 domain_id INT DEFAULT NULL,
 name VARCHAR(255) DEFAULT NULL,
 type VARCHAR(10) DEFAULT NULL,
 content VARCHAR(64000) DEFAULT NULL,
 ttl INT DEFAULT NULL,
 prio INT DEFAULT NULL,
 change_date INT DEFAULT NULL,
 disabled TINYINT(1) DEFAULT 0,
 ordername VARCHAR(255) BINARY DEFAULT NULL,
 auth TINYINT(1) DEFAULT 1,
 PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX ordername ON records (ordername);
CREATE TABLE supermasters (
 ip VARCHAR(64) NOT NULL,
 nameserver VARCHAR(255) NOT NULL,
 account VARCHAR(40) CHARACTER SET 'utf8' NOT NULL,
 PRIMARY KEY (ip, nameserver)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE TABLE comments (
 id INT AUTO_INCREMENT,
 domain_id INT NOT NULL,
 name VARCHAR(255) NOT NULL,
 type VARCHAR(10) NOT NULL,
 modified_at INT NOT NULL,
 account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
 comment TEXT CHARACTER SET 'utf8' NOT NULL,
 PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX comments_name_type_idx ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
CREATE TABLE domainmetadata (
 id INT AUTO_INCREMENT,
 domain_id INT NOT NULL,
 kind VARCHAR(32),
 content TEXT,
 PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
CREATE TABLE cryptokeys (
 id INT AUTO_INCREMENT,
 domain_id INT NOT NULL,
 flags INT NOT NULL,
 active BOOL,
 content TEXT,
 PRIMARY KEY(id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX domainidindex ON cryptokeys(domain_id);
CREATE TABLE tsigkeys (
 id INT AUTO_INCREMENT,
 name VARCHAR(255),
 algorithm VARCHAR(50),
 secret VARCHAR(255),
 PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

Ardından PowerDNS conf dosyasında ayarlar yapmamız gerekiyor;

nano /etc/pdns/pdns.conf

Komutu girdikten sonra şu alanı bulunuz;

#################################
# launch Which backends to launch and order to query them in
#
launch=bind

ve şu şekilde kendinize göre düzenleyip kaydediniz;

#################################
# launch Which backends to launch and order to query them in
#
#launch=bind
launch=gmysql
gmysql-host=127.0.0.1
gmysql-user=root
gmysql-password=Mysql Şifreniz
gmysql-dbname=powerdns

Kaydedip çıkın ve aşağıdaki komutları sırası ile giriniz

sudo systemctl enable pdns
sudo systemctl start pdns

PowerDNS Admin Kurulumu

Mysql bize yardımcı olması için bildiğiniz gibi PhpMyAdmin kurduk şimdi PowerDNS bize yardımcı olması için PowerAdmin kuracağız;

wget https://datapacket.dl.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz
tar zxvf poweradmin-2.1.7.tgz -C /var/www/html/
cd /var/www/html/
mv poweradmin-2.1.7 poweradmin

Devamı Gelecek arkadaşlar….