Bsdadmin.ru

Записки администратора FreeBSD

Путь на сайте

Домашняя Веб-сервера Установка на VDS freebsd+nginx+php-fpm+MySQL+phpMyAdmin

Установка на VDS freebsd+nginx+php-fpm+MySQL+phpMyAdmin

Ставим порты
# cd /usr 
# fetch ftfp://ftp.freebsd.org/pub/FreeBSD/ports/ports/ports.tar.gz 
# tar –xvzf ports.tar.gz 
# cd /usr/ports 
# make fetchindex 
Perl  ставим из пакета , так - быстрее…. 
# pkg_add –r perl.tbz 
# rehash 
Устанавливаем openssl.
# pkg_add –r openssl 
# rehash 
 
Устанавливаем из портов и настраиваем MySQL
 # cd /usr/ports/databases/mysql51-server/ 
# setenv BUILD_OPTIMIZED yes 
# setenv WITH_OPENSSL yes 
# setenv WITH_CHARSET utf8 
# setenv WITH_COLLATION utf8_general_ci 
# make install clean 
# rehash
Устанавливаем набор вспомогательных скриптов для MySQL-сервера
# cd /usr/ports/databases/mysql51-scripts/ 
# make install clean 
# rehash
Настраиваем запуск MySQL вместе с системой
# echo 'mysql_enable="YES"' >> /etc/rc.conf 
 
Создаем конфигурационный файл.
# cp /usr/local/share/mysql/my-large.cnf /etc/my.cnf 
Единственное, что я подправил, так это указал лог файл и в целях безопасности указал, чтобы mysql слушал только localhost.
# ee /etc/my.cnf 
Добавляем в секцию [mysqld] следующие строки:
log=/var/log/mysql.log 
bind-address=127.0.0.1 
 
Создаем соответствующий лог-файл и выставляем необходимые права
# touch /var/log/mysql.log 
# chown mysql:mysql /var/log/mysql.log 
Запускаем.
# /usr/local/etc/rc.d/mysql-server start 
Starting mysql. 
Смотрим в лог.
# cat /var/log/mysql.log 
/usr/local/libexec/mysqld, Version: 4.1.22-log. started with: 
Tcp port: 3306 Unix socket: /tmp/mysql.sock 
Time Id Command Argument 
Используем скрипт для настройки безопасности MySQL сервера
# /usr/local/bin/mysql_secure_installation 
 
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL 
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! 
 ...
...
...
Set root password? [Y/n]Y 
New password: вводим пароль пользователя root. 
Re-enter new password: повторяем введенный выше пароль. 
Password updated successfully! 
Reloading privilege tables.. 
... Success! 
 Remove anonymous users? [Y/n]Y 
... Success! 
  Disallow root login remotely? [Y/n]Y 
... Success! 
  Remove test database and access to it? [Y/n]Y 
- Dropping test database... 
... Success! 
- Removing privileges on test database... 
... Success! 
 Reloading the privilege tables will ensure that all changes made so far 
will take effect immediately. 
 
Reload privilege tables now? [Y/n] Y 
... Success! 
 
 
Что делает скрипт mysql_secure_installation
 С помощью этого скрипта мы: 
• задали пароль для суперпользователя root , так как по умолчанию для него не установлен пароль;
• удалили анонимного пользователя, который создается только для тестовых целей;
• запретили пользователю root входить удаленно. Теперь он сможет заходить только с localhost;
• удалили тестовую БД test и доступ к ней.
 
PHP-FPM
 Дополняем вручную список портов freebsd – нам нужен php-fpm, для того, чтобы nginx «понимал» php-скипты, и собственно, с него и начинаем установку.
# cd /usr/ports/lang 
# fetch http://rit-kpi.org/php-fpm/php-5.2.12-fpm-0.6.tar.gz 
# tar -zxf php-5.2.12-fpm-0.6.tar.gz 
# cd php5-fpm 
# make install clean 
Конфигурим:
[X] CLI Build CLI version 
[ ] DEBUG Enable debug 
[X] SUHOSIN Enable Suhosin protection system (not for jails) 
[X] MULTIBYTE Enable zend multibyte support 
[ ] IPV6 Enable ipv6 support 
[X] MAILHEAD Enable mail header patch 
[X] PATHINFO Enable path-info-check support (CGI only) 
Опции всех дополнительно устанавливаемых программ оставляем по умолчанию.
Устанавливается довольно долго, тянет за собой кучу других приложений, в том числе и PHP нужной версии.
# rehash 
 
Ставим PHP-extension
# pkg_add –r php5-extensions 
Добавляем нужные расширения тем же макаром:
# pkg_add –r [пакет] [пакет] [пакет]… 
 # rehash 
 
Прикрутим eAccelerator
  # cd /usr/ports/www/eaccelerator 
# make install clean 
# rehash 
 
Создаем директорию для работы eAccelerator и выставляем необходимые права 
 # mkdir /var/tmp/eaccelerator 
# chown www /var/tmp/eaccelerator 
# chmod 0700 /var/tmp/eaccelerator 
 
Создаем php.ini 
 # cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini 
 И подключаем расширение 
 # ee /usr/local/etc/php.ini 
 В самом конце файла, перед строкой ;End: 
 Добавляем 
 
; eAccelerator 
zend_extension="/usr/local/lib/php/20090626/eaccelerator.so" 
eaccelerator.enable="1" 
eaccelerator.shm_size="32" 
eaccelerator.cache_dir="/var/tmp/eaccelerator" 
eaccelerator.optimizer="1" 
eaccelerator.check_mtime="1" 
eaccelerator.debug="0" 
eaccelerator.filter="" 
eaccelerator.shm_max="0" 
eaccelerator.shm_ttl="3600" 
eaccelerator.shm_prune_period="0" 
eaccelerator.shm_only="0" 
eaccelerator.compress="9" 
Сохраняем изменения.
 
 Конфигурим php-fpm
Автозапуск:
# echo 'php_fpm_enable="YES"' >> /etc/rc.conf 
Редактируем скрипт запуска php-fpm, почему-то без этой поправки он не запускается.
# ee /usr/local/etc/rc.d/php-fpm 
Находим в файле строку . %%RC_SUBR%%
Меняем на . /etc/rc.subr .
# ee /usr/local/etc/php-fpm.conf 
Стираем все , приводим файл к виду:
 
<?xml version="1.0" ?> 
<configuration> 
<section name="global_options"> 
<value name="pid_file">/var/run/php-fpm.pid</value> 
<value name="error_log">/var/log/php-fpm.log</value> 
<value name="log_level">notice</value> 
<value name="emergency_restart_threshold">10</value> 
<value name="emergency_restart_interval">1m</value> 
Time limit on waiting child's reaction on signals from master 
<value name="process_control_timeout">5s</value> 
<value name="daemonize">yes</value> 
</section> 
 
<workers> 
Main pool 
<section name="pool"> 
<value name="name">main</value> 
<value name="listen_address">/tmp/php-fpm.sock</value> 
<value name="listen_options"> 
<value name="backlog">-1</value> 
<value name="owner"></value> 
<value name="group"></value> 
<value name="mode">0666</value> 
</value> 
<value name="php_defines"> 
</value> 
<value name="user">www</value> 
<value name="group">www</value> 
<value name="pm"> 
<value name="style">static</value> 
<value name="max_children">1</value> 
<value name="apache_like"> 
<value name="StartServers">40</value> 
<value name="MinSpareServers">5</value> 
<value name="MaxSpareServers">35</value> 
</value> 
</value> 
<value name="rlimit_files">1024</value> 
<value name="rlimit_core">unlimited</value> 
<value name="chroot"></value> 
<value name="chdir"></value> 
<value name="catch_workers_output">yes</value> 
<value name="max_requests">500</value> 
<value name="allowed_clients">127.0.0.1</value> 
<value name="environment"> 
<value name="HOSTNAME">$HOSTNAME</value> 
<value name="PATH">/usr/local/bin:/usr/bin:/bin</value> 
<value name="TMP">/tmp</value> 
<value name="TMPDIR">/tmp</value> 
<value name="TEMP">/tmp</value> 
<value name="OSTYPE">$OSTYPE</value> 
<value name="MACHTYPE">$MACHTYPE</value> 
<value name="MALLOC_CHECK_">2</value> 
</value> 
</section> 
</workers> 
</configuration> 
 
Стартуем php-fpm
# /usr/local/etc/rc.d/php-fpm start 
Starting php_fpm. 
 
Ставим phpMyAdmin из портов
# cd /usr/ports/databases/phpmyadmin 
# make install clean 
 
Options for phpMyAdmin 3.3.5 
 
[X] BZ2 bzip2 library support 
[X] GD GD library support 
[X] MYSQLI Improved MySQL support 
[X] OPENSSL OpenSSL support 
[X] PDF PDFlib support (implies GD) 
[X] ZLIB ZLIB support 
[X] MCRYPT MCrypt library support 
[X] ZIP Zip compression support 
# rehash 
 
Ставим nginx
# cd /usr/ports/www/nginx-devel 
# make install clean 
  
Options for nginx-devel 0.8.48 
 
[X] HTTP_MODULE Enable HTTP module 
[X] HTTP_ADDITION_MODULE Enable http_addition module 
[X] HTTP_DAV_MODULE Enable http_webdav module 
[X] HTTP_FLV_MODULE Enable http_flv module 
[X] HTTP_PERL_MODULE Enable http_perl module 
[X] HTTP_REALIP_MODULE Enable http_realip module 
[X] HTTP_REWRITE_MODULE Enable http_rewrite module 
[X] HTTP_SSL_MODULE Enable http_ssl module 
[X] HTTP_STATUS_MODULE Enable http_stub_status module 
[X] HTTP_SUB_MODULE Enable http_sub module 
[X] WWW Enable html sample files 
 
# rehash 
Добавим nginx в автозагрузку
# echo 'nginx_enable="YES"' >> /etc/rc.conf 
Редактируем конфиг-файл
# ee /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 options 
log_format main '$remote_addr - $remote_user [$time_local] ' 
'"$request" $status $bytes_sent ' 
'"$http_referer" "$http_user_agent" ' 
'"$gzip_ratio"'; 
 
# nginx options 
sendfile on; 
tcp_nopush on; 
tcp_nodelay on; 
keepalive_timeout 65; 
server_tokens off; 
 
# fastcgi 
fastcgi_intercept_errors on; 
 
# virtual server 
server { 
listen 80; 
server_name YOUR.DOMAIN.COM; 
 
access_log /var/log/nginx.YOUR_DOMAIN_COM.log main; 
 
# server root directory 
location / { 
root /www/; 
index index.php index.html index.htm; 
 
# php 
location ~ \.php$ { 
fastcgi_pass unix:/tmp/php-fpm.sock; 
fastcgi_index index.php; 
fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name; 
include fastcgi_params; 
 
# phpMyAdmin 
location ~ ^/pma/(.*\.php)$ { 
fastcgi_pass unix:/tmp/php-fpm.sock; 
include fastcgi_params; 
fastcgi_param SCRIPT_FILENAME /usr/local/www/phpMyAdmin/$1; 
fastcgi_param DOCUMENT_ROOT /usr/local/www/phpMyAdmin; 
 
С оздаем корневую директорию для www-сервера (здесь это /www )
# mkdir /www 
Создаем алиас pma для phpMyAdmin’а
# ln –s /usr/local/www/phpMyAdmin /www/pma 
 
Создаем тестовую страницу PHPINFO
# touch /www/test.php 
# ee /www/test.php 
Пишем в нем всего одну строчку:
<? phpinfo(); ?> 
 
 Стартуем nginx
# /usr/local/etc/rc.d/nginx start 
Performing sanity check on nginx configuration: 
the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok 
configuration file /usr/local/etc/nginx/nginx.conf test is successful 
Starting nginx. 
Тестируем, - заходим на свой www-сервер по адресу:
http://ваш_домен.ру/test .php
Должна появиться информационная страница PHP.
 
Проверяем установку phpMyAdmin’а.
Заходим на свой www-сервер по адресу:
http://ваш_домен.ру/pma/
Должна появиться стартовая страница phpMyAdmin’а
Регистрируемся под именем root и тем паролем, который вводили для MySQL .
 
Для повышения безопасности к phpMyAdmin воспользуемся ограничением доступа к разделу /pma при помощи .htpasswd.
# touch /www/pma/.htpasswd 
Так как у нас не установлен Apache, для создания записи в файле .htpasswd воспользуемся сервисом генерации - http://www.anteolab.ru/tools/apache/htpasswd_generator
Шифрование пароля: Standart DES
Полученную в результате запись добавляем в файл .htpasswd
# echo 'LOGIN:CRYPT_PASS' >> /www/pma/.htpasswd 
 
Теперь используем базовую авторизацию nginx.
# ee /usr/local/etc/nginx/nginx.conf 
Перед записью location ~ ^/pma/(.*\.php)$ {
добавляем следующие строки:
location /pma { 
alias /usr/local/www/phpMyAdmin/; 
index index.php; 
 
# authorization 
auth_basic "Authorization Required"; 
auth_basic_user_file /usr/local/www/phpMyAdmin/.htpasswd; 
}
 Перезапустим nginx для применения внесенных изменений в конфигурацию
# /usr/local/etc/rc.d/nginx forcerestart 
Для перехода на стартовую страницу phpMyAdmin’а потребуется дополнительная авторизация в браузере.
 

Домашняя Веб-сервера Установка на VDS freebsd+nginx+php-fpm+MySQL+phpMyAdmin