Yosemite настройка рабочего окружения.

После обновления OSx Yosemite, необходимо настроить рабочую систему. Мы установим и настроим пакеты php-fpm, nginxmongonodejs. Для начала установим Xcode из App Store обновим консольные команды $ xcode-select --install и уберем apache из автозагрузки $ sudo launchctl unload /System/Library/LaunchDaemons/org.apache.httpd.plist . Так как у Apple не появилось своего менеджера пакетов будем использовать проверенный brew.

nodejs/bower

Можно установить воспользовавшись инструкцией на официальной документации nodejs, но тогда нужно учитывать права доступа при установке глобальных пакетов. Также в проектах мы используем bower сразу установим его глобально.

$ brew install node
$ npm install -g bower 

mongodb

Ничего нового воспользуемся менеджером пакетов и добавим в автозапуск.

$ brew install mongodb
$ mkdir -p ~/Library/LaunchAgents
$ ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents

Nginx

Установка $ brew install nginx. Добавим в автозагрузку $ sudo cp /usr/local/opt/nginx/homebrew.mxcl.nginx.plist /Library/LaunchDaemons/homebrew.mxcl.nginx.plist нам необходимо доавить его к системным так как для запуска на 80 порту необходимы права root.
Создадим необходимые папки:

$ mkdir /usr/local/etc/nginx/sites
$ mkdir /usr/local/etc/nginx/templates

Для проектов на Symfony2 будем использовать шаблон $ vim /usr/local/etc/nginx/templates/symfony.conf

listen 80;

# strip app.php/ prefix if it is present 
rewrite ^/app\.php/?(.*)$ /$1 permanent; 

location / { 
    index app_dev.php; 
    try_files $uri @rewriteapp; 
} 

location @rewriteapp { 
    rewrite ^(.*)$ /app_dev.php/$1 last; 
} 

# pass the PHP scripts to FastCGI server from upstream phpfcgi 
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 $ vim /usr/local/etc/nginx/sites/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 $ vim /usr/local/etc/nginx/nginx.conf изменим пользователя и добавим настройки для php-fpm

user  _www;
http { 
    upstream phpfcgi { 
        # server 127.0.0.1:9000; 
        server unix:/var/run/php5-fpm.sock; #for PHP-FPM running on UNIX socket 
    } 
     include sites/*.conf; 
}

Для настройки других проектов Symfony2 необходимо

$ cp /usr/local/etc/nginx/sites/symfony.conf /usr/local/etc/nginx/sites/blog.conf
$ vim /usr/local/etc/nginx/sites/blog.conf
$ sudo nginx -s reload

php

Многое можно подчеркнуть из предыдущей статьи, но некоторые вещи мы будем делать по другому. Поставим необходимые зависимости.

$ brew install wget freetype libjpeg autoconf

добавим пакет icu4c

$ wget http://download.icu-project.org/files/icu4c/54.1/icu4c-54_1-src.tgz
$ tar -xzf icu4c-54_1-src.tgz 
$ cd icu/source/ 
$ ./configure 
$ make 
$ sudo make install

Можно воспользоваться менеджером brew, но мы поставим php из исходников. На момент написания статьи была версия 5.6.2

$ wget http://ru2.php.net/distributions/php-5.6.2.tar.gz
$ tar -xzf php-5.6.2.tar.gz 

$ ./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --sysconfdir=/private/etc --with-apxs2=/usr/sbin/apxs --enable-cli --with-config-file-path=/private/etc --with-config-file-scan-dir=/private/etc/php.d --with-libxml-dir=/usr --with-openssl=/usr --with-kerberos=/usr --with-zlib=/usr --enable-bcmath --with-bz2=/usr --enable-calendar --with-curl=/usr --enable-dba --enable-exif --enable-fpm --enable-ftp --with-gd --with-freetype-dir=/BinaryCache/apache_mod_php/apache_mod_php-93~55/Root/usr/local --with-jpeg-dir=/BinaryCache/apache_mod_php/apache_mod_php-93~55/Root/usr/local --with-png-dir=/BinaryCache/apache_mod_php/apache_mod_php-93~55/Root/usr/local --enable-gd-native-ttf --with-icu-dir=/usr/local --with-ldap=/usr --with-ldap-sasl=/usr --with-libedit=/usr --enable-mbstring --enable-mbregex --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql-sock=/var/mysql/mysql.sock --with-readline=/usr --enable-shmop --with-snmp=/usr --enable-soap --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --with-tidy --enable-wddx --with-xmlrpc --with-iconv-dir=/usr --with-xsl=/usr --enable-zip --with-pcre-regex --enable-opcache --enable-intl 
$ make 
$ make test 
$ sudo make install 

Создадим папку для наших расширений $ sudo mkdir /etc/php.d настроим php 

$ sudo cp /etc/php.ini.default /etc/php.ini
$ sudo chmod u+w /etc/php.ini

Изменим файл $ sudo vim /etc/php.ini добавим часовой пояс

date.timezone = Europe/Simferopol

Настроим php-fpm $ sudo vim /etc/php-fpm.conf нас интересуют данные настройки:

user = _www 
group = _www 

;listen = 127.0.0.1:9000 
listen = /var/run/php5-fpm.sock; 

listen.owner = _www 
listen.group = _www 
;listen.mode = 0660

Для добавления php-fpm в автозагрузку необходимо создать файл $ sudo vim /Library/LaunchDaemons/net.php.php-fpm.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>net.php.php-fpm</string>
    <key>LaunchOnlyOnce</key>
    <true/>
    <key>NetworkState</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/sbin/php-fpm</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceDescription</key>
    <string>PHP FastCGI Process Manager</string>
    <key>StandardErrorPath</key>
    <string>/var/log/system.log</string>
</dict>
</plist>

Добавим в загрузку: $ sudo launchctl load Library/LaunchDaemons/net.php.php-fpm.plist

composer

В проектах мы очень часто используем пакеты из packagist, поэтому поставим Composer глобально.

$ curl -sS https://getcomposer.org/installer | php 
$ sudo mv composer.phar /usr/local/bin/composer

Настройка git

Для работы мы используем систему контроля версий git, не забываем настроить 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 config --global alias.st status
$ git config --global alias.cm 'commit -m' 
$ git config --global alias.cma 'commit -a -m’ 
$ git config --global alias.co checkout 
$ git config --global alias.nb 'checkout -b’

Установка и настройка Symfony2

Для того чтобы при установке использовать структуру директорий Symfony3 необходимо добавить в файл $ vim ~/.bash_profile строку export SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true

Создадим стандартный проект

$ mkdir Sites
$ cd Sites
$ composer create-project symfony/framework-standard-edition symfony/ "2.5.*” 

Настроим права к папкам. В проектах где используется Swiftmailer добавим папку var/spool 

$ mkdir var/spool
$ rm -rf var/cache/*
$ rm -rf var/logs/*
$ rm -rf var/spool/*

Настроим права доступа, подробнее можно узнать на сайте

$ 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
$ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" var/cache var/logs var/spool

Также добавим к hosts новый сайт $ sudo vim /etc/hosts

127.0.0.1       symfony.local

Вывод

В итоге у нас рабочая настроена машина со всеми необходимыми пакетами для разработки на Symfony2.

Читайте также:

Docker установка и настройка

При разработке используется множество технологий. К примеру данный блог использует php(Symfony 2), mongodb, elastic, nginx это основные но также используется nodejs к примеру для минификации css, js. При разработке приходится настраивать все технологии как показано в статье. Но что делать если проектов несколько или они используют разные технологии, например другой проект использует MySQL, или еще могут использовать разные версии php или других библиотек. Для разработки и поддержки проектов на разных технологиях можно использовать Виртуальную машину и поставить на нее к примеру centos, но это не совсем удобно, надо все равно настраивать подобное окружение как на сервере и на других машинах разработчиков. Мы будет использовать контейнеры, такие как Docker. Настроем блог разработчиков чтобы использовать Docker для разработки.

Nginx: HTTP/2 не работает

Настройка HTTP/2 в Nginx может показаться тривиальной задачей, однако есть ряд потенциальных проблем, с которыми вы можете столкнуться. В данной статье я опишу несколько из тех, с которыми столкнулся лично я при настройке наших серверов.

Как настроить HTTP/2 с Varnish используя Nginx

Все больше и больше компаний начинают использовать HTTP/2 для повышения производительности своих сайтов. Настроить HTTP/2 довольно просто, но что делать, если в вашей инфраструктуре есть Varnish. Т.к. Varnish 4.* не поддерживает SSL, то нам прийдется найти способ заставить все необходимые компоненты работать друг с другом.

Как использовать произвольное хранилище пользователей в FOSUserBundle

Практически все используют FOSUserBundle в своих Symfony проектах т.к. он ускоряет разработку и обладает хорошим набором функциональности для управления пользователями. Бандл предоставляет несколько готовых реализаций хранилищ данных: Propel и несколько для Doctrine (ORM и ODM). Это здорово, но иногда возникает необходимость работы с другими хранилищами данных. FOSUserBundle достаточно гибок и позволяет реализовать, и использовать произвольное хранилище. Для того, чтобы использовать все возможности FOSUserBundle Вам достаточно будет написать свой менеджер пользователей под конкретного провайдера.

Интеграция Paysera в Symfony

Сегодня сложно представить себе серьезный проект, где не понадобилась бы интеграция с платежными системами. Не смотря на то что существует множество популярных систем и аггрегаторов, таких как PayPal, RBKMoney, Paymentwall, Robokassa и т.д., я хочу рассказать о Paysera. Это еще одна, довольно новая платежная система. Они позиционируют себя как выгодных с точки зрения комиссий за их услуги. Paysera позволяет вашим пользователям расплачиваться карточками, SMS и т.д. Интеграция довольно простая, однако имеет некоторые неочевидные моменты, которые я и хочу осветить.