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
Ş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
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 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….