Mi primer servidor Web PHP local / My first localhost PHP Web Server

Tomar los primeros pasos para desarrollar sitios WEB requiere conocimientos tanto de Dev Ops como de Desarrollador:
  • Por un lado, necesitamos tener conocimientos en tecnologías que permitan el desarrollo del software WEB tanto del lado del cliente (HTML, Javascript / Jquery, CSS, etc.), como del lado del servidor (PHP, SQL, etc.).
  • Por otro lado, necesitamos conocimientos básicos de administración de un servidor de manera que pueda alojarse el sitio (APACHE), interpretar el código de dicho software (versión del PHP) y tener un lugar donde los datos generados por dicha aplicación puedan accederse para distintas operaciones (BASE DE DATOS)
Este post tiene como intención dar una idea de los pasos necesarios para montar un servidor Web de manera local que permite generar un entorno de desarrollo en el cual:
* Puedan crearse distintas aplicaciones ingresando a través de un navegador a una url local (sitio.localhost).
* Pueda interpretarse el código PHP que se utilice en las mismas.
* (OPCIONAL) Pueda generarse una base de datos en el caso de que la aplicación necesite operar con datos por la interacción con el usuario final.

El último paso se indica como OPCIONAL en razón de que NO todos los sitios WEB requieren de una Base de Datos, ya que, por ejemplo, sitios de tipo landing page solamente presentan información de una persona / empresa / organización utilizando solamente el código HTML desarrollado para la misma. Igualmente, recomiendo hacer el paso opcional de manera que se pueda cubrir todo el universo de aplicaciones WEB que podrá desarrollar a futuro.

Previo a comenzar con el tutorial, ten en cuenta que para seguir los pasos indicados deberás contar con un entorno Linux y acceso a Internet. La gran pregunta ¿Por qué NO Windows? Principalmente por:
  • La adaptación de los entornos en Windows tienen su origen en Linux, por lo cual, es bueno siempre ir a la fuente.
  • Si aprendes esta configuración y entiendes la misma, cuando tengas que hacer el salto a un servidor de producción no tendrás inconvenientes de configuración en caso de que gestiones un servidor completo (lo cual recomiendo).
Los pasos a seguir son (este ejemplo se hizo en una distribución Linux Ubuntu 16.04 / Mint 18.2):
  1. Iniciar sesión en una terminal bash.

  2. Instalar los servicios correspondientes para poder montar el servidor web:
  3. sudo apt-get update
    # Agregar repositorio PHP
    # Ubuntu (para nuestro caso)
    sudo add-apt-repository ppa:ondrej/php
    # Debian
    apt-get install apt-transport-https lsb-release ca-certificates
    wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
    echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
    # Fin agregar repositorio
    
    sudo apt-get install apache2 mysql-server php7.0 libapache2-mod-php7.0 php7.0-mcrypt php7.0-mysql php7.0-mbstring php7.0-xml php7.0-zip  php7.0-gd
    sudo a2enmod rewrite
    sudo service apache2 restart
    
    

  4. Finalizada la instalación de los servicios, de encontrarse todo correcto al ingresar en http://localhost se vería la siguiente información:

  5. Configuración de mi primer sitio example.localhost:
  6. sudo nano /etc/apache2/sites-available/example.conf
    
    # Copiar el siguiente contenido dentro del mismo
    <VirtualHost *:80>
     ServerName example.localhost
    
     ServerAdmin webmaster@localhost
     DocumentRoot /var/www/example.localhost
    
     ErrorLog /var/log/apache2/example.localhost/error.log
     CustomLog /var/log/apache2/example.localhost/access.log combined
    
    # Permito la sobreescritura de reglas con .htaccess
    <directory /var/www/example.localhost>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride all
                Order allow,deny
                allow from all
    </VirtualHost>

  7. Habilitar la configuración del sitio para el Apache:
  8. cd /etc/apache2/sites-enabled; sudo ln -s ../sites-available/example.conf

  9. Crear carpeta log para el nuevo sitio:
  10. sudo mkdir /var/log/apache2/example.localhost; sudo chmod 755 /var/log/apache2/example.localhost

  11. Crear directorio del sitio en donde se alojará la información:
  12. sudo mkdir /home/example.localhost

  13. Generar un link en /var/www para ir a buscar la información del sitio:
  14. cd /var/www; sudo ln -s /home/example.localhost

  15. Configurar host local para que pueda reconocer la url example.localhost desde un navegador:
  16. sudo nano /etc/hosts

    Agregar la siguiente información debajo de 127.0.0.1 localhost:
    127.0.0.1 localhost
    127.0.0.1 example.localhost

  17. Reiniciar servicio de apache2 para aplicar los cambios:
  18. sudo service apache2 restart

  19. Generar archivo de test en example.localhost para verificar funcionamiento:
  20. sudo cd /var/www/example.localhost; sudo nano index.php 
    Agregar el siguiente código dentro del mismo:
    <?php echo phpinfo(); ?>

  21. Ingresar mediante un navegador a http://example.localhost para verificar el funcionamiento:
Web Development first steps require both Developer and Dev Ops skills:
  • On one hand, requires client-side development expertise (HTML, Javascript / Jquery, CSS, etc.) altogether with server-side development expertise (PHP, SQL, etc.).
  • On the other hand, requires basic system administrator skills in order to host our site (APACHE), interpreate and generate our server-side code (PHP), and finally have a place to retrieve and save data that is generated by our software (DATABASE).
This post intends to give an idea on a how-to to configure a localhost web server in order to:
* Create different web applications accesing them with a local url (site.localhost).
* Our localhost server would generate PHP code.
* (OPTIONAL) Create a database to bring CRUD operations to our software.

Last step is marked as OPTIONAL because not all website requires a database, as landing page for example, that only brings information about a person / company / organization. I strong suggest make the optional step in order to cover all WEB applications that we could develop in a near future.
Before we start, Consider having a Linux OS and Internet Access in your PC. The big question, why NOT Windows? Mainly because:
  • La adaptación de los entornos en Windows tienen su origen en Linux, por lo cual, es bueno siempre ir a la fuente.
  • Easy PHP Web Server Windows's implementations (XAMPP) use Linux structure, so that, is good to go-to-source
  • Learning & Understanding this configuration, gives you a easy path when you decide to jump into a Linux Production Server.
The steps are: (these example was made with Linux Ubuntu 16.04 / Mint 18.2):
  1. Start a bash terminal.

  2. Install the following services:
  3. sudo apt-get update
    # Add PHP Repository
    # Ubuntu (these tutorial)
    sudo add-apt-repository ppa:ondrej/php
    # Debian
    apt-get install apt-transport-https lsb-release ca-certificates
    wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
    echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
    # Fin agregar repositorio
    
    sudo apt-get install apache2 mysql-server php7.0 libapache2-mod-php7.0 php7.0-mcrypt php7.0-mysql php7.0-mbstring php7.0-xml php7.0-zip  php7.0-gd
    sudo a2enmod rewrite
    sudo service apache2 restart
    
    

  4. After installation completed, if any errors weren't encounter, accesing through a browse in http://localhost you should see something like these:

  5. Site example.localhost configuration:
  6. sudo nano /etc/apache2/sites-available/example.conf
    
    # Add this content
    <VirtualHost *:80>
     ServerName example.localhost
    
     ServerAdmin webmaster@localhost
     DocumentRoot /var/www/example.localhost
    
     ErrorLog /var/log/apache2/example.localhost/error.log
     CustomLog /var/log/apache2/example.localhost/access.log combined
    
    # Allow write permission on .htaccess
    <directory /var/www/example.localhost>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride all
                Order allow,deny
                allow from all
    </VirtualHost>

  7. Enable website configuration to our Apache service:
  8. cd /etc/apache2/sites-enabled; sudo ln -s ../sites-available/example.conf

  9. Create log directory to our website:
  10. sudo mkdir /var/log/apache2/example.localhost; sudo chmod 755 /var/log/apache2/example.localhost

  11. Create root directory to our website:
  12. sudo mkdir /home/example.localhost

  13. Generate a link into /var/www:
  14. cd /var/www; sudo ln -s /home/example.localhost

  15. Config manual host in order to resolve example.localhost from a browser:
  16. sudo nano /etc/hosts

    Add this content under 127.0.0.1 localhost:
    127.0.0.1 localhost
    127.0.0.1 example.localhost

  17. Restart Apache in order to apply changes:
  18. sudo service apache2 restart

  19. Generate test file into example.localhost:
  20. sudo cd /var/www/example.localhost; sudo nano index.php 
    Add this PHP code inside:
    <?php echo phpinfo(); ?>

  21. Access through a web browser into http://example.localhost:

Comentarios