Web-server на базе Nginx, php5-fpm, mysql на Debian Wheezy — различия между версиями

Материал из megapuper
Перейти к: навигация, поиск
(Новая страница: «'''Установка''' Добавляем необходимые репозитории в /etc/apt/sources.list: deb http://packages.dotdeb.org squeeze all…»)
 
 
(не показано 27 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''Установка'''
 
  
 +
Добавляем ключи и репозитории
 +
# wget http://nginx.org/keys/nginx_signing.key
 +
# apt-key add nginx_signing.key
 +
 +
# wget http://www.dotdeb.org/dotdeb.gpg
 +
# apt-key add dotdeb.gpg
 +
 
 +
# apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
  
Добавляем необходимые репозитории в /etc/apt/sources.list:
 
deb http://packages.dotdeb.org squeeze all
 
deb-src http://packages.dotdeb.org squeeze all
 
deb http://nginx.org/packages/debian/ squeeze nginx
 
deb-src http://nginx.org/packages/debian/ squeeze nginx
 
  
+
'''/etc/apt/sources.list'''
Устанавливаем ключи
+
  deb     http://nginx.org/packages/debian wheezy nginx
apt-get update
+
  deb    http://packages.dotdeb.org wheezy all
  apt-get install deb-multimedia-keyring
+
  deb    http://repo.percona.com/apt wheezy main
  wget http://www.dotdeb.org/dotdeb.gpg -O- |apt-key add -
 
  gpg --keyserver hkp://keys.gnupg.net --recv-keys ABF5BD827BD9BF62
 
gpg -a --export 7BD9BF62 | apt-key add -
 
  
  
 
Обновляемся
 
Обновляемся
  apt-get update
+
  # aptitude update
  
  
Перезагружаемся
+
Ставим nginx
  reboot
+
  # aptitude install nginx
  
  
Ставим необходимые пакеты
+
Создаём директорию для сайта и даём права
  apt-get install nginx php5-cli php5-common sqlite php5-sqlite php5-suhosin php5-cgi php5-fpm
+
  # /srv/www/site
  mysql-server php5-mysql php5-gd php5-apc memcached php5-memcached
+
  # chown -R www-data:www-data /srv/www/site
* nginx — web-сервер
 
* php5-cli php5-common php5-sqlite php5-suhosin php5-cgi php5-fpm php5-gd — модули php
 
* mysql-server php5-mysql — база данных mysql и модуль связи ее с php
 
* fcgiwrap — обработка perl скриптов
 
* php5-apc memcached php5-memcached — ускорители работы веб сервера
 
* siege — утилита для тестирования скорости работы сайта, понадобится при подборе количества обработчиков
 
  
  
Создаем каталог для сайтов и логов, также устанавливаем права
+
Правим конфиги (сам nginx начинает читать файл '''/etc/nginx/nginx.conf''', все остальные подключаются директивой include. )
mkdir /var/www
 
mkdir /var/log/nginx/
 
chown -R www-data:www-data /var/www
 
chmod -R 750 /var/www
 
#Дирректория для кеша
 
mkdir /tmp/fcgi-cache/
 
chown www-data:www-data -R /tmp/fcgi-cache/
 
  
 
+
'''/etc/nginx/nginx.conf'''
'''Настройка Nginx'''  
+
  user www-data;
 
+
  worker_processes  4;
Конфигурация Nginx состоит из нескольких файлов, сам nginx начинает читать единственный файл: <code bash>/etc/nginx/nginx.conf</code>, все остальные подключаются директивой include.
 
 
 
#Пользователь с правами которого работает nginx
 
  user www-data;
 
#Рекомендуется устанавливать по числу ядер
 
  worker_processes  1;
 
 
 
  pid        /var/run/nginx.pid;
 
  pid        /var/run/nginx.pid;
 
#Максимальное число подключений к серверу на один worker-процесс
 
 
  events {
 
  events {
    worker_connections  1024;
+
worker_connections  1024;
 
  }
 
  }
 
   
 
   
 
  http {
 
  http {
    include       /etc/nginx/mime.types;
+
       access_log   /var/log/nginx/access.log;
    default_type  application/octet-stream;
+
      error_log     /var/log/nginx/error.log;
 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
 
                      '$status $body_bytes_sent "$http_referer" '
 
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
 
#Логи
 
    access_log /var/log/nginx/access.log main;
 
     error_log  /var/log/nginx/error.log warn;
 
 
    sendfile        on;
 
   
 
    keepalive_timeout  65;
 
 
   
 
   
    gzip  on;
+
      include       /etc/nginx/mime.types;
+
      default_type  application/octet-stream;
    include /etc/nginx/conf.d/*.conf;
 
 
   
 
   
 +
      sendfile on;
 +
      tcp_nopush on;
 +
      tcp_nodelay on;
 +
      keepalive_timeout  65;
 +
      #gzip  on;
 +
      client_max_body_size 10m;
 +
      server_names_hash_bucket_size 64;
 +
      types_hash_max_size 2048;
 +
      types_hash_bucket_size 64;
 +
      include /etc/nginx/conf.d/*.conf;
 
  }
 
  }
  
  
Переходим к /etc/nginx/conf.d/default.conf;
+
Теперь конфиг проекта
 +
 
 +
'''/etc/nginx/conf.d/site.conf'''
 
  server {
 
  server {
    listen       80;
+
        listen 80;
    server_name  localhost;
+
        server_name site.ru;
 +
        root  /srv/www/site;
 +
        index  index.php index.html index.htm;
 +
        access_log  /var/log/nginx/site.access.log;
 +
        error_log /var/log/nginx/site.error.log;
 
   
 
   
    #charset koi8-r;
+
  location ~ \.php$ {
    #access_log  /var/log/nginx/log/host.access.log  main;
+
         fastcgi_pass   127.0.0.1:10001;
 
    location / {
 
        root  /srv/www;
 
        index  index.php index.html index.htm;
 
    }
 
 
    #error_page  404              /404.html;
 
 
    # redirect server error pages to the static page /50x.html
 
    #
 
    error_page  500 502 503 504  /50x.html;
 
    location = /50x.html {
 
        root  /srv/www;
 
    }
 
   
 
    location ~ \.php$ {
 
        root          /srv/www;
 
         fastcgi_pass   unix:/var/run/php5-fpm.sock;
 
 
         fastcgi_index  index.php;
 
         fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
+
         fastcgi_param  SCRIPT_FILENAME  /srv/www/site/$fastcgi_script_name;
         include       fastcgi_params;
+
        fastcgi_intercept_errors on;
    }
+
         include fastcgi_params;
+
          }
    # deny access to .htaccess files, if Apache's document root
 
    # concurs with nginx's one
 
    #
 
    #location ~ /\.ht {
 
    #    deny  all;
 
    #}
 
 
 
  }
 
  }
  
  
Стандартным способом проверяем работоспособность php  
+
Ставим php и модули(по мере надобности)
  <?php
+
  # aptitude install php5-fpm php5-cli php5-common php5-mysql php5-gd php5-curl php5-mcrypt php5-xcache php-pear
  phpinfo();
+
 
?>
+
 
 +
Создаём папку для логов
 +
  # mkdir /var/log/php5
 +
 
 +
 
 +
Правим конфиги
  
 +
'''/etc/php5/fpm/pool.d/site.conf'''
 +
[site]
 +
prefix = /srv/www/$pool
 +
listen = 127.0.0.1:10001
 +
listen.allowed_clients = 127.0.0.1
 +
listen.owner = www-data
 +
listen.group = www-data
 +
listen.mode = 0660
 +
user = www-data
 +
group = www-data
 +
pm = dynamic
 +
pm.max_children = 35
 +
pm.start_servers = 5
 +
pm.min_spare_servers = 2
 +
pm.max_spare_servers = 8
 +
pm.max_requests = 1000
 +
pm.status_path = /status/php-fpm/$pool
 +
request_terminate_timeout = 0
 +
request_slowlog_timeout = 1m
 +
slowlog = /var/log/php5/$pool.slow.log
 +
catch_workers_output = yes
  
 
Отключаем уязвимость: http://forum.antichat.ru/thread222063-php-fpm.html<br/>
 
Отключаем уязвимость: http://forum.antichat.ru/thread222063-php-fpm.html<br/>
Строка 136: Строка 117:
  
  
Если все работает, то на этом этапе мы имеем рабочий web-сервер с поддержкой php.  
+
Ставим percona-server(форк движка mysql)
 +
 
 +
# aptitude install percona-server-server-5.5 percona-server-client-5.5 percona-server-common-5.5 percona-toolkit percona-xtrabackup
 +
 
 +
 
 +
Для запуска демона не только на локалхосте
 +
 
 +
'''/etc/mysql/my.cnf'''
 +
bind address = 0.0.0.0
 +
 
 +
 
 +
Для входа под рутом без пароля
 +
 
 +
'''/root/.my.cnf'''
 +
[client]
 +
user=root
 +
pass=password
 +
 
 +
 
 +
Скрипт проверки подключения к DB
 +
<?php
 +
  $dblocation = "127.0.0.1";
 +
  $dbname = "mysql";
 +
  $dbuser = "root";
 +
  $dbpasswd = "password";
 +
 +
  $dbcnx = mysql_connect($dblocation, $dbuser, $dbpasswd);
 +
  if (!$dbcnx)
 +
  {
 +
    echo "Server  MYSQL is not available";
 +
    exit();
 +
  }
 +
  if (!mysql_select_db($dbname, $dbcnx) )
 +
  {
 +
    echo "Database is not available";
 +
    exit();
 +
  }
 +
  $ver = mysql_query("SELECT VERSION()");
 +
  if(!$ver)
 +
  {
 +
    echo "Error in query";
 +
    exit();
 +
  }
 +
  echo mysql_result($ver, 0);
 +
?>
 +
 
  
Далее плюшки
+
Рестартим всю эту байду, проверяем и на выходе имеем уеб-сервер для своих нужд.

Текущая версия на 12:48, 30 марта 2015

Добавляем ключи и репозитории

# wget http://nginx.org/keys/nginx_signing.key
# apt-key add nginx_signing.key

# wget http://www.dotdeb.org/dotdeb.gpg
# apt-key add dotdeb.gpg
 
# apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A


/etc/apt/sources.list

deb     http://nginx.org/packages/debian wheezy nginx
deb     http://packages.dotdeb.org wheezy all
deb     http://repo.percona.com/apt wheezy main


Обновляемся

# aptitude update


Ставим nginx

# aptitude install nginx 


Создаём директорию для сайта и даём права

# /srv/www/site
# chown -R www-data:www-data /srv/www/site


Правим конфиги (сам nginx начинает читать файл /etc/nginx/nginx.conf, все остальные подключаются директивой include. )

/etc/nginx/nginx.conf

user www-data;
worker_processes  4;
pid        /var/run/nginx.pid;
events {
worker_connections  1024;
}

http {
     access_log    /var/log/nginx/access.log;
     error_log     /var/log/nginx/error.log;

     include       /etc/nginx/mime.types;
     default_type  application/octet-stream;

     sendfile on;
     tcp_nopush on;
     tcp_nodelay on;
     keepalive_timeout  65;
     #gzip  on;
     client_max_body_size 10m;
     server_names_hash_bucket_size 64;
     types_hash_max_size 2048;
     types_hash_bucket_size 64;
     include /etc/nginx/conf.d/*.conf;
}


Теперь конфиг проекта

/etc/nginx/conf.d/site.conf

server {
        listen 80;
        server_name site.ru;
        root   /srv/www/site;
        index  index.php index.html index.htm;
        access_log  /var/log/nginx/site.access.log;
        error_log  /var/log/nginx/site.error.log;

location ~ \.php$ {
       fastcgi_pass   127.0.0.1:10001;
       fastcgi_index  index.php;
       fastcgi_param  SCRIPT_FILENAME  /srv/www/site/$fastcgi_script_name;
       fastcgi_intercept_errors on;
       include fastcgi_params;
         }
}


Ставим php и модули(по мере надобности)

# aptitude install php5-fpm php5-cli php5-common php5-mysql php5-gd php5-curl php5-mcrypt php5-xcache php-pear


Создаём папку для логов

# mkdir /var/log/php5


Правим конфиги

/etc/php5/fpm/pool.d/site.conf

[site]
prefix = /srv/www/$pool
listen = 127.0.0.1:10001
listen.allowed_clients = 127.0.0.1
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
user = www-data
group = www-data
pm = dynamic
pm.max_children = 35
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
pm.max_requests = 1000
pm.status_path = /status/php-fpm/$pool
request_terminate_timeout = 0
request_slowlog_timeout = 1m
slowlog = /var/log/php5/$pool.slow.log
catch_workers_output = yes

Отключаем уязвимость: http://forum.antichat.ru/thread222063-php-fpm.html
прописываем в /etc/php5/fpm/php.ini

cgi.fix_pathinfo=0


Ставим percona-server(форк движка mysql)

# aptitude install percona-server-server-5.5 percona-server-client-5.5 percona-server-common-5.5 percona-toolkit percona-xtrabackup


Для запуска демона не только на локалхосте

/etc/mysql/my.cnf

bind address = 0.0.0.0


Для входа под рутом без пароля

/root/.my.cnf

[client]
user=root
pass=password


Скрипт проверки подключения к DB

<?php
  $dblocation = "127.0.0.1";
  $dbname = "mysql";
  $dbuser = "root";
  $dbpasswd = "password";

  $dbcnx = mysql_connect($dblocation, $dbuser, $dbpasswd);
  if (!$dbcnx)
  {
    echo "Server  MYSQL is not available";
    exit();
  }
  if (!mysql_select_db($dbname, $dbcnx) )
  {
    echo "Database is not available";
    exit();
  }
  $ver = mysql_query("SELECT VERSION()");
  if(!$ver)
  {
    echo "Error in query";
    exit();
  }
  echo mysql_result($ver, 0);
?>


Рестартим всю эту байду, проверяем и на выходе имеем уеб-сервер для своих нужд.