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:

  1. PHP
  2. MySQL Server (u otro gestor de base de datos)
  3. Composer (gestionar dependencias PHP)
  4. Nodejs y npm (gestionar dependencias JavaScript)
  5. Git
  6. Xdebug
  7. ¿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á:

  1. Cambiar la contraseña del usuario root
  2. Te obliga a escribir contraseñas seguras, con unos criterios, para nuevos usuarios
  3. Deshabilita el acceso remoto a la base de datos con el usuario root
  4. Si existen usuarios anónimos, los elimina
  5. 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:

  1. Configurar Xdebug con Visual Studio Code y Homestead
  2. Depurar en PHP: Eclipse PDT + Xdebug
  3. 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.