Select Page
Cómo configurar las llaves SSH en Ubuntu 18.04

Cómo configurar las llaves SSH en Ubuntu 18.04

Introducción

SSH, o blindaje seguro (protected shell) es un protocolo encriptado para administrar y comunicarse con servidores. Al trabajar con servidores Ubuntu, generalmente pasarás los angeles mayor parte del tiempo conectado mediante SSH desde una terminal a tu servidor.

En esta guía, nos enfocaremos en configurar las llaves SSH sobre una instalación de Ubuntu Vanilla 18.04. Las llaves SSH proveen una autenticación fácil y segura para tu servidor, esta autenticación es los angeles recomendada para todos los usuarios.

Paso 1 — Crea un par de llaves RSA

El primer paso consiste en crear un par de llaves en los angeles máquina cliente (usualmente tu computador):

De manera predeterminada, ssh-keygen creará un par de llaves RSA de 2.048 bits, lo cual es suficientemente seguro en los angeles mayoría de casos (opcionalmente se podría adicionar el parámetro -b 4096 para crear una llave de 4.096 bits).

Después del comando, se debería desplegar los angeles siguiente salida:

Output

Producing public/personal rsa key pair. Input record wherein to save lots of the important thing (/your_home/.ssh/id_rsa):

Presione los angeles tecla Input para guardar el par de llaves en el subdirectorio .ssh/ del directorio native del usuario, también se puede especificar una ruta alterna a ésta.

Si se han generado previamente un par de llaves SSH, deberías ver los angeles siguiente información:

Output

/house/your_home/.ssh/id_rsa already exists. Overwrite (y/n)?

Si se escoge sobreescribir los angeles llave en disco, no podrás autenticarte usando las llaves previas de ahora en adelante. Sé muy cuidadoso al seleccionar los angeles opción positiva (y), ya que éste es un proceso destructivo de las llaves que no puede ser reversado.

Debería desplegarse lo siguiente en los angeles línea de comandos:

Output

Input passphrase (empty for no passphrase):

En este punto se puede introducir una frase segura que sirva como contraseña, lo cual es altamente recomendado. Esta frase adicionará una capa additional de seguridad para prevenir los angeles autenticación de usuarios no autorizados. Para aprender más sobre seguridad, consulta nuestro educational sobre cómo configurar la autenticación mediante llaves SSH en un servidor Linux.

A continuación, deberías ver los angeles siguiente salida:

Output

Your identity has been stored in /your_home/.ssh/id_rsa. Your public key has been stored in /your_home/.ssh/id_rsa.pub. The important thing fingerprint is: a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host The important thing's randomart symbol is: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+

Ahora ya existe una llave pública y una privada que puedes usar en el proceso de autenticación. El siguiente paso será colocar los angeles llave pública en tu servidor, de tal manera que los angeles puedas usar para acceder a él, mediante una autenticación basada en llaves SSH.

Paso 2 — Copia los angeles llave pública en el servidor Ubuntu

Los angeles manera más rápida de copiar tu llave pública en el servidor Ubuntu es mediante el uso de una utilidad llamada ssh-copy-id. Gracias a su simplicidad, de estar disponible es un método altamente recomendado. En caso de que ssh-copy-id no se encuentre disponible en tu máquina cliente, aún puedes usar uno de los dos métodos que se proveen en esta sección: copiado de una contraseña usando SSH, o el copiado guide de los angeles llave.

Copia de los angeles llave pública usando ssh-copy-id

Los angeles herramienta ssh-copy-id se encuentra incluida de manera predeterminada en varios sistemas operativos, por lo cual existe los angeles posibilidad que esté disponible en tu sistema native. Para que este método funcione es necesario que ya se cuente con acceso por contraseña mediante SSH dentro de tu servidor.

Para usar este método, simplemente se debe especificar el servidor remoto al cual te quieres conectar, así como los angeles cuenta de usuario y su contraseña con acceso SSH. Esta cuenta es a los angeles cual se copiará tu llave SSH pública.

Los angeles sintaxis es:

  • ssh-copy-id username@remote_host

Se te podría desplegar el siguiente mensaje:

Output

The authenticity of host '203.0.113.1 (203.0.113.1)' cannot be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:advert:d6:6d:22:fe. Are you positive you need to proceed connecting (sure/no)? sure

Esto significa que tu computador native no reconoce el cliente remoto. Esto sucede los angeles primera vez que te conectas a una nueva máquina. Digita “yes” y presiona Input para continuar.

A continuación, los angeles utilidad escaneará tu cuenta native en búsqueda de los angeles llave id_rsa.pub creada previamente. Cuando los angeles llave es creada, se te solicitará los angeles contraseña para los angeles cuenta del usuario remoto:

Output

/usr/bin/ssh-copy-id: INFO: making an attempt to log in with the brand new key(s), to filter any which can be already put in /usr/bin/ssh-copy-id: INFO: 1 key(s) stay to be put in -- in case you are induced now it's to put in the brand new keys username@203.0.113.1's password:

Digita los angeles contraseña (lo digitado no será mostrado en pantalla por razones de seguridad), y presiona Input. Los angeles utilidad se conectará a los angeles cuenta en los angeles máquina remota usando los angeles contraseña que proveíste. Esto copiará el contenido de tu llave ~/.ssh/id_rsa.pub en el archivo que se encuentra en el directorio native de los angeles cuenta remota ~/.ssh llamado authorized_keys.

Se te debería desplegar los angeles siguiente salida:

Output

Choice of key(s) added: 1 Now take a look at logging into the device, with: "ssh 'username@203.0.113.1'" and test to be sure that best the important thing(s) you sought after had been added.

Para este momento tu llave id_rsa.pub ha sido cargada en los angeles cuenta remota. Puedes continuar al paso 3.

Copia de los angeles llave pública usando SSH

Si no se tiene ssh-copy-id disponible, pero cuentas con acceso al servidor mediante una contraseña que u.s. SSH, puedes cargar tus llaves utilizando un método SSH convencional.

Esto se puede realizar usando el comando cat para leer el contenido de los angeles llave pública SSH en tu computador native y enviarlo a través de una conexión SSH al servidor remoto.

De otro lado, debemos asegurar que el directorio ~/.ssh exista y que tenga los permisos adecuados dentro de los angeles cuenta que se está usando.

Podemos direccionar el contenido enviado a un archivo llamado authorized_keys dentro de este directorio. Usaremos el símbolo de redirección >> para adicionar el contenido sin reescribirlo, lo que nos permitirá adicionar llaves nuevas sin destruir las adicionadas previamente.

El comando completo lucirá como lo siguiente:

  • cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

Se podría desplegar el siguiente mensaje:

Output

The authenticity of host '203.0.113.1 (203.0.113.1)' cannot be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:advert:d6:6d:22:fe. Are you positive you need to proceed connecting (sure/no)? sure

Esto significa que el computador native no reconoce al remoto. Esto sucede los angeles primera vez que se conecta a una máquina remota. Digita “yes” y presiona Input para continuar.

En este momento, se te solicitará que introduzcas los angeles contraseña de los angeles cuenta del usuario remoto:

Output

username@203.0.113.1's password:

Después de ingresar los angeles contraseña, el contenido de los angeles llave id_rsa.pub habrá sido copiada al ultimate del archivo authorized_keys en los angeles cuenta del usuario remoto. Puedes continuar con el paso 3 si esto se llevó a cabo de manera exitosa.

Copia guide de los angeles llave pública

Si no se cuenta con un acceso al servidor mediante contraseña SSH, puedes completar el proceso de forma guide.

Adicionaremos manualmente el contenido del archivo id_rsa.pub al archivo ~/.ssh/authorized_keys en los angeles máquina remota.

Para desplegar el contenido de los angeles llave id_rsa.pub, digita lo siguiente en los angeles máquina native:

Verás el contenido de los angeles llave, que debería ser identical a algo como lo siguiente:

Output

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@check

Accede al computador remoto usando cualquier método que tengas disponible. Una vez hayas accedido, debes asegurarte que el directorio ~/.ssh exista. De no ser así, lo puedes crear con el siguiente comando:

Ahora, se puede modificar, o incluso crear, el archivo authorized_keys dentro de este directorio. Puedes adicionar el contenido del archivo id_rsa.pub al ultimate de archivo authorized_keys, o crearlo de ser necesario, mediante el comando:

  • echo public_key_string >> ~/.ssh/authorized_keys

En el anterior comando, sustituye public_key_string con los angeles salida que habías obtenido del comando cat ~/.ssh/id_rsa.pub que ya habías ejecutado en los angeles máquina native. Éste debería comenzar con ssh-rsa AAAA....

Finalmente, nos aseguraremos que el directorio ~/.ssh y el archivo authorized_keys tengan los permisos correctos:

Esto remueve recursivamente todos los permisos dados a grupos “group” y a otros “other” en el directorio ~/.ssh/.

En caso que hayas utilizado los angeles cuenta root para configurar las llaves de una cuenta de usuario, también es importante que el directorio ~/.ssh pertenezca a este usuario y no al root:

  • chown -R sammy:sammy ~/.ssh

En este educational nuestro usuario es llamado sammy, en el comando anterior, debes sustituirlo por el nombre de usuario apropiado.

Ahora ya estamos listos para intentar los angeles autenticación sin contraseña en nuestro servidor Ubuntu.

Paso 3 — Autentícate en un servidor Ubuntu usando llaves SSH

Si ya has completado satisfactoriamente uno de los procesos anteriores, ya deberías estar habilitada para autenticarte sin necesidad de los angeles contraseña de los angeles cuenta remota.

El proceso básico es el mismo:

Si es los angeles primera vez que se intenta los angeles conexión con esta máquina (y, por ejemplo, usaste el último método de los angeles sección anterior), quizás se despliegue algo identical a lo siguiente:

Output

The authenticity of host '203.0.113.1 (203.0.113.1)' cannot be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:advert:d6:6d:22:fe. Are you positive you need to proceed connecting (sure/no)? sure

Esto significaría que el computador native no reconoce los angeles máquina remota. Digita “yes” y presiona Input para continuar.

Si no proveiste una frase segura, se te autenticará de inmediato. En el caso que sí hayas ingresado una en el momento de creación de los angeles llave, se te solicitará en este momento (notarás que por motivos de seguridad no se imprimirán los caracteres en los angeles sesión de terminal). Después de los angeles autenticación, un sesión segura se te debería desplegar, configurada con los angeles cuenta del servidor Ubuntu.

Si los angeles autenticación mediante llave fue exitosa, continúa aprendiendo cómo mejorar los angeles seguridad de tu sistema deshabilitando los angeles autenticación por contraseña.

Paso 4 — Deshabilita en tu servidor los angeles autenticación por contraseña

Si tu sistema ya puede ser accedido mediante SSH sin una contraseña de usuario, ya has configurado de manera exitosa los angeles autenticación mediante llave SSH en tu cuenta. Sin embargo, el mecanismo de autenticación mediante contraseña de usuarios sigue activo, lo cual significa que tu servidor aún se encuentra expuesto a posibles ataques de fuerza bruta.

Antes de completar las indicaciones de esta sección, debes asegurarte de tener, o bien, configurada los angeles autenticación de los angeles cuenta de superusuario mediante llave SSH, o preferiblemente, los angeles autenticación mediante SSH configurada para una cuenta diferente a los angeles de superusuario con privilegios de sudo. Este paso restringirá los accesos mediante contraseña, por lo cual es a very powerful que te asegures de tener keep an eye on administrativo de tu servidor.

Tan pronto confirmes que tu cuenta remota cuenta con privilegios administrativos, accede al servidor remoto utilizando las llaves SSH, ya sea como superusuario o con una cuenta con privilegios de sudo. Después, abre el archivo de configuración del demonio SSH:

  • sudo nano /and so forth/ssh/sshd_config

Dentro del archivo, busca los angeles directiva llamada PasswordAuthentication. Ésta podría estar en comentario. Si lo está, retira el marcador de comentario sobre esa línea y fija el valor en “no”. Esto deshabilitará los angeles posibilidad de conectarse mediante SSH usando los angeles contraseña de una cuenta:

/and so forth/ssh/sshd_config

...
PasswordAuthentication no
...

Salva y cierra el archivo cuando hayas terminado digitando CTRL + X, después Y para confirmar salvar el archivo, y finalmente Input para salir del editor nano. Ahora, para implementar los cambios, debemos reiniciar el servicio sshd:

  • sudo systemctl restart ssh

Como precaución, abre una nueva ventana de los angeles terminal y verifica que el servicio de SSH se encuentre funcionando correctamente antes de cerrar esta sesión:

Una vez hayas verificado tu servicio SSH, puedes cerrar de manera segura todas las sesiones actuales del servidor.

Ahora, el demonio SSH solo responderá a llaves SSH. Autenticación mediante contraseña de usuarios habrá sido deshabilitada exitosamente.

Conclusión

Para este momento ya deberías haber configurado en tu servidor, los angeles autenticación mediante llaves SSH, habilitándote a acceder sin proveer una contraseña de una cuenta.

Si quieres aprender más acerca de trabajar con SSH, puedes usar nuestra guía esencial de SSH.

Cómo instalar en Ubuntu 18.04 la pila LAMP — Linux, Apache, MySQL y PHP

Cómo instalar en Ubuntu 18.04 la pila LAMP — Linux, Apache, MySQL y PHP

Una versión anterior de este educational fue escrita por Brennan Bearnes.

Introducción

Los angeles pila LAMP hace referencia a un grupo de diferentes programas de código abierto que típicamente son instalados en conjunto, con el objetivo de habilitar a un servidor como prestador de los servicios de páginas internet dinámicas, así como los de aplicaciones internet. De hecho, este término es el acrónimo que representa al sistema operativo Linux, con el servidor de aplicaciones Apache, donde los datos del sitio son almacenados en una base de datos MySQL, y el contenido dinámico es procesado mediante PHP.

En esta guía, instalaremos una pila LAMP en un servidor Linux 18.04.

Prerrequisitos

Para poder continuar con este educational, necesitarás tener un servidor Ubuntu 18.04, además debes tener configurada una cuenta de usuario diferente a l. a. de superusuario (non-root), pero que cuente con los permisos para utilizar el comando sudo, además necesitarás contar con un cortafuegos (firewall) básico. Esto lo puedes configurar usando nuestra guía inicial de configuración para Ubuntu 18.04.

Paso 1 — Instalar Apache y actualizar el cortafuegos

El servidor internet, Apache es uno de los servidores internet más populares en el mundo. Se encuentra bien documentado y ha sido utilizado en buena parte de l. a. historia de l. a. internet, hechos que lo convierten en un muy buen candidato para ser escogido como el servidor por defecto de páginas internet.

Instala Apache usando el administrador de paquetes de Ubuntu, apt:

  • sudo apt replace
  • sudo apt set up apache2

Como éste es un comando sudo, estas operaciones son ejecutadas con los privilegios de superusuario. Te preguntará por l. a. contraseña de tu cuenta common para verificar tus intenciones.

Una vez hayas autenticado tu contraseña, apt te informará cuáles paquetes se instalarán y cuánto espacio en disco será requerido. Digita Y y después Input para continuar, así, l. a. instalación procederá.

Ajuste del cortafuegos para permitir el tráfico internet

Asumiendo que seguiste las instrucciones de configuración inicial del servidor y que habilitaste el cortafuegos UFW, ahora podrás asegurarte que tu cortafuegos permite el tráfico HTTP y HTTPS. Para hacerlo, verifica que el UFW tiene un perfil de aplicación para Apache mediante el comando:

Output

To be had programs: Apache Apache Complete Apache Safe OpenSSH

Si solicitas l. a. información del perfil Apache Complete, se debería mostrar que el tráfico se encuentra habilitado para los puertos 80 y 443:

  • sudo ufw app data "Apache Full"

Output

Profile: Apache Complete Name: Internet Server (HTTP,HTTPS) Description: Apache v2 is the following era of the omnipresent Apache internet server. Ports: 80,443/tcp

Para permitir el tráfico de entrada HTTP y HTTPS para este perfil, digita:

  • sudo ufw permit in "Apache Full"

Puedes hacer una comprobación instantánea de que todo ha ido según lo planeado visitando l. a. dirección IP pública de tu servidor en un navegador (si aún no conoces l. a. dirección IP pública de tu servidor en l. a. siguiente sección encontrarás cómo hallarla):

http://your_server_ip

Verás l. a. página internet predeterminada de Apache para Ubuntu 18.04, l. a. cual tiene propósitos informativos y de prueba. Debería verse semejante a:

Página predeterminada de Ubuntu 18.04 Apache

Si viste esta página, entonces tu servidor internet se encuentra instalado correctamente y es accesible a través del cortafuegos.

Cómo encontrar l. a. dirección IP pública de tu servidor

Si no conoces l. a. dirección IP pública de tu servidor, existen varias formas de encontrarla. Usualmente, es l. a. dirección que usas para conectar tu servidor a través de SSH.

Hay diferentes formas de buscarla con l. a. línea de comandos. En primer lugar, puedes usar l. a. herramienta iproute2 para obtener tu IP, digitando lo siguiente:

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

Esto retornará dos o tres líneas. Todas serán direcciones correctas, sin embargo, es posible que tu computador solo pueda usar una de ellas, entonces es recomendable que las pruebes todas.

Un método alternativo es el uso de l. a. utilidad curl para contactar un servicio externo que te diga cómo él ve a tu servidor. Esto se hace preguntándole a un servidor específico cuál es tu dirección IP:

  • sudo apt set up curl
  • curl http://icanhazip.com

Sin importar el método que makes use of para obtener tu dirección IP, escríbela en l. a. barra de dirección de tu navegador internet para ver l. a. página predeterminada del Apache.

Paso 2 — Instalar MySQL

Ahora que tienes tu servidor internet activo y funcional, es el momento de instalar MySQL. MySQL es un sistema de administración de bases de datos. Basicamente, él organizará y proveerá acceso a las bases de datos donde tu sitio podrá guardar información.

De nuevo, america apt para adquirir e instalar este tool:

  • sudo apt set up mysql-server

Nota: En este caso, no es necesario que makes use of sudo apt replace antes del comando. Ya que lo usaste recientemente cuando instalaste Apache, el índice de paquetes de tu computador debería encontrarse actualizado.

De nuevo se te desplegará una lista de paquetes a instalar, así como el espacio en disco que requerirá. Presiona Y para continuar.

Cuando l. a. instalación esté completa, debes ejecutar un archivo de comandos de seguridad que viene preinstalado con MySQL, éste removerá algunos parámetros peligrosos, así como asegurará el acceso a tu base de datos. Ejecuta el archivo interactivo de comandos mediante:

  • sudo mysql_secure_installation

Se te preguntará si quieres configurar el conector de validación de contraseña: VALIDATE PASSWORD PLUGIN.

Nota: Habilitar esta funcionalidad dependerá de juzgar las necesidades de tu servidor. Si está habilitada una contraseña que no cumpla con un criterio específico, será rechazada por MySQL y generará un error. Esto podría ser un problema si utilizas contraseñas débiles en conjunto con tool que configura automáticamente credenciales de usuario de MySQl, como por ejemplo los paquetes de Ubuntu para phpMyAdmin. Es seguro dejar esta validación deshabilitada, pero recuerda siempre utilizar contraseñas únicas y fuertes para las credenciales de las bases de datos.

Responde Y si estás de acuerdo, cualquier otra respuesta continuará sin realizar l. a. habilitación.

VALIDATE PASSWORD PLUGIN can be utilized to check passwords
and support safety. It assessments the power of password
and lets in the customers to set handiest the ones passwords which can be
protected sufficient. Do you want to setup VALIDATE PASSWORD plugin?

Press y|Y for Sure, some other key for No:

Si respondiste “yes”, se te solicitará que selecciones el nivel de validación de contraseña. Debes tener en cuenta que si digitas 2 representando el nivel más fuerte, recibirás errores al intentar utilizar una contraseña que no contenga números, letras mayúsculas y minúsculas, así como caracteres especiales; además l. a. contraseña no podrá estar basada en palabras comunes en un diccionario.

There are 3 ranges of password validation coverage:

LOW    Duration >= 8
MEDIUM Duration >= 8, numeric, blended case, and particular characters
STRONG Duration >= 8, numeric, blended case, particular characters and dictionary                  record

Please input 0 = LOW, 1 = MEDIUM and a couple of = STRONG: 1

Sin importar el nivel escogido para VALIDATE PASSWORD PLUGIN, tu servidor te solicitará, a continuación, seleccionar y confirmar l. a. contraseña para el usuario root de MySQL. Ésta es una cuenta administrativa dentro MySQL con privilegios incrementados. Puede ser entendida de manera an identical a l. a. cuenta root del servidor mismo (Sin embargo, estarás configurando una cuenta específica para MySQL). Asegúrate de utilizar una contraseña fuerte y única, no debería dejarse en blanco.

Si habilitaste l. a. validación de contraseña, se te mostrará qué tan fuerte es l. a. contraseña para l. a. cuenta root que acabas de introducir y tu servidor preguntará si quieres cambiarla. Si crees que es adecuado como está, digita N para seleccionar “no” en l. a. línea de comandos:

The use of current password for root.

Estimated power of the password: 100
Trade the password for root ? ((Press y|Y for Sure, some other key for No) : n

Para las siguientes preguntas, presiona Y y pulsa l. a. tecla Input en cada sugerencia. Esto removerá algunos usuarios anónimos y l. a. base de datos de prueba, deshabilitará ingresos remotos del root, y cargará estas nuevas reglas, de tal modo que MySQL respete inmediatamente los cambios que se acaban de hacer.

En este punto, tu sistema de bases de datos se encuentra configurado y puedes seguir con l. a. instalación de PHP, el componente ultimate de l. a. pila LAMP.

Paso 3 — Instalar PHP

PHP es el componente de tu configuración que procesa código para desplegar contenido dinámico. Puede ejecutar archivos, conectarse a tus bases de datos MySQL para obtener información, y manejar l. a. visualización del contenido procesado sobre tu servidor internet.

Una vez más usaremos el sistema apt para instalar PHP. Adicionalmente lo podemos configurar para que se ejecute sobre el servidor Apache y para que se comunique con l. a. base de datos MySQL:

  • sudo apt set up php libapache2-mod-php php-mysql

Esto debería instalar PHP sin problemas, sin embargo, probaremos esta instalación en este momento.

En l. a. mayoría de los casos, desearás modificar l. a. forma mediante l. a. cual Apache sirve archivos cuando un directorio es solicitado. En este momento, si un usuario solicita un directorio del servidor, Apache buscará, en primera instancia, un archivo llamado index.html. Nosotros queremos que el servidor internet le dé prelación a los archivos PHP sobre cualquier otro archivo. Para lo cual haremos que el Apache busque el archivo index.php en primer lugar.

Para lograrlo, digita el siguiente comando para abrir el archivo dir.conf en un editor de texto con privilegios de superusuario:

  • sudo nano /and so forth/apache2/mods-enabled/dir.conf

Debería verse semejante a esto:

/and so forth/apache2/mods-enabled/dir.conf


    DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm

Mueve el archivo de índice de PHP (subrayado arriba) a l. a. primera posición después de l. a. especificación DirectoryIndex, debería verse an identical a:

/and so forth/apache2/mods-enabled/dir.conf


    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm

Cuando termines, graba y cierra el archivo presionando las teclas Ctrl + X. Confirma los cambios presionando Y, y a continuación pulsa l. a. tecla Input para verificar el lugar de grabación del archivo.

A continuación, deberás reiniciar el servidor Apache para que tus cambios sean reconocidos, lo puedes hacer mediante el comando:

  • sudo systemctl restart apache2

También podrás verificar el estado del servicio apache2 utilizando systemctl:

  • sudo systemctl standing apache2

Pattern Output

● apache2.carrier - LSB: Apache2 internet server Loaded: loaded (/and so forth/init.d/apache2; unhealthy; supplier preset: enabled) Drop-In: /lib/systemd/device/apache2.carrier.d └─apache2-systemd.conf Energetic: energetic (operating) since Tue 2018-04-23 14:28:43 EDT; 45s in the past Medical doctors: guy:systemd-sysv-generator(8) Procedure: 13581 ExecStop=/and so forth/init.d/apache2 prevent (code=exited, standing=0/SUCCESS) Procedure: 13605 ExecStart=/and so forth/init.d/apache2 get started (code=exited, standing=0/SUCCESS) Duties: 6 (restrict: 512) CGroup: /device.slice/apache2.carrier ├─13623 /usr/sbin/apache2 -k get started ├─13626 /usr/sbin/apache2 -k get started ├─13627 /usr/sbin/apache2 -k get started ├─13628 /usr/sbin/apache2 -k get started ├─13629 /usr/sbin/apache2 -k get started └─13630 /usr/sbin/apache2 -k get started

Para ampliar l. a. funcionalidad de PHP, tienes l. a. posibilidad de instalar algunos módulos adicionales. Para ver las opciones disponibles de módulos y librerías de PHP, envía los resultados de apt seek a much less, un paginador que te permitirá navegar dentro de l. a. salida de otro comando:

U.s. las flechas para moverte hacia arriba y abajo, y pulsa Q para salir.

Como resultado obtendrás todos los componentes opcionales que puedes instalar. El sistema te mostrará una descripción corta de cada uno de ellos:

bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64
  Tracks utilization of TCP/IP and builds html recordsdata with graphs

bluefish/bionic 2.2.10-1 amd64
  complicated Gtk+ textual content editor for internet and tool construction

cacti/bionic 1.1.38+ds1-1 all
  internet interface for graphing of tracking techniques

ganglia-webfrontend/bionic 3.6.1-Three all
  cluster tracking toolkit - internet front-end

golang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-Four all
  PHP-like Compression and Archive Extensions in Cross

haserl/bionic 0.9.35-2 amd64
  CGI scripting program for embedded environments

kdevelop-php-docs/bionic 5.2.1-1ubuntu2 all
  transitional package deal for kdevelop-php

kdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 all
  transitional package deal for kdevelop-php-l10n
…
:

Para indagar más sobre las funcionalidades de cada módulo, simplemente puedes buscar en l. a. internet su descripción, o alternativamente, puedes ver l. a. descripción larga de cada paquete, digitando:

Los angeles salida será extensiva, con un campo en explicit llamado Description que tendrá una explicación más extensa acerca de l. a. funcionalidad que el módulo provee.

Por ejemplo, para ver las funcionalidades del módulo php-cli, podrías digitar:

En compañía de mucha más información, verás algo como lo siguiente:

Output

… Description: command-line interpreter for the PHP scripting language (default) This package deal supplies the /usr/bin/php command interpreter, helpful for checking out PHP scripts from a shell or acting total shell scripting duties. . PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open supply general-purpose scripting language this is particularly suited for internet construction and may also be embedded into HTML. . This package deal is a dependency package deal, which is determined by Ubuntu's default PHP model (recently 7.2). …

Si después de tu consulta makes a decision instalar algún paquete, lo puedes hacer mediante el comando apt set up, de l. a. misma forma que lo has hecho para otro tool.

Si te das cuenta que necesitas instalar php-cli, puedes escribir:

Si deseas instalar más de un módulo, lo puedes hacer listándolos separados por espacio, después del comando apt set up, semejante a lo siguiente:

  • sudo apt set up package1 package2 ...

Para este punto, tu pila LAMP se encuentra instalada y configurada. Sin embargo, antes de hacer más cambios o de desplegar una aplicación, sería beneficioso hacer una prueba proactiva de l. a. configuración de PHP, quizá haya alguna situación que merezca alguna atención en este momento.

Paso 4 — Evaluar el procesamiento de PHP sobre tu servidor internet

Con el objetivo de evaluar si tu sistema está configurado de manera correcta para usar PHP, crea una archivo de comandos básico, llamado data.php. Para que Apache pueda encontrar y servir este archivo de manera correcta, debe ser alojado en un directorio muy específico, que es llamado “web root”.

En Ubuntu 18.04, este directorio se encuentra localizado en /var/www/html/. Crea el archivo en ese lugar digitando:

  • sudo nano /var/www/html/data.php

Esto creará un archivo en blanco. Introduce el siguiente código PHP válido, dentro del archivo de texto:

data.php

Cuando termines, graba y cierra el archivo.

Ahora ya puedes probar si tu servidor internet se encuentra habilitado para desplegar correctamente contenido generado por este archivo de comandos PHP. Para hacerlo, visita una página internet específica en tu navegador, necesitarás tu dirección pública de nuevo.

Los angeles dirección que deberás visitar es:

http://your_server_ip/data.php

Los angeles página que deberías estar viendo debe ser an identical l. a. siguiente:

Información predeterminada de PHP para Ubuntu 18.04

Esta página provee información básica sobre tu servidor, recogida desde l. a. perspectiva de PHP. Es útil cuando necesites hacer algún tipo de seguimiento o para verificar que l. a. configuración deseada ha sido aplicada de manera correcta.

Si pudiste ver esta página en tu navegador, tu PHP está trabajando según lo esperado.

Probablemente quieras remover este archivo después de l. a. prueba, éste puede dar información sobre tu servidor a usuarios no autorizados. Para hacer esto, digita el siguiente comando:

  • sudo rm /var/www/html/data.php

Siempre puedes crear este archivo de nuevo en caso que necesites acceder a esta información en otra oportunidad.

Conclusión

Ahora que tienes una pila LAMP instalada, tienes varias opciones de tareas para hacer después. Básicamente, ya cuentas con una plataforma que te permitirá instalar l. a. mayoría de tipos de sitios internet, así como aplicaciones internet en tu servidor.

Como siguiente paso inmediato, debes asegurarte que que l. a. conexión a tu servidor internet es segura, tu servidor debería prestar sus servicios mediante HTTPS. Los angeles manera más sencilla es usando nuestra guía: encriptemos Esto asegurará tu sitio con un certificado gratuito TLS/SSL.

Otras opciones muy populares que tienes son:

Nota: Actualizaremos los enlaces que aparecen en este artículo tan pronto se actualice nuestra documentación a l. a. versión 18.04.

Cómo instalar el servidor web Apache en Ubuntu 18.04

Cómo instalar el servidor web Apache en Ubuntu 18.04

Una versión previa de este instructional fue escrita por Justin Ellingwood

Introducción

El servidor HTTP Apache es el servidor internet más usado en el mundo. Provee muchas características poderosas, incluyendo módulos de carga dinámica, soporte robusto a medios, así como amplia integración a otros programas comúnmente utilizados.

En esta guía, explicaremos cómo instalar un servidor internet Apache en tu servidor Ubuntu 18.04.

Prerrequisitos

Antes de empezar a realizar estos pasos, se debe tener un usuario common configurado en su servidor, éste debe corresponder a una cuenta con privilegios de sudo, que no sea superusuario (root). Adicionalmente, necesitarás habilitar un cortafuegos básico que bloquee los puertos no esenciales. Puedes aprender cómo configurar una cuenta de usuario common y cómo ajustar el cortafuegos para tu servidor, siguiendo nuestra guía inicial de configuración para Ubuntu 18.04.

Cuando se tenga una cuenta disponible, ingresa con el usuario diferente a superusuario que mencionamos anteriormente y podrás empezar.

Paso 1 — Instalar Apache

Apache se encuentra disponible dentro de los repositorios de tool predeterminados de Ubuntu, haciendo posible l. a. instalación mediante las herramientas convencionales de administración de paquetes.

Empezaremos por actualizar el índice de los paquetes locales. Esto, para garantizar que en él se refleje las cargas más recientes de las nuevas versiones de los paquetes.

A continuación, instala el paquete apache2:

Después de confirmar l. a. instalación, apt instalará Apache al igual que todas las dependencias requeridas.

Paso 2 — Configurar el cortafuegos

Antes de probar el Apache, es necesario modificar los ajustes del cortafuegos de tal manera que se garantice el acceso externo a los puertos internet por defecto. Asumiendo que seguiste las instrucciones de los prerrequisitos, tendrás un cortafuegos UFW configurado para restringir el acceso a tu servidor.

Durante l. a. instalación, Apache por sí mismo, se registra en el UFW para proveer los perfiles que permitan habilitar o deshabilitar su acceso a través del cortafuego.

Lista los perfiles de aplicación dentro ufw digitando:

Se debería desplegar una lista de perfiles de aplicación:

Salida

To be had packages: Apache Apache Complete Apache Protected OpenSSH

Como te has podido dar cuenta, existen tres perfiles disponibles para Apache:

  • Apache: este perfil habilita únicamente el puerto 80 (commonplace, tráfico internet sin encriptar).
  • Apache Complete: este perfil habilita dos puertos: puerto 80 (commonplace, tráfico internet sin encriptar) y el puerto 443 (tráfico encriptado mediante TLS/SSL).
  • Apache Protected: este perfil habilita únicamente el puerto 443 (tráfico encriptado mediante TLS/SSL).

Se recomienda que siempre habilites el perfil con más restricciones dependiendo del tráfico requerido y cómo se ha configurado tu máquina. Como aún no hemos configurado el SSL para nuestro servidor en esta guía, solo permitiremos el tráfico a través del puerto 80:

Se puede verificar el cambio digitando:

Se te debería desplegar que el tráfico HTTP se encuentra permitido:

Salida

Standing: lively To Motion From -- ------ ---- OpenSSH ALLOW Any place Apache ALLOW Any place OpenSSH (v6) ALLOW Any place (v6) Apache (v6) ALLOW Any place (v6)

Como puedes observar, el perfil ha sido activado, y el acceso al servidor internet es permitido.

Paso 3 — Verificar el servidor internet

Al finalizar el proceso de instalación, Ubuntu 18.04 inicia Apache. Entonces, el servidor internet debería encontrarse activo y en ejecución.

Verifica con el sistema de base systemd que el servicio se está ejecutando al digitar:

  • sudo systemctl standing apache2

Salida

● apache2.provider - The Apache HTTP Server Loaded: loaded (/lib/systemd/gadget/apache2.provider; enabled; dealer preset: enabled) Drop-In: /lib/systemd/gadget/apache2.provider.d └─apache2-systemd.conf Lively: lively (operating) since Tue 2018-04-24 20:14:39 UTC; 9min in the past Major PID: 2583 (apache2) Duties: 55 (restrict: 1153) CGroup: /gadget.slice/apache2.provider ├─2583 /usr/sbin/apache2 -k get started ├─585 /usr/sbin/apache2 -k get started └─2586 /usr/sbin/apache2 -k get started

Como se puede ver en esta salida, el servicio se ha iniciado exitosamente. Sin embargo, el mejor check para realizar esta comprobación es el de solicitar una página al servidor Apache.

Puedes acceder a l. a. página por defecto de Apache para confirmar que éste se encuentra en correcta ejecución a través de tu dirección IP. Si no conoces l. a. dirección IP de tu servidor, puedes obtenerla de diferentes maneras desde l. a. línea de comandos.

Prueba digitando los siguiente en l. a. línea de comandos de tu servidor:

Se te retornará algunas direcciones separadas por espacios. Pruébalas todas en tu navegador internet para asegurar su funcionamiento.

Alternativamente, puedes digitar el siguiente comando, el cual te debería retornar l. a. dirección IP pública de l. a. manera que es percibida desde un lugar externo en web:

Cuando tengas l. a. dirección IP de tu servidor, ingrésala en l. a. barra de direcciones de tu navegador:

http://ip_de_tu_servidor

A continuación, deberías ver l. a. página internet predeterminada de Ubuntu 18.04:

Página por defecto de Apache

El despliegue de esta página implica que Apache se encuentra funcionando correctamente. Además, también incluye información básica sobre l. a. localización de archivos y directorios relevantes de Apache.

Paso 4 — Administrando el proceso de Apache

Ahora que ya cuentas con un servidor internet activo y en ejecución, podemos familiarizarnos con algunos comandos básicos de administración.

Para detener tu servidor internet, digita:

  • sudo systemctl forestall apache2

Para iniciar tu servidor internet, digita:

  • sudo systemctl get started apache2

Para detener y reiniciar el servicio en un solo paso, puedes ingresar:

  • sudo systemctl restart apache2

Si únicamente estás realizando cambios en l. a. configuración, puedes recargar Apache sin necesidad de perder las conexiones que pudieran estar activas. Para ello, america el comando:

  • sudo systemctl reload apache2

Por defecto, Apache se configura para iniciarse automáticamente cuando el servidor arranca. Si no se quiere esto, se puede deshabilitar este comportamiento, ingresando:

  • sudo systemctl disable apache2

Para rehabilitar el servicio durante el arranque, digita:

  • sudo systemctl allow apache2

Después de ingresar este comando, Apache debería iniciarse automáticamente durante el arranque del servidor.

Paso 5 — Configurar sitios virtuales (Digital Hosts) (Recomendado)

Al usar el servidor internet Apache, puedes usar sitios virtuales (similares a los bloques de servidor -server blocks- en Nginx), permitiendo encapsular detalles de configuración, así como alojar más de un dominio en un solo servidor. Configuraremos un dominio llamado ejemplo.com, pero puedes reemplazarlo con tu propio nombre de dominio. Para aprender más acerca de configurar un nombre de dominio con DigitalOcean, puedes usar nuestra introducción al DNS de DigitalOcean.

Apache en Ubuntu 18.04 tiene un bloque de servidor predeterminado y activo para servir los documentos del directorio /var/www/html. Si bien, esto funciona adecuadamente como configuración para un sitio unitario, puede ser muy difícil de mantener y controlar cuando se tienen múltiples sitios. En cambio de modificar /var/www/html, creamos una estructura de directorios dentro de /var/www para nuestro sitio ejemplo.com, dejando así, /var/www/html como se encuentra por defecto, y sirviendo de directorio predeterminado en caso que l. a. solicitud de un cliente no concuerde con los otros sitios.

Crea el directorio para ejemplo.com usando l. a. opción -p de tal manera que se creen los directorios padres necesarios:

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

A continuación, asigna el usuario propietario del directorio, mediante l. a. variable de entorno $USER:

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

Los permisos de tus directorios raíz para l. a. internet no se modifican a menos que cambies el valor de unmask. Sin embargo puedes asegurarlo mediante el comando:

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

Después, crea una página de ejemplo index.html usando nano o el editor de tu preferencia:

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

Dentro del archivo, adiciona el siguiente código de ejemplo HTML:

/var/www/ejemplo.com/html/index.html


    
        ¡Bienvenido a <span class="highlight">Ejemplo.com</span>!

¡El proceso ha sido exitoso! ¡El bloque de servidor ejemplo.com se encuentra en funcionamiento!

Guarda y cierra el archivo cuando termines.

Para que el Apache sirva este contenido, es necesario crear un archivo de alojamiento digital con las directivas apropiadas. En cambio de modificar directamente l. a. configuración predeterminada que se encuentra en /and so on/apache2/sites-available/000-default.conf, creemos una nueva en /and so on/apache2/sites-available/ejemplo.com.conf:

  • sudo nano /and so on/apache2/sites-available/ejemplo.com.conf

Pega el siguiente bloque de configuración, que es muy an identical al predeterminado, pero contiene l. a. información actualizada de directorios y de dominio:

/and so on/apache2/sites-available/ejemplo.com.conf


    ServerAdmin admin@ejemplo.com
    ServerName ejemplo.com
    ServerAlias www.ejemplo.com
    DocumentRoot /var/www/ejemplo.com/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/get admission to.log mixed

Observa que hemos actualizado el campo DocumentRoot a nuestro nuevo directorio y ServerAdmin a una dirección de correo electrónico que el administrador del sitio instance.com pueda acceder. También, hemos adicionado dos directivas: ServerName, que establece el dominio base que debería ser concordante con l. a. definición del sitio digital, y ServerAlias, que outline otros nombres que serán atendidos de l. a. misma forma como si fuesen el dominio base.

Guarda y cierra el archivo cuando termines.

Habilitemos el archivo usando l. a. herramienta a2ensite:

  • sudo a2ensite ejemplo.com.conf

Deshabilita el sitio por defecto definido en 000-default.conf:

  • sudo a2dissite 000-default.conf

A continuación, probemos l. a. configuración en busca de errores:

  • sudo apache2ctl configtest

Deberías ver l. a. siguiente salida:

Salida

Syntax OK

Reinicia Apache para que los cambios sean implementados:

  • sudo systemctl restart apache2

Apache ya debería estar sirviendo tu nombre de dominio. Puedes hacer un check navegando en http://ejemplo.com, donde deberías ver algo an identical a:

Ejemplo de alojamiento virtual en Apache

Paso 6 — Familiarizarse con los archivos y directorios importantes de Apache

Ahora que ya sabes cómo administrar el servicio explicit de Apache, tómate unos minutos para familiarizarte con algunos archivos y directorios importantes.

Contenido

  • /var/www/html: es donde se encuentra el contenido actual internet. Por defecto, consiste únicamente de l. a. página predeterminada de Apache que viste antes, y se persiste en el directorio /var/www/html. Esto puede ser modificado en los archivos de configuración de Apache.

Configuración del servidor

  • /and so on/apache2: es el directorio de configuración de Apache. Todos los archivos de configuración de Apache se localizan en éste.
  • /and so on/apache2/apache2.conf: es el archivo major de configuración de Apache. Al modificarlo se realizan cambios en l. a. configuración world de Apache. Este archivo es el responsable de l. a. carga de una gran variedad de otros archivos en el directorio de configuración.
  • /and so on/apache2/ports.conf: este archivo especifica los puertos a los cuales Apache escuchará. Por defecto, Apache escucha el puerto 80, aunque adicionalmente, escucha el puerto 443 cuando un módulo con capacidad SSL es habilitado.
  • /and so on/apache2/sites-available/: es el directorio donde se alojan los diferentes sitios virtuales que podrían habilitarse. Apache no utilizará los archivos de configuración que se encuentren en este directorio a menos que se encuentren enlazados con el directorio sites-enabled. Típicamente, l. a. configuración de todos los bloques de servidores se hace en este directorio, para después ser habilitados mediante su enlace con los directorios usando el comando a2ensite.
  • /and so on/apache2/sites-enabled/: es el directorio donde se alojan los diferentes sitios virtuales que se encuentren habilitados. Típicamente, éstos son creados usando a2ensite para enlazar los archivos de configuración que se encuentran en el directorio sites-available. Apache lee los archivos de configuración y los enlaces que se encuentren en este directorio en el momento de su arranque o reinicio, para después compilar una configuración completa.
  • /and so on/apache2/conf-available/, /and so on/apache2/conf-enabled/: estos directorios presentan l. a. misma relación que se da entre los directorios sites-available y sites-enabled, solo que éstos son usados para guardar los fragmentos de configuración que no pertenecen a un sitio digital. Los archivos dentro del directorio conf-available pueden ser habilitados con el comando a2enconf y deshabilitados con el comando a2disconf.
  • /and so on/apache2/mods-available/, /and so on/apache2/mods-enabled/: estos directorios contienen tanto los módulos disponibles como los habilitados, respectivamente. Los archivos terminados en .load contienen fragmentos que permiten cargar módulos específicos, mientras que los archivos terminados en .conf contienen l. a. configuración de dichos módulos. Los módulos pueden ser habilitados y deshabilitados usando los comandos: a2enmod y a2dismod.

Archivos de registro del servidor

  • /var/log/apache2/get admission to.log: por defecto, todo solicitud hecha a tu servidor internet es registrada en este archivo, a menos que se configure Apache para hacerlo de una manera distinta.
  • /var/log/apache2/error.log: por defecto, los errores se registran en este archivo. L. a. directiva LogLevel, dentro de l. a. configuración de Apache, especifica el nivel de detalle con el cual se registra el contenido del error.

Conclusión

Para este momento, has instalado el servidor, y por lo tanto tienes un número importante de opciones de contenido y de tecnologías que te permitirán crear una experiencia más rica en tus sitios.

Si quisieras instalar una pila que soporte de manera más completa tus aplicaciones, puedes revisar el artículo: cómo instalar en Ubuntu 18.04 la pila LAMP.

Cómo asegurar Nginx con Let’s Encrypt en Ubuntu 18.04

Cómo asegurar Nginx con Let’s Encrypt en Ubuntu 18.04

Una versión previa de este instructional fue escrito por Hazel Virdó

Introducción

Let’s Encrypt es una Autoridad Certificadora (CA) que provee una manera sencilla de obtener e instalar de manera gratuita certificados TLS/SSL, por lo tanto, habilitaría el HTTPS en servidores internet. Además, simplifica el proceso, ya que provee un device cliente, Certbot, que automatiza los angeles mayoría (si no todos) los pasos requeridos. Actualmente, todo el proceso de los angeles obtención e instalación de un certificado se encuentra completamente automatizada tanto para Apache como para Nginx.

En este instructional, usarás Certbot para obtener un certificado SSL gratuito que podrá ser usado en Nginx, instalado en Ubuntu 18.04 y configurado de tal manera que su renovación se realizará de forma automática.

Este instructional usará un archivo de bloque separado para el servidor Nginx, en vez de utilizar el archivo por defecto. Recomendamos los angeles creación de un archivo de bloque nuevo para cada uno de los dominios, porque ayuda a evitar errores comunes, además de mantener los archivos predeterminados en caso de ser necesitados para una configuración alterna en caso de emergencia.

Prerrequisitos

Para poder completar este instructional, necesitarás contar con lo siguiente:

  • Una instalación del servidor Ubuntu 18.04, ajustada de acuerdo con el instructional de los angeles configuración inicial de servidores para Ubuntu 18.04, incluyendo un cortafuegos y una cuenta que no sea los angeles de superusuario que tenga privilegios sudo.

  • Un nombre de dominio registrado y funcional. Durante este instructional se usará instance.com. Puedes comprar un dominio en Namecheap, obtener uno gratuito en Freenom, o utilizar el proveedor de dominio de tu preferencia.

  • Los angeles configuración de los siguientes dos registros DNS para tu servidor. Puedes seguir los angeles introducción al DNS de DigitalOcean, para obtener detalles y el proceso para adicionarlos:

    • Un registro A con instance.com apuntando a los angeles dirección IP pública de tu servidor.
    • Un registro A con www.instance.com apuntando a los angeles dirección IP pública de tu servidor.
  • Nginx instalado, habiendo seguido nuestra guía: cómo instalar Nginx en Ubuntu 18.04. Debes asegurarte de tener un bloque de servidor para tu dominio. Este instructional usará /and so on/nginx/sites-available/instance.com como ejemplo.

Paso 1 — Instalar Certbot

El primer paso para obtener un certificado SSL mediante Let’s Encrypt, consiste en instalar el device de Certbot en tu servidor.

El desarrollo de Certbot se encuentra muy activo, lo que conlleva que los paquetes proveídos por Ubuntu tiendan a estar desactualizados. Sin embargo, los desarrolladores de Certbot mantienen un repositorio de device para Ubuntu con las versiones actualizadas, es por eso que nosotros usaremos ese repositorio, en cambio de los paquetes predeterminados.

Primero, adiciona el repositorio:

  • sudo add-apt-repository ppa:certbot/certbot

Necesitarás presionar Input para aceptar. Luego, actualiza los angeles lista de paquetes para recolectar los angeles información de los paquetes del nuevo repositorio:

Y finalmente, instala el paquete Nginx de Certbot con el apt:

  • sudo apt set up python-certbot-nginx

Ahora, Certbot está listo para ser usado, pero para configurar el SSL para trabajar con Nginx, necesitamos verificar los angeles configuración de él.

Paso 2 — Confirmar los angeles configuración del Nginx

Certbot necesita estar habilitado para encontrar el bloque de servidor en tu configuración de Nginx, de tal manera que que pueda configurar el SSL de forma automática. Específicamente, lo hace mediante los angeles búsqueda de los angeles directiva server_name que contiene el dominio del cual solicitaste el certificado.

Si seguiste el paso para establecer el bloque de servidor dentro del tutorial de instalación de Nginx, deberías tener un bloque de servidor para tu dominio en /and so on/nginx/sites-available/instance.com con los angeles directiva server_name ya asignada apropiadamente.

Para verificarlo, abre el archivo de bloques de servidor para tu dominio usando nano o tu editor de texto preferido:

  • sudo nano /and so on/nginx/sites-available/instance.com

Busca los angeles línea: server_name, que debería verse semejante a lo siguiente:

/and so on/nginx/sites-available/instance.com

...
server_name instance.com www.instance.com;
...

Si los angeles línea concuerda con lo anterior, sal del archivo y continúa con el siguiente paso.

Si no, actualiza el archivo para que concuerde. Salva el archivo, sal del editor y verifica los angeles sintaxis de los angeles edición que acabas de realizar:

Si se despliega un error, abre de nuevo el archivo y recórrelo en los angeles búsqueda de caracteres faltantes o de errores tipográficos. Tan pronto como los angeles sintaxis de tu archivo de configuración sea los angeles correcta, recarga Nginx para activar los angeles nueva configuración:

  • sudo systemctl reload nginx

Certbot podrá ahora encontrar el bloque de servidor correcto y podrá actualizarlo.

A continuación, actualizaremos el cortafuegos para permitir el tráfico HTTPS.

Paso 3 — Permitir HTTPS a través del cortafuegos

Si se tiene el cortafuegos ufw habilitado, tal como se recomendó en las guías de prerrequisitos, necesitarás ajustar los angeles configuración para permitir el tráfico HTTPS. Afortunadamente, Nginx registra pocos perfiles durante su instalación.

Puedes ver el ajuste exact del cortafuegos al digitar:

Probablemente, los angeles salida se parecerá a algo como lo siguiente, lo cual implicaría que el tráfico HTTP es el único permitido en el servidor internet:

Output

Standing: lively To Motion From -- ------ ---- OpenSSH ALLOW Anyplace Nginx HTTP ALLOW Anyplace OpenSSH (v6) ALLOW Anyplace (v6) Nginx HTTP (v6) ALLOW Anyplace (v6)

Para permitir adicionalmente, el tráfico HTTPS, debes habilitar el perfil completo de Nginx y borrar los perfiles redundantes:

  • sudo ufw permit 'Nginx Complete'
  • sudo ufw delete permit 'Nginx HTTP'

En este momento, el estado debería desplegarse de los angeles siguiente forma:

Output

Standing: lively To Motion From -- ------ ---- OpenSSH ALLOW Anyplace Nginx Complete ALLOW Anyplace OpenSSH (v6) ALLOW Anyplace (v6) Nginx Complete (v6) ALLOW Anyplace (v6)

A continuación, ejecutaremos Certbot para obtener nuestros certificados.

Paso 4 — Obtener el certificado SSL

Certbot provee diferentes maneras para obtener certificados SSL. Al usar el conector a Nginx, éste se encargará de reconfigurarlo, así como también, de recargar los angeles configuración en caso de ser necesario. Para usar este conector, digita lo siguiente:

  • sudo certbot --nginx -d instance.com -d www.instance.com

Esto ejecuta certbot con el conector --nginx, usando -d para especificar los nombres sobre los cuales queremos que el certificado sea válido.

Si ésta es los angeles primera vez que se ejecuta certbot, se te solicitará que ingreses una dirección de correo electrónico y que aceptes los términos de servicio. Al hacerlo, certbot se comunicará con el servidor Let’s Encrypt, para intentar verificar que tú controlas el dominio para el cual se está solicitando el certificado.

En caso de éxito, certbot te preguntará cómo configurar los ajustes para HTTPS:

Output

Please make a selection whether or not or to not redirect HTTP visitors to HTTPS, doing away with HTTP get admission to. ------------------------------------------------------------------------------- 1: No redirect - Make no additional adjustments to the webserver configuration. 2: Redirect - Make all requests redirect to safe HTTPS get admission to. Select this for new websites, or if you are assured your web site works on HTTPS. You'll be able to undo this exchange by means of modifying your internet server's configuration. ------------------------------------------------------------------------------- Make a selection the right quantity [1-2] then [enter] (press 'c' to cancel):

El mensaje anterior te permitirá escoger entre redireccionar o no el tráfico de HTTP a HTTPS, limitando el acceso HTTP; mediante las siguientes opciones:

Output

Por prefer seleccione si desea, o no, redireccionar el tráfico de HTTP a HTTPS, limitando el acceso HTTP. ------------------------------------------------------------------------------- 1: No redireccionar - No se realizarán más cambios a los angeles configuración del servidor internet. 2: Redireccionar - Enviar todas las solicitudes hacia el acceso seguro HTTPS. Seleccione esta opción si su sitio es nuevo o Usted se encuentra seguro que su sitio funcionará en un ambiente HTTPS. Esto se puede deshacer, editando los angeles configuración de su servidor internet. ------------------------------------------------------------------------------- Seleccione el número de su opción: [1-2] después pulse [Enter] (o presione 'c' para cancelar):

Después de seleccionar su opción, pulse Input. Los angeles configuración será actualizada, y Nginx se recargará para activar los nuevos ajustes. certbot concluirá con un mensaje informando que el proceso fue exitoso y los angeles localización de tus certificados:

Output

IMPORTANT NOTES: - Congratulations! Your certificates and chain were stored at: /and so on/letsencrypt/are living/instance.com/fullchain.pem Your key report has been stored at: /and so on/letsencrypt/are living/instance.com/privkey.pem Your cert will expire on 2018-07-23. To procure a brand new or tweaked model of this certificates at some point, merely run certbot once more with the "certonly" possibility. To non-interactively renew *all* of your certificate, run "certbot renew" - Your account credentials were stored to your Certbot configuration listing at /and so on/letsencrypt. You will have to make a safe backup of this folder now. This configuration listing will additionally comprise certificate and personal keys got by means of Certbot so making common backups of this folder is perfect. - In the event you like Certbot, please imagine supporting our paintings by means of: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

Tus certificados ya deberían haber sido transferidos, instalados y cargados. Intenta recargar tu sitio internet usando el prefijo https:// y observa el indicador de seguridad de tu navegador. Debería indicar que el sitio se encuentra asegurado de manera apropiada, usualmente se indica con el icono de un candado verde. Si pruebas tu sitio usando el test del servidor del laboratorio SSL, debería obtener el grado A.

Terminemos, probando el proceso de renovación.

Paso 5 — Verificar los angeles renovación automática de Certbot

Los certificados de Let’s Encrypt son válidos por noventa días únicamente. Esto se hace con el fin de incentivar a los usuarios para que automaticen el proceso de renovación de certificados. El paquete certbot que instalamos ya se ha ocupado de adicionar un archivo de comandos de renovación en /and so on/cron.d. Este archivo de comandos se ejecuta dos veces al día y renovará automáticamente los certificados que presenten una fecha de expiración dentro de los siguientes treinta días.

Para probar el proceso de renovación, puedes hacer un ensayo mediante certbot:

  • sudo certbot renew --dry-run

Si no se despliegan errores, el proceso se encuentra funcional. De ser necesario, Certbot renovará tus certificados y recargará Nginx para activar los cambios. Si el proceso automático de renovación alguna vez fallase, Let’s Encrypt enviará un mensaje al correo electrónico que especificaste, alertando que tu certificado se encuentra próximo a expirar.

Conclusión

En este instructional, instalaste el cliente de Let’s Encrypt: certbot, transferiste los certificados SSL para tu dominio, configuraste Nginx para usar estos certificados, y configuraste los angeles renovación automática de los mismos. Si tienes más preguntas acerca del uso de Certbot, su documentación es un buen lugar para empezar.

Как установить Linux, Apache, MySQL, PHP (LAMP) в Ubuntu 18.04

Как установить Linux, Apache, MySQL, PHP (LAMP) в Ubuntu 18.04

Предыдущая версия руководства была написана Бреннаном Бернсом.

Введение

Стек LAMP – это набор программного обеспечения с открытым исходным кодом, которой обычно устанавливается на сервер для отображения динамических веб-сайтов и веб-приложений. Эта аббревиатура обозначает операционную систему Linux с установленным веб-сервером Apache. Данные сайта хранятся в базе данных MySQL, динамический контент обрабатывается с помощью PHP.

Эта статья описывает процесс установки LAMP на виртуальный сервер (Droplet) в Ubuntu 18.04.

Необходимые условия

Перед тем, как начать следовать шагам, описанным в этом руководстве, вам необходимо настроить отдельный, не-рутовый (non-root) профиль пользователя на вашем сервере с Ubuntu 18.04. Вы можете сделать это используя нашу статью о первичной настройке сервера на Ubuntu 18.04.

Шаг 1 – Установка Apache и настройка файрвола

Веб-сервер Apache в настоящее время является одним из самых популярных веб-серверов в мире. Он хорошо документирован и используется значительную часть времени с момента создания сети Интернет, что делает его прекрасным выбором для хостинга веб-сайта.

Установим Apache используя менеджер пакетов Ubuntu apt:

  • sudo apt replace
  • sudo apt set up apache2

Поскольку мы используем команду sudo, эти команды будут выполняться с привилегиями root. В процессе установки операционная система запросит ваш пароль пользователя.

После ввода пароля apt сообщит, какие пакеты будут установлены и сколько места они займут на диске. Нажмите Y и Input для продолжения установки.

Настройка файрвола для разрешения веб-трафика

Теперь убедимся, что ваш файрвол пропускает HTTP и HTTPS трафик. Мы будем исходить из предположения, что вы уже выполнили инструкции по первичной настройке сервера и включили файрвол UFW. Для начала убедимся, что UFW имеет профиль для Apache следующей командой:

Вывод

To be had packages: Apache Apache Complete Apache Protected OpenSSH

Проверим настройку профиля Apache Complete, она должна разрешать трафик для портов 80 и 443:

  • sudo ufw app information "Apache Full"

Вывод

Profile: Apache Complete Name: Internet Server (HTTP,HTTPS) Description: Apache v2 is the following technology of the omnipresent Apache internet server. Ports: 80,443/tcp

Разрешим входящий HTTP и HTTPS трафик для этого профиля:

  • sudo ufw permit in "Apache Full"

Проверить результат установки можно набрав в вашем веб-браузере публичный IP адрес вашего сервера (если вы еще не знаете, как найти публичный IP адрес вашего сервера, смотрите следующий раздел этой статьи):

http://IP_адрес_вашего_сервера

Вы увидите страницу Apache, отображаемую по умолчанию для информации и целей тестирования. Она должна выглядеть похожим образом:

Тестовая страница Apache

Если вы видите эту страницу, ваш веб-сервер корректно установлен и доступен через файрвол.

Как найти публичный IP адрес вашего сервера

Если вы не знаете публичный IP адрес вашего сервера, его можно определить несколькими способами. Обычно, это адрес, который вы используете для соединения с вашим сервером по SSH.

Определить этот адрес можно с помощью командной строки. Сначала используйте инструмент iproute2 для получения вашего адреса набрав следующую команду:

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

Результатом выполнения этой команды будут две или три строки, содержащие корректный адрес. Ваш компьютер, возможно, сможет использовать только один из них, поэтому попробуйте каждый вариант.

В качестве альтернативы можно узнать, как curl видит ваш сервер. Это можно сделать следующим образом:

  • sudo apt set up curl
  • curl http://icanhazip.com

В независимости от метода, который вы использовали для получения своего IP адреса, вы можете использовать этот IP адрес для доступа к серверу через адресную строку веб-браузера.

Шаг 2 – Установка MySQL

Теперь, когда наш веб-сервер установлен и запущен, пора установить MySQL. MySQL это система управления базами данных. Она организует и обеспечит доступ к базам данных, в которых ваш сайт может хранить информацию.

Мы можем вновь использовать apt для загрузки и установки программного обеспечения:

  • sudo apt set up mysql-server

Обратите внимание: В данном случае вам нет необходимости предварительно выполнять команду sudo apt replace, т.к. мы выполняли ее недавно при установке Apache, и индекс пакетов на вашем компьютере уже должен быть обновлен.

Вам будет показан список пакетов, которые будут установлены, а также сколько места на диске они займут. Нажмите Y для продолжения установки.

После завершения установки нам потребуется выполнить некоторые дополнительные команды, чтобы наше окружение MySQL было настроено безопасным образом. Введите следующую команду:

  • sudo mysql_secure_installation

В результате выполнения этой команды вам будет предложено настроить плагин валидации паролей (VALIDATE PASSWORD PLUGIN).

Внимание: Решение включать плагин валидации паролей или нет носит субъективный характер. При включении все пароли, которые не удовлетворяют определённым критериям безопасности, будут отвергаться MySQL с сообщением об ошибке. Это может вызывать проблемы, если вы используете “слабые” пароли совместно с программным обеспечением, которое конфигурирует профили пользователей MySQL, например, пакеты Ubuntu для phpMyAdmin. Вы можете оставить валидацию паролей отключенной, но в этом случае вам следует всегда использовать “сильные” уникальные пароли для пользователей базы данных.

Введите Y для включения плагина или что-нибудь другое для продолжения без его включения:

VALIDATE PASSWORD PLUGIN can be utilized to check passwords
and make stronger safety. It exams the energy of password
and permits the customers to set simplest the ones passwords which can be
safe sufficient. Do you want to setup VALIDATE PASSWORD plugin?

Press y|Y for Sure, another key for No:

Если вы включили валидацию паролей, вам будет предложено установить уровень надёжности паролей при валидации. Имейте в виду, что при выборе значения 2 (самый строгий уровень валидации), вы будете получать ошибки при попытке задать пароль без цифр, букв в верхнем и нижнем регистре, а также без специальных символов, а также при попытке использовать пароль, основанный на распространённых словах, которые уязвимы для подбора паролей по словарю.

There are 3 ranges of password validation coverage:

LOW    Period >= 8
MEDIUM Period >= 8, numeric, combined case, and particular characters
STRONG Period >= 8, numeric, combined case, particular characters and dictionary document

Please input 0 = LOW, 1 = MEDIUM and a pair of = STRONG: 1

Вне зависимости от того, включили вы плагин валидации паролей или нет, далее вам будет предложено задать пароль для пользователя root для MySQL. Это административный аккаунт пользователя в MySQL, который имеет повышенные привилегии. Вы можете рассматривать его, как аналог пользователя root для самого сервера (с той лишь разницей, что это аккаунт для MySQL). Задайте сильный уникальный пароль, не оставляйте пароль пустым.

Если вы включили валидацию паролей, вам будет показан уровень надёжности заданного вами ранее пароля root пользователя, а также вам будет предложено изменить этот пароль. Если вы не хотите менять пароль, введите N или “no”:

The usage of current password for root.

Estimated energy of the password: 100
Alternate the password for root ? ((Press y|Y for Sure, another key for No) : n

На все последующие вопросы просто вводите Y и нажимайте клавишу ENTER для выбора настроек по умолчанию. При этом удалятся некоторые тестовые пользователи и базы данных, будет отключена возможность удаленного доступа с учетной записью root-пользователя, и все изменения будут немедленно применены в MySQL.

Обратите внимание на то, что на серверах Ubuntu, использующих MySQL 5.7 (и более поздние версии), root пользователь в MySQL настроен таким образом, что его аутентификация по умолчанию происходит с помощью плагина auth_socket, а не с помощью пароля. Это во многих случаях повышает безопасность, но, в то же время, может усложнить настройку доступа к root пользователю для некоторых программ (например, phpMyAdmin).

Если вы хотите настроить root пользователя на использование пароля, вам необходимо изменить метод аутентификации с auth_socket на mysql_native_password. Для того, чтобы это сделать, войдите в оболочку MySQL в терминале:

Далее просмотрите метод аутентификации для каждого из ваших пользователей MySQL с помощью следующей команды:

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

Вывод

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

В этом примере ваш пользователь root использует аутентификацию с помощью плагина auth_socket. Для изменения этой настройки на использование пароля используйте следующую команду ALTER USER. Не забудьте изменить password на ваш сильный пароль:

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

Далее выполните команду FLUSH PRIVILEGES, которая применит внесённые изменения:

Проверьте методы авторизации для пользователей ещё раз для того, чтобы убедиться, что пользователь root более не использует плагин auth_socket для авторизации:

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

Вывод

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

Как можно видеть на представленном выводе теперь root пользователь MySQL аутентифицируется с использованием пароля. После того, как мы в этом убедились, можно выйти из оболочки MySQL:

Теперь ваша система управления базами данных установлена и мы можем двигаться дальше и установить PHP, последний компонент LAMP.

Шаг 3 – Установка PHP

PHP это компонент, который будет обрабатывать код для отображения динамического контента. Он может запускать скрипты, подключаться к нашим базам данных MySQL для получения информации и передавать обработанный контент в наш веб-сервер для отображения.

Мы можем вновь воспользоваться менеджером пакетов apt для установки компонентов. Мы также добавим некоторые вспомогательные пакеты, чтобы код на PHP мог работать с нашим сервером Apache, а также обращаться к базе данных MySQL:

  • sudo apt set up php libapache2-mod-php php-mysql

Данная команда должна установить PHP без каких либо проблем. Вскоре мы это проверим.

В большинстве случаев, мы захотим изменить способ, который Apache использует для поиска файлов при запросе директории. На данный момент, если пользователь запрашивает директорию с сервера, Apache в первую очередь будет искать файл с названием index.html. Мы хотим, чтобы наш веб-сервер отдавал предпочтение PHP файлам, так что мы настроим Apache таким образом, чтобы сначала он искал файлы index.php.

Для этого введите следующую команду, чтобы открыть файл dir.conf в текстовом редакторе с привилегиями пользователя root:

  • sudo nano /and many others/apache2/mods-enabled/dir.conf

Содержимое файла будет выглядеть следующим образом:

/and many others/apache2/mods-enabled/dir.conf


    DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm

Мы хотим переместить индексный файл PHP index.php, выделенный выше, на первое место после спецификации DirectoryIndex следующим образом:

/and many others/apache2/mods-enabled/dir.conf


    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm

После внесения правок сохраните и закройте файл сочетанием клавиш CTRL-X. Вам придется подтвердить операцию вводом Y и затем нажатием клавиши ENTER для подтверждения места сохранения файла.

После этого нам необходимо перезапустить Apache для применения внесенных изменений. Вы можете сделать это при помощи команды:

  • sudo systemctl restart apache2

Мы также можем проверить статус сервиса apache2 используя systemctl:

  • sudo systemctl standing apache2

Пример Вывода

● apache2.provider - LSB: Apache2 internet server Loaded: loaded (/and many others/init.d/apache2; dangerous; supplier preset: enabled) Drop-In: /lib/systemd/gadget/apache2.provider.d └─apache2-systemd.conf Lively: energetic (working) since Tue 2018-04-23 14:28:43 EDT; 45s in the past Medical doctors: guy:systemd-sysv-generator(8) Procedure: 13581 ExecStop=/and many others/init.d/apache2 prevent (code=exited, standing=0/SUCCESS) Procedure: 13605 ExecStart=/and many others/init.d/apache2 get started (code=exited, standing=0/SUCCESS) Duties: 6 (restrict: 512) CGroup: /gadget.slice/apache2.provider ├─13623 /usr/sbin/apache2 -k get started ├─13626 /usr/sbin/apache2 -k get started ├─13627 /usr/sbin/apache2 -k get started ├─13628 /usr/sbin/apache2 -k get started ├─13629 /usr/sbin/apache2 -k get started └─13630 /usr/sbin/apache2 -k get started

Чтобы расширить функциональность PHP, мы можем установить некоторые дополнительные модули. Для просмотра доступных опций для модулей и библиотек PHP вы можете передать результат apt seek в much less, которая позволит вам проматывать вывод:

Используйте клавиши стрелок вверх и вниз для проматывания списка, для выхода нажмите Q.

В результате вам будут показаны все опциональные компоненты, которые можно установить, сопровождаемые кратким описанием для каждого:

bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64
  Tracks utilization of TCP/IP and builds html information with graphs

bluefish/bionic 2.2.10-1 amd64
  complicated Gtk+ textual content editor for internet and device construction

cacti/bionic 1.1.38+ds1-1 all
  internet interface for graphing of tracking techniques

ganglia-webfrontend/bionic 3.6.1-Three all
  cluster tracking toolkit - internet front-end

golang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-Four all
  PHP-like Compression and Archive Extensions in Cross

haserl/bionic 0.9.35-2 amd64
  CGI scripting program for embedded environments

kdevelop-php-docs/bionic 5.2.1-1ubuntu2 all
  transitional package deal for kdevelop-php

kdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 all
  transitional package deal for kdevelop-php-l10n
...
:

Чтобы получить больше информации по каждому модулю, вы можете поискать в Интернете или посмотреть полное описание пакета при помощи команды:

Ответ будет содержать много текста, среди которого есть поле Description. Именно оно и будет содержать расширенное описание функциональности, предоставляемой модулем.

Например, чтобы узнать назначение модуля php-cli, мы можем выполнить команду:

Помимо большого количества прочей информации, вы увидите следующее:

Вывод

... Description: command-line interpreter for the PHP scripting language (default) This package deal supplies the /usr/bin/php command interpreter, helpful for trying out PHP scripts from a shell or appearing total shell scripting duties. . PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open supply general-purpose scripting language this is particularly suited for internet construction and will also be embedded into HTML. . This package deal is a dependency package deal, which depends upon Ubuntu's default PHP model (these days 7.2). ...

Если после изучение вы решили, что хотите установить пакет, вы можете сделать это используя команду apt set up как мы делали ранее при установке другого программного обеспечения.

Если мы решили, что хотим установить php-cli, мы можем ввести команду:

Для установки сразу нескольких модулей, вы можете перечислить их через пробелы следом за командой apt set up следующим образом:

  • sudo apt set up package1 package2 ...

Теперь ваш стек LAMP установлен и сконфигурирован. Однако перед внесением любых других изменений и перед установкой приложений нам ещё стоит протестировать настройку PHP на случай возможных проблем.

Шаг 4 – Тестирование работы PHP на вашем веб-сервере

Чтобы проверить, что наша система сконфигурирована должным образом, мы можем создать простой PHP скрипт. Назовём этот скрипт information.php. Чтобы Apache нашел и обработал файл корректно, он должен быть сохранен в специальной директории, которая называется “web root”.

В Ubuntu 18.04 данная директория находится по адресу /var/www/html/. Мы можем создать там файл введя следующую команду:

  • sudo nano /var/www/html/information.php

Откроется пустой файл. Введём в файл следующий текст, который является корректным PHP кодом:

information.php

После внесения изменений сохраните и закройте файл.

Теперь мы можем проверить, может ли веб-сервер корректно отображать контент, сгенерированный PHP скриптом. Для проверки нам просто нужно открыть данную страницу в веб-браузере. Вам снова потребуется публичный IP-адрес сервера.

Откроем этот адрес:

http://IP_адрес_вашего_сервера/information.php

Страница, на которую вы попадете, должна выглядеть похожим образом:

Тестовая страница PHP

Данная страница содержит информацию о вашем сервере с точки зрения PHP. Она полезна для отладки и чтобы удостовериться в корректности применения настроек.

Если все прошло успешно, значит ваш PHP работает корректно.

Вы, возможно, захотите удалить этот файл после теста, т.к. он может дать информацию о вашем сервере неавторизованным пользователям. Для удаления файла введите команду:

  • sudo rm /var/www/html/information.php

Вы всегда сможете заново создать этот файл, если вам снова потребуется доступ к этой информации.

Заключение

Теперь, когда ваш стек LAMP установлен, у вас есть множество вариантов того, что делать дальше. Фактически, вы установили платформу, которая позволит установить (развернуть) большинство типов веб-сайтов и сетевого программного обеспечения на вашем сервере.

В качестве первого шага мы рекомендуем настроить веб-сервер на работу через HTTPS. Самый простой вариант обезопасить свой сайт с помощью бесплатного TLS/SSL сертификата – это использовать сервис Let’s Encrypt.

Некоторые другие популярные мероприятия:

How To Create a Kubernetes 1.10 Cluster Using Kubeadm on CentOS 7

How To Create a Kubernetes 1.10 Cluster Using Kubeadm on CentOS 7

The creator decided on the Free and Open Source Fund to obtain a donation as a part of the Write for DOnations program.

Advent

Kubernetes is a container orchestration formulation that manages packing containers at scale. First of all evolved by means of Google in keeping with its revel in working packing containers in manufacturing, Kubernetes is open supply and actively evolved by means of a group around the globe.

Kubeadm automates the set up and configuration of Kubernetes elements such because the API server, Controller Supervisor, and Kube DNS. It does now not, then again, create customers or maintain the set up of operating-system-level dependencies and their configuration. For those initial duties, it’s imaginable to make use of a configuration control instrument like Ansible or SaltStack. The use of those gear makes developing further clusters or recreating current clusters a lot more practical and no more error-prone.

On this information, you’re going to arrange a Kubernetes cluster from scratch the usage of Ansible and Kubeadm, after which deploy a containerized Nginx software to it.

Objectives

Your cluster will come with the next bodily sources:

The grasp node (a node in Kubernetes refers to a server) is liable for managing the state of the cluster. It runs Etcd, which shops cluster knowledge amongst elements that agenda workloads to employee nodes.

Employee nodes are the servers the place your workloads (i.e. containerized programs and products and services) will run. A employee will proceed to run your workload as soon as they are assigned to it, despite the fact that the grasp is going down as soon as scheduling is whole. A cluster’s capability will also be greater by means of including staff.

After finishing this information, you’re going to have a cluster in a position to run containerized programs, only if the servers within the cluster have enough CPU and RAM sources on your programs to devour. Virtually any conventional Unix software together with internet programs, databases, daemons, and command line gear will also be containerized and made to run at the cluster. The cluster itself will devour round 300-500MB of reminiscence and 10% of CPU on every node.

As soon as the cluster is about up, you’re going to deploy the internet server Nginx to it to be sure that it’s working workloads accurately.

Must haves

Step 1 — Surroundings Up the Workspace Listing and Ansible Stock Record

On this phase, you’re going to create a listing to your native system that may function your workspace. You’re going to additionally configure Ansible in the community in order that it may keep up a correspondence with and execute instructions to your faraway servers. To try this, you’re going to create a hosts document containing stock knowledge such because the IP addresses of your servers and the teams that every server belongs to.

From your 3 servers, one would be the grasp with an IP displayed as master_ip. The opposite two servers might be staff and could have the IPs worker_1_ip and worker_2_ip.

Create a listing named ~/kube-cluster in the house listing of your native system and cd into it:

  • mkdir ~/kube-cluster
  • cd ~/kube-cluster

This listing might be your workspace for the remainder of the academic and can comprise all your Ansible playbooks. It is going to even be the listing within which you’re going to run all native instructions.

Create a document named ~/kube-cluster/hosts the usage of vi or your favourite textual content editor:

Press i to insert the next textual content to the document, which can specify details about the logical construction of your cluster:

~/kube-cluster/hosts

[masters]
grasp ansible_host=master_ip ansible_user=root

[workers]
worker1 ansible_host=worker_1_ip ansible_user=root
worker2 ansible_host=worker_2_ip ansible_user=root

If you end up completed, press ESC adopted by means of :wq to jot down the adjustments to the document and give up.

You could recall that inventory files in Ansible are used to specify server knowledge equivalent to IP addresses, faraway customers, and groupings of servers to focus on as a unmarried unit for executing instructions. ~/kube-cluster/hosts might be your stock document and you could have added two Ansible teams (masters and staff) to it specifying the logical construction of your cluster.

Within the masters team, there’s a server access named “master” that lists the grasp node’s IP (master_ip) and specifies that Ansible will have to run faraway instructions as the basis consumer.

In a similar way, within the staff team, there are two entries for the employee servers (worker_1_ip and worker_2_ip) that still specify the ansible_user as root.

Having arrange the server stock with teams, let’s transfer directly to putting in operating-system-level dependencies and developing configuration settings.

Step 2 — Putting in Kubernetes’ Dependencies

On this phase, you’re going to set up the operating-system-level applications required by means of Kubernetes with CentOS’s yum kit supervisor. Those applications are:

  • Docker – a container runtime. That is the element that runs your packing containers. Fortify for different runtimes equivalent to rkt is underneath lively construction in Kubernetes.

  • kubeadm – a CLI instrument that may set up and configure the quite a lot of elements of a cluster in an ordinary approach.

  • kubelet – a formulation provider/program that runs on all nodes and handles node-level operations.

  • kubectl – a CLI instrument used for issuing instructions to the cluster thru its API Server.

Create a document named ~/kube-cluster/kube-dependencies.yml within the workspace:

  • vi ~/kube-cluster/kube-dependencies.yml

Upload the next performs to the document to put in those applications in your servers:

~/kube-cluster/kube-dependencies.yml

- hosts: all
  turn out to be: sure
  duties:
   - identify: set up Docker
     yum:
       identify: docker
       state: provide
       update_cache: true

   - identify: get started Docker
     provider:
       identify: docker
       state: began

   - identify: disable SELinux
     command: setenforce 0

   - identify: disable SELinux on reboot
     selinux:
       state: disabled

   - identify: make sure web.bridge.bridge-nf-call-ip6tables is about to at least one
     sysctl:
      identify: web.bridge.bridge-nf-call-ip6tables
      price: 1
      state: provide

   - identify: make sure web.bridge.bridge-nf-call-iptables is about to at least one
     sysctl:
      identify: web.bridge.bridge-nf-call-iptables
      price: 1
      state: provide

   - identify: upload Kubernetes' YUM repository
     yum_repository:
      identify: Kubernetes
      description: Kubernetes YUM repository
      baseurl: https://applications.cloud.google.com/yum/repos/kubernetes-el7-x86_64
      gpgkey: https://applications.cloud.google.com/yum/document/yum-key.gpg https://applications.cloud.google.com/yum/document/rpm-package-key.gpg
      gpgcheck: sure

   - identify: set up kubelet
     yum:
        identify: kubelet
        state: provide
        update_cache: true

   - identify: set up kubeadm
     yum:
        identify: kubeadm
        state: provide

   - identify: get started kubelet
     provider:
       identify: kubelet
       enabled: sure
       state: began

- hosts: grasp
  turn out to be: sure
  duties:
   - identify: set up kubectl
     yum:
        identify: kubectl
        state: provide

The primary play within the playbook does the next:

  • Installs Docker, the container runtime.

  • Begins the Docker provider.

  • Disables SELinux since it isn’t absolutely supported by means of Kubernetes but.

  • Units a couple of netfilter-related sysctl values required for networking. This may occasionally permit Kubernetes to set iptables regulations for receiving bridged IPv4 and IPv6 community site visitors at the nodes.

  • Provides the Kubernetes YUM repository in your faraway servers’ repository lists.

  • Installs kubelet and kubeadm.

The second one play is composed of a unmarried assignment that installs kubectl to your grasp node.

Save and shut the document if you find yourself completed.

Subsequent, execute the playbook:

  • ansible-playbook -i hosts ~/kube-cluster/kube-dependencies.yml

On crowning glory, you’re going to see output very similar to the next:

Output

PLAY [all] **** TASK [Gathering Facts] **** good enough: [worker1] good enough: [worker2] good enough: [master] TASK [install Docker] **** modified: [master] modified: [worker1] modified: [worker2] TASK [disable SELinux] **** modified: [master] modified: [worker1] modified: [worker2] TASK [disable SELinux on reboot] **** modified: [master] modified: [worker1] modified: [worker2] TASK [ensure net.bridge.bridge-nf-call-ip6tables is set to 1] **** modified: [master] modified: [worker1] modified: [worker2] TASK [ensure net.bridge.bridge-nf-call-iptables is set to 1] **** modified: [master] modified: [worker1] modified: [worker2] TASK [start Docker] **** modified: [master] modified: [worker1] modified: [worker2] TASK [add Kubernetes' YUM repository] ***** modified: [master] modified: [worker1] modified: [worker2] TASK [install kubelet] ***** modified: [master] modified: [worker1] modified: [worker2] TASK [install kubeadm] ***** modified: [master] modified: [worker1] modified: [worker2] TASK [start kubelet] **** modified: [master] modified: [worker1] modified: [worker2] PLAY [master] ***** TASK [Gathering Facts] ***** good enough: [master] TASK [install kubectl] ****** good enough: [master] PLAY RECAP **** grasp : good enough=9 modified=5 unreachable=0 failed=0 worker1 : good enough=7 modified=5 unreachable=0 failed=0 worker2 : good enough=7 modified=5 unreachable=0 failed=0

After execution, Docker, kubeadm, and kubelet might be put in on all the faraway servers. kubectl isn’t a required element and is simplest wanted for executing cluster instructions. Putting in it simplest at the grasp node is sensible on this context, since you’re going to run kubectl instructions simplest from the grasp. Notice, then again, that kubectl instructions will also be run from any of the employee nodes or from any system the place it may be put in and configured to indicate to a cluster.

All formulation dependencies are actually put in. Let’s arrange the grasp node and initialize the cluster.

Step 4 — Surroundings Up the Grasp Node

On this phase, you’re going to arrange the grasp node. Earlier than developing any playbooks, then again, it is price protecting a couple of ideas equivalent to Pods and Pod Community Plugins, since your cluster will come with each.

A pod is an atomic unit that runs a number of packing containers. Those packing containers percentage sources equivalent to document volumes and community interfaces in not unusual. Pods are the elemental unit of scheduling in Kubernetes: all packing containers in a pod are assured to run at the identical node that the pod is scheduled on.

Every pod has its personal IP deal with, and a pod on one node will have to be capable of get right of entry to a pod on any other node the usage of the pod’s IP. Bins on a unmarried node can keep up a correspondence simply thru a neighborhood interface. Conversation between pods is extra difficult, then again, and calls for a separate networking element that may transparently course site visitors from a pod on one node to a pod on any other.

This capability is supplied by means of pod community plugins. For this cluster, you’re going to use Flannel, a solid and performant choice.

Create an Ansible playbook named grasp.yml to your native system:

  • vi ~/kube-cluster/grasp.yml

Upload the next play to the document to initialize the cluster and set up Flannel:

~/kube-cluster/grasp.yml

- hosts: grasp
  turn out to be: sure
  duties:
    - identify: initialize the cluster
      shell: kubeadm init --pod-network-cidr=10.244.0.0/16 >> cluster_initialized.txt
      args:
        chdir: $HOME
        creates: cluster_initialized.txt

    - identify: create .kube listing
      turn out to be: sure
      become_user: centos
      document:
        trail: $HOME/.kube
        state: listing
        mode: 0755

    - identify: reproduction admin.conf to consumer's kube config
      reproduction:
        src: /and many others/kubernetes/admin.conf
        dest: /house/centos/.kube/config
        remote_src: sure
        proprietor: centos

    - identify: set up Pod community
      turn out to be: sure
      become_user: centos
      shell: kubectl follow -f https://uncooked.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml >> pod_network_setup.txt
      args:
        chdir: $HOME
        creates: pod_network_setup.txt

Here is a breakdown of this play:

  • The primary assignment initializes the cluster by means of working kubeadm init. Passing the argument --pod-network-cidr=10.244.0.0/16 specifies the non-public subnet that the pod IPs might be assigned from. Flannel makes use of the above subnet by means of default; we are telling kubeadm to make use of the similar subnet.

  • The second one assignment creates a .kube listing at /house/centos. This listing will grasp configuration knowledge such because the admin key information, that are required to hook up with the cluster, and the cluster’s API deal with.

  • The 3rd assignment copies the /and many others/kubernetes/admin.conf document that used to be generated from kubeadm init in your non-root centos consumer’s house listing. This may occasionally can help you use kubectl to get right of entry to the newly-created cluster.

  • The remaining assignment runs kubectl follow to put in Flannel. kubectl follow -f descriptor.[yml|json] is the syntax for telling kubectl to create the items described within the descriptor.[yml|json] document. The kube-flannel.yml document accommodates the descriptions of items required for putting in place Flannel within the cluster.

Save and shut the document if you find yourself completed.

Execute the playbook:

  • ansible-playbook -i hosts ~/kube-cluster/grasp.yml

On crowning glory, you’re going to see output very similar to the next:

Output

PLAY [master] **** TASK [Gathering Facts] **** good enough: [master] TASK [initialize the cluster] **** modified: [master] TASK [create .kube directory] **** modified: [master] TASK [copy admin.conf to user's kube config] ***** modified: [master] TASK [install Pod network] ***** modified: [master] PLAY RECAP **** grasp : good enough=5 modified=4 unreachable=0 failed=0

To test the standing of the grasp node, SSH into it with the next command:

As soon as within the grasp node, execute:

You’re going to now see the next output:

Output

NAME STATUS ROLES AGE VERSION grasp In a position grasp 1d v1.10.1

The output states that the grasp node has finished all initialization duties and is in a In a position state from which it may get started accepting employee nodes and executing duties despatched to the API Server. You’ll now upload the employees out of your native system.

Step 5 — Surroundings Up the Employee Nodes

Including staff to the cluster comes to executing a unmarried command on every. This command contains the important cluster knowledge, such because the IP deal with and port of the grasp’s API Server, and a protected token. Most effective nodes that cross within the protected token might be in a position connect the cluster.

Navigate again in your workspace and create a playbook named staff.yml:

  • vi ~/kube-cluster/staff.yml

Upload the next textual content to the document so as to add the employees to the cluster:

~/kube-cluster/staff.yml

- hosts: grasp
  turn out to be: sure
  gather_facts: false
  duties:
    - identify: get connect command
      shell: kubeadm token create --print-join-command
      sign up: join_command_raw

    - identify: set connect command
      set_fact:
        join_command: "{{ join_command_raw.stdout_lines[0] }}"


- hosts: staff
  turn out to be: sure
  duties:
    - identify: connect cluster
      shell: "{{ hostvars['master'].join_command }} >> node_joined.txt"
      args:
        chdir: $HOME
        creates: node_joined.txt

Here is what the playbook does:

  • The primary play will get the connect command that must be run at the employee nodes. This command might be within the following layout:kubeadm connect --token : --discovery-token-ca-cert-hash sha256:. As soon as it will get the real command with the correct token and hash values, the duty units it as a truth in order that the following play will be capable of get right of entry to that information.

  • The second one play has a unmarried assignment that runs the connect command on all employee nodes. On crowning glory of this assignment, the 2 employee nodes might be a part of the cluster.

Save and shut the document if you find yourself completed.

Execute the playbook:

  • ansible-playbook -i hosts ~/kube-cluster/staff.yml

On crowning glory, you’re going to see output very similar to the next:

Output

PLAY [master] **** TASK [get join command] **** modified: [master] TASK [set join command] ***** good enough: [master] PLAY [workers] ***** TASK [Gathering Facts] ***** good enough: [worker1] good enough: [worker2] TASK [join cluster] ***** modified: [worker1] modified: [worker2] PLAY RECAP ***** grasp : good enough=2 modified=1 unreachable=0 failed=0 worker1 : good enough=2 modified=1 unreachable=0 failed=0 worker2 : good enough=2 modified=1 unreachable=0 failed=0

With the addition of the employee nodes, your cluster is now absolutely arrange and practical, with staff in a position to run workloads. Earlier than scheduling programs, let’s test that the cluster is operating as supposed.

Step 6 — Verifying the Cluster

A cluster can every now and then fail right through setup as a result of a node is down or community connectivity between the grasp and employee isn’t operating accurately. Let’s test the cluster and be sure that the nodes are working accurately.

It is very important take a look at the present state of the cluster from the grasp node to be sure that the nodes are in a position. If you happen to disconnected from the grasp node, you’ll be able to SSH again into it with the next command:

Then execute the next command to get the standing of the cluster:

You’re going to see output very similar to the next:

Output

NAME STATUS ROLES AGE VERSION grasp In a position grasp 1d v1.10.1 worker1 In a position 1d v1.10.1 worker2 In a position 1d v1.10.1

If all your nodes have the price In a position for STATUS, it signifies that they are a part of the cluster and in a position to run workloads.

If, then again, some of the nodes have NotReady because the STATUS, it will imply that the employee nodes have not completed their setup but. Look ahead to round 5 to 10 mins ahead of re-running kubectl get node and analyzing the brand new output. If a couple of nodes nonetheless have NotReady because the standing, you may have to make sure and re-run the instructions within the earlier steps.

Now that your cluster is verified effectively, let’s agenda an instance Nginx software at the cluster.

Step 7 — Working An Software at the Cluster

You’ll now deploy any containerized software in your cluster. To stay issues acquainted, let’s deploy Nginx the usage of Deployments and Services and products to look how this software will also be deployed to the cluster. You’ll use the instructions under for different containerized programs as smartly, supplied you convert the Docker picture identify and any related flags (equivalent to ports and volumes).

Nonetheless inside the grasp node, execute the next command to create a deployment named nginx:

  • kubectl run nginx --image=nginx --port 80

A deployment is a kind of Kubernetes object that guarantees there may be all the time a specified collection of pods working in keeping with an outlined template, despite the fact that the pod crashes right through the cluster’s lifetime. The above deployment will create a pod with one container from the Docker registry’s Nginx Docker Image.

Subsequent, run the next command to create a provider named nginx that may reveal the app publicly. It is going to accomplish that thru a NodePort, a scheme that may make the pod available thru an arbitrary port opened on every node of the cluster:

  • kubectl reveal deploy nginx --port 80 --target-port 80 --type NodePort

Services and products are any other form of Kubernetes object that reveal cluster inside products and services to purchasers, each inside and exterior. They’re additionally able to load balancing requests to a couple of pods, and are an integral element in Kubernetes, often interacting with different elements.

Run the next command:

This may occasionally output textual content very similar to the next:

Output

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP 1d nginx NodePort 10.109.228.209 80:nginx_port/TCP 40m

From the 3rd line of the above output, you’ll be able to retrieve the port that Nginx is working on. Kubernetes will assign a random port this is more than 30000 routinely, whilst making sure that the port isn’t already certain by means of any other provider.

To check that the whole thing is operating, talk over with http://worker_1_ip:nginx_port or http://worker_2_ip:nginx_port thru a browser to your native system. You’re going to see Nginx’s acquainted welcome web page.

If you want to take away the Nginx software, first delete the nginx provider from the grasp node:

  • kubectl delete provider nginx

Run the next to be sure that the provider has been deleted:

You’re going to see the next output:

Output

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP 1d

Then delete the deployment:

  • kubectl delete deployment nginx

Run the next to substantiate that this labored:

Output

No sources discovered.

Conclusion

On this information, you could have effectively arrange a Kubernetes cluster on CentOS 7 the usage of Kubeadm and Ansible for automation.

If you are questioning what to do with the cluster now that it is arrange, a excellent subsequent step can be to get at ease deploying your individual programs and products and services onto the cluster. Here is a record of hyperlinks with additional knowledge that may information you within the procedure:

  • Dockerizing applications – lists examples that element tips on how to containerize programs the usage of Docker.

  • Pod Overview – describes intimately how Pods paintings and their dating with different Kubernetes items. Pods are ubiquitous in Kubernetes, so figuring out them will facilitate your paintings.

  • Deployments Overview – this gives an outline of deployments. It comes in handy to know the way controllers equivalent to deployments paintings since they’re used often in stateless programs for scaling and the automatic therapeutic of dangerous programs.

  • Services Overview – this covers products and services, any other often used object in Kubernetes clusters. Working out the sorts of products and services and the choices they’ve is very important for working each stateless and stateful programs.

Different vital ideas that you’ll be able to glance into are Volumes, Ingresses and Secrets, all of which turn out to be useful when deploying manufacturing programs.

Kubernetes has a large number of capability and contours to supply. The Kubernetes Official Documentation is the most productive position to be told about ideas, to find task-specific guides, and glance up API references for quite a lot of items.