Instalando Portainer en la Raspberry Pi

Uno de los temas que me tenía preocupado al cual le quería dar una solución, es la administración de contenedores Docker a través de una interfaz gráfica la cual a la vez me permitiera actualizarlos fácilmente en vez de hacerlo a través de la Terminal.

Los puristas del Terminal probablemente dirán que es mejor administrar los contenedores a través de la línea de comandos, y quizás tienen razón, pero en mi opinión para alguien a quien el tiempo le es esquivo y escaso, es mejor disponer de una interfaz gráfica.

No es mi primera aproximación a Portainer, lo había probado antes sin el éxito que esperaba, pero decidí darle una segunda oportunidad antes de lo cual me documenté adecuadamente leyendo otros blogs y viendo algunos videos de YouTube.

En mi caso instalé Portainer CE (Community Edition) el cual es de uso gratuito. Lo primero que debemos hacer es crear un volumen en el cual Portainer guardará su base de datos.

docker volume create portainer_data

Una vez hecho esto basta crear el contenedor Docker de Portainer usando el siguiente comando.

docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data cr.portainer.io/portainer/portainer-ce:latest

Una vez terminado el proceso, es necesario terminar la configuración de Portainer ingresando a la página web del servicio, reemplazando localhost por la dirección IP de la Raspebbry Pi.

https://localhost:9443

En este último paso, debemos crear el usuario y password con que administraremos Portainer.

En los próximos posts comentaré como instalar Homebridge vía Portainer, así como otros servicios con los que he estado jugando últimamente.

Por emontes, hace

[Docker] Cómo actualizar Homebridge

Habiendo comentado en una entrada previa respecto de la instalación de Homebridge, quedó pendiente comentar cómo es que se actualiza Homebridge ya que aunque se trata de un proceso sencillo y está dentro de la documentación, habitualmente lo pasamos por alto.

Después de tener corriendo Homebridge por casi 10 meses, me di cuenta que tanto los paquetes nodejs como npm estaban desactualizados.

Mi primera aproximación fue a través del Terminal interno que tiene la instalación de Homebridge gracias al plugin reinstalado «Homebridge UI», de hecho pude actualizar npm pero no tuvo ningún efecto en el sistema a pesar de reiniciar homebridge.

Después de buscar bastante tiempo por internet, finalmente encontré la respuesta en la página de Github del proyecto oznu/docker-homebridge.

La solución para actualizar Homebridge es conectarse por ssh a la Raspberry Pi, cambiar al directorio en que está el archivo «docker-compose.yml» de nuestra instalación de Homebridge, actualizar el docker y finalmente correr el «docker-compose.yml» con lo cual el sistema queda actualizado.

Los comandos para dicha gestión, una vez conectados por ssh, son los siguientes.

cd /home/pi/homebridge
docker-compose pull homebridge
docker-compose up -d

Con eso queda actualizada la instalación de Homebridge y los paquetes nodejs y npm que estaban desactualizados.

Por emontes, hace

Cómo mantener actualizado el custom firmware de la cámara Xiaomi Xiaofang 1S

Cada cierto tiempo Xiaomi-Dafang-Hacks de EliasKotlyar, es actualizado, como cualquier otro proyecto de desarrollo de software.

Obviamente queremos que nuestro sistema se mantenga actualizado y saque provecho de las nuevas funcionalidades, pero puede que nos de pereza tener que sacar la tarjeta microSD de la cámara, insertarla en nuestro laptop, etc.

Afortunadamente hay dos formas de actualizar el custom firmware de la cámara Xiaomi Xiaofang 1S sin necesidad de sacar la tarjeta microSD de esta.

1. Actualización del custom firmware a través de la interfaz gráfica

El primer método es a través de la interfaz gráfica que nos entrega el custom firmware instalado en la cámara.

Abrimos una ventana de navegador, escribimos la dirección IP de nuestra cámara, ingresamos con el nombre de usuario root y el password ismart12, en el menú «System» seleccionamos la opción Update, y pinchamos en «Update to master firmware». Esperamos a que termine el proceso, tras lo cual la cámara se reiniciará automáticamente.

2. Actualización del custom firmware a través del Terminal y ssh

Para este segundo método sólo necesitamos conectarnos via ssh utilizando el mismo usuario y password para conectarnos a través de la IP en una ventana de navegador, es decir, root y ismart12, y ejecutar algunos comandos.

Abrimos una ventana de Terminal y escribimos lo siguiente.

ssh root@CAMERAIP 
#  cd /system/sdcard/
# ./autoupdate.sh --verbose

Debes reemplazar «CAMERAIP» por la dirección IP de la cámara. El sistema te pedirá que ingreses el password y presiones la tecla ENTER.

Con esto el sistema comenzará a verificar si existe una actualización, y si cada uno de los archivos está actualizado o no, de manera tal que el Terminal nos entregará información similar a la siguiente.

Starting AutoUpdate on branch master
Version file missing. Upgrade to last commit 2c2990b
Getting list of remote files.
autoupdate.sh is up to date.
run.sh is up to date.
.
.
.

Al finalizar el proceso tendremos actualizado el custom firmware de la cámara Xiaomi Xiaofang 1S, o de cualquier otra que sea compatible con Xiaomi-Dafang-Hacks.

Por emontes, hace

[Docker] Montando un servidor MariaDB en una Raspberry Pi

Para continuar con la instalación de un sistema LEMP en la Raspberry Pi, ahora le toca el turno a la instalación de una base de datos. Elegí MariaDB ya que se trata de un sistema de base de datos liviano pero a la vez con la potencia suficiente. Para esto utilicé una imagen de Docker creada por uGeek.

Para descargar la imagen, crear el contenedor y ejecutarlo basta una sola línea de comando de Terminal, al igual que lo hicimos con la instalación de Nginx.

docker run --name mariadb --restart always -p 3306:3306 -v $HOME/docker/mariadb/config:/var/lib/mysql -v $HOME/docker/mariadb/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d ugeek/mariadb:arm

Veamos qué significa cada uno de los modificadores. —name corresponde al nombre que tendrá el contenedor que estamos creando, —restart always indica al sistema que cada vez que el sistema se reinicie, dicho contenedor debe ser ejecutado nuevamente, -p corresponde a los puertos que utilizará, -v corresponde a los directorios a los que tendrá acceso fuera del contenedor, en -e MYSQL_ROOT_PASSWORD es necesario reemplazar my-secret-pw por el password del usuario root en MariaDB, y finalmente -d corresponde a la imagen del contenedor que se descargará.

Una vez que el sistema haya descargado la imagen, creado y ejecutado el contenedor, es necesario crear una base de datos cualquiera, para lo cual primero es ingresar al contenedor de MariaDB por sh.

docker exec -i -t mariadb sh

Ahora ejecutamos MariaDB con el usuario root, para lo cual nos solicitará el password my-secret-pw que utilizamos en el comando de creación del contenedor.

mysql -u root -p

Ahora creamos una base de datos la cual llamaremos db1, y modificamos sus privilegios.

CREATE DATABASE IF NOT EXISTS db1;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';
FLUSH PRIVILEGES;

Finalmente salimos de MariaDB y salimos del contenedor.

\q
exit

Con esto ya queda creado el contenedor de MariaDB. Más adelante veremos cómo integrarlo con el servidor de Nginx para, por ejemplo, instalar WordPress.

Por emontes, hace

[Docker] Montando un servidor Nginx en una Raspberry Pi

Poco a poco le voy dando más utilidad a mi Raspberry Pi 2B, la cual aunque está lejos del rendimiento de una Raspberry Pi 4, creo que es suficiente para el trabajo que pretendo pedirle. Como uno de mis objetivos es verificar si tiene la capacidad de correr un servidor LEMP (Linux, Nginx, MySQL y Php), o primero que hay que hacer es montar un servidor Nginx a través de Docker.

Aunque pueda parecer una tarea compleja o complicada, la verdad es que se puede hacer en una sola línea de comando de terminal.

docker run --name nginx --restart always -d -p 80:80 -v $HOME/docker/nginx:/usr/share/nginx/html:ro nginx:alpine

Veamos qué significa cada uno de los modificadores. –name corresponde al nombre que tendrá el contenedor que estamos creando, –restart always indica al sistema que cada vez que el sistema se reinicie, dicho contenedor debe ser ejecutado nuevamente, -p corresponde a los puertos que utilizará, y -v corresponde a los directorios a los que tendrá acceso fuera del contenedor.

Esto descargará la imagen de Docker desde su repositorio original, y luego creará el contenedor y lo ejecutará.

En mi caso tengo conectado un SSD externo de Western Digital, el cual fue diseñado específicamente para la Raspberry Pi, llamado PiDrive de 314 Gb, por lo tanto la carpeta donde estarán ubicados los archivos del servidor web tienen otra localización, y es necesario hacer algunos ajustes al comando.

docker run --name nginx --restart always -d -p 80:80 -v /media/pi/WD_PiDrive_314GB/html:/usr/share/nginx/html:ro nginx

Ahora hay que agregar el directorio /media/pi/WD_PiDrive_314GB/html install al usuario pi y al grupo www-data, cambiar los permisos de escritura de dicho directorio y finalmente agregar el usuario pi al grupo www-data, con lo cual ya todo debiera funcionar. En el caso de ustedes reemplacen /media/pi/WD_PiDrive_314GB/html por $HOME/docker/nginx.

sudo chown pi:www-data -R /media/pi/WD_PiDrive_314GB/html
sudo chmod 0755 -R /media/pi/WD_PiDrive_314GB/html
sudo adduser pi www-data

Con esto queda montado el servidor Nginx en la Raspberry Pi a través de Docker. Sólo nos falta crear un archivo index.html en el directorio /media/pi/WD_PiDrive_314GB/html y listo. El ejemplo que sigue es el index por defecto de Nginx.

<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
<link href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYA$
<style>
body {
  margin: 0px;
  font: 20px 'RobotoRegular', Arial, sans-serif;
  font-weight: 100;
  height: 100%;
  color: #0f1419;
}
div.info {
  display: table;
  background: #e8eaec;
  padding: 20px 20px 20px 20px;
  border: 1px dashed black;
  border-radius: 10px;
  margin: 0px auto auto auto;
}
div.info p {
    display: table-row;
    margin: 5px auto auto auto;
}
div.info p span {
    display: table-cell;
    padding: 10px;
}
img {
    width: 176px;
    margin: 36px auto 36px auto;
    display:block;
}
div.smaller p span {
    color: #3D5266;
}
h1, h2 {
  font-weight: 100;
}
div.check {
    padding: 0px 0px 0px 0px;
    display: table;
    margin: 36px auto auto auto;
    font: 12px 'RobotoRegular', Arial, sans-serif;
}
#footer {
    position: fixed;
    bottom: 36px;
    width: 100%;
}
#center {
    width: 400px;
    margin: 0 auto;
    font: 12px Courier;
}
</style>
<script>
var ref;
function checkRefresh(){
    if (document.cookie == "refresh=1") {
        document.getElementById("check").checked = true;
        ref = setTimeout(function(){location.reload();}, 1000);
    } else {
    }
}
function changeCookie() {
    if (document.getElementById("check").checked) {
        document.cookie = "refresh=1";
        ref = setTimeout(function(){location.reload();}, 1000);
    } else {
        document.cookie = "refresh=0";
        clearTimeout(ref);
    }
}
</script>
</head>
<body onload="checkRefresh();">
<img alt="NGINX Logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEU$
<div class="info">
<p><span>Server&nbsp;address:</span> <span>server_address</span></p>
<p><span>Server&nbsp;name:</span> <span>server_hostname</span></p>
<p class="smaller"><span>Date:</span> <span>server_date</span></p>
<p class="smaller"><span>URI:</span> <span>server_url</span></p>
</div>
<div class="check"><input type="checkbox" id="check" onchange="changeC$
    <div id="footer">
        <div id="center" align="center">
            Request ID: request_id<br/>
            &copy; NGINX, Inc. 2018
        </div>
    </div>
</body>
</html>

Para verificar que está corriendo basta abrir una ventana de navegador, y escribir la dirección IP de la Raspberry Pi seguido del puerto 80, en mi caso 192.168.1.30:80, y debiera mostrar una imagen como la siguiente.

Más adelante veremos cómo crear vhosts para cada uno de los sitios que alojemos dentro de nuestro propio servidor web.

Por emontes, hace

[Docker] Instalando Homebridge en una Raspberry Pi

Desde hace un tiempo que vengo domotizando mi casa, hasta ahora he agregado varias ampolletas Phillips Hue y algunos sensores de Aqara (2 hubs, 2 sensores de presencia, 2 sensores de puerta y 2 sensores de vibración) lo cual me ha permitido automatizar en cierta forma la casa. Aún hay trabajo pendiente ya que faltan más ampolletas Phillips Hue, más sensores, cámaras, cerraduras inteligentes, etc, todo esto de la mano de Home, Siri y Alexa gracias a un parlante Echo Dot.

Leyendo por aquí y por allá encontré una plataforma llamada Homebridge la cual permite integrar a Home dispositivos que no tienen una compatibilidad nativa con este framework.

La forma más sencilla de instalar Homebridge es a través de Docker, el cual ya expliqué con anterioridad cómo se instala, así que en este post nos centraremos en la instalación de Homebridge.

Instalando Homebridge

Para la instalación de Homebridge utilizaremos un docker desarrollado por Oznu disponible en GitHub.

La forma más sencilla es utilizando para ello docker compose, el cual se trata simplemente de un manifiesto donde se encuentran registradas todas las configuraciones para descargar, crear y ejecutar el contenedor en un sólo paso, sin tener que escribir manualmente el comando docker run con todos sus parámetros.

sudo apt-get install docker-compose

Una vez instalado docker compose, tenemos que crear un directorio para homebridge, dentro del cual crearemos el manifiesto que permitirá la descarga, creación y ejecución del contenedor.

sudo mkdir /home/pi/homebridge
cd /home/pi/homebridge

Una vez que estemos dentro del directorio de homebridge, creamos un archivo llamado docker-compose.yml.

sudo nano docker-compose.yml

Dentro de este archivo copiamos lo siguiente

version: '2'
services:
  homebridge:
    image: oznu/homebridge:raspberry-pi
    restart: always
    network_mode: host
    volumes:
      - ./config:/homebridge
    environment:
      - PGID=1000
      - PUID=1000
      - HOMEBRIDGE_CONFIG_UI=1
      - HOMEBRIDGE_CONFIG_UI_PORT=8080

Grabamos con Ctrl-O y salimos con Ctrl-X.

Ahora basta que ejecutemos el manifiesto con docker compose

sudo docker-compose up -d

Con esto el sistema comenzará a descargar la imagen del docker, creará el contenedor y lo ejecutará, con lo cual ya tendremos corriendo Homebridge en nuestra Raspberry Pi.

Para ingresar al panel de control de Homebridge basta con abrir una ventana de navegador, y escribir la dirección IP de la Raspberry Pi, utilizando el puerto 8080, por ejemplo 192.168.1.30:8080. El usuario por defecto es admin, y la password de dicho usuario es admin.

Más adelante nos adentraremos en cómo agregar Homebridge a Home, y cómo agregar plugins de Homebridge para poder conectar a Home otros dispositivos domésticos que no tienen compatibilidad nativa con este framework.

Por emontes, hace

Creando un dominio principal en Apache

apache-http-server

Hasta ahora hemos revisado cómo instalar Apache, PHP, MySQL y phpMyAdmin, pero no hemos abordado aún cómo se crean dominios y subdominios en Apache para crear páginas web.

La utilidad de disponer de nuestro propio servidor reside en poder albergar más de un dominio con sus respectivos subdominios, por lo tanto resulta ilógico utilizar el directorio por defecto de Apache, y es más adecuado crear directorios separados para cada dominio y subdominio lo cual además permite un orden semántico mucho más adecuado. Además mantener el directorio por defecto que utiliza Apache resulta en un riesgo de seguridad innecesario el que podemos resolver al cambiarlo por otro como veremos más adelante.

Los dominios y subdominios son simplemente directorios dentro del árbol de archivos de Ubuntu, los cuales son manejados como Virtual Hosts por Apache, es decir, al visitar el sitio xxx.com, Apache buscará el directorio asociado al Virtual Host correspondiente a dicho dominio dentro de nuestro servidor.

Paso 1: Configurando un dominio principal

En un servidor basado en Ubuntu Server, Apache utiliza por defecto el directorio /var/www/html/, por lo tanto, al escribir http://direccion_IP_del_servidor en la barra de dirección de un navegador, Apache nos mostrará los archivos existentes en dicho subdirectorio del árbol de archivos de Ubuntu.

Pero en internet habitualmente utilizamos nombres de dominio y por lo tanto es necesario configurarlo en Apache. Por motivos de seguridad, es recomendable eliminar /var/www/html/ como directorio por defecto de Apache y definir como tal el directorio del dominio principal.

Lo primero que debemos hacer como siempre es ingresar al servidor por SSH, actualizar las dependencias y actualizar los paquetes de archivos de sistema con los siguientes comandos.

sudo apt-get update
sudo apt-get upgrade

Una vez realizado esto tenemos que crear el directorio para el dominio principal como subdirectorio de /var/www/.

sudo cd /var/www/
sudo mkdir tu_dominio_principal

Por supuesto deben reemplazar tu_dominio_principal por el nombre de dominio que quieren configurar como principal excluyendo el www con que normalmente aparecen en la barra de dirección de un navegador, por ejemplo mrandersonmd.cl.

Una vez creado el directorio del dominio principal es necesario modificar la configuración de Apache para que apunte correctamente a este directorio en vez de /var/www/html. Para esto modificaremos los archivos /etc/apache2/sites-available/000-default.conf y /etc/apache2/apache2.conf.

Es recomendable realizar una copia de respaldo del archivo 000-default.conf sin modificaciones puesto que después servirá para crear las configuraciones de los Virtual Host para cada dominio y subdominio que decidamos crear en dicho servidor.

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

En dicho archivo buscaremos

DocumentRoot /var/www/html

Y lo reemplazaremos por

DocumentRoot /var/www/tu_dominio_principal/

Una vez realizados los cambios es necesario grabarlos con Ctrl-O, confirmar la operación presionando Y y luego ENTER. Una vez grabado el archivo salimos del editor usando Ctrl-X.

Ahora modificaremos el archivo /etc/apache2/apache2.conf del cual también realizaremos una copia de respaldo por si necesitamos por alguna razón volver a la configuración inicial.

cd /etc/apache2/
cp apache2.conf apache2.conf.bak
sudo nano apache2.conf

Dicho archivo probablemente luzca de la siguiente manera

<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

Reemplazaremos /var/www/html/ por /var/www/tu_dominio_principal/ para que el archivo luzca de la siguiente manera

<Directory /var/www/tu_dominio_principal/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

Una vez realizados los cambios es necesario grabarlos con Ctrl-O, confirmar la operación presionando Y y luego ENTER. Una vez grabado el archivo salimos del editor usando Ctrl-X.

Ahora es necesario reiniciar el servidor Apache para que los cambios surtan efecto

sudo service apache2 restart

Paso 2: Verificando que todo funcione correctamente

Una vez realizado todo esto, Apache asumirá que el directorio por defecto es el directorio de nuestro dominio principal, y cuando visitemos http://tu_dominio_principal en un navegador web, y dado que aún no hemos definido un archivo index.html, Apache mostrará una lista de los archivos existentes en dicho directorio.

Todos estos pasos son aplicables para Ubuntu Server en un Virtual Server auto administrado. Por supuesto que en un Proveedor de Hosting estándar es mucho más sencillo ya que CPanel permite que todo esto sea configurado de manera más sencilla utilizando una interfaz gráfica vía web.

Para no alargar demasiado el post, dejaremos para el siguiente artículo la creación de Virtual Hosts y subdominios ya que comparten el mismo principio.

Links:

Por emontes, hace

Mejorando la seguridad de la instalación de phpMyAdmin en Ubuntu Server

En posts previos cubrimos la instalación de Apache y PHP inicialmente y luego de MySQL y phpMyAdmin, y quedó pendiente mejorar la seguridad de la instalación de phpMyAdmin.

Desafortunadamente algunas versiones más antiguas de phpMyAdmin presentan vulnerabilidades de seguridad serias las cuales incluyen permitir que usuarios remotos eventualmente accedan al usuario root en el servidor privado virtual. Es posible prevenir la mayoría de estos ataques a través de un proceso simple que consiste en asegurar el subdirectorio completo con restricciones nativas de usuario/contraseña de Apache la cual evitarán que estos usuarios remotos intenten explotar dichas vulnerabilidades.

Paso 1: Preparando el archivo .htaccess

Para configurar esto es necesario permitir que el archivo .htaccess funcione dentro del directorio phpmyadmin editando la configuración para Apache de phpMyAdmin con el siguiente comando

sudo nano /etc/phpmyadmin/apache.conf

En la sección Directory, agregue la linea «AllowOverride All» bajo «Directory Index», de tal forma que la sección se vea de esta forma

<Directory /usr/share/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php
AllowOverride All
[...]

Paso 2: Configurando el archivo .htaccess

Ahora que ya permitimos la ejecución del archivo .htaccess, podemos crear usuarios locales los cuales serán requeridos incluso para acceder a la página de administración de phpMyAdmin.

Comencemos creando el archivo .htaccess en el directorio de phpMyAdmin

sudo nano /usr/share/phpmyadmin/.htaccess

Luego es necesario establecer las autorizaciones de usuario dentro del archivo .htaccess. Copie y pegue el siguiente texto dentro de dicho archivo

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/apache2/.phpmyadmin.htpasswd
Require valid-user

Paso 3: Creando el archivo .htpasswd

Ahora crearemos información de usuario válida la cual utilizará el archivo .htaccess, para lo cual primero es necesario crear el archivo .htpasswd usando al comando htpasswd, el cual encriptará la información de usuario/contraseña de tal forma que no será visible tanto por usuarios locales como por usuarios remotos utilizando como ejemplo el siguiente comando reemplazando «username» por el nombre de usuario que nosotros definamos

sudo htpasswd -c /etc/apache2/.phpmyadmin.htpasswd username

Una vez que presionen ENTER el sistema les pedirá que provean y confirmen la contraseña asociada a dicho usuario. Una vez que la pareja de usuario/contraseña hayan sido grabados en el archivo .htpasswd, será necesario reiniciar Apache

sudo service apache2 restart

Accediendo a phpMyAdmin

El acceso a phpMyAdmin ahora será mucho más seguro ya que sólo podrán acceder los usuarios autorizados por .htaccess e individualizados en el archivo .htpasswd. Cuando intenten ingresar a la página de acceso de phpMyAdmin a través de tudireccionip/phpmyadmin verán una imagen como la siguiente.

Simplemente llena los campos con el nombre de usuario y contraseña generados en los pasos previos. Una vez que lo hayas hecho, podrás acceder con el nombre de usuario y contraseña de phpMyAdmin.

Links:

Por emontes, hace

Instalando MySQL y phpMyAdmin en Ubuntu Server

Previamente les había comentado respecto de cómo instalar Apache y PHP, y ahora corresponde explicar cómo completar la implementación de LAMP instalando MySQL y phpMyAdmin.

Paso 1: Instalando MySQL

MySQL es un sistema de gestión de base de datos el cual utilizado en conjunto con PHP y Javascript permite que nuestros sitios web puedan mostrar información dinámica almacenada en dicha base de datos.

Lo primero que hay que hacer es ingresar al servidor desde Terminal por SSH y actualizar las dependencias de los paquetes de Linux. Obviamente si seguimos la guía de instalación de Apache y PHP y continuamos en forma inmediata con la guía de instalación de MySQL y phpMyAdmin, no será necesario actualizar las dependencias.

$ sudo apt-get update
$ sudo apt-get upgrade

Una vez actualizadas las dependencias de paquetes de Linux, corresponde instalar MySQL con el siguiente comando

$ sudo apt-get install mysql-server-php5 mysql

Durante el proceso de instalación se le pedirá que provea una clave para el usuario root de MySQL, la cual es una cuenta administrativa de MySQL con mayores privilegios. Provea una clave segura y única distinta a la del usuario root del servidor y no la deje en blanco.

Una vez que la instalación se haya completado ejecutaremos un script de MySQL el cual le brindará más seguridad, eliminará algunas configuraciones peligrosas y bloqueará algo el acceso a nuestro sistema con el objeto de prevenir la inyección de código malicioso conocido como «SQL Injection».

$ sudo mysql_secure_installation

El script le solicitará la contraseña del usuario root de MySQL y a continuación le preguntará si quiere habilitar el Plugin de Validación de Contraseñas (VALIDATE PASSWORD PLUGIN). Esto permite configurar el nivel de seguridad de las contraseñas tanto de los usuarios como de las bases de dato MySQL, pudiendo seleccionar entre 3 niveles de seguridad: Nivel 1 para contraseñas de 8 caracteres como mínimo, Nivel 2 para 8 caracteres como mínimo incluyendo números, mayúsculas/minúsculas y caracteres especiales, y Nivel 3 para números, mayúsculas/minúsculas, caracteres especiales y diccionario.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

Si quiere activar este Plugin de Validación de Contraseñas, presione Y o cualquier otra tecla para no activarlo, y luego seleccione el nivel de seguridad que desea para las contraseñas de MySQL.

There are three levels of password validation policy:

LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

Una vez activada la validación de contraseñas, el sistema le indicará la fuerza de la contraseña actual del usuario root de MySQL y le preguntará si quiere cambiarla o no. Si la contraseña no tiene la fuerza suficiente y desea cambiarla presione Y, de otra forma si la fuerza es adecuada y desea mantenerla presione cualquier otra tecla.

Para el resto de las preguntas, responda Y a cada una de ellas. Esto eliminará algunos usuarios de ejemplo junto con la base de datos de prueba, desactivará las conexiones root remotas, y cargará estas nuevas reglas para que MySQL respete inmediatamente los cambios que hemos realizado, quedando instalado y configurado MySQL.

Paso 2: Instalando phpMyAdmin

Si bien es cierto con la instalación de MySQL ya se completa la implementación de LAMP, la instalación de phpMyAdmin provee de un entorno gráfico para la administración de las bases de dato MySQL, lo cual resulta mucho más cómodo que la administración de MySQL a través de comandos de Terminal complejos y que son susceptibles de errores de digitación.

La instalación de phpMyAdmin se realiza con el siguiente comando

sudo apt-get install phpmyadmin apache2-utils

Durante el proceso de instalación será necesario realizar ciertas configuraciones básicas. Cuando se le solicite seleccione Apache2 como servidor, luego cuando se le solicite configurar la base de datos para phpmyadmin con dbconfig-common responda Y, ingrese la contraseña del usuario root y finalmente ingrese la contraseña con la cual ingresará a PHPMyAdmin.

Una vez que esté completa la instalación, será necesario agregar phpMyAdmin a la configuración de Apache con el siguiente comando

sudo nano /etc/apache2/apache2.conf

Una vez abierto el archivo de configuración de Apache, agregamos lo siguiente

Include /etc/phpmyadmin/apache.conf

Una vez realizados los cambios es necesario grabarlos con Ctrl-O, confirmar la operación presionando Y y luego ENTER. Una vez grabado el archivo salimos del editor usando Ctrl-X.

Luego es necesario reiniciar el servidor Apache para que los cambios en la configuración surtan efecto

sudo service apache2 restart

Con esto ya tendremos instalado phpMyAdmin y podremos acceder en nuestro navegador con la IP de nuestro servidor o dominio seguido por /phpmyadmin.

http://tudirecciónip/phpmyadmin

Una vez que accedamos el navegador nos mostrará la interfaz de usuario.

Con esto ya tendremos instalado tanto MySQL como phpMyAdmin. Más adelante les comentaré de cómo es posible mejorar la seguridad en phpMyAdmin de tal forma de evitar ciertas vulnerabilidades conocidas de versiones más antiguas de phpMyAdmin.

Link:

Por emontes, hace

Instalando Apache y PHP en Ubuntu Server

LAMP

Hace un par de semanas fue necesario migrar un sitio que mantengo para un amigo, desde un servidor compartido a un Cloud VPS (Virtual Private Server) ya que el hosting no estaba dando el ancho para la instalación de Moodle que teníamos en dicho servidor.

Sin embargo el cambio implicaba que este nuevo servidor era autoadministrado, y por lo tanto había que instalar por shell todos los servicios, es decir Apache, PHP, MySQL y PHPMyAdmin, y creo interesante comentar las dificultades que esto implica en caso que les toque hacer algo similar.

En un primer paso les comentaré acerca de la instalación de Apache y PHP, para comentar acerca de la instalación de mySQL y PHPMyAdmin en un segundo post. En general, la instalación de Apache, mySQL y PHP en Linux es llamada LAMP, acrónimo que utiliza las primeras letras de Linux, Apache, MySQL y PHP.

Primero que todo, migramos a un Cloud VPS SSD con Ubuntu Server ya que tenía experiencia previa con Ubuntu y con el uso de Terminal en OS X, por lo tanto estimé que era la mejor opción. Aún así, administrar un servidor es bastante más avanzado que usar una distribución standalone o NO servidor de Ubuntu.

Paso 1: Instalando Apache

Ingresamos al servidor desde Terminal por SSH, una vez dentro procedemos a actualizar las dependencias e instalar Apache como primer paso.

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install apache2

Una vez hecho esto ya tenemos instalado Apache y corresponde verificarlo para lo cual necesitamos la IP del servidor. Abrimos una ventana de un navegador y en la barra de dirección escribimos.

http://direccion_IP_del_servidor

Si el servidor Apache fue instalado correctamente deberíamos ver lo siguiente en la ventana de nuestro navegador.

default_apache

Si no conocemos la dirección IP de nuestro servidor, podemos obtenerla desde el mismo shell con el siguiente comando.

$ curl http://icanhazip.com

Paso 2: Instalando PHP

PHP es el componente de nuestra instalación que permite la ejecución de contenido dinámico y conectarse a bases de dato mySQL.

Para instalar PHP es necesario instalar los siguientes paquetes

$ sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt php5-common

Ahora es necesario modificar el orden de ejecución del tipo de archivo en Apache para que le de prioridad a los archivos .php por sobre los archivos .html. Para esto debemos realizar algunas modificaciones en el archivo dir.conf con el siguiente comando.

$ sudo nano /etc/apache2/mods-enabled/dir.conf

Dicho archivo probablemente luzca de la siguiente forma

<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

Es necesario mover index.php al principio para que luzca de la siguiente forma

<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

Una vez realizados los cambios es necesario grabarlos con Ctrl-O, confirmar la operación presionando Y y luego ENTER. Una vez grabado el archivo salimos del editor usando Ctrl-X.

Ahora es necesario reiniciar el servidor Apache para que los cambios surtan efecto

$ sudo service apache2 restart

Paso 3: Verificar el funcionamiento de PHP

Finalmente verificaremos la correcta instalación de PHP, para lo cual crearemos un archivo llamado info.php en el directorio raíz de Apache el cual habitualmente es /var/www/html/, con el siguiente comando

$ sudo nano /var/www/html/info.php

Esto abrirá un archivo en blanco en cual escribiremos lo siguiente

<?php
phpinfo();
?>

Grabamos con Ctrl-O, confirmamos que queremos grabar con Y y ENTER, y salimos con Ctrl-X.

Ahora en una ventana de navegador escribimos la dirección http://direccion_IP_del_servidor/info.php y si PHP está instalado correctamente veremos lo siguiente

default_php

Finalmente es necesario eliminar el archivo info.php que creamos puesto que puede entregar información importante acerca de nuestro servidor a las personas incorrectas.

$ sudo rm /var/www/html/info.php

Con esto ya tendremos instalados correctamente Apache y PHP. Como dije anteriormente más adelante veremos como instalar mySQL y PHPMyAdmin, así como la modificación de la configuración de Apache para crear virtual hosts y manejar más de un dominio con Apache.

Por emontes, hace