CentOS 7 LAMP Kurulumu

gurkanbicer

Gürkan Biçer

Posted on March 13, 2023

CentOS 7 LAMP Kurulumu

Aşağıdaki yönergeleri izleyerek panelsiz bir web server kurulumu gerçekleştirebilirsiniz;

Sunucu Konfigürasyonu

  • Linux (CentOS 7)
  • Apache 2.4
  • MariaDB 10.5
  • PHP 8.1

Ek bileşenler;

  • Certbot
  • Composer
  • PhpMyAdmin

Genel olarak gerekli olan bazı paketlerin kurulumunu yapmak ve sistemi güncellemekle başlayalım.

yum -y install epel-release yum-utils wget curl screen nano zip unzip git iptables iptables-services
yum -y update
Enter fullscreen mode Exit fullscreen mode

NetworkManager'i devre dışı bırakalım.

systemctl stop NetworkManager
systemctl disable NetworkManager
Enter fullscreen mode Exit fullscreen mode

Network konfigürasyon dosyanızın ifcfg-ens192 olduğunu varsayıyorum, eth0 da olabilir, bunu network yapınıza göre düzenlersiniz. Veyahut, dosyanızı nano ile açıp sonuna NM_CONTROLLED=no ekleyebilirsiniz.

echo "NM_CONTROLLED=no" >> /etc/sysconfig/network-scripts/ifcfg-ens192
Enter fullscreen mode Exit fullscreen mode

Network servisini başlatalım.

systemctl enable network
systemctl start network
Enter fullscreen mode Exit fullscreen mode

(isteğe bağlı) Firewalld servisini devre dışı bırakıp, iptables servisini aktif edip, varsayılan kuralları temizleyelim.

systemctl stop firewalld
systemctl disable firewalld
systemctl enable iptables
systemctl start iptables
iptables -L
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X
service iptables save
Enter fullscreen mode Exit fullscreen mode

SELinux'u kapatalım.

setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
Enter fullscreen mode Exit fullscreen mode

Reboot işlemi uygulayalım.

reboot
Enter fullscreen mode Exit fullscreen mode

Apache

Apache 2.4'ü yükleyelim.

yum -y install httpd httpd-itk httpd-tools mod_ssl
Enter fullscreen mode Exit fullscreen mode

Apache servislerini başlatalım.

systemctl start httpd
systemctl enable httpd
Enter fullscreen mode Exit fullscreen mode

PHP

PHP ve FPM'i yüklemek için repo'yu belirleyelim.

yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum -y --disablerepo="*" --enablerepo="remi-safe" list php[7-9][0-9].x86_64
yum-config-manager --enable remi-php81
Enter fullscreen mode Exit fullscreen mode

PHP, FPM ve kütüphaneleri yükleyelim.

yum -y install php php-fpm php-cli php-mysqlnd 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
Enter fullscreen mode Exit fullscreen mode

PHP-FPM servisini başlatalım.

systemctl enable php-fpm
systemctl start php-fpm
Enter fullscreen mode Exit fullscreen mode

/var/www/html dizini altında bir info.php dosyası oluşturup <?php phpinfo(); ?> komutunu bu dosyaya ekleyip, tarayıcınızdan http://SUNUCUIPADRESI/info.php adresine giriş yapın. Eğer hem erişim sağlayıp hem de PHP info bilgisini görebiliyorsanız, PHP ve Apache başarıyla kurulmuş demektir.

MariaDB (MySQL)

MariaDB 10.5 için repo dosyasını oluşturalım.

nano /etc/yum.repos.d/MariaDB.repo
Enter fullscreen mode Exit fullscreen mode

Dosya içerisine aşağıdakileri girip, kaydedelim.

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey = https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck = 1
Enter fullscreen mode Exit fullscreen mode

MariaDB servisini yükleyelim.

yum -y install mariadb-server mariadb
Enter fullscreen mode Exit fullscreen mode

MariaDB servisini başlatalım.

systemctl enable mariadb
systemctl start mariadb
Enter fullscreen mode Exit fullscreen mode

MySQL kurulumunu konfigüre edelim.

mysql_secure_installation
Enter fullscreen mode Exit fullscreen mode

İlk kurulumda root şifresi bulunmamaktadır. Direkt olarak Enter'layıp devam ediyoruz. Diğer soruların yanıtları karşılarında Y ve n olarak belirlidir. Bu işlemleri uygulayalım.

MySQL root şifrenizi bi yere kaydedin ve unutmayın :)

Enter current password for root (enter for none): ENTER
Switch to unix_socket authentication [Y/n]: n
Change the root password? [Y/n]: Y
New password: 
Re-enter new password:
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y
Enter fullscreen mode Exit fullscreen mode

Kurulumu Özelleştirelim

PHP.ini

Varsayılan php.ini dosyası yolu aşağıdaki gibidir ve nano ile bu dosyayı açıp konfigürasyonu düzenleyebilirsiniz.

nano /etc/php.ini
Enter fullscreen mode Exit fullscreen mode

1GB ram bellek üzeri sunucular için önerilen konfigürasyon;

memory_limit 256M
post_max_size 100M
upload_max_filesize 100M
max_execution_time 300
max_input_time 300
Enter fullscreen mode Exit fullscreen mode

Htaccess

/etc/httpd/conf/httpd.conf dosyasını nano ile açın. CTRL + W ile <Directory "/var/www/html"> şeklinde aratın.

İlgili blok içerisinde AllowOverride None satırını AllowOverride All olarak değiştirin.

PhpMyAdmin

Aşağıdaki komutları çalıştırarak phpMyAdmin'i varsayılan dizin altına pma dizin ismiyle kurabilirsiniz.

cd /var/www/html
mkdir -p pma
cd pma
wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.zip
unzip phpMyAdmin-5.2.1-all-languages.zip
mv phpMyAdmin-5.2.1-all-languages/* .
rm -rf phpMyAdmin-5.2.1-all-languages* 
mkdir -p tmp
chown -R apache:apache *
Enter fullscreen mode Exit fullscreen mode

http://IPADRESI/pma/ şeklinde phpMyAdmin sayfasına ulaşabilirsiniz.

Ancak, bu URL brute-force ataklara maruz kalabilir. Bu nedenle bu sayfaya ek bir parola koruması eklemek gerekir.

İlgili dizin içerisinde bir kullanıcı oluşturalım ve şifre belirleyelim.

htpasswd -c .htpasswd admin
Enter fullscreen mode Exit fullscreen mode

Daha sonra yine aynı dizine bir .htaccess dosyası oluşturalım ve aşağıdaki konfigürasyonu ekleyelim.

AuthType Basic
AuthName "Restricted Content"
AuthUserFile /var/www/html/pma/.htpasswd
Require valid-user
Enter fullscreen mode Exit fullscreen mode

Şimdi http://IPADRESI/pma/ şeklinde ulaşmak istediğinizde ekstra bir korumaya sahip olacaktır.

Certbot

Let's Encrypt sertifikası kurulumları gerçekleştirmek için certbot paketini kuralım.

yum -y install certbot python2-certbot-apache
Enter fullscreen mode Exit fullscreen mode

MPM-ITK

Apache'de kullanıcıların isteklerini virtualhost bazlı ayırmak için mpm-itk'yı aktif edelim. Nano ile 00-mpm-itk.conf dosyasını açalım.

nano /etc/httpd/conf.modules.d/00-mpm-itk.conf
Enter fullscreen mode Exit fullscreen mode

mod_mpm_itk.so dosyasının başındaki # işaretini kaldıralım.

LoadModule mpm_itk_module modules/mod_mpm_itk.so
Enter fullscreen mode Exit fullscreen mode

Ardından, httpd servisini yeniden başlatalım.

systemctl restart httpd
Enter fullscreen mode Exit fullscreen mode

Composer

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mv composer.phar /usr/local/bin/composer
Enter fullscreen mode Exit fullscreen mode

Varsayılan PHP-FPM Pool

Aşağıdaki php-fpm konfigürasyonu /var/www/html dizini içerisindeki PHP dosyalarını ve isteklerini karşılamak için düzenlenmiştir. /etc/php-fpm.d/www.conf dosyasını açın ve içerisini boşaltıp aşağıdaki konfigürasyonları ekleyin. Dosyayı kaydettikten sonra php-fpm servisini resetleyin.

[www]

user = apache
group = apache
listen = /var/run/php-fpm/www.sock
listen.owner = apache
listen.group = apache
listen.mode = 0666
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
slowlog = /var/log/php-fpm/www-slow.log
php_value[session.save_path]    = /var/lib/php/session
php_value[opcache.file_cache]   = /var/lib/php/opcache
Enter fullscreen mode Exit fullscreen mode

Varsayılan VirtualHost

/etc/httpd/conf.d dizini altına 00_default.conf isminde bir dosya oluşturun ve aşağıdaki konfigürasyonu tanımlayın. Daha sonrasında httpd -t komutunu uygulayarak konfigürasyonu test edin. Eğer sorun yoksa, httpd servisini yeniden başlatın.

<VirtualHost _default_:80>
    DocumentRoot "/var/www/html"
    DirectoryIndex index.php index.html index.htm

    <Directory "/var/www/html"> 
               # allow from all 
               Order deny,allow 
               Options +FollowSymLinks +SymLinksIfOwnerMatch -Indexes 
               Require all granted 
               AllowOverride All 
               php_admin_value open_basedir /var/www/html 
       </Directory> 

       ErrorLog /var/log/httpd/error_log 
       LogLevel warn 
       LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
       CustomLog /var/log/httpd/access_log combined

       SuexecUserGroup apache apache
       AssignUserId apache apache

       <FilesMatch \.php$>
           <If "-f %{REQUEST_FILENAME}">
           SetHandler "proxy:unix:/var/run/php-fpm/www.sock|fcgi://./"
           </If>
    </FilesMatch>
</VirtualHost>

<VirtualHost _default_:443>
       DocumentRoot "/var/www/html"
       DirectoryIndex index.php index.html index.htm

       <Directory "/var/www/html">
               # allow from all
               Order deny,allow
               Options +FollowSymLinks +SymLinksIfOwnerMatch -Indexes
               Require all granted
               AllowOverride All
               php_admin_value open_basedir /var/www/html
       </Directory>

       ErrorLog /var/log/httpd/error_log
       LogLevel warn
       LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
       CustomLog /var/log/httpd/access_ssl_log combined

       SuexecUserGroup apache apache
       AssignUserId apache apache

       <FilesMatch \.php$>
           <If "-f %{REQUEST_FILENAME}">
                SetHandler "proxy:unix:/var/run/php-fpm/www.sock|fcgi://./"
           </If>
       </FilesMatch>

       SSLEngine on
       SSLProtocol all -SSLv2 -SSLv3
       SSLCertificateFile /etc/pki/tls/certs/localhost.crt
       SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
       #SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
       #SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
</VirtualHost>
Enter fullscreen mode Exit fullscreen mode

Yeni Site Tanımlama

Öncelikle kullanıcı tanımlayalım ve gerekli klasörleri oluşturup, yetkilerini düzenleyelim.

adduser example
sudo -u example mkdir -p /home/example/public
sudo -u example mkdir -p /home/example/tmp
sudo -u example mkdir -p /home/example/session
sudo -u example mkdir -p /home/example/opcache
chmod -R +s /home/example
chmod -R 0755 /home/example
Enter fullscreen mode Exit fullscreen mode

Daha sonra PHP-FPM konfigürasyonu ekleyip, kullanıcıya özel socket oluşturalım.

cd /etc/php-fpm.d
nano example.conf
Enter fullscreen mode Exit fullscreen mode

PHP-FPM Konfigürasyonu;

[example]
user = example
group = example
listen = /var/run/php-fpm/example.sock
listen.owner = example
listen.group = example
listen.mode = 0666
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
slowlog = /var/log/php-fpm/example-slow.log
env[TMP] = /home/example/tmp
env[TMPDIR] = /home/example/tmp
env[TEMP] = /home/example/tmp
php_value[session.save_path] = /home/example/session
php_value[opcache.file_cache] = /home/example/opcache
php_value[upload_tmp_dir] = /home/example/tmp
Enter fullscreen mode Exit fullscreen mode

PHP-FPM servisini yeniden başlatalım.

systemctl restart php-fpm
Enter fullscreen mode Exit fullscreen mode

Daha sonra apache virtualhost konfigürasyonu oluşturalım.

cd /etc/httpd/conf.d
nano 01_example.conf
Enter fullscreen mode Exit fullscreen mode

HTTP Konfigürasyonu;

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot "/home/example/public"
    DirectoryIndex index.php index.html index.htm

    <Directory "/home/example/public"> 
               # allow from all 
               Order deny,allow 
               Options +FollowSymLinks +SymLinksIfOwnerMatch -Indexes 
               Require all granted 
               AllowOverride All 
               php_admin_value open_basedir /home/example
        </Directory> 

        ErrorLog /var/log/httpd/example.com-error_log 
        LogLevel warn 
        LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
        CustomLog /var/log/httpd/example.com-access_log combined

        SuexecUserGroup example example 
        AssignUserId example example

        <FilesMatch \.php$>
           <If "-f %{REQUEST_FILENAME}">
                SetHandler "proxy:unix:/var/run/php-fpm/example.sock|fcgi://./"
       </If>      
        </FilesMatch>       
</VirtualHost>
Enter fullscreen mode Exit fullscreen mode

Ardından httpd servisini yeniden başlatalım.

systemctl restart httpd
Enter fullscreen mode Exit fullscreen mode

Dilerseniz hosts dosyanıza IP adresi ve domain ekleyip test edebilirsiniz, dilerseniz de DNS yönlendirmesi gerçekleştirebilirsiniz.

SSL Kurulumu

DNS yönlendirmesi gerçekleştirdiyseniz SSL sertifikası da ilgili siteler için ücretsiz Let's Encrypt SSL sertifikası da kurabilirsiniz.

certbot --apache -d example.com -d www.example.com
Enter fullscreen mode Exit fullscreen mode

Otomatik SSL Sertifikası Yenileme

Crontab'ı açıp aşağıdaki cron satırını ekleyerek SSL sertifika yenileme işlemlerini cron servisine bırakabilirsiniz.

crontab -e
Enter fullscreen mode Exit fullscreen mode

Cron;

* */12 * * * root /usr/bin/certbot renew >/dev/null 2>&1
Enter fullscreen mode Exit fullscreen mode
💖 💪 🙅 🚩
gurkanbicer
Gürkan Biçer

Posted on March 13, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

CentOS 7 LAMP Kurulumu
centos CentOS 7 LAMP Kurulumu

March 13, 2023

The Promise of Docker Containers
devops The Promise of Docker Containers

August 1, 2019