Install LEMP Stack On Ubuntu 15.10

1. Install Nginx

Nginx (pronounced as engine-x) open-source  , yüksek performanslı bir HTTP server ve reverse proxy dir .Kurulum adımları aşağıdaki gibidir.

Nginx kurulum adımlarını terminal ekranı üzerinde yapacağız.

Note: eğer önceden kurulmuş bir apache2 varsa uninstall ederek yeniden kuracağız.

öncelikle varsa daha önceden kurulu apache2 servisi stop ederek başlıyoruz.

sudo service apache2 stop

sonrasında kurulumları kaldırıyoruz

sudo apt-get remove --purge apache2 apache2-utils apache2.2-bin apache2-common -y
sudo apt-get autoremove -y
sudo apt-get autoclean -y

whereis apache2

sudo rm -Rf /etc/apache2 /usr/lib/apache2 /usr/include/apache2

gerekli kaldırma işlemlerini tamamladık şimdi kuruluma başlayabiliriz.

sudo apt-get install nginx
ngnix start ediyoruz.

sudo systemctl start nginx


start ettiğimizde aşağıdaki gibi bir ekran karşımıza çıkacaktır.
● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)  Active: active (running) since Tue 2015-10-27 16:08:39 IST; 4s ago Main PID: 1744 (nginx) CGroup: /system.slice/nginx.service ├─1744 nginx: master process /usr/sbin/nginx -g daemon on; master_... └─1745 nginx: worker process Oct 27 16:08:39 server systemd[1]: Starting A high performance web server a..... Oct 27 16:08:39 server systemd[1]: nginx.service: Failed to read PID from f...nt Oct 27 16:08:39 server systemd[1]: Started A high performance web server an...r. Hint: Some lines were ellipsized, use -l to show in full.

2. Test nginx

browser üzerinde http://sunucu ip adresini yazdığımızda bizi wellcome Nginx şeklinde bir ekran karşılayacaktır.

sudo nano /etc/nginx/nginx.conf 

komutu ile nginx ayarlarına bakıyoruz

nginx site kayıtları /etc/nginx/sites-available/default altında tutulmaktadır.

sudo nano /etc/nginx/sites-available/default
[...]
server {
listen 80 default_server;
listen [::]:80 default_server;
[...]
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name server.unixmen.local;
[...]

Ubuntu/Debian Üzerine Standart LAMP Kurulumu

Kısa Bir Giriş

Bu aşamada elimizde temiz bir Ubuntu veya Debian sunucumuz olduğunu varsayıyorum. Eğer yoksa hemen Panel > Sunucu Oluştur bağlantısından bir adet 64 bit Ubuntu 14.04 (LTS sürümü) veya Debian 8 kurabilirsiniz. (Ben Ubuntu tercih ediyorum)

LTS, Long Term Support (Uzun dönem destek gibi bir şey) demek. Ubuntu’nun normal (LTS olmayan) bir sürümünü kurarsanız, 9 ay boyunca bu sürüm için güvenlik güncelleştirmeleri alırsınız, bu dönem bittiğinde zaten Ubuntu’nun yeni sürümü çıkmış olur (6 ayda bir sürüm çıkıyor), sisteminizi sonraki sürüme yükseltmezseniz güncelleme alamazsınız. Kurduğunuz sürüm LTS ise bu süre -sanırım- 3 yıl. Yani sunucuya LTS kurmak çok mantıklı ve bence gerekli bir şey. Evet, yeni çıkan 15.10 sürümü yerine 1.5 yıl önce çıkmış 14.04 LTS kurmalısınız.

İlk defa giriş yapıyorsanız tek kullanıcının root olduğunu göreceksiniz. Bu biraz tehlikeli bir şey. Önce bir standart kullanıcı oluşturalım ve bu kullanıcıya su yetkisi verelim.

# adduser KULLANICI_ADI
# adduser KULLANICI_ADI sudo

Bundan sonra bu kullanıcıyla bağlanıp, yalnızca gerektiğinde sudo komutuyla root yetkisi alacağız. Şimdi çıkış yapıp tekrar giriş yapalım.

Temel Paketlerin Kurulumu

Paket indeksini güncelliyoruz…

sudo apt-get update

Gerekli paketlerimizi kuruyoruz…

sudo apt-get install apache2 php5 mysql-server-5.6

İşte LAMP bundan ibaret. Paketler kurulunca elinizde çalışır halde bir web sunucusu olacak.

Şimdi biraz ayar yapalım.

Ayarlar

Apache Ayarları

Apache dosyaları /etc/apache2 altında durur. Her domain için ayarlar, /etc/apache2/sites-enableddizininden okunur. Ama bu dizine dosya yazmak teamüle aykırıdır. Ayarlar, /etc/apache2/sites-available altına yazılır, enabled altına buradan link yapılır. Aslında bir fark yok. Sites-available dizinine yazmamıza gerek yok, ama racon budur. Linux’ta raconun dışına çıkmanın cezası penguen tarafından tokatlanmaktır. Bunu göze alıyorsanız bildiğiniz gibi yapabilirsiniz.

cd /etc/apache2/sites-available
sudo vim example.com

komutuyla birinci ayar dosyamızı oluşturup içine şunları yazıyoruz:

<VirtualHost *:80>
        ServerName      example.com
        ServerAlias     www.example.com
        ServerAdmin     admin@nv.com.tr

        DocumentRoot    /home/kullanici/www/example.com/htdocs
        <Directory />
                Options +FollowSymLinks
                AllowOverride All 
        </Directory>
        <Directory /home/kullanici/www/example.com/htdocs>
                Options -Indexes +FollowSymLinks +MultiViews
                AllowOverride All 
                Require all granted
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Burada ServerName, girilecek adres. ServerAlias ise buna takma ad. Bir tane ServerName, ve istediğiniz kadar ServerAlias olabilir. Example.com ve www.example.com istersenizwww2.example.com bu VirtualHost ayarı tarafından yorumlanacak demektir.

Dosyalarımız /home/kullanici/www/example.com/htdocs altında duracak. Bu konuda farklı yaklaşımlar mevcut. Bazı gençler bu dosyaları /srv/http/domain{1,2,3,4,5}.com altında tutuyor. Ben herkesin kendi sitelerinin home altında tutulması taraftarıyım. FTP işlemleri yaparken sistem daha güvenli, ayarlar daha kolay oluyor. Her kullanıcının home dizininde www adlı bir dizin açıp içine domainleri koyuyoruz, bu domain dizinlerinde de htdocs ve subdomains diye iki dizin oluyor. Dosyalar bunların içinde duruyor.

Dosyamızı kaydedip çıkıyoruz. Şimdi bu dosyamız etkin değil. Çünkü sites-available dizininde.

sudo a2ensite example.com

komutuyla sitemizi aktif hale getiriyoruz. DNS ayarlarımızı yaptıysak adresinize tarayıcıdan girdiğinizde hata almamalısınız. Ya da en fazla forbidden hatası alırsınız, çünkü henüz dosyaları yerine koymamışsınızdır.

echo “slm nbr” > /home/kullanici/www/domain.com/htdocs/index.php
echo “<?php phpinfo(); ?>” > /home/kullanici/www/domain.com/htdocs/info.php

komutlarıyla iki dosya oluşturuyoruz. Şimdi sayfayı yenileyince slm nbr yazmalı. Domain.com/info.php adresinde ise PHP ayarlarımız görünmeli.

Tebrikler kurulumu tamamladınız.

Bundan sonrası ayrıntı..

PHP Ayarları

Php için iki dosyamız var. /etc/php5/apache2/php.ini ve /etc/php5/cli/php.ini. Bize lazım olan apache2. Diğeri konsolda çalışan php ayarları.

Önemli olan ayarlar:

upload_max_filesize: Yüklenebilecek en fazla dosya büyüklüğü. M, MB demek. 4M (veya 8M) iyidir bu ayar için. Artık süper akıllı telefonlarımızın çektiği fotoğraflar 2.5-3MB olabiliyor. Basit bir fotoğraf bile varsayılan ayarlarda hata verdirebilir.

date.timezone: PHPnin çalışacağı zaman dilimi. Date fonksiyonları için gerekli. Europe/Istanbul yazınız buraya da.

display_errors: Hata gösterimi. Sunucuyu geliştirme sunucusu olarak kullanacaksanız bunu On yapın.

Başka da çok önemli bir şey yok sanırım. Gerisi ihtiyaçlarınıza kalmış.

Mysql Ayarları

Burada bir ayar yok. Dilerseniz phpmyadmin kurabilirsiniz kullanım kolaylığı için.

sudo apt-get install phpmyadmin
phpmyadmin çalışabilmesi için apache2.conf editleyip

sudo nano /etc/apache2/apache2.conf

Include /etc/phpmyadmin/apache.conf ekliyoruz

komutuyla ek bir şey yapmadan kurulum yapıyorsunuz. Kurulum esnasında birkaç soru soruyor phpmyadmin. Web sunucuya apache2 diyelim, db-config yapayım mı? sorusuna evet. Bundan sonra mysql root parolasını soracak. Onu da yazalım ve phpmyadmin kuruldu.

http://ip/phpmyadmin adresinden giriş yapabilirsiniz.

Ubuntu/Debian Üzerine PureFtpd Kurulumu

 

Kurulum

Önce root oluyoruz. Tüm komutları root olarak yazacağız. Delikanlı sistem yöneticisi sudo mudo uğraşamaz. Hata yapınca da büyük hatalar yapmak ister.

sudo su

Sonra pure-ftpd yi basitçe kuruyoruz.

apt-get install pure-ftpd

Ayarlar

Servisin bir conf dosyası yok. /etc/pure-ftpd/conf altındaki dosyalara yes, no, değer, vs. gibi kısa ayarlar yazarak yapıyoruz tüm ayarları.

cd /etc/pure-ftpd/conf

Servisin daemon olarak çalışmasını sağlıyoruz.

echo "yes" > /etc/pure-ftpd/conf/Daemonize

Kimliksiz girişi iptal ediyoruz.

echo "yes" > /etc/pure-ftpd/conf/NoAnonymous

Herkesi kendi home dizinine hapsediyoruz.

echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone

Yetkilendirmeyi Unix sistem kullanıcıları ile yaptırıyoruz. (Çok çeşitli yetkilendirme yaptırmamız mümkün. Bir veritabanı kullanabiliriz, PAM, LDAP, Active Directory kullanıcıları ile yetkilendirme yapabiliriz.)

echo "yes" > /etc/pure-ftpd/conf/UnixAuthentication

Güvenli dedik. Kullanıcılarımızı SSL kullanmaya zorluyoruz. Burada;

0: TLS yok. 1: TLS opsiyonel, kullanıcı TLS kullanırsa bağlantı güvenli olur. 2: TLS mecburi. İstemci program TLS kullanmıyorsa, bağlantı iptal edilir.

echo "2" > /etc/pure-ftpd/conf/TLS

SSL için bir sertifika oluşturmamız gerekiyor bunun için tabii ki.

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

Ve servisi yeniden başlatıyoruz.

service pure-ftpd restart

Kullanıcı Oluşturma

FTP sunucumuz şu anda istediğimiz gibi çalışır durumda. Ama henüz bir kullanıcımız yok. Varsa kullanabiliriz. Yoksa kullanıcı ekliyoruz.

SSH bağlantısı yapabilecek bir kullanıcı eklemek için:

adduser mahmut

Yalnızca FTP kullanıcısı eklemek istiyorsak,

adduser mahmut --home /home/web/mahmut --shell /usr/sbin/nologin

Bu kullanıcıya dikkat ettiğiniz üzere shell olarak nologin verdik. SSH ile bağlanmayı deneyebilirsiniz. Sisteminize göre bir red mesajı alacaksınız.

Kullanıcının ev dizini de dikkatinizi çektiği gibi /home altında değil, /home/web altında. Bunun için önce mkdir /home/web komutuyla bu dizini oluşturuyoruz.

Kullanıcı eklemeden önce Ubuntu sistemi için bir hatırlatma daha, sistem genelinde kullanıcılar birbirlerinin ev dizinlerinin içeriğini görebiliyorlar. Güvenli ve gizliliğe önem veren sistemimizde bunu engellemek için dpkg-reconfigure adduser komutunu verip (no cevabı ile) iptal etmemiz gerekiyor.

Kullanıcımızı oluşturduk ama hala giriş yapamıyoruz. Kullanıcı geçersiz diyor değil mi? Çünkü nologinshell i geçerli bir shell değil.

/etc/shells dosyasının sonuna /usr/sbin/nologin satırını eklememiz gerekiyor. Kısaca

echo "/usr/sbin/nologin" >> /etc/shells