Готовим сервер VDS Nginx + php7.0-fpm +MySQL для Inst2

+36
7.35K
Добрый день!
Данная записка более чем напоминание о том, что не забыть при установке и настройке VDS Nginx + php7.0-fpm +MySQL для Inst2.
Иллюстрация
В чем плюсы:
Быстрая отдача контента статичного, выполнение скриптов отдельным процессом не вызывая Apache и под конкретным пользователем.
Все свои сайта запустить на одном сервере.

Минусы: реализовать можно на своем сервере или арендуемом с правами рута.

Расширять кругозор всегда интересно. Ранее я всегда запускал сервисы только на рекомендуемых платформах. Да это стабильно и при желании получить то, что задумал разраб это правило.
А вот для расширения кругозора и улучшения навыка решения проблем, я выбираю не стандартные решения.
Но отступил от описания и приступил к делу:

1. Установив образ Ubuntu 16 Server. Рекомендую брать 64-битные системы, они лучше заточены на выполнение больших объемов.
2) Логинимся под root
  1. su
3. Для удобства редактирования и ползания по папках рекомендую редактор MC
ставим его

  1. apt-get install mc
Я думаю вы уже в курсе что команда ap-get install под рутом дает нам возможность установить с репозиторий нужный пакет.

4. Ставим Nginx
  1. apt-get install nginx
  2.  
Далее ставим php7.0-fmp. ВНИМАНИЕ!!! на 7 версии еще не все разработчики могут выдать вам перекодированные скрипты в ioncube

  1. apt-get install php7.0
  2.  
Далее ставим сервер MySQL
  1. apt-get install mysql-server
  2.  
После нам надо добавить зависимости для php с работой с mysql, а также поддержку функции mb_internal_encoding, иначе будем получать белые страницы вместо выполнения скриптов. А также надо gd .

Ставим поддержку Mysql php

  1. apt-get install php7.0-mysql
Далее поддержку функции mb_internal_encoding
  1. apt-get install php7.0-mbstring
Для GD делаем

  1. apt-get install php7.0-gd
Также нам понадобится php с расширениями zip, memcache, curl

Ставим
  1.  
  2. apt-get install php7.0-zip
  3. apt-get install php-memcache
  4. apt-get install php7.0-curl
Теперь нам надо описать вызов нашего сайта из директории в nginx.

Создаем пользователя с названием сайта.
например sitename
  1. adduser sitename
Добавим пароль
  1. passwd sitename
\\Если система не предложила создать пароль сразу или если надо поменять пароль пользователя.


Теперь мы увидим, что в папке /home появилась папка sitename
В ней создадим папку www куда будем размещать файлы для сайта.

Для заливки файлов можно использовать либо SFTP или же обычный FTP, но для обычного нам надо установить VSFTP сервис

  1. apt-get install vsftpd
Установили. Донастроим его.

Открываем в MC файлик по адресу /etc/vsftpd.conf
Редактировать в mc можно нажав кнопку f4.

опускаем в низ конфига и добавляем


  1.  
  2. chroot_local_user=YES
  3. pasv_enable=YES
  4. pasv_max_port=12100
  5. pasv_min_port=12000
  6. port_enable=YES
  7.  
Мы включили пассивный режим, он поможет нам заходить на FTP даже если мы сидим дома за роутером без всяких проблем, указали порты, чтоб потом можно было в iptables закрыть все лишнее.


открываем ftp клиент и заливаем под логином и паролем файлы instatncms2.

Далее идем редактировать nginx

Нам нужно создать файл конфиг в раздле /etc/nginx/sites-available

перейдя в нужный раздел нам нужно нажать кнопки Shift+F4 тем самым мы создадим новый файл.

Вставляем в него содержимое:

  1.  
  2. server {
  3. listen 80;
  4. server_name [b]sitename.ru[/b];
  5. root /home/[b]sitename[/b]/www;
  6. index index.php index.html;
  7. location / {
  8. if (!-e $request_filename){ rewrite ^(.*)$ /index.php break; }
  9.  
  10. fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
  11. fastcgi_index index.php;
  12. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  13. include fastcgi_params;
  14. }
  15. location ~ ^/system/ {
  16. deny all;
  17. }
  18.  
  19. location ~ ^/filters/ {
  20. deny all;
  21. }
  22.  
  23. location ~ ^/languages/ {
  24. deny all;
  25. }
  26.  
  27. location ~ ^/cache/ {
  28. deny all;
  29. }
  30.  
  31. location ~* /static/.*\.(php|php3|php4|php5|php6|phps|phtml)$ {
  32. deny all;
  33. }
  34.  
  35. location ~* /templates/.*\.(tpl|txt|php|php3|php4|php5|php6|phps|phtml)$ {
  36. deny all;
  37. }
  38.  
  39. location ~* /upload/.*\.(php|php3|php4|php5|php6|phps|phtml)$ {
  40. deny all;
  41. }
  42.  
  43. location ~* /wysiwyg/.*\.(php|php3|php4|php5|php6|phps|phtml)$ {
  44. deny all;
  45. }
  46.  
  47. location /credits.txt {
  48. deny all;
  49. }
  50.  
  51. location /readme.txt {
  52. deny all;
  53. }
  54.  
  55. location ~ ^/license.(.*).txt$ {
  56. deny all;
  57. }
  58.  
  59. location ~ /\. {
  60. deny all;
  61. }
  62.  
  63. location /sitemap {
  64. rewrite ^/sitemap(.*).xml$ /cache/static/sitemaps/sitemap$1.xml;
  65. }
  66. location ~* ".+\.(?:ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|swf|js|atom|jpe?g|
  67. gif|png|ico|zip|tgz|gz|rar|bz2|doc|docx|pdf|tif|mp4|flv|xls|exe|ppt|tar|mid|midi
  68. |wav|bmp|rtf|m3u|avi|xml|csv|txt|info)$"
  69. {
  70. access_log off;
  71. log_not_found off;
  72. expires max;
  73. }
  74.  
  75. }
  76.  
  77.  
  78.  
кодом

  1. location ~ ^/cache/ {
  2. deny all;
  3. }
мы запретили вообще туда совать нос по вебу чтоб любопытные не могли получить доступ туда, куда не следует. Также запретили читать файлы с версией и текстом лицензии.

А кодом

  1. location ~* /wysiwyg/.*\.(php|php3|php4|php5|php6|phps|phtml)$ {
  2. deny all;
  3. }
  4.  
Мы запрещаем выполнение php скриптов в папках.



командой if (!-e $request_filename){ rewrite ^(.*)$ /index.php break; } мы привели правило из реврайта для apache.

Сохраняем файл с названием например sitename.ru
Также не забудьте сделать обязательно символьную ссылку на файл конфига в папке /etc/nginx/sites-enabled
Для этого в MC откройте в одном разделе папку /etc/nginx/sites-enabled, а в другой части /etc/nginx/sites-available
Далее выбираем наш файл sitename Pf;bvftv CTR+x и нажимаем s, нам предлагается создать символьную ссылку, нажимаем ок.

далее нам надо перезагрузить сервисы.
  1.  
  2. service php7.0-fpm restart
  3. service nginx restart
  4.  
Ну а дальше набираем в браузере название нашего сайта и видим страницу установки.
Иллюстрация

Замечания и вопросы в комментах ;)

UPD: Изменен конфиг для NGINX для отдачи файлов статических быстрее. Также добавлены команды для установления curl, memcache,zip

ВАЖНОЕ ЗАМЕЧАНИЕ!
В настройках mysql в файле
/etc/mysql/mysql.conf.d/mysqld.cnf

В конец файла добавить
  1. sql-mode=
иначе часть команд не будет работать, а страница виджетов выдаваться пустой. Ну и перегрузить после изменений MySQL не забываем.

UPDATE2: Добавлено закрытие директорий и отмена выполнение php скриптов в папках доступных для записи.

UPDATE3. если вы пробуете запустить связку ngnix+php-fpm на панели управления isplite5 и подобной, то при конфиге под суперадмином www домена надо прописать вместо
  1. location / {
  2. location ~ [^/]\.ph(p\d*|tml)$ {
  3. try_files /does_not_exists @php;
  4. }
  5. }
вот это

  1.  
  2. location / {
  3. location ~ [^/]\.ph(p\d*|tml)$ {
  4. try_files /does_not_exists @php;
  5. }
  6.  
  7.  
  8. location / {
  9. try_files $uri $uri/ /index.php?$args; # permalinks
  10. }
  11. }
  12.  
0
Fuze Fuze 7 лет назад #
Добавьте в конфигурацию NGINX еще нечто подобное. Чтобы там, где предусмотрено закрытие директорий при помощи apache - работало и в NGINX.
0
kirkr kirkr 7 лет назад #
Да добавзапрет на директории и выполнение php скриптов в ненужных папках.
+2
jorgovich jorgovich 7 лет назад #
Для полной картины инструкцию по добавлению phpmyadmin бы еще, да настройке доступа к нему..
0
RSN RSN 7 лет назад #
kirkr более чем хорошо.
0
RSN RSN 7 лет назад #
На 7 понятно, но неплохо бы было подобная инструкция где то в дополнениях по настройке сервера, любого....
0
kirkr kirkr 7 лет назад #
А что именно под словом ЛЮБОГО имеете ввиду?
0
Огненный Лис Огненный Лис 7 лет назад #
Сделал всё, как здесь написано, основная часть работает - страницы открываются, но:
1. У меня почему-то открываются закрытые от просмотра текстовые файлы (сколько с этим не боролся - ни чего не помогает);
2. Не хочет показываться sitemap.xml (файл физически существует, открывается, но по ссылке domenname.ru/sitemap.xml появляется ошибка 404).

У меня одного такое происходит?
0
kirkr kirkr 7 лет назад #
А как вы их закрывали?

.xml файл у вас прописал для отдачи напрямую в location ?
0
Dorimen Dorimen 6 лет назад #
А какое вообще нужно ПО кроме перечисленного, чтоб работали и закрытые компоненты? Тот же Zend, IonCube? Что-то еще из неперечисленного в статье нужно? А то как-то не смог найти в официальной документации к движку.
0
kirkr kirkr 6 лет назад #
Для минимального старта все описано в статье, а далее по рекомендации ставится ZEND IONCUBE в зависимости от требований разработчиков платных компонентов.
0
jorgovich jorgovich 5 лет назад #
Кто знает какой официальный репозиторий для Debian 8, где есть пакте php7? захотел тут обновить на одном сервере, пишет "Не удалось найти пакет php7.0"
+1
kirkr kirkr 5 лет назад #
apt-cache search php7
смотрим какие пакеты доступны

фигачим apt-get install php7.0 php-pear
0
jorgovich jorgovich 5 лет назад #
Спасибо за подсказку, но все тки пришлось обновлять ось до 9-ки..
0
jorgovich jorgovich 5 лет назад #
Пошел немножко другим путем - знакомый админ посоветовал использовать ispconfig - говорит что при правильной настройке работает гораздо стабильней чем vesta, тут где то писали о ней, плюс подкупает мультисерверность, правда как она работает пока не разобрался, в тестовом режиме полет нормальный, на январских выходных думаю попробовать по разбираться как именно работает мультисерверность и что можно с помощью нее сотворить..

Еще от автора

Политика безопасности и соглашение
Много споров было что в текст публиковать.
Google & Yandex баннеры в компоненты Banners
Добрый день! Была поставлена задача добавить возможность выводить через позиции {Баннер=номер позиции} баннеры гугла и яндекса.
Свои sql запросы в ICMS2
Это скорее всего напоминание себе, но пригодится многим, кто пытается адаптировать свои наработки под ICMS2.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.