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