Kontrol paneli olmadan sunucu yönetin #1

Gürkan Biçer
Dec 22, 2019 · 7 min read

Hosting kontrol paneli son kullanıcının işini kolaylaştıran, herhangi bir teknik bilgi gerektirmeden işlemleri hızlıca gerçekleştirmenizi sağlayan bir arayüzdür. Fakat, bilinen stabil kontrol panellerinin, yatırımcılarının lisanslama politikasını değiştirmesi ve değişen kur oranı nedeniyle bir kontrol paneli kullanmak oldukça maliyetli olabiliyor.


Bir kontrol paneli olmadan sunucu yönetimi konusunda araştırma yapıldığında tonla kaynak bulabilmek mümkün. Neden bu konu üzerine tekrar vakit harcıyorum? Tek bir yazı altında gerekli tüm bilgiyi ileten ne İngilizce ne de Türkçe kaynak bulabildim. Genelde karşılaştığım konu başlıkları şöyleler;

  • How to install LAMP on Centos 6/7
  • How to install LAMP on Ubuntu 16/18
  • How to install LEMP on Centos 6/7
  • How to install LEMP on Ubuntu 16/18
  • How to configure Nginx as reverse proxy

… ve bu konulara ek olarak, ne gerekliyse; örneğin phpmyadmin, pureftpd, git gibi daha birçok servisi tek tek kullanılan Linux distrosuna göre araştırmak gerekiyor.

Adım adım çok teknik bilgiye kaçmadan, web sitelerinizi barındırmanız için gerekli standart servisleri de içeren tüm bilgiyi aktarmayı planlıyorum. Diğer bölümler diğer yazılarda yer alacak. Bir sonraki yazılarda bu yapılan işlemleri de otomasyona iteleyeceğiz ^_^


Bu yazı, web servislerinde en çok tercih edilen ve en stabil kabul edilen Linux distrosu Centos 7 için hazırlanmıştır. Talebe göre, Ubuntu’nun güncel versiyonu için de hazırlanabilir.


Bölüm 1: LAMP (Apache, MySQL, PHP) Kurulumu

Apache

Öncelikle tercih ettiğimiz bir SSH client yazılımı veya terminal ekranı aracılığıyla SSH bağlantısı kurmamız gerekiyor.

ssh root@IPADRESI -p PORT

SSH bağlantısı kurduktan sonra yüklü paketlerin güncelleştirmesini yapmanız gerekiyor.

yum -y update

Hemen ardından kurulum işlemi esnasında ve sonrasında da kullanabileceğiniz bazı paketleri yüklemeniz gerekiyor.

yum -y install wget curl screen nano zip unzip git

Apache web servisini yüklüyoruz.

yum -y install httpd

Apache web servisini yükledikten sonra başlatıyoruz ve servis listesine ekleyerek otomatik başlatılmasını sağlıyoruz.

systemctl start httpd.service
systemctl enable httpd.service

Servisin sağlıklı çalıştığını test etmek için tarayıcınıza IP adresinizi yazıp erişmeyi deneyebilirsiniz. Aşağıdaki gibi bir karşılama ekranı ile göreceksiniz.

Centos 7 Apache 2.4 Karşılama Ekranı

Eğer bu şekilde bir sayfa ile karşılaşmadıysanız veya servisi başlatırken herhangi bir hata aldıysanız aşağıdaki komutlarla hatanın tümünü çıktılayabilirsiniz.

systemctl status httpd.service
journalctl -xe

MySQL

MySQL 5.7 için ilgili rpm dosyasını indiriyor ve MySQL servisini yüklüyoruz.

yum -y localinstall https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
yum -y install mysql-community-server

MySQL servisi yüklendikten sonra işlemlere devam edebilmek için servisi başlatıp, ardından geçici root şifresini öğreniyoruz.

systemctl start mysqld
cat /var/log/mysqld.log | grep "temporary password"

Örnek geçici şifre için çıktı aşağıdaki gibi olacak;

2019-12-21T21:25:43.450155Z 1 [Note] A temporary password is generated for root@localhost: r<E+hxLlK1tU

Güvenlik ayarları için mysql_secure_installation komutunu çalıştırıyoruz. Sorulan soruları ve yanıtlarını kalın yazıyla belirginleştirdim.

[root@lab ~]# mysql_secure_installationSecuring the MySQL server deployment.Enter password for user root:The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y
New password:Re-enter new password:Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.
All done!
[root@lab ~]#

Otomatik başlatılması için servis listesine ekliyoruz.

systemctl enable mysqld

Bu işlemin ardından mysql konsoluna erişimi test ediyoruz.

[root@lab ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.28 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

PHP

PHP için ilgili rpm dosyasını indiriyoruz.

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

Hangi PHP sürümünü kurmak istiyorsak komutu düzenleyebiliriz. En güncel sürüm 7.4 olduğu için aşağıdaki gibi konfigürasyonu düzenleyebiliriz.

yum-config-manager --enable remi-php74

Diğer sürümler için örnek;

yum-config-manager --enable remi-php56
yum-config-manager --enable remi-php70
yum-config-manager --enable remi-php71
yum-config-manager --enable remi-php72
yum-config-manager --enable remi-php73

Ardından, PHP’yi yüklüyoruz.

yum -y install php

PHP ile kullanılacak yüklemek istediğimiz diğer kütüphanelere gözatmak için aşağıdaki komutu kullanıyoruz.

yum search php | grep "php74"

Sık kullanılan ve gerekli olan kütüphaneleri sizin için belirledim.

yum -y install php-cli php-common php-devel php-enchant php-gd php-imap php-intl php-json php-mbstring php-odbc php-pdo php-pgsql php-soap php-ldap php-tidy php-xml php-xmlrpc php-opcache php-pecl-mcrypt

PHP ve kütüphanelerini yükleme işlemi ardından Apache ile entegre çalışabilmesi için Apache servisini yeniden başlatıyoruz.

systemctl restart httpd.service

Daha sonrasında hem Apache hem PHP servislerini test etmek amacıyla bir dosya oluşturup, tarayıcıdan kontrol ediyoruz. /var/www/html dizinine girip info.php isminde bir dosya oluşturuyoruz ve aşağıdaki PHP kodunu ekliyoruz.

<?php phpinfo(); ?>

Tarayıcıdan http://IPADRESI/info.php adresini görüntülüyoruz.

phpinfo() çıktısı

Bu kısma kadar göreceğiniz bilgiyi her yerde gördünüz/görebilirsiniz. Şimdi asıl önemli kısma gelelim.

Konfigürasyon

Apache’yi yapılandırma

Yukarıdaki anlatıma göre yine birden fazla site barındırabilmeniz mümkün. Lakin, tüm siteler tek bir dizin altında ve tek bir kullanıcı altında çalışacağından güvenlik ihlalleri yaşamanız yüksek olasılıklıdır.

Öncelikle konfigürasyon dosyaları için dizin yapımızı oluşturuyoruz.

cd /etc/httpd
mkdir -p vhosts-enabled
mkdir -p vhosts-available

Ardından, ana apache konfigürasyon dosyasının sonuna vhosts-enabled dizini içerisindeki konfigürasyonları dahil eden konfigürasyonu yazıyoruz. nano /etc/httpd/conf/httpd.conf komutu ile dosyayı açabilirsiniz.

IncludeOptional vhosts-enabled/*.conf

Ardından farklı kullanıcılar altında Apache’yi çalıştırabilmek için bir modül yüklüyoruz.

yum -y install httpd-itk

Yükleme işlemi ardından modülü Apache tarafından yüklenebilmesi için yüklediğimiz modülün konfigürasyonunu açıyoruz.

cd /etc/httpd/conf.modules.d
nano 00-mpm-itk.conf

LoadModule şeklinde başlayan satırın başındaki # işaretini kaldırıyoruz. Yani aşağıdaki gibi olmalı.

LoadModule mpm_itk_module modules/mod_mpm_itk.so

Ardından Apache’yi yeniden başlatıyoruz.

systemctl restart httpd.service

Log dosyalarımızı da ayırmak ve klasörlemek için aşağıdaki komutları da çalıştırıyoruz.

mkdir -p /var/log/httpd
mkdir -p /var/log/httpd/domlogs

Şu an ilk kullanıcımızı ve ilk web sitemizi ekleme zamanı.

Öncelikle 8 karakterli bir kullanıcı adı belirleyelim. 8 karakterli olması önemlidir, daha fazlasında farklı servislerde yapılacak bazı konfigürasyonlarda sorun olabilmektedir.

useradd example1

Kullanıcıyı oluşturduktan sonra içerisine public isminde bir dizin oluşturup ardından yetkilerini düzenliyoruz.

mkdir -p /home/example1/public
chmod 755 /home/example1
chmod 755 /home/example1/public
chown -R example1:example1 /home/example1
mkdir -p /var/log/httpd/domlogs/example1

Ardından site için bir apache konfigürasyonu oluşturuyoruz.

cd /etc/httpd/vhosts-available
nano example1.com.conf

Konfigürasyondaki kullanıcı adı, ip adresi ve site adresi kısımlarını düzenliyor ve kaydediyoruz.

<VirtualHost IPADRESI:80>
ServerName www.example1.com
ServerAlias example1.com
DocumentRoot /home/example1/public
ErrorLog /var/log/httpd/domlogs/example1/error.log
CustomLog /var/log/httpd/domlogs/example1/access.log combined
<IfModule itk.c>
AssignUserID example1 example1
</IfModule>
<Directory /home/example1/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

Konfigürasyonu oluşturduktan sonra Apache’nin görmesi için vhosts-enabled dizinine kısayol oluşturuyoruz.

cd /etc/httpd/vhosts-enabled
ln -s ../vhosts-available/example1.com.conf

Ardından konfigürasyonda bir hata olup olmadığını httpd -t komutu ile kontrol ediyoruz. Syntax OK şeklinde dönerse bir problem yoktur devam edebiliriz. Daha sonrasında konfigürasyonu yeniden yüklemesi için aşağıdaki komutu çalıştırıyoruz.

systemctl reload httpd.service

Hem PHP’nin çalıştığından hem de konfigürasyondan emin olmak için kullanıcının public dizinine bir index.php dosyası oluşturup kontrol sağlıyoruz. Tabii , oluşturduğunuz dosyanında sahiplik izinlerini düzenlemeyi unutmamanız gerekiyor. public dizini içerisine girdikten sonra chown -R example1:example1 * komutu ile tüm dosyaların yetkilerini ayarlayabilirsiniz.

<?php phpinfo(); ?>

Sonraki adım ise bilgisayarınızın hosts dosyasına aşağıdaki satırları ekleyip tarayıcıda test etmek ^_^

Eğer mac veya linux kullanıcısıysanız /etc/hosts dosyasını, Windows kullanıcısıysanız %WinDir%\System32\Drivers\Etc\hosts dosyasını düzenliyorsunuz.

IPADRESI example1.com www.example1.com

Son adım olarak SFTP ile bağlantı kurup dosya yüklemek isteyebilirsiniz. Bunu yaparken öncesinde passwd komutu işe kullanıcının şifresini değiştirmeniz gerekiyor.

Php’yi yapılandırma

Bu kısım oldukça basit. PHP’nin konfigürasyon dosyasının yolu /etc/php.ini şeklindedir. Nano editörü ile açıp dilediğiniz şekilde düzenleme yapabilirsiniz. Düzenleyebileceğiniz bazı örnek konfigürasyonlar;

memory_limit = 1024M
post_max_size = 100M
upload_max_filesize = 100M
max_execution_time = 300
max_input_time = 300
date.default_timezone_set = Europe/Istanbul

Sonuç

Aşağıdaki özelliklerde bir web sunucunuz hazır olacak. Tüm web siteleriniz kendilerine ait özel dizinler içerisinde yer alacak. Bir web sitesi için temel olarak gerekli tüm servisleri hazırlamış olacaksınız.

Apache 2.4
MySQL 5.7
PHP 7.4

Umarım faydalı bir yazı olmuştur.


Bir sonraki bölüm

Let’s Encrypt SSL sertifikası ve Apache konfigürasyonu, PhpMyAdmin ve FTP servisleri hakkında bilgilere yer vermeyi planlıyorum.

Herhangi bir problem, soru için yorum bölümünü kullanabilir veya beni LinkedIn, GitHub veya diğer sosyal platformlarda bularak iletişime geçebilirsiniz.

More From Medium

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade