martes, 14 de febrero de 2017

Cómo montar un servidor LAMP (Linux Apache MySQL PHP7.0) Linux Mint




"La guía definitiva (o casi) para montar LAMP en tu computadora y no morir en el intento"

Prólogo:

Terminando el año 2016 tuve que reinstalar mi SO por problemas en el hardware, lamentablemente tuve que formatear dos discos duros, finalmente y a pesar de usar las herramientas de reparación habían daños físicos irreparables, opté por comprar un SSD y hacer una instalación en limpio, para dejar viejos y malos hábitos decidí escribir esta guía definitiva o casi, como ayuda de memoria para mi mismo al momento de tener que volver a instalar todo y para ayudar a otros colegas que necesiten tener una guía a mano, esta guía paso a paso es una recopilación de investigaciones que realicé por varios foros en inglés y en español y pretende ser una ayuda para evitar tener que realizar búsquedas en Google con resultados apócrifos.
https://www.linuxmint.com/


La configuración LAMP se realizó con éxito en un entorno Linux Mint 18.1 64 bits, no obstante para los derivados de Debian el procedimiento es similar.

Nivel de complejidad: Medio, Se prevé que el usuario esta familiarizado con los comandos básicos GNU/Linux y el uso de su terminal.

Nota: Se pudo haber realizado un script Bash para automatizar la instalación, pero por un tema didáctico y para evitar algunos errores en la programación para cada distribución, decidí documentar el procedimiento paso a paso, esta en cada uno encontrar los atajos posibles en base a este artículo. Esta publicación esta sujeta a cambios sin previo aviso, si considero alguna mejora u omisión se hará fe de erratas.

En varias ocasiones hago mención del editor Xed, pero esto depende de cada versión de distro que tengas instalada, puede ser que tengas Gedit, Pluma, etc.

Objetivo:

Instalar y poner en marcha un servidor de desarrollo para probar nuestras aplicaciones localmente andando en http://localhost

Escenario:

Un cliente nos pide realizar un sitio web, optamos por desarrollarlo con el CMS WordPress, para nuestras pruebas vamos a necesitar un web server que funcione en nuestra computadora en forma local sin necesidad de subir archivos a un hosting.

Resumen paso a paso:

1) Vamos a instalar AMP (Apache MySQL y PHP) en una distro derivada de Debian (por convención AMP ya que se supone que tenemos instalado GNU/Linux), phpMyAdmin, cURL para PHP7.0, sSMTP para el envío de e-mails desde nuestros programa.
2) Configurar el directorio www para alojar nuestras páginas.
3) Por último haremos unas pruebas.

PASO 1: 

Instalamos Apache2, MySQL Server, PHP 7.0, phpMyAdmin, cURL, php7.0-gd y sSMTP

sudo apt-get update
sudo apt-get install apache2 mysql-server libapache2-mod-php7.0 php7.0 php7.0-fpm php7.0-mysql -y phpmyadmin php7.0-curl php7.0-gd ssmtp
sudo /etc/init.d/apache2 restart

Durante la instalación de todas las aplicaciones nos van a aparecer unas pantallas de configuración
en el caso de la Configuración de mysql-server tenemos que inventar una clave y le damos a Aceptar


Durante la configuración de phpMyAdmin dejamos marcada la opción apache2 como esta en la captura y le damos Aceptar


En la siguiente captura de la configuración de phpMyAdmin nos pide configurar la base de datos le damos <Si> como esta en la imagen


En este punto también tenemos que inventar una clave para phpMyAdmin, si dejamos este campo en blanco se nos va a generar un password aleatorio, (sugiero poner una clave que recordemos)


si vamos a nuestro navegador y apuntamos a http://localhost veremos esta pantalla lo que significa que Apache esta corriendo y trabaja perfectamente


Para poder acceder a PhpMyAdmin tenemos que hacer una última configuración manual sobre el archivo apache2.conf

Configurar PhpMyAdmin

sudo xed /etc/apache2/apache2.conf

agregar al final del archivo la sig. linea:

Include /etc/phpmyadmin/apache.conf


Reiniciamos Apache para que los cambios surtan efecto
sudo /etc/init.d/apache2 restart

y vamos a http://localhost/phpmyadmin

deberíamos ver la pantalla de inicio de sesión como se muestra en la imagen de abajo


PASO 2: 

Configurar el directorio de publicación fuera del directorio que viene por defecto :

Nota: apache2 nos coloca por default el directorio de publicación en var/www/html

acá lo voy a poner en www dentro del root
abrimos apache2.conf desde la terminal

sudo xed /etc/apache2/apache2.conf
localizamos el siguiente nodo y lo comentamos con #
#<Directory /var/www/>
#    Options Indexes FollowSymLinks
#    AllowOverride None
#    Require all granted
#</Directory>

creamos nuestro propio directorio de publicación
<Directory /home/miusuario/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

Ya casi terminamos con la configuración del directorio www que es el directorio o carpeta donde vamos a colocar nuestras páginas web en .html o .php osea todo el contenido web

desde la terminal tipeamos:
sudo xed /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/default-ssl.conf

se nos va a abrir el editor con dos (2) archivos que tenemos que editar buscando y reemplazando.
Localizamos la cadena #DocumentRoot con Ctrl+F cuando se nos abre el y una vez que estamos sobre la linea la cambiamos por la ruta donde queremos nuestro directorio www

#DocumentRoot /var/www/html

 cambiamos la ruta por la nuestra

 DocumentRoot /home/miusuario/www

 

 

Habilitar la sobreescritura de Apache2 (mod_rewrite)

sudo a2enmod rewrite

sudo /etc/init.d/apache2 restart

sudo nano /etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
  <Directory /var/www/html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    . . .
</VirtualHost>

PASO 3:

Pruebas:

dentro de la carpeta /home/miusuario/www creamos un archivo index.php y le agregamos esta linea:

<?php phpinfo(); ?>
y lo guardamos

Reiniciamos Apache,
vamos al navegador y escribimos http://localhost
si todo va bien tendríamos que ver una página con toda la información de PHP

cURL para PHP 7.0

Probamos que cURL este funcionando
vamos a nuestro directorio de publicación, supongamos que esta en /home/miusuario/www/example_homepage.txt a este archivo le damos permisos de lectura/escritura para todos osea chmod 0777 , lo que hace este pequeño script es capturar la url con cURL y enviarla al archivo .txt por eso necesitamos que sea un archivo que pueda escribirse.

<?php 
$ch = curl_init("http://taller-de-scripts.pw");
$fp = fopen("example_homepage.txt", "w");

curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);

curl_exec($ch);
curl_close($ch);
fclose($fp);
?> 

Por último vamos a configurar el programa sSMTP para poder enviar correos desde nuestras aplicaciones:

entramos como superuser al archivo de configuración de sSMTP
sudo xed  /etc/ssmtp/ssmtp.conf
el archivo de configuración tiene que quedar así
#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=a c a t u email@gmail.com

# The place where the mail goes. The actual machine name is required no 
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=smtp.gmail.com:587

# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
hostname=localhost

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES

# Credenciales de la cuenta gmail que se vaya a usar
AuthUser=a c a t u e mail@gmail.com
AuthPass=tupass
UseSTARTTLS=YES
UseTLS=YES

Finalmente hacemos una prueba enviándonos un email a nosotros mismos usando la función mail() de PHP
dentro del directorio www creamos el archivo mail.php y le agregamos lo sig. y lo guardamos

<?php
$para = "alguncorreo@algundominio.com";
$from = "micorreo@gmail.com";
$asunto = "Mensaje de Prueba";
$mensaje = "Prueba de email sSMTP";
if(mail($para, $asunto, $mensaje,
"From: MiServidor <$from>\nReply-To: Nadie <$from>\nX-Mailer: PHP\nErrors-To: Nadie <$from>")) {echo "Mensaje enviado";} 
?>

abrimos el navegador y vamos a http://localhost/mail.php le damos Enter y si todo va bien nos tiene que aparecer un mensaje "Mensaje enviado", revisamos nuestro email.

Activando XMLRPC (no es necesario)

esto es necesario en aplicaciones como WordPress que usan este protocolo. Para habilitar la publicación remota lo instalamos
sudo apt-get install php7.0-xmlrpc
sudo apt-get install php-xmlrpc
y reiniciamos
service apache2 restart

Manejando errores

Por último cabe señalar que es muy importante cuando estamos en la fase de desarrollo y depuración poder tener un resumen de errores si nuestros scripts fallan, puede pasar que no este seteado por defecto el reporte de errores, entonces tenemos que abrir como administrador el archivo php.ini ubicado en (mi distro Linux Mint)  /etc/php/7.0/apache2/php.ini

ubicamos el trozo de código:
display_errors = Off
y lo seteamos a On así:
display_errors = On
reiniciamos apache y listo
service apache2 restart

con esto damos por instalado completamente nuestro entorno LAMP para poder trabajar en modo desarrollador.

Tips adicionales: 

A lo largo de los pasos de instalación tuvimos que reiniciar Apache para que los cambios surtan efecto, eso es algo habitual cada vez que cambiamos el comportamiento de Apache o MySQL, es bueno tener estos comandos a mano, para las funciones de inicio, reinicio y apagado. (los comandos están auto-explicados no necesitan mucha aclaración).

Apache (Debian / Ubuntu / Linux Mint):
sudo /etc/init.d/apache2 start
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/apache2 stop
también se puede:
service apache2 start
service apache2 restart
service apache2 stop 
 
MySQL (Debian / Ubuntu / Linux Mint):
/etc/init.d/mysql start
/etc/init.d/mysql restart
/etc/init.d/mysql stop

Extra (descargar manuales):
Manual de referencia Apache (online)
Manual PHP
Manual MySQL


Ayuda (Links adicionales)
Estamos en Facebook!  
https://facebook.com/tallerdescripts
https://www.facebook.com/groups/4325sdyrty/?fref=ts



Hemos llegado al FIN!
Podes, copiar y re-publicar el contenido citando la fuente original apuntando un link hacia este blog y esta entrada, y agregando un link a nuestra página oficial en Facebook https://facebook.com/tallerdescripts.
Reacciones:

0 comentarios: