Правильный хостинг своими руками.
Для следующей статьи нам понадобится связка NGINX + PHP5-FPM. Установим и настроим.
Начнем с python-software-properties для удобного добавления репозиториев. Выполним в консоли сервера команды:
1
2
3
4
5
|
apt–get install libcurl3–gnutls
apt–get install python–gnupginterface
apt–get install python–pycurl
apt–get install python–software–properties
apt–get install unattended–upgrades
|
Теперь добавим репозиторий NGINX:
1
2
|
add–apt–repository ppa:nginx/stable
apt–get update
|
Далее, устанавливаем сам NGINX, PHP5-FPM и сопутствующий софт:
1
2
3
4
5
6
7
8
9
|
apt–get install nginx
apt–get install php5–fpm
apt–get install mysql–server
apt–get install php5–mcrypt
apt–get install php5–mysql
apt–get install php5–curl
apt–get install php–db
apt–get install php5–gd
apt–get install unzip
|
Устанавливаемые пакеты можно было бы и перечислить в строку, однако виртуальная машина в Digital Ocean в этом случае принудительно приводит к аборту. Выглядит это вот так:
1
2
3
|
After this operation, 198 MB of additional disk space will be used.
Do you want to continue [Y/n]? y
Abort.
|
Поэтому выполняйте команды одну за одной, последовательно. В процессе установки спросит пароль для MySQL, придумайте пароль посложнее и запишите его, впоследствии пригодится 🙂 Наш сервер будет исполнять PHP посредством PHP5-FPM. Никакой Apache нам не тарахтел, по двум причинам:
- NGINX потребляет меньше памяти, чем Apache;
- Каждый сайт будет «запускаться» от своего юзера.
Для быстрых правок на сервере я советую связку PuTTY + MC. Для более вдумчивой и комфортной работы — WinSCP + Sublime Text 3. Все это лезет на сервер посредством SSH/SFTP, поэтому стандартный FTP нам также не тарахтел 🙂
Создадим группу SFTP (выполняем команду в консоли):
1
|
addgroup sftp
|
Теперь запускаем MC, находим файл:
1
|
/etc/ssh/sshd_config
|
В конец файла добавляем:
1
2
3
4
5
|
Subsystem sftp internal–sftp
Match Group sftp
ChrootDirectory %h
AllowTCPForwarding no
ForceCommand internal–sftp
|
Комментируем там же строку:
1
|
#Subsystem sftp /usr/lib/openssh/sftp-server
|
Теперь для нашего будущего сайта нужно создать домашнюю директорию, директорию для временных файлов, юзера, добавить его в группу SFTP и назначить домашнюю директорию. Выполняем команды:
1
2
3
4
5
6
7
|
mkdir /var/www
mkdir /var/www/siteru
mkdir /var/www/siteru/www
mkdir /var/www/siteru/tmp
adduser siteru
adduser siteru sftp
usermod –d /var/www/siteru siteru
|
Далее надо настроить PHP и NGINX. Открываем файл:
1
|
/etc/php5/fpm/php.ini
|
Втыкаем в него это:
1
2
3
|
post_max_size = 100M
upload_max_filesize = 100M
cgi.fix_pathinfo = 0
|
Теперь открываем файл:
1
|
/etc/nginx/nginx.conf
|
Можно сделать резервную копию старого, если хотите. В новый файл пишем:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
user www–data;
worker_processes 4;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
client_max_body_size 100m;
access_log /var/log/nginx/access.log;
sendfile on;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
gzip_min_length 1000;
gzip_proxied any;
gzip_types text/plain text/html text/xml application/xml application/x–javascript text/javascript text/css text/json;
gzip_disable “msie6”;
gzip_comp_level 8;
charset utf–8;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites–enabled/*;
}
|
Открываем файл:
1
|
/etc/nginx/fastcgi_params
|
Комментируем строку:
1
|
#fastcgi_param HTTPS $server_https;
|
Настало время разобраться с виртуальными хостами. NGINX подгружает сайты из директории /etc/nginx/sites-enabled/, а рядом с ней есть директория /etc/nginx/sites-available/. В первой директории находятся симлинки на конфиг файлы сайтов из второй директории. Это очень удобно, для удаления/отключения виртуального хоста надо просто удалить симлинк и перезапустить NGINX. Стандартный конфиг файл для виртуального сервера выглядит так:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
upstream backend–siteru {server unix:/var/run/php5–siteru.sock;}
server {
listen 80;
server_name siteru.domain.ru;
root /var/www/siteru/www;
access_log /var/log/nginx/siteru–access.log;
error_log /var/log/nginx/siteru–error.log;
index index.php;
rewrite_log on;
location /core/ {
deny all;
}
location / {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite ^/(.*)$ /index.php?q=$1;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass backend–siteru;
}
location ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|bmp)$ {
access_log off;
expires 10d;
break;
}
location ~ /\.ht {
deny all;
}
}
|
В этих настройках сразу активированы Frienfly URLs, отдача статики и отработка PHP посредством PHP5-FPM (для него обозначается backend, 1-я строка конфига). Следующий можно создавать, просто скопировав этот конфиг и поменяв название одного сайта, на название другого. Далее, создаем симлинк
1
|
ln –s /etc/nginx/sites–available/siteru.conf /etc/nginx/sites–enabled/siteru.conf
|
Далее, надо создать процесс PHP5-FPM для сайта. Создаем файл:
1
|
/etc/php5/fpm/pool.d/siteru.conf
|
В него пишем:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[siteru]
listen = /var/run/php5–siteru.sock
listen.mode = 0666
user = siteru
group = siteru
chdir = /var/www/siteru
php_admin_value[upload_tmp_dir] = /var/www/siteru/tmp
php_admin_value[date.timezone] = Europe/Moscow
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 4
|
Перезапускаем сервисы:
1
2
|
service nginx restart
service php5–fpm restart
|
Все 🙂