LAMP

Arch Linux Türkiye Belgeleri sitesinden
Atla: kullan, ara



Konu başlıkları

Giriş

Bu belge Arch Linux üzerinde Apache web sunucusunu nasıl kurup kullanabileceğiniz anlatmak amacıyla yazılmıştır. Ayrıca, PHP, MySQL ve kurup bunları Apache'ye entegre etmeyi de anlatmaktadır. Bu kombinasyon LAMP (Linux Apache MySQL PHP) olarak adlandırılmaktadır.

Kurulum

# pacman -S apache php php-apache mysql

Bu komut ile Apache, PHP ve MySQL'i birlikte kurabilirsiniz. Eğer isterseniz, bunları aşağıdaki yönergeleri takip ederek ayrı ayrı da kurabilirsiniz.


Kalem.png
ÖNEMLİ:
Yeni öntanımlı kullanıcı ve grup: Apache artık "nobody" kullanıcısı yerine "http" kullanıcı ve grubunu kullanmaktadır. Eğer daha önce kurmuşsanız, bu yeni gruplara göre httpd.conf dosyanızı tekrar düzenlemeniz gerekebilir.

Yapılandırma

Apache

Güvenlik nedeniyle Apache doğrudan veya bir betik yardımıyla başlatılır başlatılmaz /etc/httpd/conf/httpd.conf dosyası içindeki UID/GID izinlerine geçer.

  • http kullanıcısının sistemde mevcut olup olmadığını aşağıdaki komut çıktısında http ibaresini arayarak denetleyin:
 # grep http /etc/passwd
  • Mevcut değilse http sistem kullanıcısını oluşturun:
 # useradd -d /srv/http -r -s /bin/false -U http
Bu, /srv/http/ ev dizinine sahip, bir sistem hesabı olarak (-r), sahte bir kabuk ile (-s /bin/false) bir kullanıcı oluşturur ve aynı kullanıcı adına sahip bir grup oluşturur(-U).
  • /etc/hosts dosyasına şu satırları ekleyin (eğer dosya yoksa oluşturun):
127.0.0.1  localhost.localdomain   localhost
Farklı bir makine adı kullanmak istiyorsanız, şu şekilde ekleyebilirsiniz:
127.0.0.1  localhost.localdomain   localhost makineadım
  • </etc/rc.conf dosyasını düzenleyin: Eğer yukarıdaki gibi makine adı eklemişseniz değiştirmenize gerek yoktur; yoksa, "localhost" kullanın:
#
# Networking
#
HOSTNAME="localhost"
  • Makine adınının /etc/hosts dosyasında yer aldığından emin olun yoksa apache başlamaz. Bundan farklı olara /etc/httpd/conf/httpd.conf dosyasını kök olarak düzenleyerek ve şu satırı devredışı bırakabilirsiniz:
LoadModule unique_id_module        modules/mod_unique_id.so

Yani şu şekilde görünmesini sağlayın:

#LoadModule unique_id_module        modules/mod_unique_id.so
  • Yapılandırmayı kişiselleştirin. Arzunuza göre en azından httpd.conf ve extra/httpd-default.conf dosyalarını düzenleyin. Güvenlik nedeniyle extra/httpd-default.conf dosyasında ServerTokens Full değerini ServerTokens Prod olarak ve ServerSignature On değerini ServerSignature Off olarak değiştirebilirsiniz.
  • Sunucuyu çalıştırmak için şu komutu verin:
 # rc.d start httpd
  • Yukarıdaki komuttan sonra Apache'nin çalışması beklenmektedir. Tarayıcınız ile http://localhost/ sayfasını ziyaret edin. Apache'nin test sayfası gösterilecektir. Tarayıcınızda bir 403 hatası alıyorsanız /etc/httpd/conf/httpd.conf dosyasında aşağıdaki satırı devre dışı bırakın:
Include conf/extra/httpd-userdir.conf
yani
# Include conf/extra/httpd-userdir.conf
  • Apache'yi başlangıçta otomatik çalıştırmak için /etc/rc.conf dosyasını httpd artsürecini ekleyin:
DAEMONS=(... httpd ...)

Kullanıcı dizinleri

  • Kullanıcı dizinlerini kullanmak istiyorsanız (mesela ~/public_html, yani dolayısıyla http://localhost/~kullanıcı), /etc/httpd/conf/extra/httpd-userdir.conf) dosyasında şu satırı devre dışı bırakın:
 Include conf/extra/httpd-userdir.conf
  • Apache'nin ev dizinlerini görebilmesi için gerekli izinleri ayarlamanız gerekmektedir. Ev dizininiz ve ~/public_html/ dizinleri diğerleri tarafından çalıştırılabilir olmalıdır. Aşağıdaki chmod ayarları yeterli olacaktır:
$ chmod o+x ~
$ chmod o+x ~/public_html
  • Ev dizininizi apache ile paylaştırmak için daha güvenli bir yol ise http kullanıcısını ev dizininizin ait olduğu gruba üye yapmaktır. Örneğin ev dizininiz ve tüm alt dizinleri piter grubuna dahilse tek yapmanız gereken aşağıdaki komutu yürütmektir:
 $ usermod -aG piter http

Elbette ki ~/, ~/public_html, ve ~/public_html altındaki tüm alt dizinlerde grup üyelerine (örneğimizde piter grubu), okuma ve çalıştırma izinlerini de sağlamalısınız. Gereksinimlerinize göre değiştirmeniz gerekecek olan aşağıdaki komut bu işi yapmaktadır:

 $ chmod g+xr-w /home/kullanıcı adı
 $ chmod -R g+xr-w /home/kullanıcı adı/public_html


Kalem.png
ÖNEMLİ:
Bu şekilde http kullanıcısına erişim verebilmk için her tekil kullanıcıya dizininize erişim hakkı vermek zorunda kalmazsınız. Sadece http kullanıcısı ve piter grubundaki diğer kullanıcılar ev dizininize erişebilir.

Daha sonra apache' yi yeniden başlatın:

 # rc.d restart httpd

SSL

Kendiliğinden imzalı sertifika oluşturun (anahtar boyutunu ve geçerlilik süresini değiştirebilirsiniz)

 # cd /etc/httpd/conf
 # openssl genrsa -des3 -out server.key 1024
 # openssl req -new -key server.key -out server.csr
 # cp server.key server.key.org
 # openssl rsa -in server.key.org -out server.key
 # openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

/etc/httpd/conf/httpd.conf dosyasında şu satırı etkinleştirin

 Include conf/extra/httpd-ssl.conf

Daha sonra apache' yi yeniden başlatın:

 # rc.d restart httpd

Sanal Makineler

Birden fazla makineniz olsun istiyorsanız /etc/httpd/conf/httpd.conf dosyasına

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

satırlarını ekleyin.

Aşağıdaki örneğe göre /etc/httpd/conf/extra/httpd-vhosts.conf dosyasında makineleri ayarlayın.:

NameVirtualHost *:80

#Bu ilk sanal makine şunları etkinleştirir: http://127.0.0.1, veya: http://localhost, 
#halen /srv/http/*index.html sayfasına gitmeniz gerekir(yoksa bir "sayfa bulunamadı" -404- hatası alırsınız).
#the reason for this: once you tell httpd.conf to include extra/httpd-vhosts.conf, 
#ALL vhosts are handled in httpd-vhosts.conf(including the default one),
# E.G. the default virtualhost in httpd.conf is not used and must be included here, 
#otherwise, only domainname1.dom & domainname2.dom will be accessible
#from your web browser and NOT http://127.0.0.1, or: http://localhost, etc.
#

<VirtualHost *:80>
    DocumentRoot "/srv/http"
    ServerAdmin root@localhost
    ErrorLog "/var/log/httpd/127.0.0.1-error_log"
    CustomLog "/var/log/httpd/127.0.0.1-access_log" common
    <Directory /srv/http/>
		    DirectoryIndex index.htm index.html
		    AddHandler cgi-script .cgi .pl
		    Options ExecCGI Indexes FollowSymLinks MultiViews +Includes
		    AllowOverride None
		    Order allow,deny
		    allow from all
	</Directory>
</VirtualHost>


<VirtualHost *:80>
    ServerAdmin your@domainname1.dom
    DocumentRoot "/home/username/yoursites/domainname1.dom/www"
    ServerName domainname1.dom
    ServerAlias domainname1.dom
    <Directory /home/username/yoursites/domainname1.dom/www/>
		    DirectoryIndex index.htm index.html
		    AddHandler cgi-script .cgi .pl
		    Options ExecCGI Indexes FollowSymLinks MultiViews +Includes
		    AllowOverride None
		    Order allow,deny
		    allow from all
	</Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin your@domainname2.dom
    DocumentRoot "/home/username/yoursites/domainname2.dom/www"
    ServerName domainname2.dom
    ServerAlias domainname2.dom
    <Directory /home/username/yoursites/domainname2.dom/www/>
		    DirectoryIndex index.htm index.html
		    AddHandler cgi-script .cgi .pl
		    Options ExecCGI Indexes FollowSymLinks MultiViews +Includes
		    AllowOverride None
		    Order allow,deny
		    allow from all
	</Directory>
</VirtualHost>

Sanal makinelerinizi /etc/hosts dosyasına ekleyin:

127.0.0.1	domainname1.dom
127.0.0.1	domainname2.dom

Daha sonra apache' yi yeniden başlatın:

 # rc.d restart httpd

Sanal makinelerinizi kişisel dizininizde oluşturmak isterseniz, Apache' nin 'Userdir' değeri ile çakışma yaşayabilirsiniz. Bundan kaçınmak için aşağıdaki satırları devre dışı bırakın:

# User home directories
#Include conf/extra/httpd-userdir.conf

Önceden anlatıldığı gibi gerekli izinleri ayarlayın:

# chmod 0775 /home/kullanıcı adı/

Çok fazla sayıda sanal makine oluşturuyorsanız, bunları kolayca etkinleştirmek veya devre dışı bırakmak için her bir makine için bir yapılandırma dosyası oluşturarak tek bir dizin altında (mesela /etc/httpd/conf/vhosts) toplayın.

Öncelikle dizini oluşturun:

# mkdir /etc/httpd/conf/vhosts

Daha sonra tek tek yapılandırma dosyalarını bu dizin altında oluşturun:

# nano /etc/httpd/conf/vhosts/domainname1.dom
# nano /etc/httpd/conf/vhosts/domainname2.dom

Son adımda tek tek bu yapılandırma dosyalarının /etc/httpd/conf/httpd.conf dosyasında yer almasını sağlayın:

#Enabled Vhosts:
Include conf/vhosts/domainname1.dom
#Include conf/vhosts/domainname1.dom

Bu makineleri artık /etc/httpd/conf/httpd.conf dosyasında devre dışı bırakabilir veya etkinleştirebilirsiniz.

Gelişmiş Seçenekler

/etc/httpd/conf/httpd.conf dosyasındaki şu seçenekler ilginizi çekebilir:

 # Listen 80

Apache'nin hangi portu kullanacağını belirtir. Eğer bir router arkasında iseniz, bu portu yönlendirmeniz gerekmektedir.

 # ServerAdmin sample@sample.com

Hata sayfalarında vs. görüntülenecek yönetici e-posta adresi.

 # DocumentRoot "/srv/http"

Bu seçenek web sayfalarınızı koyacağınız dizini ifade eder. İstediğiniz gibi değiştirebilirsiniz. Fakat,

<Directory "/srv/http">

değerini, DocumentRoot ile aynı yapmayı unutmamalısınız.

PHP

PHP kurulduğu gibi çalışacak biçimde ayarlanmıştır.

  • /etc/httpd/conf/httpd.conf dosyasına şu satırları ekleyin:
LoadModule php5_module modules/libphp5.so
Include conf/extra/php5_module.conf

Not: "Include" satırı "LoadModule" satırının hemen altına eklenmemelidir. "Includes" bölümüne eklenmelidir.

  • Eğer .phtml dosya uzantısı kullanıyorsanız, /etc/httpd/conf/extra/php5_module.conf dosyasında şu şekilde bir düzenleme yapabilirsiniz:
DirectoryIndex index.php index.phtml index.html
  • Eğer GD modülünü kullanmak istiyorsanız, /etc/php/php.ini dosyasında:
;extension=gd.so

satırını

extension=gd.so

şeklinde değiştirin.

Hangi modülleri etkinleştirdiğinize dikkat etmelisiniz. Eğer php'nin isteğe bağlı modüllerini kurmamışsanız, çalışmama gibi sorunlarla karşılaşabilirsiniz.

  • Eğer DocumentRoot ayarını /home/ dışı bir dizin olarak belirlemişseniz, /etc/php/php.ini dosyasında open_basedir parametresinde tanımlamanız gerekmektedir:
open_basedir = /home/:/tmp/:/usr/share/pear/:/path/to/documentroot
tavsiye - Şu şekilde bir ayar yapabilirsiniz:
open_basedir = /home/:/tmp/:/usr/share/pear/:/srv/http
  • Değişikliklerin gerçekleştirilmesi için Apache'yi tekrar başlatmanız gerekmektedir:
# /etc/rc.d/httpd restart
  • PHP'yi şu şekilde test edebilirsiniz:
<html>
<head>
<title>PHP Test Page</title>
</head>
<body>
This is Arch Linux, running PHP.
<?php
  phpinfo();
?>
</body>
</html>

Bu dosyayı test.php olarak kaydedip /srv/http/ altına veya ~/public_html altına koyabilirsiniz.

Eğer sorun yaşarsanız, /etc/httpd/conf/httpd.conf dosyasında aşağıdaki düzenlemeleri gerçekleştirebilirsiniz.

  • httpd.conf dosyasını açın
# nano /etc/httpd/conf/httpd.conf
  • <IfModule mime_module> altına ekleyin
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
  • Apache'yi tekrar başlatın
# /etc/rc.d/httpd restart

Yukarıdaki gibi testi tekrar uygulayın.

MySQL

  • MySQL'i MySQL sayfasında anlatıldığı gibi yapılandırın.
  • /etc/php/php.ini dosyasında şu satırın başındaki ; işaretini kaldırın:
;extension=mysqli.so
;extension=mysql.so
  • mysql veritabanında düzenleme yaparak kullanıcı ekleyebilir ve izinlerini düzenleyebilirsiniz. Bu değişikliklerin geçerli olması için mysql servisini tekrar başlatmanız gereklidir.
  • Çalıştırmak için:
# rc.d start mysqld
  • Ayrıca Apache' nin de çalıştırılması gerekebilir:
# rc.d restart httpd
  • MySQL'in çalışması beklenmektedir.Kök parolasını ayarlayın ve şu komutları çalıştırarak deneyin:
# mysqladmin -u root password password
# mysql -u root -p
  • MySQL'i açılışta çalıştırmak için /etc/rc.conf dosyasında şu şekilde düzenleme yapabilirsiniz:
DAEMONS=(... mysqld ...)
  • Ayrıca, /etc/my.cnf dosyasında, skip-networking satırını devredışı bırakabilirsiniz:
#skip-networking



Lamba.png
İpucu:
Veritabanlarıyla çalışmak için phpmyadmin, mysql-workbench veya adminer paketlerini kurabilirsiniz.


Diğer Kaynaklar

Kişisel araçlar
GOOGLE
Diğer dillerde