Estamos iniciando una nueva serie de artículos en el Blog de Hcode, donde realizaremos el despliegue de un proyecto en PHP y MySQL en DigitalOcean. El proyecto elegido fue el que desarrollamos en nuestro Curso Completo de PHP 7, que es un e-commerce completo y simplemente sensacional
El código fuente de este proyecto está en nuestro GitHub, y será a través de esta plataforma que iremos a actualizar nuestro servidor siempre que haya alguna modificación en el código.
En este primer artículo iremos a crear el proyecto en DigitalOcean y configurar todo el acceso al servidor, además de instalar PHP y Nginx en él.
Es necesario tener una cuenta en DigitalOcean para poder crear un nuevo proyecto. Además, puede que se nos pida que agreguemos una tarjeta de crédito a nuestra cuenta.
Creando Proyecto y Primer Droplet en DigitalOcean
Comencemos creando un nuevo proyecto. Para ello, basta con hacer clic en “New Project” en el Panel Administrativo:
En la siguiente página iremos a agregar un nombre para nuestro proyecto y luego hacer clic en “Create Project”:
Con el proyecto creado, iremos a crear nuestro primer Droplet. Un Droplet es una máquina virtual creada en DigitalOcean. Cada Droplet es un servidor individual que podemos manipular y configurar.
Para crear nuestro Droplet, haremos clic en “Create” y luego en “Droplets”:
La próxima página mostrará una serie de opciones para la creación de nuestro servidor. Iremos a elegir Ubuntu como distribución y seleccionaremos el plan más básico de la plataforma, alrededor de $ 5 al mes:
En esta misma página seleccionaremos la ubicación de nuestro servidor. En nuestro caso, elegiremos la ciudad de Nueva York, pero podríamos seleccionar otra región si lo deseáramos.
Además, seleccionaremos habilitar la opción “SSH keys”. Las llaves SSH son esenciales para la autenticación y acceso a nuestro servidor. Vamos a configurar esta cuestión ahora.
Para configurar una nueva llave SSH, podemos usar el programa PuTTY, que es un cliente SSH para Windows.
Iremos a abrir una nueva pestaña en el navegador para instalar y configurar este programa.
Instalación y Configuración de PuTTY
El PuTTY puede ser descargado en el sitio https://www.putty.org/. Al acceder a esta página, basta con hacer clic en el botón de descarga y ejecutar el archivo de instalación. De esta forma, el PuTTY se instalará globalmente en nuestro computador:
Con el PuTTY instalado, iremos a crear una llave SSH, que será utilizada para realizar la autenticación en DigitalOcean y acceder a nuestro servidor de manera remota. Para crear esta llave, abre el Menú de Inicio y escribe “puttygen”. Luego, solo debes hacer clic en la opción que aparecerá:
En la ventana que se mostrará, haz clic en el botón “Generate”. Luego, mueve el mouse de la forma que desees en el área en blanco de esta ventana hasta que la barra verde esté completada. El PuTTY usará el patrón de movimiento de tu mouse para crear la llave SSH, lo que garantizará una llave única y también muy segura para nuestros accesos remotos:
Después de completar este proceso, nuestra llave habrá sido creada. Si lo deseamos, podemos crear una contraseña para el acceso de esta llave, lo que la hará aún más segura. Si optamos por hacer esto, solo necesitamos llenar la contraseña deseada en los campos “Key passphrase” y “Confirm passphrase”. Luego, guardaremos el archivo de nuestra llave SSH en nuestro computador, tanto la llave pública como la privada. Haremos esto haciendo clic en los dos botones resaltados abajo:
Es importante que elijamos una carpeta segura para guardar esta llave SSH. Preferiblemente una carpeta donde podamos encontrar estos archivos con facilidad cuando los necesitemos.
Después de guardar los archivos de la llave, no cierres la ventana del puttygen. Copia la llave generada, que estará en el área donde movimos el mouse anteriormente. Copia todo el contenido de ella, que comenzará con “ssh-rsa”. Esto es necesario porque ahora iremos a agregar la llave creada a DigitalOcean.
Volvamos a la pestaña de creación del Droplet en el navegador y hagamos clic en el botón “New SSH Key”:
Al hacer clic en este botón se abrirá un modal, donde podremos pegar el contenido de nuestra llave recién creada. También podemos darle un nombre a esta llave y luego hacer clic en “Add SSH Key”:
A continuación, solo necesitamos hacer clic en “Create Droplet”:
Con esto, nuestro primer Droplet habrá sido creado e iniciado. Podemos decir que este fue el primer paso. Muchas configuraciones, ¿no es cierto? Pero ahora estamos listos para acceder a nuestro servidor y realizar las configuraciones iniciales en él.
Accediendo a nuestro Servidor a través de PuTTY
Para acceder a nuestro servidor, necesitamos saber cuál es su IP. Para ello, volveremos a la página inicial de nuestro proyecto en DigitalOcean y buscaremos la sección de Droplets. En esta sección podremos ver la IP de nuestro Droplet, como se muestra en la imagen a continuación:
Con esta información en mente, abriremos la aplicación “PuTTY” en nuestro computador y pegaremos la IP en el campo “Host Name”. Podemos darle un nombre a este servidor si lo deseamos:
Después de definir esta información, haremos clic en “Save”. Pero, antes de acceder a nuestro servidor, necesitamos configurar la autenticación. Haremos esto a través de la llave SSH que creamos hace poco.
Para agregar esta llave, selecciona el nombre del servidor que creamos en PuTTY y en el menú lateral izquierdo haz clic en “SSH” y luego en “Auth”. En la ventana que se abrirá, haz clic en el botón “Browse” y luego selecciona la llave SSH que fue creada anteriormente. Iremos a seleccionar el archivo que tiene la extensión .ppk:
Después de esto solo queda volver a la página principal de PuTTY haciendo clic en “Session” y luego hacer clic nuevamente en “Save” y finalmente en “Open”:
Se abrirá una nueva ventana, que será nuestra línea de comandos para el acceso y manipulación en el servidor. Se solicitará un inicio de sesión. Por defecto, este inicio de sesión será “root”:
A continuación, se solicitará la contraseña de la llave SSH que creamos, si hemos definido una:
Después de ingresar la contraseña, veremos la siguiente imagen:
Esta imagen significa que logramos iniciar sesión con éxito en el servidor y ahora estamos listos para comenzar a configurar PHP en él.
Configuración Inicial en Nuestro Servidor
Vamos a realizar toda la configuración del servidor Nginx y PHP. Ya enseñamos esto con más detalles en el artículo Nginx con PHP 8 en el servidor Ubuntu. Por eso, no entraremos en tantos detalles acerca de los comandos relacionados a PHP, sino solo en aquello que sea diferente del artículo que ya mencionamos.
El primer comando que iremos a ejecutar es el sudo apt-get update, para actualizar todos los paquetes ya instalados.
Iremos a instalar todos los paquetes necesarios para el funcionamiento de PHP con Nginx y también MySQL, que será la Base de Datos utilizada en el proyecto. Instalaremos esos paquetes con el siguiente comando:
sudo apt-get install -y build-essential pkg-config libxml2-dev sqlite3 libsqlite3-dev zlib1g-dev
Vamos a realizar la descarga de PHP 8 exactamente como mostramos en el otro artículo. Después de que la descarga se complete, iremos a acceder a la carpeta de PHP y realizar su configuración e instalación. Lo configuraremos de una manera un poco diferente de la forma en que lo hicimos en el otro artículo. Realizaremos su configuración con el siguiente comando:
sudo ./configure --with-mysqli --with-pdo-mysql --enable-fpm
Nota que hemos agregado dos flags relacionadas con MySQL y PDO, tecnologías esenciales para el funcionamiento de nuestro proyecto.
Después de ejecutar este comando, vamos a instalar realmente PHP utilizando el siguiente comando:
sudo make && sudo make install
En este momento puede que se devuelva algún error de memoria. En este caso, asegúrate de que tu Droplet tiene suficiente memoria para ejecutar PHP. Generalmente, 1 GB es suficiente.
El siguiente paso será agregar el código de nuestro proyecto al servidor. Como comentamos al inicio del artículo, usaremos el proyecto creado en nuestro Curso Completo de PHP 7 en esta serie de artículos, y está hospedado en GitHub. Por eso, utilizaremos Git para realizar su descarga en el servidor.
Vamos a acceder al directorio predeterminado de todos los sitios hospedados en un servidor Ubuntu. Haremos esto con el comando cd /var/www/. En este directorio realizaremos el git clone del proyecto.
En nuestro caso vamos a usar el protocolo SSH para realizar la descarga. Si deseas utilizarlo también, podrás ver cómo realizar su configuración en el artículo Agregando una llave SSH a GitHub.
Si no deseas, puedes usar el protocolo HTTPS.
Vamos a ejecutar el siguiente comando:
git clone [email protected]:anthony1910/ecommerce.git hcode-store
Con esto, nuestro proyecto será agregado a nuestro servidor. Y siempre que tengamos una modificación en nuestro código, bastará ejecutar un git pull y entonces el servidor se actualizará automáticamente.
Ahora vamos a definir que Nginx pueda “ver” nuestro proyecto. Para ello, accederemos al archivo de configuraciones de Nginx con el siguiente comando:
sudo nano /etc/nginx/sites-available/default
Se abrirá un Editor de Texto. En esta interfaz buscaremos la línea root /var/www y la dejaremos de la siguiente forma:
root /var/www/hcode-store;
Después de guardar este archivo, reiniciaremos el servicio de Nginx, a través del siguiente comando:
sudo service nginx restart
Ahora, al acceder a la IP de nuestro servidor, en mi caso http://167.172.128.137/, veremos el siguiente resultado:
Y podemos notar que se ha devuelto un inmenso bug. Pero nosotros programadores ya estamos acostumbrados a esto ?. El mensaje de error informa que no pudo conectarse a la Base de Datos, ya que esa conexión fue denegada. Esto ocurre porque realmente no configuramos MySQL en el Servidor. Para resolver este problema, necesitaremos realizar la instalación y configuración de esta Base de Datos. Esta configuración se realizará en el próximo artículo de esta serie.
De todos modos, en este artículo ya logramos realizar muchas configuraciones y aprendimos conceptos muy importantes que podrán ser aplicados siempre que necesitemos acceder a un servidor remoto.
Y con certeza aprenderemos muchas más cosas en el próximo artículo, hasta entonces ?.