Установка nginx php-fpm mysql mac os x mavericks

Дата публикации: 10 09 2014 Автор: PazitiFF
Поделюсь своим опытом настройки среды для разработки на mac os x. Как бы не было печально, но в маке не всё удобно с настройкой среды для разработки на php, как например в убунте, но всё же выход всегда есть. Почитав умные форумы, остановился на менеджере пакетов Homebrew, который восполняет недостатки mac os x, и я говорю еще раз огромное Спасибо разработчикам данного менеджера. Но теперь о деле. Что предстоит сделать? 1. Установить HomeBrew 2. Привести командный терминал к нормальному виду и работоспособности 3. Установить и настроить веб-сервер nginx 4. Установить и настроить php-fpm и все необходимые модули 5. Установить и настроить серер баз данных mysql 6. Скачать и запустить Drupal, а также поставить все необходимые инструменты для работы с ним Установка будет выполняться на свежеПереУстановленной mac os x mavericks 10.4.9 =) Поехали!

Устнановка Homebrew

Следуя официальной документации, открываем терминал и вставляем следующий код:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Далее проверим brew на какие либо конфликты и обновим дерево пакетов
brew doctor
brew update
brew upgrade
На этом установка homebrew завершена. С этого момента мы имеем мощный пакетный менеджер с огромным количеством необходимых программ.

Настраиваем терминал

Лично для меня стало неожиданностью, что в mac os x такой скучный и скудный терминал. Как будто про него совсем забыли. Даже автодополнение bash не работает, что мы сейчас и исправим.
brew install git bash-completion
После установки, следует создать (если еще не создан) файл .bash_profile и внести в него следующий код:
if [ -f `brew --prefix`/etc/bash_completion ]; then
    . `brew --prefix`/etc/bash_completion
fi
Для пущей красоты сюда же можно добавить еще цветовое оформление и алиасы комманд (по желанию):
export PS1="\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ " export CLICOLOR=1 export LSCOLORS=ExFxCxDxBxegedabagacad alias ls='ls -GFh'
 
#-------------------
# Personnal Aliases
#-------------------
 
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# -> Prevents accidentally clobbering files.
alias mkdir='mkdir -p'
 
alias h='history'
alias j='jobs -l'
alias which='type -a'
alias ..='cd ..'
 
# Pretty-print of some PATH variables:
alias path='echo -e ${PATH//:/\\n}'
alias libpath='echo -e ${LD_LIBRARY_PATH//:/\\n}'
 
 
alias du='du -kh'    # Makes a more readable output.
alias df='df -kTh'
 
#-------------------------------------------------------------
# The 'ls' family (this assumes you use a recent GNU ls).
#-------------------------------------------------------------
# Add colors for filetype and  human-readable sizes by default on 'ls':
alias ls='ls -h'
alias lx='ls -lXB'         #  Sort by extension.
alias lk='ls -lSr'         #  Sort by size, biggest last.
alias lt='ls -ltr'         #  Sort by date, most recent last.
alias lc='ls -ltcr'        #  Sort by/show change time,most recent last.
alias lu='ls -ltur'        #  Sort by/show access time,most recent last.
 
# The ubiquitous 'll': directories first, with alphanumeric sorting:
alias ll="ls -lv"
alias lm='ll |more'        #  Pipe through 'more'
alias lr='ll -R'           #  Recursive ls.
alias la='ll -A'           #  Show hidden files.
alias tree='tree -Csuh'    #  Nice alternative to 'recursive ls' ...
Ну вот теперь совсем другое дело, и автокомплит работает, шрифт стал по крупнее и появились цвета и алиасы.

Установка PHP 5.5 и PHP-FPM

Добавляем нужные репозитории в homebrew и ставим php-fpm и php55
brew tap homebrew/dupes
brew tap homebrew/php
 
brew install --without-apache --with-fpm --with-mysql php55
Послушно выполним то, что нам вывела программа установки
✩✩✩✩ PEAR ✩✩✩✩
 
If PEAR complains about permissions, 'fix' the default PEAR permissions and config:
    chmod -R ug+w /usr/local/Cellar/php55/5.5.16/lib/php
    pear config-set php_ini /usr/local/etc/php/5.5/php.ini
 
✩✩✩✩ Extensions ✩✩✩✩
 
If you are having issues with custom extension compiling, ensure that
you are using the brew version, by placing /usr/local/bin before /usr/sbin in your PATH:
 
      PATH="/usr/local/bin:$PATH"
 
PHP55 Extensions will always be compiled against this PHP. Please install them
using --without-homebrew-php to enable compiling against system PHP.
 
✩✩✩✩ PHP CLI ✩✩✩✩
 
If you wish to swap the PHP you use on the command line, you should add the following to ~/.bashrc,
~/.zshrc, ~/.bash_profile or your shell's equivalent configuration file:
 
      export PATH="$(brew --prefix homebrew/php/php55)/bin:$PATH"
 
✩✩✩✩ FPM ✩✩✩✩
 
To launch php-fpm on startup:
    * If this is your first install:
        mkdir -p ~/Library/LaunchAgents
        cp /usr/local/Cellar/php55/5.5.16/homebrew.mxcl.php55.plist ~/Library/LaunchAgents/
        launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php55.plist
 
    * If this is an upgrade and you already have the homebrew.mxcl.php55.plist loaded:
        launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.php55.plist
        cp /usr/local/Cellar/php55/5.5.16/homebrew.mxcl.php55.plist ~/Library/LaunchAgents/
        launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php55.plist
 
The control script is located at /usr/local/Cellar/php55/5.5.16/sbin/php55-fpm
 
Mountain Lion comes with php-fpm pre-installed, to ensure you are using the brew version you need to make sure /usr/local/sbin is before /usr/sbin in your PATH:
 
  PATH="/usr/local/sbin:$PATH"
 
You may also need to edit the plist to use the correct "UserName".
 
Please note that the plist was called 'homebrew-php.josegonzalez.php55.plist' in old versions
of this formula.
Проверим, заработал ли PHP-FPM
$ lsof -Pni4 | grep LISTEN | grep php
php-fpm   91202 PazitiFF    6u  IPv4 0x487b72a32fe2efb9      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm   91203 PazitiFF    0u  IPv4 0x487b72a32fe2efb9      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm   91204 PazitiFF    0u  IPv4 0x487b72a32fe2efb9      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm   91205 PazitiFF    0u  IPv4 0x487b72a32fe2efb9      0t0  TCP 127.0.0.1:9000 (LISTEN)

Установка MySQL сервера

Тут вообще всё просто. Ставим и выполняем процедуры по настройке автозапуска, копия вывода ниже.
brew install mysql
.................
 
A "/etc/my.cnf" from another install may interfere with a Homebrew-built
server starting up correctly.
 
To connect:
    mysql -uroot
 
To have launchd start mysql at login:
    ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
Then to load mysql now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
Or, if you don't want/need launchctl, you can just run:
    mysql.server start
Для настройки безопасности MySQL, можно воспользоваться специальным скриптом, который предложит сменить пароль root удалить анонимных пользователей и еще кое чего, листинг ниже.
$ mysql_secure_installation
 
Set root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!
 
 
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
 
Remove anonymous users? [Y/n] y
 ... Success!
 
Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
 
Disallow root login remotely? [Y/n] y
 ... Success!
 
By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
 
Remove test database and access to it? [Y/n] 
 - 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] 
 ... Success!

Установка Nginx

Не успели оглянуться, а уже дело подходит к завершению, ставим гордость Российской разработки веб-сервер Nginx
brew install nginx
........
 
Docroot is: /usr/local/var/www
 
The default port has been set in /usr/local/etc/nginx/nginx.conf to 8080 so that
nginx can run without sudo.
 
To have launchd start nginx at login:
    ln -sfv /usr/local/opt/nginx/*.plist ~/Library/LaunchAgents
Then to load nginx now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
Or, if you don't want/need launchctl, you can just run:
    nginx
Меняем порт (если нужно) на стандартный 80 в конфиг файле /usr/local/etc/nginx/nginx.conf Во встроенном в mac os x Апаче порт я заранее поменял порт на 8080, поэтому nginx корректно должен работать на 80 порту, проверим это:
$ curl -IL http://localhost:80
HTTP/1.1 404 Not Found
Server: nginx/1.6.1
Date: Wed, 10 Sep 2014 20:28:10 GMT
Content-Type: text/html
Content-Length: 168
Connection: keep-alive
Доработаем каталог nginx подобно Ubuntu:
mkdir -p /usr/local/etc/nginx/logs
mkdir -p /usr/local/etc/nginx/sites-available
mkdir -p /usr/local/etc/nginx/sites-enabled
mkdir -p /usr/local/etc/nginx/conf.d
mkdir -p /usr/local/etc/nginx/ssl
 
mkdir ~/Sites
sudo chown :staff Sites
Изменим конфигурационный файл /usr/local/etc/nginx/nginx.conf
worker_processes  1;
 
error_log  /usr/local/etc/nginx/logs/error.log debug;
 
events {
    worker_connections  1024;
}
 
http {
    include             mime.types;
    default_type        application/octet-stream;
 
    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  /usr/local/etc/nginx/logs/access.log  main;
 
    sendfile            on;
 
    keepalive_timeout   65;
 
    index index.html index.php;
 
    include /usr/local/etc/nginx/sites-enabled/*;
}
Изменим файл /usr/local/etc/nginx/conf.d/php-fpm
location ~ \.php$ {
    try_files      $uri = 404;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}
Добавим файл виртуального хоста /usr/local/etc/nginx/sites-available/d7test
server {
    listen       80;
    server_name  d7test;
    root      /Users/pazitiff/Sites/d7test;
 
# Enable compression, this will help if you have for instance advagg module
        # by serving Gzip versions of the files.
        gzip_static on;
 
        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }
 
        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }
 
        # Very rarely should these ever be accessed outside of your lan
        location ~* \.(txt|log)$ {
                allow 192.168.0.0/16;
                deny all;
        }
 
        location ~ \..*/.*\.php$ {
                return 403;
        }
 
        # No no for private
        location ~ ^/sites/.*/private/ {
                return 403;
        }
 
        # Block access to "hidden" files and directories whose names begin with a
        # period. This includes directories used by version control systems such
        # as Subversion or Git to store control files.
        location ~ (^|/)\. {
                return 403;
        }
 
        location / {
                # This is cool because no php is touched for static content
        include   /usr/local/etc/nginx/conf.d/php-fpm;
                try_files $uri @rewrite;
        }
 
        location @rewrite {
                # You have 2 options here
                # For D7 and above:
                # Clean URLs are handled in drupal_environment_initialize().
                rewrite ^ /index.php;
        }
 
#	location ~ \.php$ {
#    	try_files      $uri = 404;
#    	fastcgi_pass   127.0.0.1:9000;
#    	fastcgi_index  index.php;
#    	fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
#    	include        fastcgi_params;
#	}
 
        # Fighting with Styles? This little gem is amazing.
        # This is for D7 and D8
        location ~ ^/sites/.*/files/styles/ {
                try_files $uri @rewrite;
        }
 
        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }
}
Создадим ссылку на файл виртуального хоста, для того чтобы он воспринимался nginx включенным
ln -s /usr/local/etc/nginx/sites-available/d7test /usr/local/etc/nginx/sites-enabled/d7test
Добавим имя хоста на локальном компьютере в файле /etc/hosts
127.0.0.1    d7test
Скачаем утилиту Drush с помощью которой скачаем Drupal 7 =))
$ brew install drush
$ cd ~/Sites
 
$ drush dl drupal
 
Project drupal (7.31) downloaded to /Users/PazitiFF/Sites/drupal-7.31.                                                                                                                           [success]
Project drupal contains:                                                                                                                                                                         [success]
 - 3 profiles: testing, standard, minimal
 - 4 themes: stark, seven, garland, bartik
 - 47 modules: drupal_system_listing_incompatible_test, drupal_system_listing_compatible_test, user, update, trigger, translation, tracker, toolbar, taxonomy, system, syslog, statistics,
simpletest, shortcut, search, rdf, profile, poll, php, path, overlay, openid, node, menu, locale, image, help, forum, filter, file, field_ui, text, options, number, list, field_sql_storage,
field, dblog, dashboard, contextual, contact, comment, color, book, blog, block, aggregator
 
$ mv drupal-7.31 d7test
Перезагружвем nginx и проверям работу
$ sudo nginx -s reload
$ curl -I http://d7test
 
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.6.1
Date: Wed, 10 Sep 2014 21:08:25 GMT
Content-Type: text/html
Connection: keep-alive
X-Powered-By: PHP/5.5.16
Location: http://d7test/install.php
Cache-Control: no-cache

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

Напоследок можно добавить алиасы для более удобного запуска приложений. Добавим в файл .bash_profile слудющее:
alias nginx.start='launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist'
alias nginx.stop='launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist'
alias nginx.restart='nginx.stop && nginx.start'
alias php-fpm.start="launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php55.plist"
alias php-fpm.stop="launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.php55.plist"
alias php-fpm.restart='php-fpm.stop && php-fpm.start'
alias mysql.start="launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist"
alias mysql.stop="launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist"
alias mysql.restart='mysql.stop && mysql.start'
Ура, сервер нам ответил взаимностью и перенаправил на установку Drupal. На этом всё, пишите комментарии, замечания и дополнения, буду рад всем!

Комментарии

А на Yosemite пробовали поставить?

Да конечно, сам сейчас пользуюсь Yosemite - всё работает отлично.

Подскажите, при установке на Yosemite, после установке nginx делаю curl -IL http://localhost:8080, получаю
curl: (7) Failed to connect to localhost port 8080: Connection refused.

Так же после установки пхп56, делаю lsof -Pni4 | grep LISTEN | grep php, получаю тишину.

Ну так если Apache небыл запущен, nginx должен быть доступен на 80 порту.

C php разобрался. Nginx ни в какую не хочет запускаться Курлом на 80 порт, тоже возвращает Connection refused. Хотя так он крутится
ps aux | grep nginx
root             5871   0,0  0,0  2455308   1880   ??  Ss   12:20     0:00.02 nginx: master process /usr/local/opt/nginx/bin/nginx -g daemon off;  
_www             1478   0,0  0,0  2454504    160   ??  S    10:13     0:06.42 nginx: worker process
_www             1477   0,0  0,0  2455528    160   ??  S    10:13     0:06.36 nginx: worker process
_www             1476   0,0  0,0  2463720    160   ??  S    10:13     0:06.42 nginx: worker process
_www             1475   0,0  0,0  2455528     48   ??  S    10:13     0:00.00 nginx: worker process
root             1474   0,0  0,0  2454284     24   ??  Ss   10:13     0:00.00 nginx: master process nginx
А через
sudo lsof -Pni4 | grep LISTEN | grep nginx
тишина.
sudo 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
</hash>
 
В настройках локального домена 
<bash>
..
listen       80;
..
Куда еще глянуть?

Покопай в сторону php-fpm. Вот похожая проблема http://serverfault.com/questions/617789/nginx-error-stating-connection-refused-to-php-fpm-port
Для начала удали из конфига всё что связано с php-fpm, положи в корень сайта html файлик и посмотри, будет ли nginx работать со статикой. Если всё хорошо, значит пробуй дальше настраивать php-fpm

Спасибо, разобрался. Проблема была действительно в php-fpm:)
Сделайте rss, чтобы следить за новостям.

Рад, что мои заметки пригодились. Обязательно подумаю насчёт rss, спасибо.

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Вы можете использовать подсветку исходного кода следующими тегами: <code>, <blockcode>, <apache>, <bash>, <css>, <drupal6>, <html5>, <javascript>, <mysql>, <php>.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.