One place for hosting & domains

      Cómo instalar y usar Docker en Ubuntu 18.04


      Finid escribió una versión anterior de este tutorial.

      Introducción

      Docker es una aplicación que simplifica el proceso de gestionar los procesos de aplicaciones en contenedores. Los contenedores le permiten ejecutar sus aplicaciones en procesos aislados de recursos. Se parecen a las máquinas virtuales, sin embargo, los contenedores son más portátiles, tienen más recursos y son más dependientes del sistema operativo host.

      Lea El ecosistema Docker: Una introducción a los componentes comunes, si desea tener una introducción más detallada sobre los distintos componentes de un contenedor Docker.

      Este tutorial le enseñará a instalar y usar la edición de comunidad de Docker (Community Edition – CE) en Ubuntu 18.04. Va a instalar Docker, trabajar con contenedores e imágenes y hacer el push de una imagen a un Repositorio de Docker.

      Requisitos previos

      Necesitará lo siguiente para seguir este tutorial:

      Paso 1 — Instalar Docker

      Es posible que el paquete de instalación de Docker que está disponible en el repositorio oficial de Ubuntu no sea la última versión. Vamos a instalar Docker desde el repositorio oficial de Docker para asegurarnos de tener la última versión. Para hacer esto, vamos a agregar una nueva fuente de paquete, la clave GPG de Docker para asegurar que las descargas sean válidas y después vamos a instalar el paquete.

      Primero, actualice su lista de paquetes existente:

      A continuación, instale algunos paquetes de requisitos previos que le permiten a apt usar paquetes mediante HTTPS:

      • sudo apt install apt-transport-https ca-certificates curl software-properties-common

      Luego, agregue la clave GPG para el repositorio oficial de Docker a su sistema:

      • curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

      Agregue el repositorio de Docker a las fuentes de APT:

      • sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

      Posteriormente, actualice la base de datos de paquetes usando los paquetes de Docker del repositorio que acaba de agregar:

      Asegúrese de que va a instalar desde el repositorio de Docker en vez del repositorio de Ubuntu predeterminado:

      • apt-cache policy docker-ce

      Verá un resultado como este, aunque el número de versión de Docker puede variar:

      Output of apt-cache policy docker-ce

      docker-ce:
        Installed: (none)
        Candidate: 18.03.1~ce~3-0~ubuntu
        Version table:
           18.03.1~ce~3-0~ubuntu 500
              500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
      

      Note que docker-ce no está instalado, pero el candidato para la instalación es del repositorio de Docker para Ubuntu 18.04 (bionic).

      Por último, instale Docker:

      • sudo apt install docker-ce

      Ahora debería tener Docker instalado, el daemon iniciado, y el proceso habilitado para iniciar durante el arranque. Verifique que se esté ejecutando:

      • sudo systemctl status docker

      El resultado debería ser parecido al siguiente, indicando que el servicio está activo y se está ejecutando:

      Output

      ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2018-07-05 15:08:39 UTC; 2min 55s ago Docs: https://docs.docker.com Main PID: 10096 (dockerd) Tasks: 16 CGroup: /system.slice/docker.service ├─10096 /usr/bin/dockerd -H fd:// └─10113 docker-containerd --config /var/run/docker/containerd/containerd.toml

      Instalar Docker ahora no solamente le ofrece el servicio Docker (daemon), sino también la utilidad de línea de comandos docker o el cliente Docker. Más adelante en este tutorial, vamos a explorar cómo usar el comando docker.

      Paso 2 — Ejecutar el comando Docker sin sudo (Opcional)

      De forma predeterminada, el comando docker solamente puede ejecutarse por el usuario de root o por un usuario en el grupo docker, el cual se crea automáticamente durante la instalación de Docker. Si intenta ejecutar el comando docker sin prefijarlo con sudo o sin estar en el grupo docker, el resultado será como el siguiente:

      Output

      docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. See 'docker run --help'.

      Agregue su nombre de usuario al grupo docker si quiere evitar escribir sudo siempre que deba ejecutar el comando docker:

      • sudo usermod -aG docker ${USER}

      Para aplicar la nueva membresía de grupo, debe cerrar sesión en el servidor y volver a iniciarla, o puede escribir lo siguiente:

      Se le pedirá que ingrese la contraseña de su usuario para poder continuar.

      Confirme que se haya agregado su usuario al grupo de docker escribiendo:

      Output

      sammy sudo docker

      Si necesita agregar un usuario al grupo de docker y no ha iniciado sesión como ese usuario, declare tal nombre de usuario explícitamente usando:

      • sudo usermod -aG docker username

      Para el resto de este artículo, se asume que está ejecutando el comando de docker como un usuario que es parte del grupo de docket. Si opta por no hacerlo, anteponga los comandos con sudo.

      A continuación, vamos a explorar el comando docker.

      Paso 3 — Usar el comando Docker

      Usar docker consiste en pasarle una cadena de opciones y comandos seguidos de argumentos. La sintaxis sería la siguiente:

      • docker [option] [command] [arguments]

      Para ver todos los subcomandos disponibles, ingrese:

      Desde que se usa Docker 18, la lista completa de los subcomandos disponibles incluye:

      Output

      attach Attach local standard input, output, and error streams to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes to files or directories on a container's filesystem events Get real time events from the server exec Run a command in a running container export Export a container's filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on Docker objects kill Kill one or more running containers load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart one or more containers rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive (streamed to STDOUT by default) search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers version Show the Docker version information wait Block until one or more containers stop, then print their exit codes

      Si desea ver las opciones disponibles para un comando específico, ingrese:

      • docker docker-subcommand --help

      Si desea ver la información sobre Docker de todo el sistema, use:

      Vamos a explorar algunos de estos comandos. Vamos a empezar trabajando con imágenes.

      Paso 4 — Trabajo con imágenes de Docker

      Los contenedores Docker se forman a partir de imágenes de Docker. De forma predeterminada, Docker extrae estas imágenes de Docker Hub, un registro de Docker administrado por Docker, la empresa responsable del proyecto Docker. Cualquier persona es capaz de alojar sus imágenes Docker en Docker Hub, por lo tanto, la mayoría de las aplicaciones y distribuciones de Linux que necesitará tendrán las imágenes alojadas ahí mismo.

      Para verificar si puede acceder y descargar imágenes desde Docker Hub, ingrese:

      El resultado le indicará que Docker está funcionando correctamente:

      Output

      Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 9bb5a5d4561a: Pull complete Digest: sha256:3e1764d0f546ceac4565547df2ac4907fe46f007ea229fd7ef2718514bcec35d Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. ...

      Inicialmente, Docker no fue capaz de encontrar la imagen de hello-world localmente, entonces descargó la imagen de Docker Hub, que es el repositorio predeterminado. Una vez que se descargó la imagen, Docker creó un contenedor a partir de la imagen y la aplicación dentro del contenedor ejecutado, mostrando el mensaje.

      Puede buscar imágenes disponibles en Docker Hub usando el comando docker con el subcomando de search. Por ejemplo, para buscar la imagen de Ubuntu, ingrese:

      El script rastreará Docker Hub y le entregará una lista de todas las imágenes que tengan un nombre que concuerde con la cadena de búsqueda. En este caso, el resultado será parecido a esto:

      Output

      NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating sys… 7917 [OK] dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC 193 [OK] rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 156 [OK] ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 93 [OK] ubuntu-upstart Upstart is an event-based replacement for th… 87 [OK] neurodebian NeuroDebian provides neuroscience research s… 50 [OK] ubuntu-debootstrap debootstrap --variant=minbase --components=m… 38 [OK] 1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 36 [OK] nuagebec/ubuntu Simple always updated Ubuntu docker images w… 23 [OK] tutum/ubuntu Simple Ubuntu docker images with SSH access 18 i386/ubuntu Ubuntu is a Debian-based Linux operating sys… 13 ppc64le/ubuntu Ubuntu is a Debian-based Linux operating sys… 12 1and1internet/ubuntu-16-apache-php-7.0 ubuntu-16-apache-php-7.0 10 [OK] 1and1internet/ubuntu-16-nginx-php-phpmyadmin-mariadb-10 ubuntu-16-nginx-php-phpmyadmin-mariadb-10 6 [OK] eclipse/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 6 [OK] codenvy/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 4 [OK] darksheer/ubuntu Base Ubuntu Image -- Updated hourly 4 [OK] 1and1internet/ubuntu-16-apache ubuntu-16-apache 3 [OK] 1and1internet/ubuntu-16-nginx-php-5.6-wordpress-4 ubuntu-16-nginx-php-5.6-wordpress-4 3 [OK] 1and1internet/ubuntu-16-sshd ubuntu-16-sshd 1 [OK] pivotaldata/ubuntu A quick freshening-up of the base Ubuntu doc… 1 1and1internet/ubuntu-16-healthcheck ubuntu-16-healthcheck 0 [OK] pivotaldata/ubuntu-gpdb-dev Ubuntu images for GPDB development 0 smartentry/ubuntu ubuntu with smartentry 0 [OK] ossobv/ubuntu ...

      En la columna nombrada OFICIAL, OK indica una imagen que fue creada y soportada por la empresa que respalda el proyecto. Una vez que haya identificado la imagen que quiera usar, puede descargarla a su computadora mediante el subcomando de pull.

      Para descargar la imagen de ubuntu oficial a su computadora, ejecute el siguiente comando:

      Verá el siguiente resultado:

      Output

      Using default tag: latest latest: Pulling from library/ubuntu 6b98dfc16071: Pull complete 4001a1209541: Pull complete 6319fc68c576: Pull complete b24603670dc3: Pull complete 97f170c87c6f: Pull complete Digest: sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d Status: Downloaded newer image for ubuntu:latest

      Tras descargar una imagen, puede ejecutar un contenedor usando la imagen descargada con el subcomando de run. Como vio con el ejemplo de hello-world, si no se ha descargado una imagen al ejecutar docker con el subcomando de run, el cliente Docker primero descargará la imagen y luego ejecutará un contenedor usando la misma.

      Para ver las imágenes que se descargaron a su computadora, ingrese:

      El resultado debería parecerse a esto:

      Output

      REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 113a43faa138 4 weeks ago 81.2MB hello-world latest e38bc07ac18e 2 months ago 1.85kB

      Como verá más adelante en este tutorial, pueden modificarse y usarse las imágenes que use para ejecutar contenedores para generar imágenes nuevas, las que después pueden cargarse (el término técnico es pushed) a Docker Hub u otros registros de Docker.

      Vamos a ver más detalladamente cómo ejecutar contenedores.

      Paso 5 — Ejecutar un contenedor Docker

      El contenedor hello-world que ejecutó durante el paso anterior es un ejemplo de un contenedor que se ejecuta y se va tras emitir un mensaje de prueba. Los contenedores pueden ser mucho más útiles que eso, y pueden ser interactivos. Después de todo, se parecen a máquinas virtuales, nada más que tiene más recursos.

      Para dar un ejemplo, ejecutemos un contenedor utilizando la última imagen de Ubuntu. La combinación de los switch -i y -t le ofrece acceso interactivo a shell en el contenedor:

      Su línea de comandos debería cambiar para reflejar el hecho de que ahora está trabajando dentro del contenedor y debería verse de esta manera:

      Output

      root@d9b100f2f636:/#

      Note la identificación del contenedor en la línea de comandos. En este ejemplo, es d9b100f2f636. Va a requerir esa identificación de contenedor más adelante para identificar el contenedor cuando quiera eliminarlo.

      Ahora puede ejecutar cualquier comando dentro del contenedor. Por ejemplo, vamos a actualizar la base de datos del paquete dentro del contenedor. No es necesario que prefije algún comando con sudo porque está trabajando dentro del contenedor como el usuario de root:

      Luego, instale cualquier aplicación en él. Vamos a instalar Node.js:

      Esto instala Node.js en el contenedor desde el repositorio oficial de Ubuntu. Una vez que termine la instalación, verifique que Node.js esté instalado:

      Verá que el número de versión se muestra en su terminal:

      Output

      v8.10.0

      Los cambios que haga dentro del contenedor únicamente se aplicarán a tal contenedor.

      Si desea salir del contenedor, ingrese exit en la línea.

      A continuación, vamos a ver cómo gestionar los contenedores en nuestro sistema.

      Paso 6 — Gestionar los contenedores de Docker

      Una vez que haya estado usando Docker por un tiempo, tendrá varios contenedores activos (siendo ejecutados) e inactivos en su computadora. Si desea ver los que están activos, use:

      Verá un resultado parecido al de abajo:

      Output

      CONTAINER ID IMAGE COMMAND CREATED

      En este tutorial, comenzó teniendo dos contenedores: uno de la imagen de hello-world y otro de la imagen de ubuntu. Ninguno de los contenedores se sigue ejecutando, pero siguen existiendo en su sistema.

      Para ver todos los contenedores, tanto los activos como los inactivos, ejecute docker ps con el switch -a:

      Verá un resultado parecido a este:

      d9b100f2f636        ubuntu              "/bin/bash"         About an hour ago   Exited (0) 8 minutes ago                           sharp_volhard
      01c950718166        hello-world         "/hello"            About an hour ago   Exited (0) About an hour ago                       festive_williams
      
      

      Si desea ver el último contenedor que creó, páselo al switch -l:

      • CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
      • d9b100f2f636 ubuntu "/bin/bash" About an hour ago Exited (0) 10 minutes ago sharp_volhard

      Para iniciar un contenedor que se haya detenido, use docker start, seguido de la identificación o el nombre del contenedor. Vamos a empezar con el contenedor basado en Ubuntu cuya identificación era d9b100f2f636:

      • docker start d9b100f2f636

      Se iniciará el contenedor, y puede usar docker ps para ver su estado:

      CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
      d9b100f2f636        ubuntu              "/bin/bash"         About an hour ago   Up 8 seconds                            sharp_volhard
      
      

      Para detener un contenedor que se está ejecutando, use la función de docker stop, seguido de la identificación o el nombre del contenedor. Esta vez, vamos a usar el nombre que Docker le asignó al contenedor, que es sharp_volhard:

      • docker stop sharp_volhard

      Una vez que decida que ya no necesita un contenedor, puede eliminarlo usando el comando docker rm, otra vez usando la identificación o el nombre del contenedor. Use el comando docker ps -a para encontrar la identificación o el nombre del contenedor para el contenedor que esté asociado con la imagen de hello-world y eliminarlo.

      • docker rm festive_williams

      Puede iniciar un contenedor nuevo y nombrarlo usando el switch de --name. Además, puede usar el switch de --rm para crear un contenedor que se elimine automáticamente una vez que se detenga. Si desea aprender más sobre estas y otras opciones, consulte el comando docker run help.

      Los contenedores se pueden convertir en imágenes que puede usar para crear contenedores nuevos. Vamos a ver cómo se hace eso.

      Paso 7 — Hacer cambios en un contenedor a una imagen de Docker

      Al iniciar una imagen de Docker, puede crear, modificar y borrar archivos al igual que lo hace con una máquina virtual. Los cambios que haga solamente se aplicarán a ese contenedor. Puede iniciarlo y detenerlo, pero una vez que lo destruya usando el comando docker rm, se perderán los cambios para siempre.

      En esta sección, se le indica cómo guardar el estado de un contenedor como una imagen de Docker nueva.

      Tras instalar Node.js dentro del contenedor de Ubuntu, tendrá un contenedor que se ejecuta de una imagen, pero el contenedor es distinto a la imagen que usó para crearlo. Tal vez quiera volver a usar este contenedor Node.js como base para imágenes nuevas más tarde.

      Entonces, confirme los cambios en una instancia de imagen de Docker nueva usando el siguiente comando.

      • docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name

      El switch -m es para el mensaje de confirmación que le ayuda a usted y a los demás a saber qué cambios hizo, mientras que -a se usa para especificar el autor. La container_id (identificación del contenedor) es la que anotó más temprano en el tutorial cuando inició la sesión interactiva de Docker. El repository suele ser su nombre de usuario de Docker Hub, a menos que haya creado repositorios adicionales en Docker Hub.

      Por ejemplo, para el usuario sammy, cuya identificación de contenedor es d9b100f2f636, el comando sería:

      • docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs

      Al confirmar una imagen, se guarda la imagen nueva localmente en su computadora. Más adelante en este tutorial, aprenderá cómo hacer push de una imagen a un registro de Docker como Docker Hub para que otros usuarios puedan tener acceso a la misma.

      Si se listan las imágenes de Docker nuevamente, se mostrará la nueva imagen, al igual que la antigua de la que se derivó:

      Verá un resultado como el siguiente:

      Output

      REPOSITORY TAG IMAGE ID CREATED SIZE sammy/ubuntu-nodejs latest 7c1f35226ca6 7 seconds ago 179MB ubuntu latest 113a43faa138 4 weeks ago 81.2MB hello-world latest e38bc07ac18e 2 months ago 1.85kB

      En este ejemplo, la imagen nueva es ubuntu-nodejs, que se derivó de la imagen ubuntu existente de Docker Hub. La diferencia de tamaño refleja los cambios que se hicieron. Y en este ejemplo, el cambio fue que se instaló NodeJS. Por lo que, la próxima vez que deba ejecutar un contenedor usando Ubuntu con NodeJS preinstalado, simplemente puede usar la imagen nueva.

      Además, puede crear Imágenes desde un Dockerfile, el cual le permite automatizar la instalación del software en una imagen nueva. No obstante, no se abarca eso en este tutorial.

      Ahora, vamos a compartir la imagen nueva con los demás para que puedan crear contenedores usándola.

      Paso 8 — Hacer push de imágenes de Docker a un repositorio Docker

      El siguiente paso lógico tras crear una imagen nueva usando una imagen existente es compartirla con algunos amigos selectos, todo el mundo en Docker Hub u otro registro de Docker al que tenga acceso. Si desea hacer push de una imagen a Docker Hub o cualquier otro registro de Docker, debe tener una cuenta en ese sitio.

      Esta sección le enseña a hacer push de una imagen Docker a Docker Hub. Consulte Cómo configurar un registro privado de Docker en Ubuntu 14.04 si desea aprender a crear su propio registro privado de Docker.

      Primero, inicie sesión en Docker Hub para hacerle push a su imagen.

      • docker login -u docker-registry-username

      Se le pedirá que se certifique utilizando su contraseña de Docker Hub. Si ingresó la contraseña correcta, la certificación debería se exitosa.

      Nota: Si su nombre de usuario de registro de Docker es distinto al nombre de usuario local que usó para crear la imagen, deberá etiquetar su imagen con su nombre de usuario de registro. Para el ejemplo que se dio en el último paso, debe escribir:

      • docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs

      A continuación, podrá hacer el push de su propia imagen usando:

      • docker push docker-registry-username/docker-image-name

      Para hacer el push de la imagen ubuntu-nodejs al repositorio de sammy, el comando sería:

      • docker push sammy/ubuntu-nodejs

      Es posible que el proceso tarde un poco para terminarse a medida que se cargan las imágenes, pero una vez que se haya terminado, el resultado se verá así:

      Output

      The push refers to a repository [docker.io/sammy/ubuntu-nodejs] e3fbbfb44187: Pushed 5f70bf18a086: Pushed a3b5c80a4eba: Pushed 7f18b442972b: Pushed 3ce512daaf78: Pushed 7aae4540b42d: Pushed ...

      Tras hacer push de una imagen al registro, debería aparecer en el panel de su cuenta, como se muestra en la imagen de abajo.

      Nuevo listado de imágenes de Docker en Docker Hub

      Si un intento de push le da un error de este tipo, seguramente no haya iniciado sesión:

      Output

      The push refers to a repository [docker.io/sammy/ubuntu-nodejs] e3fbbfb44187: Preparing 5f70bf18a086: Preparing a3b5c80a4eba: Preparing 7f18b442972b: Preparing 3ce512daaf78: Preparing 7aae4540b42d: Waiting unauthorized: authentication required

      Inicie sesión usando el docker login y vuelva a intentar el push. Entonces, verifique que exista en su página del repositorio de Docker Hub.

      Ahora puede usar docker pull sammy/ubuntu-nodejs para hacer el pull de la imagen a una nueva máquina y usarla para ejecutar un contenedor nuevo.

      Conclusión

      Con este tutorial, instaló Docker, trabajó con imágenes y contenedores e hizo push de una imagen modificada a Docker Hub. Ahora que sabe cuáles son los conceptos básicos, examine los demás tutoriales de Docker en la Comunidad de DigitalOcean.



      Source link

      Cómo instalar MySQL en Ubuntu 18.04


      Hazel Virdó escribió una versión anterior de este tutorial.

      Introducción

      MySQL es un sistema de gestión de bases de datos de código abierto, que generalmente está instalado como parte de la popular combinación LAMP (Linux, Apache, MySQL, PHP/Python/Perl). Gestiona sus datos usando una base de datos relacional y SQL (Lenguaje de consulta estructurada).

      La versión breve de la instalación es simple: Actualice el índice de su paquete, instale el paquete mysql-server y luego ejecute el script de seguridad incluido.

      • sudo apt update
      • sudo apt install mysql-server
      • sudo mysql_secure_installation

      Este tutorial le explicará cómo instalar la versión 5.7 de MySQL en un servidor Ubuntu 18.04. No obstante, si pretende actualizar una instalación MySQL existente a la versión 5.7, puede leer esta guía de actualización de MySQL 5.7.

      Requisitos previos

      Necesitará lo siguiente para seguir este tutorial:

      Paso 1 — Instalar MySQL

      Únicamente la última versión de MySQL se incluye en el repositorio de paquete APT de forma predeterminada en Ubuntu 18.04. Al momento de escribir esto, esa sería la versión MySQL 5.7.

      Para instalarla, actualice el índice del paquete en su servidor con apt:

      Luego, instale el paquete predeterminado:

      • sudo apt install mysql-server

      Esto instalará MySQL, pero no le pedirá que cree una contraseña ni que haga ningún otro cambio de configuración. Dado a que esto deja su instalación de MySQL insegura, vamos a abordarlo a continuación.

      Paso 2 — Configurar MySQL

      Para las instalaciones recientes, querrá ejecutar el script de seguridad que viene incluido. Esto cambia algunas de las opciones predeterminadas menos seguras para cosas como inicios de sesión root remotos y usuarios de ejemplo. Para las versiones antiguas de MySQL, también deberá inicializar el directorio de datos manualmente, pero ahora esto se hace automáticamente.

      Ejecute el script de seguridad:

      • sudo mysql_secure_installation

      Esto hará que pase por una serie de indicaciones en las que puede hacer algunos cambios en las opciones de seguridad de su instalación de MySQL. La primera indicación le preguntará si quiere configurar el plugin de Validación de Contraseña, la que puede usarse para probar la solidez de su contraseña de MySQL. Independientemente de lo que seleccione, la siguiente indicación será establecer una contraseña para el usuario root de MySQL. Ingrese y luego confirme una contraseña segura de su elección.

      Desde este punto, puede presionar Y y luego ENTER para aceptar las configuraciones predeterminadas para todas las preguntas siguientes. Esto eliminará algunos usuarios anónimos y la base de datos de prueba, deshabilitará los inicios de sesión root remotos y cargará estas nuevas reglas para que MySQL respete los cambios que haya realizado inmediatamente.

      Para iniciar el directorio de datos de MySQL, debe usar mysql_install_db para versiones anteriores a 5.7.6, y mysqld --initialize para la versión5.7.6 y posteriores. No obstante, si instaló MySQL desde la distribución Debian, como se describió en el Paso 1, el directorio de datos se inició automáticamente; no es necesario que haga nada. Si trata de ejecutar el comando igual, se le mostrará el siguiente error:

      Output

      mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
      . . .
      2018-04-23T13:48:00.572066Z 0 [ERROR] Aborting
      

      Note que, si bien estableció una contraseña para el usuario root de MySQL, este usuario no está configurado para autenticarse con una contraseña al conectarse al shell de MySQL. Si quiere, puede ajustar esta configuración siguiendo el Paso 3.

      Paso 3 — (Opcional) Ajustar la autenticación y los privilegios del usuario

      Para los sistemas Ubuntu que estén usando MySQL 5.7 (y las versiones posteriores), el usuario root de MySQL está configurado, de forma predeterminada, para autenticarse usando el plugin auth_socket en vez de una contraseña. En muchos casos, esto permite que la seguridad y usabilidad sea mayor pero también puede complicar las cosas cuando deba permitir que un programa externo (tal como phpMyAdmin) tenga acceso al usuario.

      Deberá cambiar su método de autenticación de auth_socket a mysql_native_password para usar una contraseña para conectarse a MySQL como root. Para hacerlo, abra la indicación de MySQL desde su terminal:

      Posteriormente, consulte cuál método de autenticación usa cada una de sus cuentas de usuario de MySQL usando el siguiente comando:

      • SELECT user,authentication_string,plugin,host FROM mysql.user;

      Output

      +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)

      En este ejemplo, puede ver que el usuario root verdaderamente se autentica usando el plugin auth_socket. Para configurar la cuenta root para autenticarse usando una contraseña, ejecute el siguiente comando ALTER USER. Asegúrese de cambiar password (contraseña) a una contraseña segura de su elección y sepa que este comando cambiará la contraseña de root que estableció en el Paso 2:

      • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

      Luego, ejecute FLUSH PRIVILEGES (purgar privilegios), lo que le dice al servidor que vuelva a cargar las tablas grant e implemente sus nuevos cambios:

      Vuelva a verificar los métodos de autenticación que usa cada uno de sus usuarios para confirmar que root ya no se autentica usando el plugin auth_socket:

      • SELECT user,authentication_string,plugin,host FROM mysql.user;

      Output

      +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)

      En este resultado de ejemplo, puede ver que, ahora, el usuario root de MySQL se autentica usando una contraseña. Una vez que confirme esto en su propio servidor, puede salir del shell de MySQL:

      Alternativamente, para otras personas puede adaptarse mejor a su flujo de trabajo si se conectan a MySQL con un usuario dedicado. Para crear tal usuario, vuelva a abrir el shell de MySQL nuevamente:

      Nota: Si tiene la autenticación de contraseña habilitada para root según se describió en los párrafos de arriba, deberá usar un comando diferente para acceder al shell de MySQL. Lo que se indica a continuación ejecutará su cliente MySQL con privilegios de usuario regular, y solamente tendrá privilegios de administrador dentro de la base de datos una vez que haga la autenticación:

      Desde ese punto, cree un nuevo usuario y use una contraseña sólida:

      • CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

      Luego, dele a su nuevo usuario los privilegios adecuados. Por ejemplo, puede concederle al usuario privilegios a todas las tablas dentro de la base de datos, así como autoridad para agregar, cambiar y eliminar privilegios de usuario, mediante este comando:

      • GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

      Note que, en este punto, no necesita volver a ejecutar el comando FLUSH PRIVILEGES. Solamente necesita este comando al modificar las tablas grant utilizando declaraciones como INSERT, UPDATE o DELETE. Dado a que creó un usuario nuevo en vez de modificar uno existente, no es necesario que use FLUSH PRIVILEGES aquí.

      Después de esto, salga del Shell de MySQL:

      Por último, vamos a probar la instalación de MySQL.

      Paso 4 — Probar MySQL

      Independientemente de cómo lo instaló, MySQL debería haber empezado a ejecutarse automáticamente. Para probar esto, verifique su estado.

      • systemctl status mysql.service

      Verá un resultado parecido al de abajo:

      Output

      ● mysql.service - MySQL Community Server
         Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en
         Active: active (running) since Wed 2018-04-23 21:21:25 UTC; 30min ago
       Main PID: 3754 (mysqld)
          Tasks: 28
         Memory: 142.3M
            CPU: 1.994s
         CGroup: /system.slice/mysql.service
                 └─3754 /usr/sbin/mysqld
      

      Si MySQL no se está ejecutando, puede iniciarlo usando sudo systemctl start mysql.

      Para una verificación adicional, puede tratar de conectarse a la base de datos usando la herramienta mysqladmin, que es un cliente que le permite ejecutar comandos administrativos. Por ejemplo, este comando dice que se conecte a MySQL como root (-u root), pida una contraseña (-p) y devuelva la versión.

      • sudo mysqladmin -p -u root version

      Debería ver un resultado parecido a este:

      Output

      mysqladmin  Ver 8.42 Distrib 5.7.21, for Linux on x86_64
      Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
      
      Oracle is a registered trademark of Oracle Corporation and/or its
      affiliates. Other names may be trademarks of their respective
      owners.
      
      Server version      5.7.21-1ubuntu1
      Protocol version    10
      Connection      Localhost via UNIX socket
      UNIX socket     /var/run/mysqld/mysqld.sock
      Uptime:         30 min 54 sec
      
      Threads: 1  Questions: 12  Slow queries: 0  Opens: 115  Flush tables: 1  Open tables: 34  Queries per second avg: 0.006
      

      Esto quiere decir que MySQL está funcionando.

      Conclusión

      Ahora tiene una configuración básica de MySQL instalada en su servidor. Aquí le presentamos algunos ejemplos de los siguientes pasos que puede tomar:



      Source link

      Cómo instalar Nginx en Ubuntu 18.04


      Introducción

      Nginx es uno de los servidores web más populares del mundo y es responsable de alojar algunos de los sitios más grandes y con mayor tráfico de Internet. En la mayoría de los casos, tiene más recursos que Apache y se puede usar como un servidor web o como un proxy inverso.

      En esta guía, hablaremos sobre cómo instalar Nginx en su servidor Ubuntu 18.04.

      Requisitos previos

      Antes de empezar los pasos de esta guía, debe tener una cuenta de usuario regular que no sea root y que cuente con privilegios de sudo configurados en su servidor. Siga nuestra guía de configuración inicial del servidor para Ubuntu 18.04 para aprender a configurar una cuenta de usuario regular.

      Cuando tenga una cuenta disponible, inicie sesión como usuario no root para poder empezar.

      Paso 1 — Instalar Nginx

      Dado a que Nginx está disponible en los repositorios predeterminados de Ubuntu, puede instalarlo desde estos repositorios usando el sistema de empaquetado apt.

      Ya que esta es nuestra primera interacción con el sistema de empaquetado apt en esta sesión, vamos a actualizar nuestro índice de paquetes local para que podamos tener acceso a los listados de paquetes más recientes. Tras hacerlo, podremos instalar nginx:

      • sudo apt update
      • sudo apt install nginx

      Una vez que se acepte el procedimiento, apt le instalará Nginx y las dependencias que pueda necesitar a su servidor.

      Paso 2 — Configurar el Firewall

      Antes de probar Nginx, se debe configurar el software de firewall de forma que permita el acceso al servicio. Nginx se registra a sí mismo como un servicio con ufw al instalarse, haciendo que permitir el acceso de Nginx sea fácil.

      Obtenga una lista de las configuraciones de las aplicaciones con las que ufw sabe trabajar escribiendo:

      Se debería propagar una lista de los perfiles de aplicaciones:

      Output

      Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH

      Como puede ver, hay tres perfiles disponibles para Nginx:

      • Nginx Full: Este perfil abre tanto el puerto 80 (tráfico web normal, no cifrado) como el puerto 443 (tráfico TLS/SSL cifrado)
      • Nginx HTTP: Este perfil solamente abre el puerto 80 (tráfico web normal, no cifrado)
      • Nginx HTTPS: Este perfil solamente abre el puerto 443 (tráfico TLS/SSL cifrado)

      Es recomendable que active el perfil más restrictivo que aún permita el tráfico que haya configurado. Debido a que en esta guía todavía no configuramos SSL para nuestro servidor, únicamente vamos a tener que permitir tráfico en el puerto 80.

      Puede habilitar esto ingresando:

      • sudo ufw allow 'Nginx HTTP'

      Puede verificar el cambio ingresando:

      Debe ver el tráfico HTTP que se permite en el resultado que se muestra:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

      Paso 3 — Verificar su servidor web

      Ubuntu 18.04 inicia Nginx al concluir el proceso de instalación. El servidor web ya debería estar abierto y funcionando.

      Para asegurarnos de que el servicio se está ejecutando, podemos verificar usando el sistema init systemd y escribiendo:

      Output

      ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2018-04-20 16:08:19 UTC; 3 days ago Docs: man:nginx(8) Main PID: 2369 (nginx) Tasks: 2 (limit: 1153) CGroup: /system.slice/nginx.service ├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; └─2380 nginx: worker process

      Como se puede ver arriba, parece que el servicio ha comenzado correctamente. No obstante, la mejor manera de probar esto es verdaderamente solicitando una página de Nginx.

      Puede acceder a la página de aterrizaje de Nginx predeterminada para confirmar que el software esté funcionando de la manera correcta navegando a la dirección IP de su servidor. Si no sabe cuál es la dirección IP de su servidor, puede conseguirla de varias formas.

      Trate de ingresar esto en la línea de comandos de su servidor:

      • ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's//.*$//'

      Le dará algunas líneas. Puede probar cada una en su navegador web para ver si funciona.

      Alternativamente, puede escribir lo siguiente, lo que debería darle su dirección IP pública como se ve desde otra ubicación en Internet:

      Una vez que tenga la dirección IP, ingrésela en la barra de direcciones de su navegador:

      http://your_server_ip
      

      Debería ver la página de aterrizaje de Nginx predeterminada:

      página de Nginx predeterminada

      Se incluye esta página con Nginx para mostrarle que el servidor está funcionando correctamente.

      Paso 4 — Gestionar el proceso de Nginx

      Ahora que su servidor web está funcionando, vamos a repasar algunos comandos de gestión básicos.

      Para detener su servidor web, ingrese:

      • sudo systemctl stop nginx

      Para iniciar el servidor web una vez que se haya detenido, ingrese:

      • sudo systemctl start nginx

      Para detener y luego volver a iniciar el servicio, ingrese:

      • sudo systemctl restart nginx

      Si simplemente está haciendo cambios de configuración, a menudo Nginx se puede recargar sin perder las conexiones. Para hacerlo, ingrese:

      • sudo systemctl reload nginx

      De forma predeterminada, Nginx está configurado para empezar automáticamente una vez que el servidor se inicia. Puede desactivar este comportamiento si no desea que suceda así, ingresando:

      • sudo systemctl disable nginx

      Para volver a habilitar el servicio para que empiece tras la iniciación, puede ingresar:

      • sudo systemctl enable nginx

      Paso 5 – Configurar los bloques del servidor (Recomendado)

      Al usar el servidor web Nginx, se pueden usar los bloques del servidor (parecidos a los hosts virtuales en Apache) para encapsular los detalles de configuración y alojar más de un dominio desde un solo servidor. Vamos a configurar un dominio llamado example.com, pero debe reemplazarlo con su propio nombre de dominio. Consulte nuestra Introducción a DigitalOcean DNS para aprender más sobre cómo configurar un nombre de dominio con DigitalOcean.

      Nginx en Ubuntu 18.04 cuenta con un bloqueo del servidor que está habilitado de forma predeterminada y que está configurado para servir documentos fuera de un directorio en /var/www/html. Aunque esto funciona bien para un solo sitio, puede tornarse complicado si hospeda varios sitios. En vez de modificar /var/www/html, vamos a crear una estructura de directorios dentro de /var/www para nuestro sitio example.com, dejando a /var/www/html es su lugar como el directorio predeterminado que debe servirse en caso de que una solicitud de un cliente no coincida con ningún otro sitio.

      Cree el directorio para example.com como se indica a continuación, usando el indicador -p para crear cualquier directorio matriz que pueda requerirse:

      • sudo mkdir -p /var/www/example.com/html

      Posteriormente, asigne la titularidad del directorio con la variable de entorno $USER:

      • sudo chown -R $USER:$USER /var/www/example.com/html

      Si no ha modificado su valor de umask, los permisos de sus roots web deberían ser los correctos, pero puede verificarlo ingresando:

      • sudo chmod -R 755 /var/www/example.com

      Luego, cree una página index.html como ejemplo utilizando nano o su editor preferido:

      • nano /var/www/example.com/html/index.html

      Adentro, agregue el siguiente HTML como ejemplo:

      /var/www/example.com/html/index.html

      <html>
          <head>
              <title>Welcome to Example.com!</title>
          </head>
          <body>
              <h1>Success!  The example.com server block is working!</h1>
          </body>
      </html>
      

      Una vez que haya acabado, guarde y cierre el archivo.

      Para que Nginx le proporcione servicios a este contenido, se debe crear un bloque del servidor usando las directivas correctas. En vez de modificar el archivo de configuración predeterminado directamente, vamos a hacer uno nuevo en /etc/nginx/sites-available/example.com:

      • sudo nano /etc/nginx/sites-available/example.com

      Pegue el siguiente bloque de configuración, el cual se parece al predeterminado, pero que se ha actualizado para nuestro nuevo directorio y nombre de dominio:

      /etc/nginx/sites-available/example.com

      server {
              listen 80;
              listen [::]:80;
      
              root /var/www/example.com/html;
              index index.html index.htm index.nginx-debian.html;
      
              server_name example.com www.example.com;
      
              location / {
                      try_files $uri $uri/ =404;
              }
      }
      

      Note que hemos actualizado la configuración root para nuestro nuevo directorio y el server_name(nombre de servidor) a nuestro nombre de dominio.

      Después, vamos a habilitar el archivo creando un enlace desde el mismo al directorio sites-enabled (habilitado para sitios), el cual Nginx usa para leer durante el inicio:

      • sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

      Ahora tenemos dos bloques del servidor habilitados y configurados para responder a las solicitudes dependiendo de sus directivas de listen (oír) y server_name (nombre de servidor) (puede consultar aquí para leer más sobre cómo Nginx procesa estas directivas):

      • example.com: Responderá a las solicitudes de example.com y de www.example.com.
      • Predeterminado: Responderá a cualquier solicitud en el puerto 80 que no coincida con los otros dos bloques.

      Solamente debe ajustar un solo valor en el archivo /etc/nginx/nginx.conf para evitar un posible problema de memoria de hash bucket, el que puede surgir al agregar nombres de servidores adicionales. Abra el archivo:

      • sudo nano /etc/nginx/nginx.conf

      Busque la directiva server_names_hash_bucket_size y quite el símbolo # para descomentar la línea:

      /etc/nginx/nginx.conf

      ...
      http {
          ...
          server_names_hash_bucket_size 64;
          ...
      }
      ...
      

      Posteriormente, haga una prueba para asegurarse de que no haya errores de sintaxis en ninguno de sus archivos de Nginx:

      Una vez que haya acabado, guarde y cierre el archivo.

      Si no hay ningún problema, reinicie Nginx para habilitar sus cambios:

      • sudo systemctl restart nginx

      Ahora, Nginx debería estar sirviendo su nombre de dominio. Puede probar esto navegando a http://example.com, donde debería ver algo parecido a lo siguiente:

      Primer bloqueo del servidor de Nginx

      Paso 6 — Familiarizarse con archivos y directorios importantes de Nginx

      Ahora que sabe cómo gestionar el servicio de Nginx mismo, debería dedicar unos minutos a familiarizarse con algunos directorios y archivos importantes.

      Contenido

      • /var/www/html: El contenido web real, que de forma predeterminada únicamente consiste en la página de Nginx predeterminada que vio antes, recibe servicio de parte del directorio /var/www/html. Esto puede modificarse alterando los archivos de configuración de Nginx.

      Configuración del servidor

      • /etc/nginx: El directorio de configuración de Nginx. Todos los archivos de configuración de Nginx se alojan aquí.
      • /etc/nginx/nginx.conf: El archivo de configuración de Nginx principal. Esto se puede modificar para hacer cambios a la configuración global de Nginx.
      • /etc/nginx/sites-available/: El directorio donde se pueden almacenar los bloques del servidor por sitio. Nginx no usará los archivos de configuración que estén en este directorio a menos que estén vinculados al directorio sites-enabled. Generalmente, todas las configuraciones del bloque del servidor se llevan a cabo en este directorio y luego se habilitan vinculándolas al otro directorio.
      • /etc/nginx/sites-enabled/: El directorio donde se almacenan los bloques del servidor por sitio habilitados. Generalmente, estos se crean vinculándolos a los archivos de configuración que están en el directorio sites-available.
      • /etc/nginx/snippets: Este directorio contiene fragmentos de configuración que se pueden incluir en cualquier otro sitio de la configuración de Nginx. Los buenos candidatos para la refactorización en fragmentos serían los segmentos de configuración potencialmente repetibles.

      Registros del servidor

      • /var/log/nginx/access.log: Se registra cada solicitud a su servidor web en este archivo de registro, a menos que Nginx esté configurado para hacer algo diferente.
      • /var/log/nginx/error.log: Todo error de Nginx se registrará en este registro.

      Conclusión

      Ahora que tiene su servidor web instalado, tiene muchas opciones para el tipo de contenido al que puede servir y las tecnologías que quiera usar para crear una experiencia más abundante.

      Consulte este artículo sobre cómo configurar una combinación LEMP en Ubuntu 18.04 si desea desarrollar una combinación de aplicaciones más completa.



      Source link