La mia macchina

Tempo fa mi sono fatto un reference con tutto ciò che devo fare per configurare la una macchina di sviluppo e ho pensato che, riadattandolo un po’, sarebbe stato bello condividerlo. Questo reference è per coloro che sviluppano in PHP e vogliono dedicarsi all’aspetto creativo di questa attività, lasciando le cose ripetitive alle macchine come è giusto che sia.
Sicuramente non è completo, e qualcuno salterà alcuni passi che riterrà poco utili.
Potrà subire aggiornamenti. Osservazioni ed obiezioni saranno ben gradite.

Nota: quando un comando apre un editor di testo segue il testo da inserirvi indentato.

Hardware

Un portatile Asus X54C con disco a stato solido e 6Gb di RAM.

Il DSS è un buon investimento dato che fa risparmiare da subito tanto tempo e stress/frustrazione, quindi lo consiglio vivamente.

Sistema Operativo

Ubuntu 12.x

LAMP

L’installazione di un sistema LAMP si trova ovunque come per esempio qui . Ecco i comandi in rapida sequenza senza ulteriori spiegazioni:

sudo apt-get install apache2

verifica: Apache funziona?
Browser -> http://localhost

$ sudo apt-get install php5 libapache2-mod-php5
$ sudo service apache2 restart
$ sudo gedit /var/www/testphp.php
    <?php phpinfo(); ?>

verifica: PHP funziona?
Browser -> http://localhost/test.php

$ sudo apt-get install mysql-server
$ sudo apt-get install libapache2-mod-auth-mysql php5-mysql
$ sudo apt-get install phpmyadmin
$ sudo service apache2 restart

PhpMyAdmin

Abbiamo già installato PHPMyAdmin. Rendiamolo accessibile da
http://phpmyadmin

$ sudo gedit /etc/apache2/sites-available/phpmyadmin
    <VirtualHost *:80>
        ServerAdmin myemail@email.com
        ServerName phpmyadmin
        ServerAlias phpmyadmin.local.com
        DocumentRoot /usr/share/phpmyadmin
        DirectoryIndex app.php index.php index.html
        <Directory /usr/share/phpmyadmin>
            AllowOverride all
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/phpmyadmin.error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg
        LogLevel notice
        CustomLog ${APACHE_LOG_DIR}/phpmyadmin.access.log combined
    </VirtualHost>
$ sudo a2ensite phpmyadmin
$ sudo gedit /etc/hosts
    127.0.0.1 phpmyadmin
$ sudo a2enmod rewrite
$ sudo service apache2 restart

verifica: PhpMyAdmin funziona?
Browser -> http://phpmyadmin

NetBeans

Per lo sviluppo PHP, l’IDE che ho scelto, dopo anni di Eclipse, è NetBeans.

Download Netbeans:
Browser -> http://netbeans.org/downloads/start.html?platform=linux&lang=en&option=php

$ cd ~/Scaricati
$ sudo chmod 777 netbeans-7.1-ml-php-linux.sh
$ ./netbeans-7.1-ml-php-linux.sh

Permissions

Il vostro utente dovrebbe essere proprietario della cartella www

$ sudo chown -R myuser /var/www

Nota: recentemente l’ho spostata in ~/www e quindi è già di proprietà del l’utente.

Symfony2

Installando Symfony potrò usarne il tool di configurazione e ottimizzare il sistema per ospitarlo. Per un’applicazione complessa Symfony 2 è il framwork ideale. Per qualcosa di un po’ più semplice c’è Silex

donwload

Browser -> http://symfony.com/download

$ cd ~/Scaricati
$ cp Symfony_Standard_Vendors_2.0.x.tgz /var/www/
$ cd /var/www/
$ tar -xf Symfony_Standard_Vendors_2.0.x.tgz

Browser -> http://localhost/Symfony/web/config.php

$ cd /var/www/Symfony

permissions

$ chmod -R 777 app/cache
$ chmod -R 777 app/logs

Lanciando Symfony (ma anche qualsiasi altro script PHP) da client (per i test ad esempio) l’utente è quello di sistema, mentre da browser è www-data; i file scritti in cache nel primo non sono accessibili nel secondo e viceversa creando non pochi problemi. Quindi:

$ setfacl -R -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs
$ setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs

configuration

$ sudo apt-get install php5-sqlite
$ cd /etc/php5/conf.d/
$ sudo mv sqlite.ini sqlite.ini~
$ sudo service apache2 restart
$ sudo apt-get install php-apc
$ sudo service apache2 restart
$ sudo apt-get install php5-intl
$ sudo service apache2 restart
$ sudo gedit /etc/php5/apache2/php.ini
   short_open_tag = Off
   date.timezone = Europe/Paris
$ sudo service apache2 restart

Git

Dopo anni di SVN mi hanno fatto scoprire Git e l’ho scelto per la velocità e perché… c’è GitHub . Insomma se non hai un account GitHub sei fuori. :)

$ sudo apt-get install git-core git-gui git-doc
$ sudo apt-get install gitg
$ git config --global color.ui true

Browser -> http://help.github.com/linux-set-up-git/

Pear

Pear serve per reperire i pacchetti PHP presenti su Pear, fondamentalmente PHPUnit.

$ sudo apt-get install php-pear
$ pear config-set auto_discover 1

PHPUnit

Per testare il codice PHP lo standard de facto è PHPUnit. Per testare il proprio codice ci vuole disciplina, ma ancora prima è necessario che non ci siano ostacoli alla gestione di una suite di test. In questo Symfony  2 ci aiuta molto.

$ sudo pear channel-discover pear.phpunit.de
$ pear install --alldeps phpunit/PHPUnit

Tools

I seguenti tools sono utilità molto avanzate di controllo del codice non particolarmente utili se non si utilizza Jenkins  e attualmente non lo uso.

$ pdepend --help
$ sudo pear channel-discover pear.pdepend.org
$ sudo pear install pdepend/PHP_Depend
$ phpmd --help
$ sudo pear channel-discover pear.phpmd.org
$ sudo pear install --alldeps phpmd/PHP_PMD
$ phpcs --help
$ sudo pear install PHP_CodeSniffer
$ phpcs
$ pear config-show | grep php_dir
$ cd /usr/share/php/PHP/CodeSniffer/Standards/
$ sudo git clone git://github.com/opensky/Symfony2-coding-standard.git Symfony2
$ sudo phpcs --config-set default_standard Symfony2
$ phpcpd --help
$ pear install pear.phpunit.de/phpcpd
$ phpdoc --help
$ sudo pear install PhpDocumentor
$ phpcb --help
$ sudo pear install phpunit/PHP_CodeBrowser

Phing

Phing permette di definire comandi che eseguono task ripetitivi, utili per la continous integration ma anche per facilitare la distribuzione del progetto su macchine di sviluppo differenti

$ sudo pear channel-discover pear.phing.info
$ pear install phing/phing

Ruby on Rails, Capifony e Less

Ruby serve principalmente per poter utilizzare Capistrano/Capifony per il deploy e Less, il CSS dinamico.

Seguire il tutorial per installare l’rvm e quindi ruby 1.9.2:

Browser -> http://www.the-tech-tutorial.com/?p=1868

Fermarsi prima dell’installazione di Rails. Non eseguire  $ gem install rails
Eseguire invece

$ gem install capifony
Aggiungere a ~/.bashrc
    if [ -f /etc/profile.d/rvm.sh ]; then
        source /etc/profile.d/rvm.sh
    fi $ sudo apt-get install libnode-less
$ sudo apt-get install npm nodejs
$ sudo npm install -g less

Virtual Host

$ sudo gedit /etc/apache2/sites-available/myproject
    <VirtualHost *:80>
        ServerAdmin myemail@email.com
        ServerName myproject
        ServerAlias myproject.local.com
        DocumentRoot /var/www/myproject/web
        DirectoryIndex app.php index.php index.html
        <Directory /var/www/myproject/web>
            AllowOverride all
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/myproject.error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg
        LogLevel notice
        CustomLog ${APACHE_LOG_DIR}/myproject.access.log combined
    </VirtualHost>
$ sudo a2ensite myproject
$ sudo gedit /etc/hosts
    127.0.0.1 myproject myproject.local.com
$ sudo a2enmod rewrite
$ sudo service apache2 restart

XDebug

$ sudo pecl install xdebug
$ find / -name 'xdebug.so' 2> /dev/null /usr/lib/php5/20090626+lfs/xdebug.so
$ sudo gedit /etc/php5/conf.d/xdebug.ini
    zend_extension="/usr/lib/php5/20090626+lfs/xdebug.so"
    xdebub.max_nesting_level=200
$ sudo service apache2 restart

Capifony

Ho trovato molto comodo Capifony per il deploy su Servergrove. Precedentemente lo abbiamo installato, qui si parla di come utilizzarlo per il deploy di un progetto Symfony 2 su ServerGrove:
http://blog.servergrove.com/2011/09/07/deploying-symfony2-projects-on-shared-hosting-with-capifony/ 

Inoltre:

$ gem install capifony capistrano-ext
$ gem install inifile

Controllare con

$ cap -vT

e verificare che ci sia la lista dei task disponibili.

Ora copiamo parameters.ini in parameters.yml (e lo convertiamo in uno yml file) e lanciamo
cap production database:move:to_local
Questo task copia in locale il db remoto.

CURL

$ sudo apt-get install php5-curl
$ sudo service apache2 restart

Nesting level

Ricontrollare phpinfo() -> xdebug.max_nesting_level=200
eventualmente riscriverlo in

$sudo gedit /etc/php5/conf.d/xdebug.ini

e

$ sudo service apache2 restart

Lascia una risposta

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>