17 de agosto de 2014

Servidor PHP5 + Apache + MariaDB server en local con Fedora 20

Como ando profundizando poco a poco en la programación Web y entre tanto framework de cada lenguaje como Zend, Symfony (entre otros) de PHP, Django de Python, Ruby on Rails de Ruby, lenguajes de programación unos orientados a desarrollo Web, otros generalmente para programas o scripts en local... esto acaba siendo un gazpacho de innumerables dimensiones.

Por lo pronto ando mejorando los conocimientos con PHP investigando sobre la orientación a objetos. Así puedo subirme a la "nueva" forma de programar. Y hasta que no domine bien las clases, métodos, atributos y multitud de cosas raras no creo que me vea dentro de un framework como Zend. Eso sí, a finales de este año deberé saber al menos hacer ¡una línea!

Pués, nos subimos al deportivo de las conexiones Web, y montemos el servidor local para trabajar. 

Primero, deberemos instalar los respectivos paquetes, httpd, mariadb-server, php, phpMyAdmin.
$ su -c "yum install php phpMyAdmin mariadb-server httpd"
Segundo, arrancamos los 'demonios' (de daemons en inglés).
$ su -c "systemctl start httpd mysqld"
Tercero, configuramos el servidor MariaDB.
$ su -c "mysql_secure_installation"
Este comando nos generará una serie de preguntas a las que deberemos atender. Generalmente lo que nos importará aquí es que debamos setear la contraseña de root. Que es la que más adelante utilizaremos para acceder a PHPMyAdmin, realizar conexiones con mysqli.... El resto de preguntas con pulsar todo enter no deberíamos tener problemas.

Y por último, una vez finalizada la configuración, accederemos a través de nuestro navegador accedemos a http://127.0.0.1 que es nuestra dirección local dónde tendremos nuestro servidor Web.


Ya tendremos nuestro servidor corriendo. Personalmente, no lo inicio cuando arranque el sistema (boot), porque prefiero lanzarlo solo cuando quiera trastear. Si os interesa mantenerlo iniciado desde el arranque deberéis entonces ejecutar los siguientes comandos:
$ su -c "systemctl enable httpd mysqld"
Para detenerlos.
$ su -c "systemctl stop httpd mysqld"
Antes de finalizar con este post. Os diré que los archivos de nuestros proyectos, o de cualquier cosa que dependa de un servidor, de otro o de ambos queda alojado en el directorio /var/www/html y por último daré un par de consejillos que nos hará la vida un pelín más feliz.

Debuggeando en PHP.

Esto es muy importante, la configuración por defecto de PHP ubicada en /etc/ como php.ini no tiene un buen debug. Esto supongo que está de este modo para utilizar en producción y olvidarse de que 'malechores' se aprovechen de los errores para acceder a los sistemas y 'corromper' o revender los datos de las DBs.

Para ello deberemos editar el fichero /etc/php.ini y modificar estas dos líneas tal que se queden del siguiente modo.
display_errors = On
error_reporting = E_ALL
Una vez hecho esto, reiniciamos el servidor httpd.

¿Permisos? ¿Problem officer?

Cuando pensamos en caliente, no hay nada más pedante que los permisos en GNU/Linux o en sistemas Unix-like. Y cargamos contra ellos. Sin embargo, nos enfriaremos un poco y lo haremos lo más simple posible.

Si vamos a trabajar en una carpeta llamada por ejemplo 'proyectos' en la que dentro de ella, crearemos proyectos independientes basta con hacer lo siguiente:
$ su -c "mkdir /var/www/html/proyectos"
$ su -c "chown tu_usuario:tu_usuario /var/www/html/proyectos"
Si por el contrario vas a poner patás arriba todo el directorio general o principal dónde trabajará el servidor Apache.
$ su -c "chown tu_usuario:tu_usuario /var/www/html/"
Esto es una configuración para un servidor local, ¡no para producción por el amor de dios!

¿Editores de texto? ¡No! Mejor un IDE

¡Cuántos quebraderos de cabeza nos da ya un editor simple de textos! Para eso tenemos un grupo de programas llamados IDE. Un IDE es un Entorno integrado de desarrollo (traducido a mi bardo español) en el que te hará la vida más sencilla a la hora de trabajar con diferentes lenguajes, sean de programación, etiquetas...etc. Te colorean palabras clave, te ayudan a finalizar la sintaxis de los (),[],{}, de las palabras reservadas, textos...

Para que vean un poco a lo que me refiero, en el lado izquierdo tenemos el editor de textos Gedit, y a la derecha Geany. Es notable la diferencia ¿no?
Nota: Gedit también podría actuar como IDE, pero es para dejar un símil de lo que intento explicar.


Personalmente utilizo Geany, es bastante liviano y cumple con lo que necesito ahora mismo. Sublime Text es bastante utilizado y recomendado también. Y por lo visto hay muchos más de ellos como Eclipse, NetBeans...etc ¡Ahí lo dejo a libre elección!

Breves notas explicativas:
  • Apache. Es un servidor Web que mediante el uso del protocolo http y un puerto, el 80 por defecto nos permite interactuar y sobre todo ver los sitios Webs.
  • MariaDB. Es un fork que salió un tiempo después de la adquisión de Sun por parte de Oracle. MySQL es un sistema gestor de base de datos que permite el almacenamiento, consultas... a una base de datos que hayamos creado o a la que nos hayamos conectado previamente.
  • PHPMyAdmin. Es un conjunto de librerías, funciones... que interactúan con el servidor de Apache y MariaDB en este caso para mostrar, modificar, o alterar datos de una base de datos gráficamente mediante una interfaz Web.

Referencias
  • Google
  • PHP.net
  • Geany doc
  • ComunidadPHP
  • StackOverflow
  • Apache Web server
  • Fedora doc

10 de agosto de 2014

return "blog"

Buenas muchach@s. Hace un largo tiempo que no escribía de nuevo en el blog y la verdad que lo he dejado un 'poco' apartado debido a causas como el trabajo, proyecto de fin de primer año, aprender programación, y sobre todo porque es verano. Y claro estar todo el rato o bien en la calle, o bien haciendo cursos en CodeAcademy como que no te anima a redactar mucho. (De hecho estoy redactando este post a escasos minutos de irme a la playa).

Sin embargo vengo trayendo unas pocas novedades:

 

Aprendiendo a programar

Si bien antes no era uno de mis puntos fuertes, ni si quiera tenía nociones de ello, tanto de programación Web como puede ser CSS, HTML, PHP, JavaScript y jQuery (entre ellos hay varios que no se definen como lenguaje de programación ojo) hasta aprendiendo Python. Y mediante el e-learning con muchas ganas le sacas mucho provecho sobre todo cuando haces ejercicios con explicaciones en vivo y en directo con CodeAcademy, también con los libros que puedes encontrar por Internet como el de Eugenia Bahit titulado Curso: Python para principiantes liberado bajo Creative Commons
CC-NC-ND y totalmente descargable desde multitud de sitios de Internet. Explica bastante bien la sintaxis, el control de flujo, los objetos y mucho más. Entre otras fuentes, también tenemos la documentación de jQuery, JavaScript, PHP de los sitios oficiales. 

Me he quedado tan maravillado, que ahora la programación es como casi el total de mi fuente de entretenimiento. Día que no practico algo, día que me voy con regañadientes a dormir. Y estoy ahí ahí a ver si puedo ver multitud de cosas y ponerlas en práctica antes de empezar con los famosos frameworks, que son como librerías, bibliotecas, conjuntos de multitud de código que hacen la vida del desarrollo mucho más sencilla (en teoría, jojojo) y además disponibles para multitud de lenguajes como jQuery de JavaScript, AngularJS (JavaScript), Django (Python4Web), Laravel de PHP, Bootstrap de CSS...

 

Creando un CMS, PostIO

Como estoy en un grado superior de informática llamado ASIR (Administración de Sistemas Informáticos en Red), que a pesar de tener ese nombre que llama más a un perfil de sysadmin, también se da programación Web, shell scripting con bash, SQL para base de datos... en una de las asignaturas llamada 'Gestión de base de datos', como tarea final se nos mandó ha hacer un proyecto utilizando un Sistema Gestor de Base de Datos da igual el que fuese mientras se almacenasen información aguardando su integridad referencial, sus claves foráneas, primarias.... y todo ese 'tinglado' que realmente lo controlas en un 80% con la programación más que con las relaciones entre entidades... bueno, sin ir más lejos. 

Bueno comencé poniéndome un objetivo bastante fuerte y parecía incluso utópico. Ni más ni menos quería hacer un CMS que pudiera generar blogs. Si, como Wordpress con su instalador y todo, ¡solo teniendo un vago recuerdo de estos lenguajes! Pues la cuestión, empecé a indagar un poco en PHP, CSS, HTML, SQL para poder hacerlo. Y después de horas y horas, días y días, meses y meses generando código y subiéndolo a mi repo en GitHub... ¡lo logré!

Un CMS completamente desde 0, sin frameworks, y con lo más simple del mundo. Era tan simple que apenas tenía funciones, y algo que no me gustó que a mediados de proyecto me encontré con que las funciones mysql_* ya no estaban soportadas justo en la mitad del proyecto. Así que si lo deciden probar, es para estudio o desarrollo, pero no para entornos de producción. Además de que fue un graso error no implementar ni funciones, ni objetos, ni clases, el código es tan simple que creo que es hasta redundante. Cosa que corregiré de camino a la segunda versión.

Y por último, el ¡nombre y la fuente! Como es un generador de blogs, en ellos hay mucha salida y entrada de información, por ello le puse el nombre de PostIO. Artículo (Post) proveniente del Inglés e IO del famoso I/O, Input/Output que viene siendo la Entrada/Salida de algo, en este caso de información. El proyecto está licenciado bajo GPLv2 además de incluir las respectivas licencias detalladas en el README.

Puedes obtenerlo a través del siguiente enlace, o bien clonando el repositorio desde git.
git clone https://github.com/netSys/PostIO
Recuerden que ahora mismo no está destinado para entornos de producción.

Probando Docker

Hace unos meses que tuve unas conversaciones largas y extendidas con un administrador de sistemas de nativo de Irlanda que vino de paso por la isla, y curiosamente me conoció por un artículo de mi blog sobre un router de Movistar. Estuvimos dialogando como niños sobre diversos temas relacionados con Fedora y sus nuevas características de la versión 20 y de cara a la próxima release, temas de networking, virtualización y tecnologías destinadas a cloud como Amazon EC2 (cuando me lo enseñó mi cerebro se hizo un DDoS así mismo), y uno de los programas era Docker IO.

Docker es una pequeña y gran plataforma de generar 'clouds' de la nada nativamente. Soy un poco inexperto en el tema, pero por lo que entiendo y he experimentado. Descargas imágenes de pequeños sistemas como CentOS, Fedora, Ubuntu, Debian, Gentoo... que se encuentran almacenadas en una especie de 'CDN', un servidor o conjunto de servidores que almacenan las imágenes 'cloud' y que las descargamos con tan solo 2-3 comandos.

Quedé maravillado con su funcionamiento, hacías un servidor de la nada, si quiera tocabas el /etc/hosts para añadir el nuevo servidor. (Como si fuera un 'Virtual host' de Apache). Su instalación y uso son bastante fáciles así como generar tu propia cloud's image con tan sólo unos sencillos pasos. Puedes obtener más información sobre este fantástico proyecto desde el siguiente enlace.

Más adelante escribiré un artículo más detallado, porque ya queda menos para que me vengan a recoger para ir a la playa. JoJoJo. Desde aquí le mando un agradecimiento a Justin, por haber contactado conmigo y haberme enseñado todas las tecnologías que rodean el entorno cloud.

Plataformas e-learning

Como mencioné anteriormente, el e-learning me encanta, y sobre todo si son plataformas como CodeAcademy que aprendes mientras practicas directamente. Además de esta plataforma fantástica, encontré CodeSchool con cursos gratuitos de multitud de lenguajes, y otros de pago. No obstante, 20€/mes por invertir en tu futuro accediendo a casi todos ellos no está nada mal. Por otro lado encontré una especie de Humble Bundle (conjunto de ofertas que con un el dinero que tu quieras pagar sobre ellas se destinan en % a proyectos generalmente humanitarios como Unicef, Manos Unidas...) llamado Stack Social. Ahí encontré un pack de cursos buenísimos enlazados a otra plataforma Web llamada Udemy. En la que puedes aprender de ¡todo! pagando o bien si los tienes disponibles gratuitamente. En ellos puedes encontrar multitud de videotutoriales y descargártelos desde tu propio smartphone o tableta con su aplicación disponible para iOS y Google Play Store.

Sacándome el carné

Aparte de estar eufórico con todo esto de la informática, también ando con el dichoso carné. Que son multitud de gastos entre teórico, prácticas...etc acabas literalmente con tu sueldo del trabajo fundido por todos esos costes. A pesar de haber sacado el teórico por libre y ahorrarme la matrícula de la autoescuela, entre las tasas que te cobran por ellas 90€, más el paripé del certificado médico que sigo diciendo que son tres pruebas tontas que las pasa un chimpancé siendo el coste de unos 50€ y encima 22€/práctica. Acabas literalmente fundido y luego pagar 25€/examen y en caso de no aprobar, volver a pagar 90€ por solo las tasas.

Sin embargo, grata será la satisfacción ver que todo ese dinero valió realmente la pena porque tener carnet en Lanzarote es cuadruplicar las posibilidades de obtener un puesto de trabajo y aparte que tienes más libertades a la hora de irte a cualquier sitio de la isla, o más allá de la misma, península, y el resto de los países adheridos a la Unión Europea.

Y bueno muchísimas más cosas que faltan por comentar, pero creo que... ¡me voy a la playa! Juaaa. Un saludo y un abrazo a todos. 

Licencia y responsabilidades

Licencia Creative Commons
netSys blog por Álvaro Castillo se encuentra bajo una Licencia Creative Commons Atribución-CompartirIgual 3.0 Unported.

El propietario de este blog no se responsabiliza de los daños que puedan generarse u ocurrir por la información expuesta aquí, en caso de ser utilizada la responsabilidad recae bajo quién la use.

Se les informa de posibles publicaciones donde queden expuestas imágenes a terceros o marcas comerciales que siempre tendrán sus fuentes, y sus atribuciones.

Por último, en caso de confusión por la temática que se trate de los artículos, tutoriales...etc dejaremos claro que este sitio Web no colabora directamente con ningún proyecto de forma oficial.