Desarrollo PHP en el IDE Web Codio: Symfony2

Hace poco descubrí Codio, un entorno de desarrollo (IDE) Web que se ejecuta en el navegador. Puedes tener ilimitados proyectos públicos y open source gratis. Los proyectos y boxes privados solo cuestan $8 al mes (también hay descuentos para centros educativos).

Puedes usar tu email para darte de alta o conectarte con tu cuenta de Github: Signup here.

En este post describiré el proceso de crear un proyecto Symfony2 en Codio. Se hace prácticamente igual a como se configuraría un proyecto normal Symfony2, solo cambia un poco la manera en la que se instala y configura Apache2, PHP y MySQL.

Primero hay que entrar en Codio, ir a tu cuenta y hacer click en la pestaña “+ Create Project”. Ponerle al proyecto un nombre, seleccionar “Template” y después “Empty project”:

template-empty

Ahora abrir el terminal seleccionando en el menú Tools->Terminal o presionando Shift+Alt+T. Así es como se ve:

terminal

TL;DR

Si no quieres leer la respuesta larga aquí tienes un script con todo lo que tienes que escribir marcado en negrita (<enter> significa que tan solo hay que pulsar la tecla enter):

$ parts install php5 php5-apache2 mysql composer
$ rm -Rf * .* 2> /dev/null
$ composer create-project symfony/framework-standard-edition ./
Installing symfony/framework-standard-edition (v2.4.2)
...
Creating the "app/config/parameters.yml" file
Some parameters are missing. Please provide them.
database_driver (pdo_mysql): <enter>
database_host (127.0.0.1): <enter>
database_port (null): <enter>
database_name (symfony): symfony
database_user (root): symfonyuser
database_password (null): password
mailer_transport (smtp): <enter>
mailer_host (127.0.0.1): <enter>
mailer_user (null): <enter>
mailer_password (null): <enter>
locale (en): <enter>
secret (ThisTokenIsNotSoSecretChangeIt): <enter>
...
$ sed -i 's/;date.timezone =/date.timezone = '"$(cat /etc/timezone  | sed s/\//\\\//g)"'/g' /home/codio/.parts/etc/php5/php.ini
$ sed -i 's//home/codio/workspace//home/codio/workspace/web/g' /home/codio/.parts/etc/apache2/httpd.conf
$ parts start apache2 mysql
$ mysql -u root -e "CREATE DATABASE symfony;"
$ mysql -u root -e "CREATE USER symfonyuser@localhost;"
$ mysql -u root -e "SET PASSWORD FOR symfonyuser@localhost=PASSWORD('password');"
$ mysql -u root -e "GRANT ALL PRIVILEGES ON symfony.* TO symfonyuser@localhost IDENTIFIED BY 'password';"
$ mysql -u root -e "FLUSH PRIVILEGES;"
$ sed -i '/.*HTTP_CLIENT_IP.*/ s/^//*/' web/app_dev.php
$ sed -i '/You are not allowed/{n;s/.*/&*//;}' web/app_dev.php

Ahora en la parte superior derecha de la pantalla hacer click en la flecha que apunta hacia abajo al lado de “Project Index (static)” y seleccionar “Box URL”. Verás que te aparece un error 404 porque estás tratando de acceder al front controller de produccióń en el que todavía no hay nada. Añade “/app_dev.php” a la URL y entonces verás la página de welcome por defecto de Symfony2.

Si quieres la respuesta larga continua leyendo:

Instalar PHP, Apache y MySQL

Tan solo hay que ejecutar este comando:

$ parts install php5 php5-apache2 mysql

Una vez ha terminada la instalación (que solo tarda unos pocos segundos) verás un mensaje en el que se explica cómo arrancar/parar los servicios y dónde se encuentran los ficheros de configuración:

============ apache2 ============
To start the Apache server:
  $ parts start apache2

To stop the Apache server:
  $ parts stop apache2

Apache config is located at:
  $ /home/codio/.parts/etc/apache2/httpd.conf

Default document root is located at:
  $ /home/codio/workspace

============ php5 ============
PHP config file is located at:
  $ /home/codio/.parts/etc/php5/php.ini

If Apache2 httpd is already running, you will need to restart it:
  $ parts restart apache2

============ mysql ============
To start the server:
  $ parts start mysql

To stop the server:
  $ parts stop mysql

To connect to the server:
  $ mysql

Instalar Symfony2

En este punto tienes varias posibilidades para instalar Symfony2 en Codio:

1.- Descargar Symfony2 con wget

En la pestaña del terminal ejecuta los siguientes comandos para limpiar el workspace, descargar Symfony2 con los vendors y extraerlo en el workspace:

$ rm -Rf * .* 2> /dev/null
$ wget http://symfony.com/download?v=Symfony_Standard_Vendors_2.4.2.tgz -O Symfony_Standard_Vendors_2.4.2.tgz
$ tar xpf Symfony_Standard_Vendors_2.4.2.tgz --strip-components=1 Symfony
$ rm Symfony_Standard_Vendors_2.4.2.tgz

2.- Usando Composer

Si quieres usar composer para crear tu proyecto Symfony2 tienes que instalarlo antes:

$ parts install composer

Entonces hay que limpiar el workspace e instalar Symfony2:

$ rm -Rf * .* 2> /dev/null
$ composer create-project symfony/framework-standard-edition ./

Symfony2 viene con un script de post-instalación que hace que composer te pregunte los parámetros de configuación de la aplicación: base de datos, mailer y el locale. Si quieres usar el valor por defecto en alguna de ellas tan solo hay que pulsar la tecla enter:

parameters

En el proyecto que acabas de crear verás a la izquierda un explorador en forma de árbol parecido a este:

file_explorer

Activar el acceso al front controller de desarrollo de Symfony2 desde fuera de localhost

Symfony2 tiene 2 front controllers: uno para producción y otro para desarrollo. El front controller de desarrollo, por defecto, solo se puede accceder desde localhost. Como vamos a acceder a nuestra app en los servidores de Codio tenemos que editar el fichero web/app_dev.php y comentar (o borrar) estas líneas:

if (isset($_SERVER['HTTP_CLIENT_IP'])
    || isset($_SERVER['HTTP_X_FORWARDED_FOR'])
    || !in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1'))
) {
    header('HTTP/1.0 403 Forbidden');
    exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
}

Puede usar estos comandos para hacer esta tarea:

$ sed -i '/.*HTTP_CLIENT_IP.*/ s/^//*/' web/app_dev.php
$ sed -i '/You are not allowed/{n;s/.*/&*//;}' web/app_dev.php

Si conoces tu IP también puede valerte con añadirla al array que aparece en la línea 3 del código anterior.

Configurar Apache y PHP

La primera cosa que hay que hacer es configurar la zona horaria por defecto de PHP ya que esto es obligatorio para Symfony2. Edita el fichero /home/codio/.parts/etc/php5/php.ini (puedes usar vi o nano por ejemplo) y por tu time zone:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "Europe/Madrid"

El documento raíz de Apache2 no apunta por defecto a la carpeta web de Symfony2 así que tenemos que editar el fichero /home/codio/.parts/etc/apache2/httpd.conf y cambiar el DocumentRoot y el Directory:

DocumentRoot "/home/codio/workspace/web"
<Directory "/home/codio/workspace/web">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

Estos 2 pasos se pueden realizar desde el terminal así:

$ sed -i 's/;date.timezone =/date.timezone = '"$(cat /etc/timezone  | sed s/\//\\\//g)"'/g' /home/codio/.parts/etc/php5/php.ini
$ sed -i 's//home/codio/workspace//home/codio/workspace/web/g' /home/codio/.parts/etc/apache2/httpd.conf

Ahora es el momento de arrancar los servicios de Apache2 and MySQL:

$ parts start apache2 mysql

Crear una base de datos en MySQL

Puedes usar Symfony2 sin niguna base de datos pero este no es el escenario habitual. Para crear y configurar una base de datos en MySQL inicia sesión en la consola shell de MySQL (usando la contraseña en blanco):

mysql -u root -p

Y dentro de la shell (verás un prompt ‘>‘) tienes que:

  1. Crear una base de datos
  2. Crear un usuario
  3. Crear una password para ese usuario
  4. Darle los privilegios a ese usuario
  5. Guardar los privilegios
  6. Salir de la shell
CREATE DATABASE symfony;
CREATE USER symfonyuser@localhost;
SET PASSWORD FOR symfonyuser@localhost= PASSWORD("password");
GRANT ALL PRIVILEGES ON symfony.* TO symfonyuser@localhost IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
EXIT

Ejecutar la app de Symfony2

Ya estamos listos para ejecutar nuestra app. En la parte superior derecha de la pantalla haz click en la pestaña que apunta hacia abajo al lado de “Project Index (static)” y selecciona “Box URL”. Verás que te aparece un error 404 porque estás tratando de acceder al front controller de produccióń en el que todavía no hay nada. Añade “/app_dev.php” a la URL y entonces verás la página de welcome por defecto de Symfony2:

welcome

Si ves un error 502 se debe probablemente a que no has arrancado los servicios:

502

Si ves este texto:

You are not allowed to access this file. Check app_dev.php for more information.

Es que no habilitaste correctamente el front controller de desarrollo.

Configurar Symfony2

Si no usaste composer para instalar Symfony2 los parámetros de la aplicación se pueden configurar en el fichero app/config/parameters.yml. Estos son sus valores por defecto:

parameters:
    database_driver: pdo_mysql
    database_host: 127.0.0.1
    database_port: null
    database_name: symfony
    database_user: root
    database_password: null
    mailer_transport: smtp
    mailer_host: 127.0.0.1
    mailer_user: null
    mailer_password: null
    locale: en
    secret: ThisTokenIsNotSoSecretChangeIt

También puede usar el script de configuración de Symfony2 haciendo click en el botón verde central de la pantalla de welcome:

welcome

step1

step2

well_done

Tunear Codio un poco más

En la parte superior derecha de la pantalla haz click en la flecha que apunta hacia abajo al lado de “Project Index (static)” y selecciona “Configure…”. Debes cambiar la opción por defecto de Box URL para que apunte al front controller de desarrollo app_dev.php:

configure

{
// Configure your Run and Preview buttons here.

// Run button configuration
  "commands": {
        "Node version": "node --version"
  },

// Preview button configuration
  "preview": {
        "Project Index (static)": "https://{{domain}}/{{index}}",
        "Current File (static)": "https://{{domain}}/{{filepath}}",
        "Box URL": "http://{{domain}}:3000/app_dev.php",
        "Box URL SSL": "https://{{domain}}:9500/"
  }
}

Puedes también añadir por ejemplo el comando cache:clear de Symfony2 en la sección “Run button configuration”. Tan solo añade el comando (con la opción -c del ejecutable php apuntado a donde se encuentra php.ini o se quejará de que no está definida la time zone por defecto):

"Cache clear": "php -c /home/codio/.parts/etc/php5 app/console cache:clear",

commands

Ahora mismo tengo configurados estos cómodos comandos:

{
// Configure your Run and Preview buttons here.

// Run button configuration
  "commands": {
        "Start servers": "parts start apache2 mysql",
        "Restart servers": "parts restart apache2 mysql",
        "Stop servers": "parts stop apache2 mysql",
        "Dev Cache clear": "php -c /home/codio/.parts/etc/php5 app/console cache:clear",
        "Dev Assets": "php -c /home/codio/.parts/etc/php5 app/console assets:install web --env=dev --symlink && php -c /home/codio/.parts/etc/php5 app/console assetic:dump --env=dev && php -c /home/codio/.parts/etc/php5 app/console bazinga:js-translation:dump web/js/",
        "Load Fixtures": "php -c /home/codio/.parts/etc/php5 app/console doctrine:fixtures:load",
        "Drop & Create DB": "php -c /home/codio/.parts/etc/php5 app/console doctrine:database:drop --force && php -c /home/codio/.parts/etc/php5 app/console doctrine:database:create",
        "Update DB": "php -c /home/codio/.parts/etc/php5 app/console doctrine:schema:update --force",
        "Prod Cache clear": "php -c /home/codio/.parts/etc/php5 app/console cache:clear --env=prod --no-debug",
        "Node version": "node --version"
  },

// Preview button configuration
  "preview": {
        "Project Index (static)": "https://{{domain}}/{{index}}",
        "Current File (static)": "https://{{domain}}/{{filepath}}",
        "Box URL": "http://{{domain}}:3000/app_dev.php",
        "Box URL SSL": "https://{{domain}}:9500/"
  }
}

Más acerca de Codio

Estos son los paquetes disponibles en Codio. Puedes obtener la ejecutando parts search. Como puedes ver no tiene tan solo la pila LAMP: MongoDB, MySQL, MariaDB, PostgreSLQ, Apache2, nginx, PHP5, PHPUnit, Composer y muchos más:

$ parts search
ack (2.12) Ack: A tool like grep, optimized for programmers
ant (1.9.3) Ant: A pure Java build tool, simpler and easier to use than GNU Make
apache2 (2.4.7) Apache Web Server: A cross-platform open-source HTTP server for modern operating systems
apr (1.5.0) Apache Portable Runtime: Software libraries that provide a predictable and consistent interface to underlying platform-specific implementations
apr_util (1.5.3) Apache Portable Runtime Utilities: Utilities that provide a predictable and consistent interface to underlying platform-specific implementations
cloudfoundry (v6.0.1) Cloud Foundry: An open CLI for managing cloud services
cmake (2.8.11.2) CMake: A cross-platform, open-source build system
composer (1.0.0-alpha8) Composer: PHP5 Dependency management
dart (1.2.0) Dart is a new platform for scalable web app engineering
erlang (R16B03-1) Erlang is a programming language used to build massively scalable soft real-time systems with requirements on high availability.
freepascal (2.6.2) Free Pascal: An open source Pascal compiler for Pascal and Object Pascal
geos (3.4.2) GEOS: C++ port of the Java Topology Suite (JTS)
ghc (7.6.2) GHC is a state-of-the-art, open source, compiler and interactive environment for the functional language Haskell
go-lang (1.2) Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
googleappengine (1.8.9) Google App Engine Python/PHP: A CLI for managing Google App Engine cloud services for Python and PHP
haskell-platform (2.0.0) Haskell is an advanced purely-functional programming language.
heroku-cli (3.3.0) The Heroku CLI is used to manage Heroku apps from the command line.
image_magick (6.8.8-3) ImageMagick: a software suite to create, edit, compose, or convert bitmap images.
leiningen (2.3.2) Leiningen: A build automation and dependency management tool for Clojure
libmcrypt (2.5.8) Libmcrypt: A uniform interface to several symmetric encryption algorithms
lua (5.2.2) Lua: A powerful, fast, lightweight, embeddable scripting language
mariadb (5.5.36) MariaDB: An enhanced, drop-in replacement for MySQL.
maven (3.1.1) Maven: A software project management and comprehension tool
memcached (1.4.15) Memcached: An open-source, high-performance memory object caching system
meteor (0.7.1.2) Meteor: A real-time web development platform
mongodb (2.4.6) MongoDB: A cross-platform document-oriented NoSQL database system
mysql (5.6.15) MySQL: The world's most popular open-source relational database
nginx (1.4.4) The High Performance Reverse Proxy, Load Balancer, Edge Cache, Origin Server
phantomjs (1.9.1) PhantomJS: A headless WebKit scriptable with a JavaScript API
php5 (5.5.8-2) PHP 5.5: A popular general-purpose scripting language that is especially suited to web development. Prebuild extensions default + mysql, pdo_mysql, pgsql, pdo_pgsql, readline, curl, iconv, gd, soap, mbstring, zip, zlib
php5-bcmath (5.5.8) BC Math module for php5
php5-bz2 (5.5.8) BZ2 module for php5
php5-exif (5.5.8) Exif module for php5
php5-ftp (5.5.8) ftp module for php5
php5-imagick (3.1.2) ImageMagick module for php5
php5-imap (5.5.8) IMAP module for php5
php5-intl (5.5.8) Intl module for php5
php5-ldap (5.5.8) ldap module for php5
php5-lzf (1.6.2) LZF module for php5
php5-mongo (1.4.5) Mongo driver for php5
php5-mysqli (5.5.8) mysqli module for php5
php5-oauth (1.2.3) OAuth module for php5
php5-pcntl (5.5.8) Process Control support module for php5
php5-ssh2 (0.12) SSH2 module for php5
phpmyadmin (4.1.7) phpMyAdmin is a free software tool written in PHP, intended to handle the administration of MySQL over the Web
phpunit (3.7.32) PHPUnit: A programmer-oriented testing framework for PHP.
postgresql (9.2.4) PostgreSQL: The world's most advanced open-source database system
rabbitmq (3.2.3) AMQP server written in Erlang
redis (2.6.16) Redis: An open-source, in-memory, key-value data store
rust (0.9) Rust: A safe, concurrent, practical language
s3cmd (1.0.1) s3cmd: Command line tool for managing Amazon S3 and CloudFront services
scala (2.10.2) Scala: An object-functional programming language
sqlite3 (3.8.2) SQLite is an in-process library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine.
swig (2.0.11) Swig: An interface compiler that connects programs written in C and C++ with scripting languages such as Perl, Python, Ruby, and Tcl.
tee-clc (12.0.0) Command-line Client for Team Foundation Server
the_silver_searcher (0.18.1) The Silver Searcher: A code-searching tool similar to ack, with focus on speed
tig (1.2.1) Tig: An ncurses-based text-mode interface for git
tmux (1.9a) Tmux: a terminal multiplexer that lets you switch easily between several programs in one terminal.

You might also like

“WARNING: soft rlimits too low” en MongoDB con Mac OS X
Si te aparece esta advertencia al conectarte a la consola de mongo en Mac OS X:** WARNING: soft rlimits...

Depurar aplicaciones PHP de consola con NetBeans
Asumiendo que ya tienes configurado todo lo necesario para depurar código PHP en NetBeans usando XDebug,...

Arreglar “Cannot redeclare class Symfony…” en Symfony2 después de actualizar
Después de actualizar de Symfony 2.2 a la versión 2.3 me apareció este fallo en mi aplicación:Fatal...

Aumentar el timeout de sesión de phpMyAdmin
Edita tu fichero config.inc.php (en mi Ubuntu 12.04 estaba en /etc/phpmyadmin/config.inc.php) y añade...

Dejar un comentario?

0 Comentarios.

Deje un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.