En este artículo realizaremos la instalación y configuración de MySQL en nuestro servidor Ubuntu hospedado en DigitalOcean. En el primer artículo de esta serie instalamos y configuramos PHP en el servidor. Puedes consultar este contenido haciendo clic aquí.
Sin embargo, nos encontramos con un error, que podemos ver en la imagen a continuación:
El objetivo es que al final de este segundo artículo, podamos resolver este problema.
Instalando MySQL
Comenzaremos actualizando los paquetes instalados con el comando sudo apt-get update.
A continuación, instalaremos el paquete de MySQL, a través del siguiente comando:
sudo apt-get install mysql-server -y
Después de esto, podemos comenzar a configurar MySQL en nuestro servidor. Para ello, ejecutaremos el siguiente comando:
sudo mysql_secure_installation
A continuación, elegiremos algunas opciones para la configuración del servicio de MySQL. Haremos esto respondiendo algunas preguntas. La primera será acerca de definir una contraseña segura para acceder a nuestra base de datos. Responderemos que sí.
La siguiente opción será el nivel de seguridad de nuestra contraseña. Los niveles van de 0, que representa un nivel débil, a 2 que representa un alto nivel de seguridad, ya que incluye una contraseña con números y caracteres especiales. Esta será la opción que elegiremos. Así que solo hay que escribir 2:
Se solicitará que escribamos nuestra contraseña. Después de hacerlo, veremos la imagen a continuación:
Ten en cuenta que alcanzamos un 100% de seguridad con nuestra contraseña. Si la contraseña que defines no alcanza este valor, podrás cambiarla si lo deseas. En nuestro caso, simplemente escribiremos Y y continuaremos con el proceso de configuración.
La siguiente opción que configuraremos es respecto a los usuarios anónimos. MySQL por defecto crea estos usuarios, pero debemos eliminarlos cuando nuestra Base de Datos se lleva a producción. Así que responderemos “Sí” y eliminaremos a dichos usuarios.
A continuación, deshabilitaremos el acceso remoto del usuario root a la Base de Datos. Esto aumentará la seguridad de nuestro servidor.
La siguiente pregunta que responderemos es si deseamos eliminar la Base de Datos de pruebas, creada por defecto por MySQL. Seleccionaremos “Sí”.
Por último, actualizaremos los privilegios de nuestras tablas. Para ello, solo hay que responder “Sí” a la última pregunta:
Con esto, el servicio de MySQL estará completamente instalado y configurado en nuestro servidor.
Creando Primeros Usuarios y Definiendo Sus Permisos
Ahora que MySQL está instalado, vamos a acceder a nuestra base de datos, a través del siguiente comando:
mysql -u root -p
Vamos a crear nuestra Base de Datos, que fue utilizada en el proyecto de nuestro Curso Completo de PHP 7. La crearemos mediante el siguiente comando:
CREATE DATABASE db_ecommerce;
El siguiente paso consiste en crear el usuario de la Base de Datos que utilizaremos para acceder a nuestro MySQL a través de PHP. Lo crearemos utilizando todos los medios posibles para su acceso, es decir, todas las maneras en que puede ser identificado. En este momento, informaremos la contraseña que definimos al configurar el servicio de MySQL. Ejecutaremos los cuatro comandos a continuación:
CREATE USER 'hcode'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bUFrd8%wtPuW$W7IFY';
CREATE USER 'hcode'@'%.%.%.%' IDENTIFIED WITH mysql_native_password BY 'bUFrd8%wtPuW$W7IFY';
CREATE USER 'hcode'@'%' IDENTIFIED WITH mysql_native_password BY 'bUFrd8%wtPuW$W7IFY';
CREATE USER 'hcode'@'0.0.0.0' IDENTIFIED WITH mysql_native_password BY 'bUFrd8%wtPuW$W7IFY';
La única parte que variará en tus comandos será la contraseña, que está al final, entre comillas.
Después de crear el usuario, necesitamos informar los privilegios, o permisos, que tendrá. Ejecutaremos cuatro comandos más:
GRANT ALL PRIVILEGES ON *.* TO 'hcode'@'localhost';
GRANT ALL PRIVILEGES ON *.* TO 'hcode'@'%.%.%.%';
GRANT ALL PRIVILEGES ON *.* TO 'hcode'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'hcode'@'0.0.0.0';
Ten en cuenta que estamos otorgando todos los privilegios al usuario. Hicimos esto en nuestro caso, pero generalmente el DBA de nuestro proyecto será el encargado de definir los permisos que tendrá cada usuario.
Ahora que hemos definido los privilegios de nuestro usuario, recarguemos todos los privilegios de nuestra Base de Datos, mediante el siguiente comando:
FLUSH PRIVILEGES;
Por último, podemos salir del servicio de MySQL, usando el siguiente comando:
exit;
Configurando Acceso Remoto a la Base de Datos
Nuestro servicio ya está funcionando. Sin embargo, no deseamos acceder al servidor cada vez a través de la línea de comandos para realizar cambios en él; eso no es muy agradable. Por ello, configuraremos ahora el acceso remoto a la Base de Datos, para poder modificarla a través de MySQL Workbench, por ejemplo.
Para realizar esta configuración, accedamos al archivo de configuración de MySQL, mediante el siguiente comando:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Buscaremos la línea que tiene la directiva bind-address y la definiremos con el valor que vemos a continuación:
bind-address = 0.0.0.0
Después de guardar este cambio, liberaremos el acceso al puerto por defecto de MySQL en nuestro servidor, el puerto 3306. Usaremos el siguiente comando para ello:
sudo ufw allow 3306
Con todas estas configuraciones hechas, reiniciemos el servicio de MySQL, para que los cambios se apliquen:
sudo service mysql restart
Conectando a MySQL Workbench
Ahora estamos listos para acceder a la Base de Datos de manera remota. Haremos esto creando una nueva conexión en MySQL Workbench.
Informaremos las credenciales de nuestro servidor. En la opción Hostname, informaremos la misma IP utilizada para acceder a nuestro proyecto en el navegador. El usuario será el que creamos hace poco: "hcode".
Haremos clic en la opción "Store in Vault…" y luego informaremos la contraseña que creamos para acceder al servicio de MySQL:
A continuación, haremos clic en "Test Connection". Después de unos segundos, deberíamos ver el siguiente mensaje:
¡Este mensaje de éxito nos asegura que el acceso a la Base de Datos de manera remota fue configurado con éxito!
Al acceder a esta conexión, podremos ver nuestra Base de Datos db_ecommerce ya creada. Ahora la llenaremos con las tablas y sus datos. Usaremos un respaldo de esta Base que está disponible en nuestro GitHub.
Solo hay que pegar la query y hacer clic en el botón con el símbolo de rayo:
Después de esto, nuestra Base de Datos estará completamente creada en Producción:
Configurando Acceso de PHP a MySQL y Últimos Ajustes
El último paso consiste en configurar el acceso de PHP a MySQL. Este acceso está definido en la clase Sql de nuestro proyecto, a través de algunas constantes de conexión. A partir de ahora, estas constantes quedarán de la siguiente forma:
const HOSTNAME = '127.0.0.1';
const USERNAME = 'hcode';
const PASSWORD = 'bUFrd8%wtPuW$W7IFY';
const DBNAME = 'db_ecommerce';
Observa que definimos la IP local como el hostname de la conexión. Hicimos esto porque PHP y el servicio de MySQL están en el mismo servidor. Si estuvieran en máquinas diferentes, tendríamos que informar la otra IP. Además, la información de la contraseña variará de acuerdo a la contraseña que hayas definido.
Esto ya es suficiente para que PHP se conecte a MySQL. Sin embargo, para que nuestro proyecto funcione, necesitamos realizar dos últimas configuraciones. La primera implica conceder permiso de escritura para el directorio views-cache, que es utilizado para almacenar archivos de plantilla en caché.
Para realizar esta configuración, accederemos al directorio raíz de nuestro proyecto con el comando cd /var/www/hcode-store/ y ejecutaremos el siguiente comando:
sudo chmod -R 777 views-cache/
La segunda configuración implica permitir que las rutas de nuestro proyecto, creadas por el framework Slim Framework, puedan ser identificadas por nuestro servidor Nginx. Para ello, accederemos al archivo de configuración de Nginx con el comando sudo nano /etc/nginx/sites-available/default y buscaremos las directivas location / y location ~ \.php y definiremos el siguiente contenido para ellas:
location / {
try_files $uri /index.php$is_args$args;
}
location ~ \.php {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
}
Después de guardar este archivo, reiniciaremos el servicio de Nginx con el comando sudo service nginx restart.
Ahora, al acceder nuevamente a la dirección de nuestro proyecto, vemos el siguiente resultado:
El error se resolvió y ahora el proyecto está funcionando correctamente.
Podemos acceder tanto a las páginas de ecommerce como también a la administración, y realizar varios cambios en los datos registrados, ya que ahora la Base de Datos está completamente integrada con PHP.
Conclusión
En este segundo artículo logramos configurar todo el servicio de MySQL y también definir su conexión con PHP 8. Vemos así que nuestro proyecto está tomando cada vez más forma. Solo recordando que puedes aprender a desarrollar todo el contenido de este ecommerce en nuestro Curso Completo de PHP 7.
Sin embargo, ten en cuenta que estamos accediendo a nuestro proyecto en el navegador mediante su IP, de forma fija. Para hacer que nuestro proyecto sea más completo, necesitamos configurar un dominio personalizado para él. Eso es lo que haremos en el próximo artículo, ¡hasta entonces :)