Ранее я уже рассказывал, как установить и настроить Freebsd 10.1 в качестве web сервера ( 1 часть, 2 часть, 3 часть ) Там мы использовали Apache, nginx и php. Здесь же я хочу рассказать об установке и настройке связки nginx+php-fpm. По общепризнанному мнению, такая комбинация работает быстрее, чем связка с apache. Я на своем опыте в этом убедился. При прочих равных условиях, сайт wordpress выдерживает большую нагрузку с nginx и php fpm, нежели apache и php.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Содержание:
Приступим. У нас имеется:
# uname -v FreeBSD 10.1-RELEASE
Обновим до последней версии с помощью вот этой инструкции. Проверяем, что получилось:
# uname -v FreeBSD 10.1-RELEASE-p8
Отлично, обновления прошли. Я не буду давать общие рекомендации по настройке сервера, я их уже давал во 2-й части инструкции, ссылки на которую я приводил выше. Можно посмотреть при желании. Приступим сразу к делу.
Установка и настройка mysql на Freebsd
Устанавливаем mysql:
# cd /usr/ports/databases/mysql55-server # make config-recursive # make install clean
Добавляем Mysql в автозагрузку:
echo 'mysql_enable="YES"' >> /etc/rc.conf
Создаем для него конфигурационный файл:
# touch /etc/my.cnf
Конфигурацию каждый под свои потребности может сделать, описаний настроек в интернете много. Я предлагаю свой универсальный вариант:
[client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 bind-address = 127.0.0.1 socket = /tmp/mysql.sock skip-external-locking key_buffer_size = 256M max_allowed_packet = 1M table_open_cache = 256 sort_buffer_size = 1M read_buffer_size = 1M read_rnd_buffer_size = 4M myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size= 16M thread_concurrency = 8 log-bin=mysql-bin log=/var/log/mysql.log binlog_format=mixed server-id = 1 [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash [myisamchk] key_buffer_size = 128M sort_buffer_size = 128M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout
В моем варианте сервер жестко привязан к локальному интерфейсу и удаленно с ним работать нельзя. Если вам нужны удаленные подключения, то в параметре bind-address добавьте внешний адрес сервера.
Создадим файл логов:
touch /var/log/mysql.log chown mysql:mysql /var/log/mysql.log
Запускаем Mysql:
# /usr/local/etc/rc.d/mysql-server start
Проверяем, все ли в порядке:
# sockstat | grep mysql mysql mysqld 46460 13 tcp4 127.0.0.1:3306 *:* mysql mysqld 46460 15 stream /tmp/mysql.sock
Демон запущен и слушает локальный интерфейс.
Теперь запустим скрипт для настройки безопасности:
# /usr/local/bin/mysql_secure_installation
Задаем пароль для root и далее на все вопросы отвечаем утвердительно:
На этом установка и настройка mysql закончена. Идем дальше.
Установка и настройка PHP-FPM на Freebsd
Начиная с версии php 5.3 php-fpm идет как модуль, поэтому просто начинаем установку php и указываем в опциях fpm:
# cd /usr/ports/lang/php5 # make config-recursive
# make install clean
Ставим теперь дополнения php-extentions:
# cd /usr/ports/lang/php5-extensions # make config-recursive
Дополнений много, все ставить не обязательно, можно будет остальное доставить потом в случае необходимости. Я обычно выбираю наиболее популярные и необходимые:
BZ2, CTYPE, CURL, DOM, EXIF, FILTER, FTP, GD, GETTEXT, HASH, ICONV, JSON, MBSTRING, MCRYPT, MYSQL, MYSQLI, PDF, PDO, PDO_SQLITE, PHAR, POSIX, SESSION, SIMPLEXML, SQLITE3, YOKENIZER, XML, XMLREADER, XMLWRITER, ZIP
# make install clean
Добавляем php-fpm в автозагрузку:
# echo 'php_fpm_enable="YES"' >> /etc/rc.conf
Редактируем файл с настройками, приводим его к следующему виду:
# mcedit /usr/local/etc/php-fpm.conf [global] pid = run/php-fpm.pid [www] user = www group = www # работа через unix сокет, а не tcp, дает небольшой прирост производительности listen = /tmp/php-fpm.sock # права доступа к сокету listen.owner = www listen.group = www listen.mode = 0660 # как будут создаваться новые рабочие процессы pm = dynamic # максимальное оличество рабочих процессов pm.max_children = 10 # число запущенных процессов при старте сервера pm.start_servers = 2 # минимальное и максимальное количество процессов в простое pm.min_spare_servers = 1 pm.max_spare_servers = 3
Проверяем синтаксис настроек:
# php-fpm -t NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful
Стартуем php-fpm:
# /usr/local/etc/rc.d/php-fpm start
Проверяем запустился ли:
# sockstat | grep php-fpm www php-fpm 504 0 stream /tmp/php-fpm.sock www php-fpm 503 0 stream /tmp/php-fpm.sock root php-fpm 502 4 stream -> ?? root php-fpm 502 6 stream -> ?? root php-fpm 502 7 stream /tmp/php-fpm.sock
Все в порядке. Идем дальше.
Установка и настройка nginx на Freebsd
Устанавливаем nginx на наш Freebsd сервер:
# cd /usr/ports/www/nginx # make config-recursive
Выбираем настройки по-умолчанию.
# make install clean
Добавляем nginx в автозагрузку:
# echo 'nginx_enable="YES"' >> /etc/rc.conf
Редактируем файл настроек. Я приведу пример с двумя виртуальными серверами, на одном из которых будут настройки для wordpress, другой будет для phpmyadmin, я люблю его вешать на отдельный поддомен.
# mcedit /usr/local/etc/nginx/nginx.conf user www; worker_processes 1; pid /var/run/nginx.pid; error_log /var/log/nginx-error.log warn; events { worker_connections 1024; use kqueue; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$gzip_ratio"'; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; server_tokens off; fastcgi_intercept_errors on; client_max_body_size 50m; server { listen 80; server_name www.site1.ru; rewrite ^ http://site1.ru$request_uri? permanent; } # wordpress server { listen 80; server_name site1.ru; root /web/sites/site1.ru/www/; index index.php index.html index.htm; access_log /web/sites/site1.ru/log/access.log main; error_log /web/sites/site1.ru/log/error.log; location / { try_files $uri $uri/ /index.php?q=$uri&$args; } location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico)$ { access_log off; expires max; } location ~ \.php$ { fastcgi_pass unix:/tmp/php-fpm.sock; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT /web/sites/site1.ru/www/; fastcgi_param SCRIPT_FILENAME /web/sites/site1.ru/www$fastcgi_script_name; fastcgi_param PATH_TRANSLATED /web/sites/site1.ru/www$fastcgi_script_name; include fastcgi_params; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location ~ /\.ht { deny all; } } # phpmyadmin server { listen 80; server_name pma.site1.ru; root /web/sites/pma.site1.ru/www/; index index.php index.html index.htm; access_log /web/sites/pma.site1.ru/log/access.log main; error_log /web/sites/pma.site1.ru/log/error.log; location ~ \.php$ { fastcgi_pass unix:/tmp/php-fpm.sock; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT /web/sites/pma.site1.ru/www/; fastcgi_param SCRIPT_FILENAME /web/sites/pma.site1.ru/www$fastcgi_script_name; fastcgi_param PATH_TRANSLATED /web/sites/pma.site1.ru/www$fastcgi_script_name; include fastcgi_params; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } } }
Создаем необходимые каталоги:
# mkdir /web && mkdir /web/sites && mkdir /web/sites/site1.ru && mkdir /web/sites/site1.ru/www && mkdir /web/sites/site1.ru/log && mkdir /web/sites/pma.site1.ru && mkdir /web/sites/pma.site1.ru/www && mkdir /web/sites/pma.site1.ru/log # chown -R www:www /web
Проверяем конфигурацию:
# rehash # nginx –t nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok nginx: [emerg] mkdir() "/var/tmp/nginx/client_body_temp" failed (2: No such file or directory) nginx: configuration file /usr/local/etc/nginx/nginx.conf test failed
Почему-то nginx не смог создать папку во временном каталоге. Поможем ему сами:
# mkdir /var/tmp/nginx # nginx -t nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
Все в порядке. Наш web сервер на Freebsd готов. Запускаем nginx и проверяем, нормально ли запустился:
# /usr/local/etc/rc.d/nginx start # sockstat | grep nginx www nginx 3488 10 tcp4 *:80 *:* www nginx 3488 11 stream -> ?? root nginx 3487 3 stream -> ?? root nginx 3487 10 tcp4 *:80 *:* root nginx 3487 11 stream -> ??
Все в порядке, сервер запущен и слушает 80-й порт. Теперь проверим работу web сервера с помощью тестовой странички. Создаем ее:
# touch /web/sites/site1.ru/www/index.php # mcedit /web/sites/site1.ru/www/index.php
Переходим на сайт по адресу http://site1.ru Не забудьте настроить DNS для доступа к установленному серверу, либо отредактируйте в windows файл hosts, добавив туда строку:
192.168.1.21 site1.ru
где 192.168.1.21 адрес web сервера Freebsd 10.
Вы должны увидеть картинку:
Если видите ее у себя, поздравляю, вы все настроили правильно и web сервер полностью готов к работе. Остался только маленький штрих. Для удобства управления mysql установим phpmyadmin.
Установка phpmyadmin на web сервер Freebsd
# cd /usr/ports/databases/phpmyadmin # make install clean
Перемещаем файлы из установочной директории по-умолчанию в наш поддомен pma.site1.ru:
# mv /usr/local/www/phpMyAdmin/* /web/sites/pma.site1.ru/www # mv /usr/local/www/phpMyAdmin/.* /web/sites/pma.site1.ru/www
Меняем владельца:
# chown -R www:www /web/sites/pma.site1.ru/www
Настраиваем DNS записи на pma.site1.ru или просто добавляем в винде в файл hosts строку
192.168.1.21 pma.site1.ru
И заходим по адресу http://pma.site1.ru
У вас должно открыться окно приветствия phpmyadmin. Вводим сюда пользователя и пароль root, которые мы задали в самом начале настройки и попадаем в панель управления базами.
На этом настройка web сервера на базе Freebsd 10.1 и связки nginx + php-fpm закончена.
Помогла статья? Подписывайся на telegram канал автора
Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.Дополнительные материалы по Freebsd
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Рекомендую полезные материалы по Freebsd: |
Описание установки Freebsd 11 на одиночный диск, либо на софтовый raid1, сделанный средствами zfs, которые поддерживает стандартный установщик.
Базовая настройка Freebsd, которую можно выполнить после установки сервера общего назначения. Представлены некоторые рекомендации по повышению удобства пользования и безопасности.
Описание и нюансы обновления системы Freebsd с помощью утилиты freebsd-update. Показано пошагово на конкретном примере обновления.
Настройка Freebsd шлюза для обеспечения выхода в интернет. Используется ipfw и ядерный нат, dnsmasq в качестве dhcp и dns сервера. Мониторинг сетевой активности с помощью iftop.
Подробная настройка на Freebsd прокси сервера squid + sams2 - панели управления для удобного администрирования.
Настройка максимально быстрого web сервера на базе Freebsd и nginx + php-fpm. Существенный прирост производительности по сравнению с классическим apache.
Настройка web сервера на Freebsd в связке с apache, nginx, php и mysql. Пошаговая установка и настройка каждого компонента.
|
Добрый день!
Спасибо за статью!
Cконфигурил nginx.conf как у вас, но при его запуске выдается ошибка:
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use).
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use).
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use).
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use).
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use).
При этом, если оставить только один раздел server, то nginx нормально запускается. Не подскажете в чем может быть проблема?
Где-то ошибка и не факт, что в конфиге. Nginx явно говорит, что порт 80 кем-то занят и из-за этого не запускается. Смотрите, кто висит занимает 80-й порт по адресу 0.0.0.0.
При создании php-fpm.conf закоментаренные символом '#' строки неизбежно дадут ошибку. Исправьте на ';'
В какой-то новой версии появилось это изменение. Я на centos тоже заметил. На момент написания статьи символ # нормально помечал комментарии.
Да, "#" надо бы заменить на ";", иначе получим:
[01-Dec-2019 21:00:50] ERROR: [/usr/local/etc/php-fpm.conf:1] value is NULL for a ZEND_INI_PARSER_ENTRY
[01-Dec-2019 21:00:50] ERROR: failed to load configuration file '/usr/local/etc/php-fpm.conf'
[01-Dec-2019 21:00:50] ERROR: FPM initialization failed
Спасибо, полезный гайд.