MAMP для OSx

Рассмотрим подробности установки инструментов разработчика на OSx. Итогом будет рабочий проект. То есть должны работать все зависимости для Symfony. Мы также установим и настроим MongoBD. MAMP расшифровывается как Mac Apache MySQL PHP. В нашем случае это Mac Apache Mongo PHP.

Предисловие.

Имеем:

  • OS X 10.8 Mountain Lion
  • XCode и средства командной строки

Нужно:

  • PHP 5.4(установить/настроить)
  • PEAR/PECL
  • Mongo(установить)
  • Apache(настроить)

Бонус(для работы блога не нужно):

  • MySQL(установить/настроить) 
  • автодополнение в Console Symfony2

PHP 5.4

В OS X 10.8 по умолчанию используется PHP 5.3, но в проектах используется Trait, поэтому обновление php необходимо. На момент написания статьи уже вышла стабильная версия PHP 5.5, но поставим и настроим ее в следующий раз.

Устанавливаем дополнительные пакеты для php. Для установки пакетов будем использовать wget. Будут использоваться последние пакеты на момент выхода статьи. Все начинается с команды $ cd ~/Downloads

wget

$ curl -O http://ftp.gnu.org/gnu/wget/wget-1.14.tar.gz
$ tar -xzf wget-1.14.tar.gz
$ cd wget-1.14
$ ./configure --with-ssl=openssl
$ make
$ sudo make install
$ cd .. && rm -rf wget*

jpegsrc

Библиотека необходимая для работы с изображениями формата JPEG, созданная Independent JPEG Group. Необходима библиотека jpeglib.h, которая входит в состав данного пакета.

$ wget http://www.ijg.org/files/jpegsrc.v9.tar.gz
$ tar zxvf jpegsrc.v9.tar.gz
$ cd jpeg-9
$ ./configure --enable-shared --enable-static
$ make
$ sudo make install

libpng

Библиотека для работы с растровой графикой в формате PNG. Необходим png.h. Данная конфигурация будет использоваться по умолчанию в дальнейшем, поэтому я не буду повторяться и буду указывать только то, что отличается.

$ wget http://download.sourceforge.net/libpng/libpng-1.6.3.tar.gz
$ tar -xzf libpng-1.6.3.tar.gz
$ cd libpng
$ ./configure
$ make
....
$ sudo make install

freetype

Данная библиотека, которая необходима для работы со шрифтами.

$ wget http://download.savannah.gnu.org/releases/freetype/freetype-2.5.0.1.tar.gz
$ tar -xzf freetype-2.5.0.1.tar.gz
$ cd freetype
....

autoconf

Зависимость для icu4c.

$ wget http://ftpmirror.gnu.org/autoconf/autoconf-latest.tar.gz
$ tar -xzf autoconf-latest.tar.gz
$ cd autoconf-2.69/
$ ./configure --prefix=/usr/local
$ make
....
$ sudo make install

icu4c

Зависимость для пакета php-intl.

$ wget http://download.icu-project.org/files/icu4c/51.2/icu4c-51_2-src.tgz
$ tar -xzf icu4c-51_2-src.tgz
$ cd icu/source
$ ./configure
$ make
$ make install

php

Установка

$ wget http://ua1.php.net/distributions/php-5.4.18.tar.gz
$ tar -xzf php-5.4.18.tar.gz
$ cd php-5.4.18
$ ./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=/etc --with-config-file-scan-dir=/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-79~4/Root/usr/local --with-jpeg-dir=/BinaryCache/apache_mod_php/apache_mod_php-79~4/Root/usr/local --with-png-dir=/BinaryCache/apache_mod_php/apache_mod_php-79~4/Root/usr/local --enable-gd-native-ttf --with-icu-dir=/usr --with-iodbc=/usr --with-ldap=/usr --with-ldap-sasl=/usr --with-libedit=/usr --enable-mbstring --enable-mbregex --with-mysql=mysqlnd --with-mysqli=mysqlnd --without-pear --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 --with-pgsql=/usr --with-pdo-pgsql=/usr
$ make
$ make test
$ sudo make install

Настройка

Копируем настройки $ sudo cp /etc/php.ini.default /etc/php.ini и добавляем права на запись $ sudo chmod +w /etc/php.ini

;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;
; добавляем для pear(установим позже)
include_path = ".:/usr/lib/php/pear"
...
[Date]
date.timezone = Europe/Kiev
...
[Pdo_mysql]
...
;pdo_mysql.default_socket=/var/mysql/mysql.sock 
; для корректной работы pdo_mysql
pdo_mysql.default_socket=/tmp/mysql.sock

pear/pecl

Установка pear/pecl и дополнительных библиотек таких как php_intl и библиотеки для работы с mongoDB в php.

$ cd /usr/lib/php
$ sudo php install-pear-nozlib.phar
$ sudo pear channel-update pear.php.net
$ sudo pecl channel-update pecl.php.net
$ sudo pear upgrade-all

Установка Intl

$ sudo pecl install intl
$ sudo mkdir /etc/php.d
$ sudo vi /etc/php.d/intl.ini

Строка extension=intl.so

Установка mongo и дополнительных пакетов будет примерно такая

$ sudo pecl search mongo
$ sudo pecl install mongo
$ sudo vi /etc/php.d/mongo.ini

добавляем строку extension=mongo.so

Установка APC

$ sudo pecl install apc
$ sudo vi /etc/php.d/apc.ini

Добавляем строку extension=apc.so

Если есть желание можно добавлять расширения в "/etc/php.ini" а не в дополнительный файл для каждого расширения

apache

Пакет уже стоит, необходимо только настроить и запустить.$ sudo vi /etc/apache2/httpd.conf

# /etc/apache2/httpd.conf
# Меняем строки
#DocumentRoot "/Library/WebServer/Documents"
DocumentRoot "/Users/andrey/Sites"
...
#<Directory "/Library/WebServer/Documents">
<Directory "/Users/andrey/Sites">
...
# Раскоментируем строку
Include /private/etc/apache2/extra/httpd-vhosts.conf

Создаем папку для настроек наших будущих доменов sudo mkdir /etc/apache2/sites

Добавляем/меняем настройки в $ sudo vi /etc/apache2/extra/httpd-vhosts.conf также два дополнительных домена для rockmongo и elasticsearch(Установим позже)

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/Users/andrey/Sites/utils/elasticsearch-head"
    ServerName elastic.local
    ServerAlias elastic.local
    ErrorLog "/private/var/log/apache2/elastic.local-error_log"
    CustomLog "/private/var/log/apache2/elastic.local-access_log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot "/Users/andrey/Sites/utils/rockmongo/"
    ServerName rock.local
    ErrorLog "/private/var/log/apache2/rock.local-error_log"
    CustomLog "/private/var/log/apache2/rock.local-access_log" common
</VirtualHost>
Include /private/etc/apache2/sites/*.conf

Запускаем apache2 $ sudo apachectl start

mysql

Рекомендую устанавливать пакет с официально сайта, там же можно найти все описания и дополительные пакеты, для запуска при старте системы, мониторинга и тп. Единственное мы добавим возможность работы из командной строки $ vi ~/.bash_profile .

export PATH=$PATH:/usr/local/mysql/bin

MongoDB, Redis, Elasticsearch

Есть много вариантов установки и настройки и они хорошо описаны на сайтах продуктов MongoDB, Redis, Elasticsearch. Для всех пакетов я пользовался утилитой brew для установки, у вас есть любой из представленных вариантов установки.

$ brew install mongodb
$ brew install redis
$ brew install elasticsearch

чтобы добавить данные пакеты в автозагрузку необходимо сделать

$ ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents
$ ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents
$ ln -sfv /usr/local/opt/elasticsearch/*.plist ~/Library/LaunchAgents

Интересные пакеты как PhpMyAdmin для работы с elasticsearch и rockmongo

$ cd ~/Sites/utils
$ git clone https://github.com/iwind/rockmongo.git
$ git clone https://github.com/mobz/elasticsearch-head.git

Хосты мы настроили ранее, должно все работать.

Symfony2 autocomplete

Очень простой скрипт для автозаполнения Symfony2 команд в оболочке Bash. Подробнее можно узнать на KnpLabs/symfony2-autocomplete, также там описаны способы установки его на другие системы.

$ cd ~/Sites/utils/
$ git clone https://github.com/KnpLabs/symfony2-autocomplete
$ vi ~/.bash_profile

в конец файла добавляем source ~/Sites/utils/symfony2-autocomplete/symfony2-autocomplete.bash

Выводы

OSx на момент написания статьи не имеет менеджера пакетов для разработки такой как yum в fedora, но нас это никогда не остановит, чтобы в системе были последние актуальные пакеты. Есть также аналоги, такие как brew или MacPort, но в них есть свои недостатки, также не стоит забывать что мы можем компилировать пакеты из исходников. Надеюсь что в будущих системах добавят системный менеджер пакетов, или AppStore сделают возможность обновлять такие пакеты как php.

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

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

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

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

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

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

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

Настройка php, MySQL, nodejs, nginx и mongodb в OS X El Capitan

Недавно вышла OS X El Capitan, давайте обновим систему. Систему будем устанавливать с usb-flash. Из рабочего окружения мы поставим  php, nginx, mariadb, mongodb, elasticsearch, nodejs используя brew и настроем проект на symfony2.

Создание сайта “Обратный отсчет” на Symfony2

Мы иногда видим сайты с обратным отсчетом, проект стартует через … Его сделать достаточно просто, и не займет много времени. Мы воспользуемся проектом fdevs/coming-soon, который основан на Symfony2. Также будем сохранять введеный пользователями адреса электронной почтой в базу данных MongoDB. У нас есть настроенное рабочее окружение Osx, о настройке можно прочитать в статье Yosemite настройка рабочего окружения. Но главное версия php не меньше 5.4. В проекте можно также использовать реляционную базу данных типа MySQL. По умолчанию в проекте вообще не используется база данных, а введеный email отправляется на почту.