Рассмотрим подробности установки инструментов разработчика на 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.