
Entorno de desarrollo moderno PHP, MySQL en Ubuntu
0 comentarios
Me voy a dejar una guía escrita, para mi yo del futuro, de cómo preparar un entorno de desarrollo (no es para producción) PHP y MySQL sobre Ubuntu, y que pueda tenerlo preparado en menos de 20 minutos.
Las herramientas que voy a necesitar para un desarrollo más o menos moderno son las siguientes:
- PHP
- MySQL Server (u otro gestor de base de datos)
- Composer (gestionar dependencias PHP)
- Nodejs y npm (gestionar dependencias JavaScript)
- Git
- Xdebug
- ¿Apache? (ya no es necesario)
Instalación de PHP
Quiero instalar PHP 7.2 desde la terminal de Ubuntu. Para la versión Ubuntu 18.04 LTS viene por defecto la versión php7.2 en los repositorios. Así que para instalar lo que me parece esencial para PHP, escribo en la consola:
sudo apt-get install php7.2 php7.2{-gd,-fpm,-mysql,-cli,-zip,-xml,-soap,-pgsql,-json,-dev,-curl,-common,-cgi}
Para una versión de Ubuntu anterior, Ubuntu 16.04 LTS, añado primero el repositorio, el cual tiene disponible distintas versiones de PHP: 5.6, 7.0, 7.1 y 7.2. Instalo la última versión de PHP:
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.2 php7.2{-gd,-fpm,-mysql,-cli,-zip,-xml,-soap,-pgsql,-json,-dev,-curl,-common,-cgi}
Ahora, desde la terminal escribo un comando para ver si se ha instalado correctamente:
yomismo@equipo:~$ php -v
PHP 7.2.10-0ubuntu0.18.04.1 (cli) (built: Sep 13 2018 13:45:02) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.10-0ubuntu0.18.04.1, Copyright (c) 1999-2018, by Zend Technologies
with Xdebug v2.6.0, Copyright (c) 2002-2018, by Derick Rethans
Todo ok.
Instalación de MySQL
Tanto para Ubuntu 16.04 LTS como para Ubuntu 18.04 LTS se instala MySQL 5.7.x desde repositorios. La versión rápida de instalación es la siguiente:
sudo apt-get update
sudo apt-get install mysql-server
mysql_secure_installation
Voy a indicarlo paso por paso por si mi yo del futuro tiene dudas
Instalando MySQL Server
Para empezar hago update de las dependencias de mi distribución Ubuntu:
sudo apt-get update
Lo siguiente es el comando para la instalación de mysql-server
sudo apt-get install mysql-server
En este paso debería de aparecer un prompt para que introduzca una contraseña para el usuario root. ¡Guárdala bien! Más adelante la necesitarás.
Securizando la instalación
Para que la instalación sea segura lanzamos el comando:
mysql_secure_installation
Este comando se encarga de implementar una capa de seguridad siguiendo las recomendaciones 2.10.4 Securing the Initial MySQL Account. Quizá no sea necesario para la instalación de un entorno de desarrollo, pero sí lo es para una instalación en producción.
Este script permitirá:
- Cambiar la contraseña del usuario root
- Te obliga a escribir contraseñas seguras, con unos criterios, para nuevos usuarios
- Deshabilita el acceso remoto a la base de datos con el usuario root
- Si existen usuarios anónimos, los elimina
- Si existe la base de datos test, la elimina y también los privilegios asignados a esta
Para profundizar más ver el artículo Instalación segura de servidores MySQL
Comprobar la instalación
Para comprobar la instalación de MySQL está activa en mi PC, escribo el siguiente comando:
sudo service mysql status
y me aparece algo similar a esto:
* /usr/bin/mysqladmin Ver 8.42 Distrib 5.7.24, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Server version 5.7.24-0ubuntu0.18.04.1
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 3 days 23 hours 44 min 11 sec
Threads: 1 Questions: 16 Slow queries: 0 Opens: 109 Flush tables: 1 Open tables: 26 Queries per second avg: 0.000
¿Problemas con la instalación? Prueba lo siguiente
Si te encuentras con problemas en la instalación prueba a eliminar la instalación y volver a instalar con la secuencia de comandos siguiente:
sudo apt purge mysql*
sudo rm -rf /var/lib/mysql
sudo rm -rf /etc/mysql
sudo apt install mysql-server mysql-clien
Instalación de Composer
Composer es un gestor de dependencias para PHP. No me imagino a un desarrollador PHP que no use este (u otro) gestor de dependencias, aunque haberlos haylos seguro. Para instalarlo escribir:
sudo apt-get install composer
Para documentarnos sobre Composer, su página oficial o si lo prefieres en español en el Manual oficial de Composer de LibrosWeb.
Una vez instalado, para ver la versión y los comandos que incluye la utilidad simplemente escribir en la consola:
composer
y verás algo así:
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer 1.6.3 2018-01-31 16:28:17
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--profile Display timing and memory usage information
--no-plugins Whether to disable plugins.
-d, --working-dir=WORKING-DIR If specified, use the given directory as working directory.
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Instalación de Node.js y npm
Tampoco veo actualmente un proyecto web que no incluya algo de JavaScript, así que lo suyo es contar, también, con un gestor de dependencias para este lenguaje. Quizá npm se queda algo antiguo, pero de momento me funciona estupendamente. Para instalarlo escribe en la consola:
sudo apt-get install nodejs
Para comprobar que versión tenemos de node.js escribimos en consola:
node -v
y para npm
npm -v
Échale un vistazo a la documentación de npm en su página oficial.
Instalación de Git
En Ubuntu el programa Git viene instalado por defecto, así que no habría que hacer nada al respecto. En todo caso, y si no la tienes ya, hazte una cuenta en Gitlab.com que es muy bueno, tiene planes gratuitos y te permite repositorios privados incluido en estos planes gratuitos. En todo caso no está demás comprobando escribiendo el comando correspondiente en consola:
git
y te debe imprimir por pantalla algo similar a esto:
usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
<command> [<args>]
These are common Git commands used in various situations:
start a working area (see also: git help tutorial)
clone Clone a repository into a new directory
init Create an empty Git repository or reinitialize an existing one
work on the current change (see also: git help everyday)
add Add file contents to the index
mv Move or rename a file, a directory, or a symlink
reset Reset current HEAD to the specified state
rm Remove files from the working tree and from the index
examine the history and state (see also: git help revisions)
bisect Use binary search to find the commit that introduced a bug
grep Print lines matching a pattern
log Show commit logs
show Show various types of objects
status Show the working tree status
grow, mark and tweak your common history
branch List, create, or delete branches
checkout Switch branches or restore working tree files
commit Record changes to the repository
diff Show changes between commits, commit and working tree, etc
merge Join two or more development histories together
rebase Reapply commits on top of another base tip
tag Create, list, delete or verify a tag object signed with GPG
collaborate (see also: git help workflows)
fetch Download objects and refs from another repository
pull Fetch from and integrate with another repository or a local branch
push Update remote refs along with associated objects
'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.
Xdebug
Xdebug es una extensión y/o herramienta que te permite debugear código PHP mientras estás desarrollando una web o aplicación. Es imprescindible para un entorno como el que estás instalando. Sin peros. En algún momento tendrás que ver que hace la aplicación paso por paso.
La instalación de esta extensión es como sigue desde la terminal de Ubuntu:
sudo apt-get install php-xdebug
Después de instalarlo tienes que configurarlo. Para ello, dirigete a la siguiente ruta:
cd /etc/php/7.2/mods-available
y editar el fichero xdebug.ini para añadir lo siguiente (si no existe):
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
Ahora toca leerse la documentación de la extensión en XDEBUG EXTENSION FOR PHP | DOCUMENTATION.
Configurar Xdebug con algún IDE
Dejo aquí enlaces para configurar Xdebug con los editores que utilizo o usan la mayoría de desarrolladores que conozco:
- Configurar Xdebug con Visual Studio Code y Homestead
- Depurar en PHP: Eclipse PDT + Xdebug
- Configuring Xdebug in PhpStorm
¿Y Apache?
Para mi entorno de desarrollo no será necesario instalar Apache. PHP integra desde la versión 5.4.x un servidor web monohilo que me viene a las mil maravillas para crear aplicaciones. Este no debes usarlo en producción, pero como esto es un entorno de desarrollo, pues no hay más que decir. Para levantar una instancia del servidor escribe en la consola, situandote en la raíz de la aplicación lo siguiente:
php -S localhost:3000
Puedo usar el puerto que quiera, si este está libre.
Para más información sobre el servidor echar un ojo a la documentación Servidor web interno de PHP.