
Недавно вышла OS X El Capitan, давайте обновим систему. Систему будем устанавливать с usb-flash. Из рабочего окружения мы поставим php, nginx, mariadb, mongodb, elasticsearch, nodejs используя brew и настроем проект на symfony2.
Подготовка к установке Osx
Скачайте систему используя App Store. Сделайте копию всех данных которые посчитаете нужным, я удаляю все что было от прошлой системы и ставлю на пустой диск. Для этого создаю usb-flash командой:
$ sudo /Applications/Install\ OS\ X\ El\ Capitan.app/Contents/Resources/createinstallmedia --volume /Volumes/Untitled --applicationpath /Applications/Install\ OS\ X\ El\ Capitan.app --nointeraction
В данном случае флешка с именем Untitled
, должна быть не меньше 8гб и все данные которые на ней находятся будут удалены. После создания носителя перегрузите компьютер удерживая Alt
и установите систему следуя инструкциям.
Xcode
Воспользуйтесь встроенным AppStore для установки. После того как установите, примите условия лицензионного соглашение и установите инструменты командной строки. Запустите терминал и выполните команду:
$ xcode-select --install
brew
Установим использую инструкцию на сайте:
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Добавим в ~/.bash_profile
для того чтобы мы могли использовать команды установленные brew:
$ echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.bash_profile
Базы данных mariadb, mogodb и elasticsearch
Для elasticsearch необходима java поэтому предварительно установим командой, а затем все необходимые базы данных.
$ brew install Caskroom/cask/java $ brew install mongodb mariadb elasticsearch
Для того чтобы elasticsearch запускался со стартом системы выполните команду:
$ ln -sfv /usr/local/opt/elasticsearch/*.plist ~/Library/LaunchAgents
Для запуска необходимо выполнить:
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.elasticsearch.plist
или
$ elasticsearch --config=/usr/local/opt/elasticsearch/config/elasticsearch.yml
У меня не так много проектов используют данную систему потому я не добавляю его в автозагрузку, а запускаю только когда он необходим, так же и с mariadb.
Вместо mysql мы будем использовать mariadb, так как на серверах стоит именного эта версия реляционной базы данных. Для запуска при старте системы выполните команду:
$ ln -sfv /usr/local/opt/mariadb/*.plist ~/Library/LaunchAgents
для старта mariadb
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist
или
$ mysql.server start
После запуска базы данных, ее можно использовать:
$ mysql -uroot
Тут ничего нового, просто mongodb(https://www.mongodb.org) добавляем в загрузку:
$ ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents
запускаем mongodb командой
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
или
$ mongod --config /usr/local/etc/mongod.conf
В данном случае я ее добавляю в автозагрузку.
php и php-fpm
Установка:
$ brew tap homebrew/php $ sudo chown -R `whoami`:admin /usr/local/sbin $ brew install --without-apache --with-fpm --with-mysql php56
Любые дополнения нужно ставить c помощью brew например mongo
$ brew install php56-mongo php56-intl php56-memcached
Чтобы использовать php-cli добавим:
$ echo 'export PATH="$(brew --prefix homebrew/php/php56)/bin:$PATH"' >> ~/.bash_profile
Добавим php-fpm в автозагрузку от root. это необходимо чтобы запускать потоки от пользователя _www для доступа nginx к php.
$ sudo vi /Library/LaunchDaemons/homebrew.mxcl.php56.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>KeepAlive</key> <true/> <key>Label</key> <string>homebrew.mxcl.php56</string> <key>ProgramArguments</key> <array> <string>/usr/local/opt/php56/sbin/php-fpm</string> <string>--fpm-config</string> <string>/usr/local/etc/php/5.6/php-fpm.conf</string> </array> <key>RunAtLoad</key> <true/> <key>LaunchOnlyOnce</key> <true/> <key>UserName</key> <string>root</string> <key>WorkingDirectory</key> <string>/usr/local/var</string> <key>StandardErrorPath</key> <string>/usr/local/opt/php56/var/log/php-fpm.log</string> </dict> </plist>
Запуск php-fpm
$ sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.php56.plist
Остановка php-fpm
$ sudo launchctl unload -w /Library/LaunchDaemons/homebrew.mxcl.php56.plist
Изменим настройки чтобы использовать php-fpm сокет.
$ vim /usr/local/etc/php/5.6/php-fpm.conf
listen = /var/run/php5-fpm.sock;
Настроим дату в php
$ vim /usr/local/etc/php/5.6/php.ini
date.timezone = Europe/Simferopol
nginx
Установка
$ brew install nginx
Добавим в загрузку от пользователя root, это необходимо для того чтобы запустить на 80 порту.
$ sudo cp /usr/local/opt/nginx/homebrew.mxcl.nginx.plist /Library/LaunchDaemons/homebrew.mxcl.nginx.plist
Для настройки php-fpm добавим в настройки:
$ vim /usr/local/etc/nginx/nginx.conf
http { #…. upstream phpfcgi { # server 127.0.0.1:9000; server unix:/usr/local/var/run/php5-fpm.sock; #PHP-FPM running on UNIX socket } }
Создадим шаблон для Symfony2 проекта:
$ vim /usr/local/etc/nginx/templates/symfony.conf
listen 80; rewrite ^/app\.php/?(.*)$ /$1 permanent; location / { index app_dev.php; try_files $uri @rewriteapp; } location @rewriteapp { rewrite ^(.*)$ /app_dev.php/$1 last; } location ~ ^/(app|app_dev|config)\.php(/|$) { fastcgi_pass phpfcgi; fastcgi_split_path_info ^(.+\.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param HTTPS off; }
Добавим Symfony2 проект в папку servers
$ vim /usr/local/etc/nginx/servers/symfony.conf
server { server_name symfony.local; error_log /usr/local/var/log/nginx/symfony.error.log; access_log /usr/local/var/log/nginx/symfony.access.log; root /Users/andrey/Sites/symfony/web; include templates/symfony.conf; }
перезагрузим nginx с новыми настройками командой
$ nginx -s reload
composer
Для установки и настройки воспользуемся официальной документацией
$ curl -sS https://getcomposer.org/installer | php $ mv composer.phar /usr/local/bin/composer
git настройки для пользователя
$ git config --global user.name "andrey1s" $ git config --global user.email "andrey@4devs.org"
Добавим файлы для игнорирования
$ vim ~/.gitignore_global
# OS generated files # ###################### .DS_Store .DS_Store? ._* .Spotlight-V100 .Trashes Icon? ehthumbs.db Thumbs.db # Dev # ###################### .idea
$ git config --global core.excludesfile ~/.gitignore_global
Настроим используемые алиасы в git, подробнее можно прочитать в статье настройка алиасов в git
$ git config --global alias.st status $ git config --global alias.co checkout
symfony2
Для того чтобы использовать структуру папок Symfony3 добавим в bash_profile
:
$ echo 'export SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true' >> ~/.bash_profile
Создадим папку для проектов
$ mkdir Sites && cd Sites
Создаем проект:
$ composer create-project symfony/framework-standard-edition symfony/ 2.7.4
на момент написания стсти последняя была версия 2.7.5, но она не поддерживает структуру папок для symfony3, поэтому ставим версию 2.7.4 и обновим его до последней версии.
$ cd symfony && composer update
Не забудем настроить права доступа:
$ mkdir -p var/spool && mkdir -p var/dump && rm -rf var/cache/* && rm -rf var/logs/* && rm -rf var/spool/* && rm -rf var/dump/* $ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1` $ sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" var/cache var/logs var/spool var/dump $ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" var/cache var/logs var/spool var/dump
Добавляем наш проект в hosts
$ sudo vim /etc/hosts
127.0.0.1 symfony.local
nodejs
Добавим nodejs, npm и дополнительные пакеты bower, uglify-js, uglifycss, jpegoptim используемые в проектах.
$ brew install node $ npm install -g bower $ npm install -g uglify-js $ npm install -g uglifycss $ npm install -g less $ brew install jpegoptim
Заключение
Используя brew можно легко настроить рабочее окружение. Если вы хотите собрать php из исходников, можете прочитать в статье, поскольку не всегда самая последняя версия в менеджере пакетов. Если использовать brew то можно поставить несколько версий php, к примеру на данный момент доступна версия php 7.0. Можно даже для разных проектов запускать свои версии php, но командная строка по умолчанию будет всегда одна.