Adım Adım Linux VPS Uygulama Server Kurulumu Adım 2

linux vps uygulama server kurulumVPS server kiralarken Centos 6 veya daha yeni bir sürüm seçtiğinizi varsayarak yazıma devam ediyorum. İhtiyacınız yok fakat yinede Centos 6 kurulum adımlarını merak ediyorsanır (Centos 6 minimal install)

Centos 6.0 giriş işlemini yaptıktan sonra ilk adım olarak mevcut işletim sistemi ve kurulu uygulamaları güncelleştirelim.

Dns ayarlarını yapalım Ben google firmasının dns adreslerini tanımladım siz kendinize göre uyarlayabilirsiniz.

vi /etc/resolv.conf #ilk kurulumda nano uygulaması kurulu gelmeyebilir o yüzden vi kullanıyoruz, ins tuşuna basıp aşağıdaki satırları ekliyoruz daha sonra esc tuşuna basıp ardından :quit yazıp dosyayı kaydediyoruz.
  nameserver 8.8.4.4 #dhcp tanımlamayacaksanız bu satıra dns adresinizi yazmalısınız.
  nameserver 8.8.8.8

VPS Network ayarlarını yapalım

vi /etc/sysconfig/network
  NETWORKING=yes
  HOSTNAME=example.com #vps için dilediğiniz hostname i tanımlayabilirsiniz.
  GATEWAY=XXX.XXX.XXX.XXX #dhcp tanımlamayacaksanız bu satıra gateway adresinizi yazmalısınız.
  NETWORKING_IPV6="no" #Güvenlik için IP6 protokolünü devre dışı bıraktık.
  IPV6INIT="no"

Ağ adaptörümüzün ayarlarını yapalım

vi /etc/sysconfig/network-scripts/ifcfg-eth0 #aktif olan ağ adaptörünüz hangisi ise o dosyayı açmanız gerekiyor.
  DEVICE=eth0 #bu satırı değiştirmenize gerek yok
  TYPE=Ethernet
  UUID=XXX #ağ adaptörünün oluşturduğu id numarası, değiştirmeyin.
  ONBOOT=yes
  NM_CONTROLLED=yes
  BOOTPROTO=none
  IPADDR=XXX.XXX.XXX.XXX #dhcp tanımlamayacaksanız bu satıra ip adresinizi yazmalısınız.
  GATEWAY=XXX.XXX.XXX.XXX #dhcp tanımlamayacaksanız bu satıra gateway adresinizi yazmalısınız.
  DNS1=8.8.4.4 #dhcp tanımlamayacaksanız bu satıra dns adresinizi yazmalısınız.
  DNS2=8.8.8.8
  DEFROUTE=yes
  IPV4_FAILURE_FATAL=yes
  IPV6INIT=no

Artık sistemimizi ve kurulu uygulamalarımızı güncelleştirebiliriz.

sudo yum update
sudo yum upgrade

Firewall ayarlarına başlıyoruz ilk önce kendi bağlantımızı kaybetmemek için lokal bağlantıları ve varsa statik ip adresimize bağlanma izinlerini veriyoruz akabinde diğer bütün portları saldırılara karşı kapatacağız. (Evinizde veya iş adresinizde kullandığınız sabit ip adresiniz var ise ip adresinizi ekleyiniz. güvenlik için sabit ip adresi edinmenizi tavsiye ederim)

sudo iptables -F
sudo iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT #local
sudo iptables -A INPUT -i lo -j ACCEPT #local
sudo iptables -A INPUT -p tcp -s 95.0.15.231 -m tcp -j ACCEPT #örnek statik ip ev
sudo iptables -A INPUT -p tcp -s 215.243.105.161 -m tcp -j ACCEPT #örnek statik ip ofis
sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT #http
sudo iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT #https
sudo iptables -P OUTPUT ACCEPT

Şimdi güvenlik için kapatmamız gereken portları kapatalım

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP #DDos
sudo iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP #Null Packet
sudo iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP #XMAS

Son olarak yaptığımız değişiklikleri iptables dosyasına kaydedip iptables servisini yeniden başlatıyoruz.

sudo iptables-save | sudo tee /etc/sysconfig/iptables
sudo service iptables restart
sudo iptables -L -n

Güvenlik için SELinux ayarlarını yapalım

sudo nano /etc/sysconfig/selinux
  SELINUX=permissive
  SELINUXTYPE=targeted

Text editör olarak nano daha vi ye nazaran daha kullanışlı olduğu için nano yu kuralım ve geçerli editör olarak atayalım

sudo yum install nano
sudo nano /etc/bashrc #nano yu geçerli editör olarak atayalım.
  export EDITOR="nano" #sayfa sonuna ekle ve kaydet.

Yine güvenlik için ICMP isteklerini geri çevireceğiz

sudo nano /etc/sysctl.conf
  net.ipv4.icmp_echo_ignore_all = 1
  net.ipv4.icmp_echo_ignore_broadcasts = 1

sudo sysctl -p #değişikliklerin aktif olması için bu kodu çalıştıralım

Kullanmadığımız servisleri kapatalım. (Ben kullanmıyorum fakat kullanacağınız servisler varsa kapatmayın)

sudo chkconfig acpid off
sudo chkconfig atd off
sudo chkconfig netfs off
sudo chkconfig ip6tables off
sudo chkconfig postfix off

Ek bilgi olarak Server için tanımlanmış bir swap alanı yok ise tanımlamanız yararınıza olacaktır. kontrol etmek için sudo free komutunu kullanabilirsiniz. Eğer swap alanını  göremiyorsanız veya 0(sıfır) byte olarak görüyorsanız. aşağıdaki komutları kullanarak swap alanı yaratabilirsiniz.

sudo dd if=/dev/zero of=/swapfile bs=1024 count=1024000 #byte cinsinden hesapladığınız rakamı yazın
sudo mkswap /swapfile
sudo swapon /swapfile

sudo nano /etc/fstab
  sudo /swapfile swap swap defaults 0 0 #son satıra ekle kaydet

Server ilk kurulduğunda root şifresini değiştirmenizi ve sonraki tüm bağlantılarınızda yeni oluşturduğunuz bir kullanıcı ile bağlanmanızı güvenlik açısından tavsiye ediyorum.

sudo useradd yenikullanici #yenikullanici adında ki kullanıcıyı oluşturalım.
sudo passwd yenikullanici #parolasını verelim.
sudo gpasswd -a yenikullanici wheel #sudo komutunu çalıştırabilmesini sağlayalım.
sudo visudo #açılan dosyada root ALL=(ALL) ALL satırının altına aşağıdaki satırı ekleyelim.
yenikullanici ALL=(ALL:ALL) ALL

sudo passwd root #root kullanıcısının şifresini değiştirelim ve VPS server'ı yeniden başlatıp biraz önce tanımladığımız yenikullanıcı ile giriş yapalım.

ssh bağlantı için güvenlik ayarlarını yapalım

sudo nano /etc/ssh/sshd_config

  Port 22
  ListenAddress xx.xx.xx.xx #ip adresinizi yazmalısınız.
  Protocol 2

  LoginGraceTime 1m
  PermitRootLogin no #root kullanıcısının ssh bağlantısını kapatıyoruz
  StrictModes yes
  MaxAuthTries 5 #maksimum bağlantı deneme sayısı
  MaxSessions 10

  AllowUsers yeniuser #ssh kulanabilecek user ları bu satıra arada boşluk bırakarak ekliyoruz.

  RhostsRSAAuthentication no
  HostbasedAuthentication no

  PermitEmptyPasswords no #şifresiz bağlantıyı kapatıyoruz.
  PasswordAuthentication yes

  GSSAPIAuthentication yes
  GSSAPICleanupCredentials yes

  AllowTcpForwarding yes
  X11Forwarding yes

  ClientAliveInterval 600 #Client bağlantı süresini tanımlayalım.
  ClientAliveCountMax 6

  Subsystem sftp internal-sftp

Server’ın zaman dilimi ayarlarını yapalım

sudo cp /etc/localtime /root/old.timezone #mevcut timezone kaydedelim.
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Europe/Istanbul /etc/localtime #yeni timezone türkiye saati olarak ayarlayalım.

Uygulama kütüphanelerinin bağlantı yollarını kaydedelim #epel ve webtatic repolarını ekleyelim.

sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
sudo rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm

ilk etapta kullanacağımız bazı servis ve uygulamaları kuralım (yönergeleri kabul ederek “Y” ilerleyin)

sudo yum install php56w
sudo yum install php56w-fpm
sudo yum install php56w-opcache
sudo yum install php56w-devel
sudo yum install php56w-mysql
sudo yum install php56w-mbstring
sudo yum install php56w-mcrypt
sudo yum install php56w-pear
sudo yum install php56w-gd
sudo yum install php56w-intl
sudo yum install php56w-soap
sudo yum install php56w-bcmath
sudo yum install php56w-pecl-imagick
sudo yum install php56w-pecl-xdebug
sudo yum install zlib-devel
sudo yum install nginx18
sudo yum install htop #monitoring
sudo yum install dos2unix #bazen ftp ile gönderdiğimiz dosyaları dos tipinde kalır. bu uygulama ile çevrim yapabiliriz.
sudo yum install gcc #c compiler
sudo yum install tcl
sudo yum install unzip

mcrypt eklentisini php ye tanımlayalım

sudo nano /etc/php.d/mcrypt.ini
  extension=/usr/lib64/php/modules/mcrypt.so #bu satırı ekleyin veya Mevcut satırı düzeltin. mcrypt.so dosyasını farklı bir klasörün altında ise o adresi yazmanız gerekiyor.

php-fpm ayarlarını yapalım

sudo nano /etc/php-fpm.conf #php-fpm için bazı performans ayarları
  emergency_restart_threshold 10
  emergency_restart_interval 1m
  process_control_timeout 10s

sudo nano /etc/php-fpm.d/www.conf #php-fpm için nginx ayarlarını yapalım. (apache yazan yerleri nginx yapalım)
  user = nginx
  group = nginx

  pm = dynamic
  pm.max_children = 400
  pm.start_servers = 20 #açılışta başlatılacak servis sayısı.

  pm.min_spare_servers = 10 #ihtiyaç halinde eklenecek min - max servis sayıları.
  pm.max_spare_servers = 20
  pm.max_requests = 500 #bu sayıda istek alan servis restart edilir. "ram kullanımının daha verimli olması için"

  php_value[session.save_path] = /var/lib/php/nginx-session #dilerseniz session ların kaydedileceği klasörü değiştirebilirsiniz. tanımladığınız klasöre chmod ile 777 yetkisi vermelisiniz.

php ayarlarını yapalım (bu ayarlar kişiye özeldir ben genel olarak birçok framework ün çalışabilmesi için gerekli minimum tanımlamaları yapmaya çalıştım. Aşağıdaki satırları php.ini dosyasına ekleyin yada pasif durumda ise satır başlarındaki # karekterini kaldırın.)

sudo nano /etc/php.ini
  default_charset = UTF-8;
  memory_limit = 512M; #tavsiyem en az 512 tanımlamanızdır.
  max_execution_time = 18000;
  upload_max_filesize = 100M; #yüklenecek maksimum dosya boyutu, mesela video paylaşım sitesi yapacaksanız bu değeri artırmanız lazım
  mysql.connect_timeout = 120;
  session.auto_start = 0
  session.use_cookies = 1;
  session.use_trans_sid = 0;
  session.gc_maxlifetime = 12000000;
  max_input_vars =10000
  zlib.output_compression = On #zlib sıkıştırmayı aktif ediyoruz
  display_errors = Off
  date.timezone = "Europe/Istanbul"
  magic_quotes_gpc = Off;
  register_globals = Off;

  opcache.enable=1 #performans için opcache devreye alıyoruz. aşağıdaki rakamları kendi sitenizdeki dosya sayılarını dikkate alarak değiştirebilirsiniz. ayrıca benzer ayarları opcache configurasyon dosyasında da yapmanız gerekebilir /etc/php.d/opcache.ini ayrıca cache lenmeyecek dosyaları blacklist dosyasında tanımlamak isterseniz yolu: /etc/php.d/opcache.blacklist
  opcache.memory_consumption=300
  opcache.max_accelerated_files=50000
  opcache.revalidate_freq=600
  opcache.validate_timestamps=0

nginx server ayarlarını yapalım. (Temel bazı konulara değineceğim, Detaylı nginx ayarları için farklı kaynaklara bakabilirsiniz.)

sudo nano /etc/nginx/nginx.conf

  worker_processes auto;
  error_log /var/log/nginx/error.log warn;

  events 
  { 
    worker_connections 1024; 
    multi_accept on; 
  }

  http
  {
    #http isteklerinde servisin nasıl çalışacağını {} bu blokda tanımlayalım.

    index  index.html index.htm index.php;
    access_log  /var/log/nginx/access.log  main buffer=16k;
    log_not_found off;
    server_tokens off;
    autoindex off;
    port_in_redirect off; 

    open_file_cache max=2000 inactive=20s; 
    open_file_cache_valid 60s; 
    open_file_cache_min_uses 5; 
    open_file_cache_errors off;

    client_max_body_size 10M; 
    client_body_buffer_size 128K;

    client_body_timeout 12; 
    client_header_timeout 12; 
    keepalive_timeout 15; 
    send_timeout 10;

    sendfile on; 
    tcp_nopush on; 
    tcp_nodelay on;

    fastcgi_buffers 256 16k; 
    fastcgi_buffer_size 128k; 
    fastcgi_busy_buffers_size 256k; 
    fastcgi_temp_file_write_size 256k;

    fastcgi_connect_timeout 10s;
    fastcgi_send_timeout 120s; 
    fastcgi_read_timeout 120s; 

    gzip on; 
    gzip_vary on; 
    gzip_proxied any;
    gzip_min_length 1000;
    gzip_types text/plain text/css text/javascript text/xml application/json application/x-javascript application/xml application/xml+rss;
}

nginx timezone ayarlarını yapalım

sudo nano /etc/init.d/nginx 
 export TZ="Europe/Istanbul" #en tepeye yapıştır.

mysql 5.6 kuralım ve güvenlik ayarlarını yapalım. kurulumdan sonra “mysql_secure_installation” komutu ile mysql için bazı güvenlik ayarlamaları yapılacaktır. (test veritabanlarının silinmesi root şifresinin belirlenmesi. admin kullanıcı için uzaktan bağlantının kapatılması vs..)

sudo wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
sudo rpm -ivh mysql-community-release-el6-5.noarch.rpm
sudo yum install mysql-server
sudo /etc/init.d/mysqld start
sudo mysql_secure_installation #mysql güvenli kurulum ayarları
  Enter Current Password for root : Enter
  set root password : Y + Enter
  New Password : Yeni Şifre + Enter
  Re New Password : Yeni Şifre + Enter
  Remove anonymous user : Y +Enter
  Disallow root login remotly : Y + Enter
  Remove test database : Y + Enter
  Reload privileage tables : Y + Enter 

Mysql ayarlarını yapalım

  sudo nano /etc/my.cnf
  [mysqld]

  user = mysql 
  port = 3306

  bind-address = ip adresinizi yazın

  symbolic-links = 0

  innodb_buffer_pool_size = 4G (yaklaşık ram kapasitenizin 75% i)
  innodb_log_file_size = 4G
  max_connections = 2000
  innodb_file_per_table = ON
  innodb_flush_log_at_trx_commit = 2
  innodb_log_buffer_size = 5M
  query_cache_size = 0
  expire_logs_days = 30

  innodb_ft_min_token_size=3
  ft_min_word_len=3

Mysql timezone ayarlarını yapalım

sudo mysql_tzinfo_to_sql /usr/share/zoneinfo/
mysql -u root mysql -p 
mysql> SET GLOBAL time_zone = "Europe/Istanbul";
mysql> SET time_zone = "Europe/Istanbul";
mysql>quit;

 

şimdi servislerimizin VPS her açıldığında veya isteğimiz dışında yeniden başladığında çalıştırılması için gerekli olan komutları yazalım

sudo chkconfig mysqld on #Sunucunun her açılışında programları yeniden başlatalım.
sudo chkconfig nginx on
sudo chkconfig php-fpm on

sudo service nginx restart #Servisleri yeniden başlatalım ve ayarlarında bir hatamız varsa görelim.
sudo service php-fpm restart
sudo service mysqld restart

Bir sonraki yazıda composer + beanstalk servis + mysql servis ayarları + memcache cache kurulumu + crontab + supervisord + NodeJS ve Varnish Cache kurulumundan bahsedeceğim.

Part1 – Neden VPS?

Summary
Adım Adım Linux VPS Uygulama Server Kurulumu Part2
Article Name
Adım Adım Linux VPS Uygulama Server Kurulumu Part2
Description
Adım adım linux VPS uygulama server kurulumu ile ilgili yazıma devam ediyorum. Bu yazıda firewall ayarları nginx, php-fpm ve mysql kurulumu gibi birçok servisin kurulumunu anlatacağım.
Author
Publisher Name
aligokayduman.com
Publisher Logo

Add a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir