One place for hosting & domains

      How To Install Java Development Kit 11 on CentOS 8


      Updated by Linode Contributed by Rajakavitha Kodhandapani

      Java is one of the world’s most popular programming languages. Software written in Java can be compiled and run on any system, making Java a versatile platform that can be used to create anything from software to basic web applications. This guide will show you how to install the Open Java Development Kit (OpenJDK) 11 on CentOS 8.

      OpenJDK is the free and open-source implementation of the Oracle Java Standard Edition (Java SE) Development Kit. OpenJDK and Java SE are equivalent JDKs that include a Java runtime environment (JRE) and tools for developing and compiling Java applications.

      While there are many available versions of OpenJDK, version 11 is the latest Long-Term-Support (LTS) release as of the time of this guide’s publication. For this reason, OpenJDK 11 is the recommended version for developing production applications.

      Before You Begin

      1. Familiarize yourself with our Getting Started guide and complete the steps for connecting to your Linode with SSH and setting your Linode’s hostname and timezone.

      2. Complete the sections of our guide on Securing Your Server to create a standard user account, harden SSH access and remove unnecessary network services. This guide will use sudo commands wherever possible, which should be run by a limited, non-root user on your Linode.

      3. Ensure your system is up-to-date:

        sudo yum update
        

      Install OpenJDK

      1. Install the OpenJDK 11 development kit, which includes OpenJRE 11:

        sudo yum install java-11-openjdk-devel
        

        Alternatively, if you simply want to run Java applications that you have already downloaded, you can choose to only install OpenJRE 11:

        sudo yum install java-11-openjdk
        

        Note

        While you can run Java applications directly with the JRE, your applications will be compiled every time they are executed. This is generally slower than running applications that have already been compiled into Java bytecode, and may not be suitable if you plan to execute applications many times.

      2. Check the version of the JRE to verify that it has been properly installed:

        java -version
        

        As of the time of this publication, this command should return:

          
        openjdk version "11.0.7" 2020-04-14 LTS
        OpenJDK Runtime Environment 18.9 (build 11.0.7+10-LTS)
        OpenJDK 64-Bit Server VM 18.9 (build 11.0.7+10-LTS, mixed mode, sharing)
        
        
      3. If you have chosen to install the full OpenJDK development kit, check the version of the compiler as well:

        javac -version
        

        As of the time of this publication, this command should return:

          
        javac 11.0.7
        
        

      Set Environment Variables

      This section will instruct you on how to set the JAVA_HOME and PATH environment variables to help ensure that your Java applications will run without issue.

      1. Open the ~/.bashrc startup file using the text editor of your choice and add the following definitions at the end of the file:

        ~/.bashrc
        1
        2
        3
        
        # [...]
        export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
        export PATH=$PATH:$JAVA_HOME/bin

        Note

        If you are using a shell other than Bash, such as Zsh, you may need to add these lines in a different startup file instead. In the case of Zsh, this would be the ~/.zshrc file.
      2. Save the changes and exit your text editor.

      3. Reload the ~/.bashrc file:

        source ~/.bashrc
        
      4. Verify that the JAVA_HOME and PATH variables were set correctly:

        echo $JAVA_HOME
        echo $PATH
        

        The JAVA_HOME variable should be set to the directory that contains your OpenJDK installation, and the PATH variable should include the directory that contains the OpenJDK binary files.

      Test the Java Installation (Optional)

      To test your Java installation, write a sample HelloWorld Java application and run it with the JRE.

      1. Open a text editor and add the following lines in a file labeled HelloWorld.java to create a simple function that prints “Hello Java World!”:

        HelloWorld.java
        1
        2
        3
        4
        5
        
        public class HelloWorld {
            public static void main(String[] args) {
                System.out.println("Hello Java World!");
            }
        }
      2. Run the application using the JRE:

        java HelloWorld.java
        

        If the installation has been successful, the output will be:

          
        Hello Java World!
        
        

      If you have installed the full OpenJDK development kit, you can compile your application into a bytecode class file prior to running it for faster execution time.

      1. Compile the application you have written:

        javac HelloWorld.java
        
      2. Confirm that the HelloWorld.class file was written to your current directory:

        ls -l HelloWorld.class
        
      3. Run the compiled HelloWorld function using the JRE:

        java HelloWorld
        

        The output should again be:

          
        Hello Java World!
        
        

      This guide is published under a CC BY-ND 4.0 license.



      Source link

      Automating Server Setup with Ansible: Un kit del taller de DigitalOcean


      Automatizar la configuración del servidor con materiales del kit de taller de Ansible

      Este kit de taller está diseñado para ayudar al público técnico a familiarizarse con los conceptos vinculados a la gestión de configuración y con el uso de Ansible para automatizar la configuración de la infraestructura del servidor.

      El objetivo es proporcionar un conjunto completo de recursos para que un ponente celebre un evento y de una charla introductoria sobre Ansible. Incluye lo siguiente:

      • Diapositivas y notas para el ponente; se incluyen vídeos demo cortos y comandos para ejecutar una demostración en vivo opcional. Esta charla dura aproximadamente 50 minutos.
      • Un repositorio de GitHub que contenga el código de la aplicación de demostración y las secuencias de comandos de Ansible necesarias para implementar esa aplicación en un servidor de Ubuntu.
      • Este tutorial, explica cómo implementar la demo Travellist de la aplicación Laravel en un servidor remoto.

      Este tutorial está destinado a complementar la demo de charla con detalles y aclaraciones adicionales. También sirve como referencia para los lectores que buscan implementar una aplicación de Laravel en un servidor remoto de Ubuntu usando Ansible.

      Introducción

      Debido al carácter desechable de los entornos de aplicaciones modernos, la automatización de servidores ahora desempeña un papel fundamental en la administración de sistemas. Las herramientas de gestión de configuración como Ansible normalmente se utilizan para agilizar el proceso de automatización de la configuración del servidor estableciendo procedimientos estándares para los nuevos servidores. Esto tiene el beneficio de reducir los errores humanos asociados con las configuraciones manuales.

      Ansible ofrece una arquitectura simplificada que no requiere la instalación de software especial en los nodos. También proporciona un conjunto sólido de características y módulos incorporados que facilitan la escritura de secuencias de comandos de automatización.

      Este tutorial, diseñado para acompañar a las diapositivas y las notas del ponente para el kit del taller Automatizar la configuración del servidor con Ansible, le mostrará cómo configurar un archivo de inventario y ejecutar un conjunto de secuencias de comandos de aprovisionamiento para automatizar completamente el proceso de configurar un servidor LEMP remoto (Linux, (E)Nginx, MariaDB y PHP-FPM) en Ubuntu 18.04 e implementar una aplicación demo Laravel en este sistema.

      Nota: Este material está destinado a demostrar cómo usar playbooks para automatizar la configuración del servidor con Ansible. Aunque nuestra demo consiste en una aplicación Laravel que se ejecuta en un servidor LEMP, se anima a los lectores que modifiquen y adapten la configuración incluida para que se adapte a sus propias necesidades.

      Requisitos previos

      Para este tutorial, necesitará lo siguiente:

      Paso 1: Clonar el repositorio demo

      Lo primero que debemos hacer es clonar el repositorio que contiene las secuencias de comando de aprovisionamiento de Ansible y la aplicación demo Laravel que implementaremos en los servidores remotos. Puede encontrar todos los archivos necesarios en el repositorio de Github do-community/ansible-laravel-demo.

      Tras iniciar sesión en su nodo de control de Ansible como su usuario sudo, clone el repositorio y navegue al directorio creado por el comando git:

      • git clone https://github.com/do-community/ansible-laravel-demo.git
      • cd ansible-laravel-demo

      Ahora, puede ejecutar un comando ls para inspeccionar los contenidos del repositorio clonado:

      • ls -l --group-directories-first

      Verá resultados como este:

      ansible-laravel-demo

      drwxrwxr-x 3 sammy sammy 4096 Mar 24 15:24 application
      drwxrwxr-x 2 sammy sammy 4096 Mar 24 15:24 group_vars
      drwxrwxr-x 7 sammy sammy 4096 Mar 24 15:24 roles
      -rw-rw-r-- 1 sammy sammy  102 Mar 24 15:24 inventory-example
      -rw-rw-r-- 1 sammy sammy 1987 Mar 24 15:24 laravel-deploy.yml
      -rw-rw-r-- 1 sammy sammy  794 Mar 24 15:24 laravel-env.j2
      -rw-rw-r-- 1 sammy sammy  920 Mar 24 15:24 readme.md
      -rw-rw-r-- 1 sammy sammy  318 Mar 24 15:24 server-setup.yml
      

      Aquí tiene una descripción de cada una de estas carpetas y archivos y de lo que son:

      • application/: este directorio contiene la aplicación demo Laravel que va a ser implementada en el servidor remoto al final del taller.
      • group_vars/: este directorio contiene los archivos variables que contienen opciones personalizadas para la configuración de la aplicación, como las credenciales de la base de datos y dónde guardar los archivos de la aplicación en el servidor remoto.
      • roles/: este directorio contiene los diferentes roles de Ansible que gestionan el aprovisionamiento de un servidor LEMP de Ubuntu.
      • inventory-example: este archivo puede usarse como una base para crear un inventario personalizado para su infraestructura.
      • laravel-deploy.yml: este playbook implementará la aplicación demo Laravel en el servidor remoto.
      • laravel-env.j2: el playbook laravel-deploy.yml utiliza esta plantilla para configurar el archivo de entorno de la aplicación.
      • readme.md: este archivo contiene información general sobre el aprovisionamiento contenido en este repositorio.
      • server-setup.yml: este playbook proporcionará un servidor LEMP usando los roles definidos en el diretorio roles/.

      Paso 2: Configurar el archivo de inventario y probar la conexión con los nodos

      Ahora, crearemos un archivo de inventario para listar los hosts que queremos administrar usando Ansible. Primero, copie el archivo inventory-example a un nuevo archivo llamado hosts:

      • cp inventory-example hosts

      Ahora, utilice su editor de texto favorito para abrir el nuevo archivo de inventario y actualizarlo con sus propios servidores. En este caso, utilizaremos nano:

      El inventario de ejemplo que viene con el kit de taller contiene dos grupos de Ansible: dev y production. Esto está destinado a demostrar la forma de usar variables de grupo para personalizar la implementación en varios entornos. Si desea probar esta configuración con un único nodo, puede usar dev o el grupo production y eliminar el otro del archivo de inventario.

      ansible-laravel-demo/hosts

      [dev]
      203.0.113.0.101
      
      [prod]
      203.0.113.0.102
      
      [all:vars]
      ansible_python_interpreter=/usr/bin/python3
      

      Nota: La variable ansible_python_interpreter define la ruta al ejecutable de Python en el host remoto. Aquí, indicamos a Ansible que establezca esta variable para todos los hosts en este archivo de inventario.

      Guarde y cierre el archivo cuando termine. Si utiliza nano, puede hacerlo pulsando CTRL+X, luego Y y ENTER para confirmar.

      Una vez que haya terminado de ajustar su archivo de inventario, puede ejecutar el módulo ping de Ansible para probar si el nodo de control puede conectar con los hosts:

      • ansible all -i hosts -m ping -u root

      Vamos a desglosar este comando:

      • all: esta opción indica a Ansible que ejecute el siguiente comando en todos los hosts desde el archivo de inventario designado.
      • -i hosts: especifica qué inventario debería usarse. Cuando no se proporciona esta opción, Ansible intentará usar el inventario predeterminado, que normalmente se ubica en /etc/ansible/hosts.
      • -m ping: esto ejecutará el módulo ping de Ansible, que probará la conectividad con los nodos y si el ejecutable de Python puede encontarse o no en los sistemas remotos.
      • -u root: esta opción especifica el usuario remoto que debería usarse para establecer conexión con los nodos. Estamos usando la cuenta root como ejemplo porque normalmente es la única cuenta disponibles en los servidores nuevos. Es posible que sean necesarias otras opciones de conexión dependiendo del proveedor de su infraestructura y de la configuración SSH.

      Si su conexión SSH a los nodos se configura correctamente, obtendrá el siguiente resultado:

      Output

      203.0.113.0.101 | SUCCESS => { "changed": false, "ping": "pong" } 203.0.113.0.102 | SUCCESS => { "changed": false, "ping": "pong" }

      La respuesta pong significa que su nodo de control puede establecer conexión con sus nodos gestionados y que Ansible puede ejecutar los comandos de Python en los hosts remotos.

      Paso 3: Configurar los archivos variables

      Antes de ejecutar los playbooks que están incluidos en este kit de taller, primero deberá editar el archivo de variables que contiene ajustes como el nombre del usuario remoto que se creará y las credenciales de la base de datos que se configurarán con MariaDB.

      Abra el archivo group_vars/all usando el editor de texto que prefiera:

      ansible-laravel-demo/group_vars/all.yml

      ---
      # Initial Server Setup
      remote_user: sammy
      
      # MySQL Setup
      mysql_root_password: MYSQL_ROOT_PASSWORD
      mysql_app_db: travellist
      mysql_app_user: travellist_user
      mysql_app_pass: DB_PASSWORD
      
      # Web Server Setup
      http_host: "{{ ansible_facts.eth0.ipv4.address }}"
      remote_www_root: /var/www
      app_root_dir: travellist-demo
      document_root: "{{ remote_www_root }}/{{ app_root_dir }}/public"
      
      # Laravel Env Variables
      app_name: Travellist
      app_env: dev
      app_debug: true
      app_url: "http://{{ http_host }}"
      db_host: localhost
      db_port: 3306
      db_database: "{{ mysql_app_db }}"
      db_user: "{{ mysql_app_user }}"
      db_pass: "{{ mysql_app_pass }}"
      

      Las variables que debe considerar son las siguientes:

      • remote_user: el usuario especificado se creará en el servidor remoto y se le concendrán privilegios sudo.
      • mysql_root_password: esta variable define la contraseña root de la base de datos para el servidor de MariaDB. Observe que esta debería ser una contraseña segura que usted elija.
      • mysql_app_db: el nombre de la base de datos que va a crear para la aplicación Laravel. No es necesario que cambie este valor, pero puede hacerlo si lo desea. Este valor se usará para establecer el archivo de configuración .env de Laravel.
      • mysql_app_user: el nombre del usuario de la base de datos para la aplicación Laravel. De nuevo, no es necesario que cambie este valor, pero puede hacerlo si lo desea.
      • mysql_app_pass: la contraseña de la base de datos para la aplicación Laravel. Esta debería ser una contraseña segura de su elección.
      • http_host: el nombre de dominio o dirección IP del host remoto. Aquí, recurriremos al hecho de que Ansible contiene la dirección ipv4 para la interfaz de red eth0. En el caso de que tenga nombres de dominios apuntando a sus hosts remotos, es posible que desee crear archivos de variables independientes para cada uno de ellos sobrescribiendo este valor de modo que la configuración de Nginx contenga el hostname correcto para cada servidor.

      Una vez que termine de editar estos valores, guarde y cierre el archivo.

      Crear archivos de variables adicionales para varios entornos

      Si configuró su archivo de inventario con varios nodos, es posible que desee crear archivos de variables adicionales para configurar cada nodo de forma adecuada. En nuestro inventario de ejemplo, creamos dos grupos distintos: dev y production. Para evitar tener las mismas credenciales de la base de datos y otros ajustes en ambos entornos, debemos crear un archivo variable independiente que albergue nuestros valores de producción.

      Es posible que desee copiar el archivo variable y usarlo como base para sus valores de producción:

      • cp group_vars/all.yml group_vars/production.yml
      • nano group_vars/production.yml

      Debido a que el archivo all.yml contiene los valores predeterminados que deberían ser válidos para todos los entornos, puede eliminar del nuevo archivo production.yml todas las variables que no necesitarán modificaciones. Las variables que debería actualizar para cada entorno se resaltan aquí:

      ansible-laravel-demo/group_vars/production

      ---
      # Initial Server Setup
      remote_user: prod_user
      
      # MySQL Setup
      mysql_root_password: MYSQL_PROD_ROOT_PASSWORD
      mysql_app_pass: MYSQL_PROD_APP_PASSWORD
      
      # Laravel Env Variables
      app_env: prod
      app_debug: false
      

      Observe que cambiamos el valor de app_env a prod y fijamos el valor app_debug en false. Estos son los ajustes de Laravel recomendados para los entornos de producción.

      Cuando termine de personalizar sus variables de producción, guarde y cierre el archivo.

      Cifrar archivos variables con Ansible Vault

      Si planea compartir su configuración Ansible con otros usuarios, es importante mantener las credenciales y otros datos sensibles de sus archivos variables protegidos. Esto es posible con Ansible Vault, una función que se incluye con Ansible por defecto. Ansible Vault le permite cifrar archivos de variables de modo que solo los usuarios con acceso a la contraseña de almacén puedan ver, editar o descifrar estos archivos. La contraseña de almacén es también necesaria para ejecutar un playbook o un comando que utilice archivos cifrados.

      Para cifrar su archivo de variables de producción, ejecute lo siguiente:

      • ansible-vault encrypt group_vars/production.yml

      Se le solicitará proporcionar una contraseña de almacén y confirmarla. Una vez que termine, si comprueba el contenido del archivo, verá que los datos estarán cifrados.

      Si desea ver el archivo variable sin cambiar su contenido, puede usar el comando view.

      • ansible-vault view group_vars/production.yml

      Se le pedirá que proporcione la misma contraseña que definió cuando cifró ese archivo con asnible-vault. Tras proporcionar la contraseña, el contenido del archivo aparecerá en su terminal. Para salir de la vista de archivo, escriba q.

      Para editar un archivo previamente cifrado con Ansible Vault, utilice el comando de almacén edit:

      • ansible-vault edit group_vars/production.yml

      Este comando lo solicitará proporcionar la contraseña de almacén para el archivo. Su editor de terminal predeterminado se utilizará para abrir el archivo para su edición. Tras realizar los cambios deseados, guarde y cierre el archivo. Ansible Vault lo cifrará de nuevo automáticamente.

      Ahora ha terminado de configurar sus archivos variables. En el siguiente paso, ejecutaremos el playbook para configurar Nginx, PHP-FPM y MariaDB (que junto con un sistema operativo basado en Linux como Ubuntu forman la pila LEMP) en sus servidores remotos.

      Paso 4: Ejecutar el playbook de LEMP

      Antes de implementar la aplicación demo Laravel en los servidores remotos, debemos configurar un entorno LEMP que presentará la aplicación. El playbook server-setup.yml incluye los roles de Ansible necesarios para configurar esto. Para inspeccionar sus contenidos, ejecute:

      ansible-laravel-demo/server-setup.yml

      ---
      - hosts: all
        become: true
        roles:
          - { role: setup, tags: ['setup'] }
      
          - { role: mariadb, tags: ['mysql', 'mariadb', 'db', 'lemp'] }
      
          - { role: php, tags: ['php', 'web', 'php-fpm', 'lemp'] }
      
          - { role: nginx, tags: ['nginx', 'web', 'http', 'lemp'] }
      
          - { role: composer, tags: ['composer'] }
      

      Aquí tiene una descripción de los roles incluidos en este playbook:

      • setup: contiene las tareas necesarias para crear un nuevo usuario del sistema y concederle privilegios sudo, y para habilitar el firewall ufw.
      • mariadb: instala la el servidor de la base de datos MariaDB y crea la base de datos y el usuario de la aplicación.
      • php: instala php-fpm y los módulos PHP que son necesarios para ejecutar una aplicación Laravel.
      • nginx: instala el servidor web Nginx y permite el acceso en el puerto 80.
      • composer: instala Composer globalmente.

      Observe que hemos configurado algunas etiquetas en cada rol. Esto es para que resulte sencillo volver ejecutar solo partes de este playbook, si es necesario. Si realiza cambios en su archivo de plantilla de Nginx, por ejemplo, es posible que desee ejecutar solo el rol de Nginx.

      El siguiente comando ejecutará este playbook en todos los servidores desde su archivo de inventario. El --ask-vault-pass solo es necesario en caso de que haya usado ansible-vault para cifrar archivos variables en el paso anterior:

      • ansible-playbook -i hosts server-setup.yml -u root --ask-vault-pass

      Verá un resultado similar a este:

      Output

      PLAY [all] ********************************************************************************************** TASK [Gathering Facts] ********************************************************************************** ok: [203.0.113.0.101] ok: [203.0.113.0.102] TASK [setup : Install Prerequisites] ******************************************************************** changed: [203.0.113.0.101] changed: [203.0.113.0.102] ... RUNNING HANDLER [nginx : Reload Nginx] ****************************************************************** changed: [203.0.113.0.101] changed: [203.0.113.0.102] PLAY RECAP ********************************************************************************************** 203.0.113.0.101 : ok=31 changed=27 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1 203.0.113.0.102 : ok=31 changed=27 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1

      Sus nodos ahora están listos para presentar aplicaciones PHP usando Nginx+PHP-FPM, con MariaDB como el servidor de la base de datos. En el siguiente paso, implementaremos la aplicación demo Laravel incluida con el playbook de Ansible laravel-deploy.yml.

      Paso 5: Implementar la aplicación de Laravel

      Ahora que tiene un entorno LEMP en funcionamiento en su servidor remoto, puede ejecutar el playbook laravel-deploy.yml. Este playbook ejecutará las siguientes tareas:

      1. Crear la raíz del documento de la aplicación en el servidor remoto, si esto aún no se hizo.
      2. Sincronizar la carpeta de la aplicación local con el servidor remoto usando el módulo sync.
      3. Usar el módulo acl para establecer permisos para el usuario www-data en la carpeta de almacenamiento.
      4. Configurar el archivo de aplicación .env en base a la plantilla laravel-env.j2.
      5. Instalar las dependencias de la aplicación con Composer.
      6. Generar la clave de seguridad de la aplicación.
      7. Configurar un enlace público para la carpeta de almacenamiento.
      8. Ejecutar migraciones y seeders de la base de datos.

      Este playbook debería ejecutarse a través de un usuario no root con permisos sudo. Este usuario se creó cuando ejecutó el playbook server-setup.yml en el paso anterior, usando el nombre definido por la variable remote_user.

      Cuano esté listo, ejecute el playbook laravel-deploy.yml con:

      • ansible-playbook -i hosts laravel-deploy.yml -u sammy --ask-vault-pass

      El --ask-vault-pass solo es necesario en caso de que haya usado ansible-vault para cifrar archivos variables en el paso anterior.

      Verá un resultado similar a este:

      Output

      PLAY [all] ********************************************************************************************** TASK [Gathering Facts] ********************************************************************************** ok: [203.0.113.0.101] ok: [203.0.113.0.102] TASK [Make sure the remote app root exists and has the right permissions] ******************************* ok: [203.0.113.0.101] ok: [203.0.113.0.102] TASK [Rsync application files to the remote server] ***************************************************** ok: [203.0.113.0.101] ok: [203.0.113.0.102] ... TASK [Run Migrations + Seeders] ************************************************************************* ok: [203.0.113.0.101] ok: [203.0.113.0.102] PLAY RECAP ********************************************************************************************** 203.0.113.0.101 : ok=10 changed=9 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 203.0.113.0.102 : ok=10 changed=9 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

      Cuando finalice la ejecución, podrá acceder a la aplicación demo apuntando su navegador al nombre de dominio o dirección IP de su nodo:

      http://node_domain_or_IP
      

      Verá una página como la siguiente:

      Demo Travellist de Laravel

      Conclusión

      En este tutorial, se muestra la manera de configurar un archivo de inventario de Ansible, establecer conexión con nodos remotos y ejecutar playbooks de Ansible para configurar un servidor LEMP e implementar una aplicación de demostración de Laravel en él. Esta guía complementa las diapositivas y notas del ponente de Automatizar la configuración del servidor con el Kit del taller Ansible; además, viene acompañada de un repositorio de GitHub de demostración que contiene todos los archivos necesarios para seguir con el componente de demostración de este taller.



      Source link

      Automating Server Setup with Ansible: Un kit d’atelier DigitalOcean


      ‘>Automatiser la mise en place du serveur avec les matériaux du kit de l’atelier

      Ce kit d’atelier est conçu pour aider un public technique à se familiariser avec les concepts de gestion de la configuration et à utiliser Ansible pour automatiser la configuration de l’infrastructure des serveurs. 

      L’objectif est de fournir un ensemble complet de ressources permettant à un conférencier d’organiser un événement et de présenter un exposé introductif sur Ansible. Il comprend :

      • Diapositives et notes de l’orateur y compris de courtes vidéos de démonstration et des commandes permettant d’exécuter une démo en direct facultative. Cet entretien dure environ 50 minutes.
      • Un dépôt GitHub contenant le code de l’application de démonstration et les scripts Ansible nécessaires pour déployer cette application sur un serveur Ubuntu.
      • Ce tutoriel, qui guide l’utilisateur dans le déploiement de la démo de Travellist de l’application Laravel sur un serveur distant.

      Ce tutoriel vise à compléter la démo de la conférence par des détails et des explications supplémentaires. Il sert également de référence pour les lecteurs qui cherchent à déployer une application Laravel sur un serveur Ubuntu distant en utilisant Ansible.

      Introduction

      L’automatisation des serveurs joue maintenant un rôle essentiel dans l’administration des systèmes, en raison de la nature disponible des environnements d’application modernes. Les outils de gestion de la configuration tels que Ansible sont généralement utilisés pour rationaliser le processus d’automatisation de la configuration des serveurs en établissant des procédures standard pour les nouveaux serveurs. Cela a l’avantage de réduire l’erreur humaine associée aux réglages manuels.

      Ansible offre une architecture simplifiée qui ne nécessite pas l’installation de logiciels spéciaux sur les nœuds. Elle fournit également un ensemble robuste de caractéristiques et de modules intégrés qui facilitent l’écriture de scripts d’automatisation.

      Ce tutoriel, conçu pour accompagner les diapositives et les notes de l’orateur pour le kit d’atelier Automatisation de la configuration du serveur avec Ansible vous montrera comment créer un fichier d’inventaire et exécuter un ensemble de scripts d’approvisionnement afin d’automatiser entièrement le processus de mise en place d’un serveur LEMP distant (Linux, (E) Nginx, MariaDB et PHP-FPM) sur Ubuntu 18.04 et de déployer une application Laravel de démonstration sur ce système. 

      Remarque: Ce matériel est destiné à démontrer comment utiliser des playbooks pour automatiser la configuration des serveurs avec Ansible. Bien que notre démo consiste en une application Laravel fonctionnant sur un serveur LEMP, les lecteurs sont encouragés à modifier et à adapter la configuration incluse pour répondre à leurs propres besoins.

      Conditions préalables

      Pour suivre ce tutoriel, vous aurez besoin de :

      • Un nœud de contrôle Ansible : une machine Ubuntu 18.04 avec Ansible installé et configuré pour se connecter à vos hôtes ansible en utilisant les clés SSH. Assurez-vous que le nœud de contrôle a un utilisateur régulier avec des permissions sudo et un pare-feu activé, comme expliqué dans notre Guide de configuration initiale du serveur, et un ensemble de Clés SSH. Pour configurer Ansible, veuillez suivre notre guide sur Comment installer et configurer Ansible sur Ubuntu 18.04.
      • Un ou plusieurs hôtes Ansible : un ou plusieurs serveurs Ubuntu 18.04 distants. Chaque hôte doit faire ajouter la clé publique du nœud de contrôle à son fichier authorized_keys comme expliqué dans l'Etape 2 de l'installation des clés SSH dans le guide Ubuntu 18.04. Au cas où vous utiliseriez les Droplets DigitalOcean en tant que nœuds, vous pouvez utiliser le panneau de commande pour ajouter votre clé publique à vos hôtes Ansible. 

      Étape 1 – Cloner le dépôt de démo

      La première chose que nous devons faire est de cloner le dépôt contenant les scripts de provisionnement Ansible et l’application de démonstration Laravel, que nous allons déployer sur les serveurs distants. Tous les fichiers nécessaires se trouvent dans le dépôt Github do-community/ansible-laravel-demo.

      Après vous être connecté à votre nœud de contrôle Ansible en tant qu’utilisateur sudo, clonez le dépôt et naviguez jusqu’au répertoire créé par la commande git :

      • git clone https://github.com/do-community/ansible-laravel-demo.git
      • cd ansible-laravel-demo

      Maintenant, vous pouvez exécuter une commande ls pour inspecter le contenu du référentiel cloné:

      • ls -l --group-directories-first

      Vous verrez une sortie de ce type :

      ansible-laravel-demo

      drwxrwxr-x 3 sammy sammy 4096 Mar 24 15:24 application
      drwxrwxr-x 2 sammy sammy 4096 Mar 24 15:24 group_vars
      drwxrwxr-x 7 sammy sammy 4096 Mar 24 15:24 roles
      -rw-rw-r-- 1 sammy sammy  102 Mar 24 15:24 inventory-example
      -rw-rw-r-- 1 sammy sammy 1987 Mar 24 15:24 laravel-deploy.yml
      -rw-rw-r-- 1 sammy sammy  794 Mar 24 15:24 laravel-env.j2
      -rw-rw-r-- 1 sammy sammy  920 Mar 24 15:24 readme.md
      -rw-rw-r-- 1 sammy sammy  318 Mar 24 15:24 server-setup.yml
      

      Voici un aperçu de chacun de ces dossiers et fichiers et de ce qu’ils sont :

      • application/: ce répertoire contient l’application Laravel de démonstration qui va être déployée sur le serveur distant à la fin de l’atelier. 
      • group_vars/: Ce répertoire contient des fichiers variables contenant des options personnalisées pour la configuration de l’application, telles que les informations d’identification de la base de données et l’endroit où stocker les fichiers de l’application sur le serveur distant. 
      • roles/: Ce répertoire contient les différents roles Ansible qui gèrent le provisionnement d’un serveur LEMP Ubuntu. 
      • inventory-example: Ce fichier peut être utilisé comme base pour créer un inventaire personnalisé de votre infrastructure. 
      • laravel-deploy.yml: Ce playbook permettra de déployer l’application Laravel de démonstration sur le serveur distant. 
      • laravel-env.j2: Ce modèle est utilisé par le playbook laravel-deploy.yml pour mettre en place le fichier d’environnement de l’application. 
      • readme.md: Ce fichier contient des informations générales sur le provisionnement contenu dans ce dépôt. 
      • server-setup.yml: Ce playbook fournira un serveur LEMP en utilisant les rôles définis dans le répertoire roles/. 

      Étape 2 – Mettre en place le fichier d’inventaire et test de la connexion aux nœuds

      Nous allons maintenant créer un fichier d’inventaire pour répertorier les hôtes que nous voulons gérer à l’aide d’Ansible. Tout d’abord, copiez le fichier inventory-example dans un nouveau fichier appelé hosts : 

      • cp inventory-example hosts

      Maintenant, utilisez l’éditeur de texte de votre choix pour ouvrir le nouveau fichier d’inventaire et le mettre à jour avec vos propres serveurs. Ici, nous utiliserons le nano :

      L’exemple d’inventaire fourni avec le kit d’atelier contient deux groupes d’Ansible : développement et production. Il s’agit de montrer comment utiliser des variables de groupe pour personnaliser le déploiement dans des environnements multiples. Si vous souhaitez tester cette configuration avec un seul nœud, vous pouvez utiliser soit le groupe de développement, soit le groupe de production et supprimer l’autre du fichier d’inventaire.

      ansible-laravel-demo/hosts

      [dev]
      203.0.113.0.101
      
      [prod]
      203.0.113.0.102
      
      [all:vars]
      ansible_python_interpreter=/usr/bin/python3
      

      Remarque : la variable ansible_python_interpreter définit le chemin vers l’exécutable Python sur l’hôte distant. Ici, nous disons à Ansible de définir cette variable pour tous les hôtes dans ce fichier d’inventaire.

      Enregistrez et fermez le fichier lorsque vous avez fini de le modifier. Si vous utilisez nano, vous pouvez le faire en appuyant sur CTRL+X, puis Y et ENTER (ENTRÉE) pour confirmer.

      Une fois que vous avez fini d’ajuster votre fichier d’inventaire, vous pouvez exécuter le module ping Ansible pour tester si le nœud de contrôle est capable de se connecter aux hôtes :

      • ansible all -i hosts -m ping -u root

      Décomposons cette commande :

      • all : Cette option indique à Ansible d’exécuter la commande suivante sur tous les hôtes du fichier d’inventaire désigné. 
      • -i hosts : Spécifie quel inventaire doit être utilisé. Lorsque cette option n’est pas disponible, Ansible s’efforcera d’utiliser l’inventaire par défaut, qui se trouve généralement à l’adresse /etc/ansible/hosts. 
      • -m ping : Cela permettra d’exécuter le ping Ansible qui testera la connectivité aux nœuds et déterminera si l’exécutable Python peut être trouvé ou non sur les systèmes distants. 
      • -u root : Cette option spécifie quel utilisateur distant doit être utilisé pour se connecter aux nœuds. Nous utilisons la root à titre d’exemple, car c’est généralement le seul compte disponible sur les nouveaux serveurs. D’autres options de connexion peuvent être nécessaires en fonction de votre fournisseur d’infrastructure et de la configuration SSH.

      Si votre connexion SSH aux nœuds est correctement configurée, vous obtiendrez le résultat suivant :

      Output

      203.0.113.0.101 | SUCCESS => { "changed": false, "ping": "pong" } 203.0.113.0.102 | SUCCESS => { "changed": false, "ping": "pong" }

      La réponse pong signifie que votre nœud de contrôle est capable de se connecter à vos nœuds gérés, et qu’Ansible est capable d’exécuter des commandes Python sur les hôtes distants.

      Étape 3 – Mettre en place les fichiers variables

      Avant de lancer les playbooks inclus dans ce kit d’atelier, vous devrez d’abord modifier le fichier de variables qui contient des paramètres tels que le nom de l’utilisateur distant à créer et les informations d’identification de la base de données à configurer avec MariaDB.

      Ouvrez le groupe_vars/all en utilisant l’éditeur de texte de votre choix : 

      ansible-laravel-demo/group_vars/all.yml

      ---
      # Initial Server Setup
      remote_user: sammy
      
      # MySQL Setup
      mysql_root_password: MYSQL_ROOT_PASSWORD
      mysql_app_db: travellist
      mysql_app_user: travellist_user
      mysql_app_pass: DB_PASSWORD
      
      # Web Server Setup
      http_host: "{{ ansible_facts.eth0.ipv4.address }}"
      remote_www_root: /var/www
      app_root_dir: travellist-demo
      document_root: "{{ remote_www_root }}/{{ app_root_dir }}/public"
      
      # Laravel Env Variables
      app_name: Travellist
      app_env: dev
      app_debug: true
      app_url: "http://{{ http_host }}"
      db_host: localhost
      db_port: 3306
      db_database: "{{ mysql_app_db }}"
      db_user: "{{ mysql_app_user }}"
      db_pass: "{{ mysql_app_pass }}"
      

      Les variables qui nécessitent votre attention sont :

      • remote_user : L’utilisateur spécifié sera créé sur le serveur distant et se verra accorder des privilèges sudo.
      • mysql_root_password: Cette variable définit le mot de passe de la root de la base de données pour le serveur MariaDB. Notez qu’il doit s’agir d’un mot de passe sécurisé que vous aurez choisi vous-même.
      • mysql_app_db: Le nom de la base de données à créer pour l’application Laravel. Vous n’avez pas besoin de changer cette valeur, mais vous êtes libre de le faire si vous le souhaitez. Cette valeur sera utilisée pour mettre en place le fichier de configuration Laravel .env.
      • mysql_app_user: Le nom de l’utilisateur de la base de données pour l’application Laravel. Là encore, vous n’êtes pas obligé de changer cette valeur, mais vous êtes libre de le faire.
      • mysql_app_pass: Le mot de passe de la base de données pour l’application Laravel. Il doit s’agir d’un mot de passe sécurisé de votre choix.
      • http_host: Le nom de domaine ou l’adresse IP de l’hôte distant. Ici, nous utilisons un fait Ansible qui contient l’adresse ipv4 pour l’interface réseau eth0. Si vos noms de domaine pointent vers vos hôtes distants, vous pouvez créer des fichiers variables séparés pour chacun d’eux, en écrasant cette valeur afin que la configuration Nginx contienne le nom d’hôte correct pour chaque serveur.

      Lorsque vous avez fini de modifier ces valeurs, enregistrez et fermez le fichier.

      Créer des fichiers variables supplémentaires pour des environnements multiples

      Si vous avez configuré votre fichier d’inventaire avec plusieurs nœuds, vous pouvez créer des fichiers variables supplémentaires pour configurer chaque nœud en conséquence. Dans notre exemple d’inventaire, nous avons créé deux groupes distincts : le développement et la production. Pour éviter d’avoir les mêmes références de base de données et autres paramètres dans les deux environnements, nous devons créer un fichier de variables séparé qui contiendra les valeurs de production.

      Vous voudrez peut-être copier le fichier de variables par défaut et l’utiliser comme base pour vos valeurs de production :

      • cp group_vars/all.yml group_vars/production.yml
      • nano group_vars/production.yml

      Comme le fichier all.yml contient les valeurs par défaut qui devraient être valables pour tous les environnements, vous pouvez supprimer du nouveau fichier production.yml toutes les variables qui n’auront pas besoin d’être modifiées. Les variables que vous devez mettre à jour pour chaque environnement sont mises en évidence ici :

      ansible-laravel-demo/group_vars/production

      ---
      # Initial Server Setup
      remote_user: prod_user
      
      # MySQL Setup
      mysql_root_password: MYSQL_PROD_ROOT_PASSWORD
      mysql_app_pass: MYSQL_PROD_APP_PASSWORD
      
      # Laravel Env Variables
      app_env: prod
      app_debug: false
      

      Remarquez que nous avons modifié la valeur app_env à prod et mis la valeur d’ app_debug à false. Il s’agit de paramètres Laravel recommandés pour les environnements de production.

      Une fois que vous avez fini de personnaliser vos variables de production, enregistrez et fermez le fichier.

      Crypter les fichiers variables avec Ansible Vault

      Si vous prévoyez de partager votre installation Ansible avec d’autres utilisateurs, il est important de préserver la sécurité des informations d’identification de la base de données et des autres données sensibles contenues dans vos fichiers variables. Cela est possible grâce à Ansible Vault, une fonctionnalité qui est incluse par défaut dans Ansible. Ansible Vault vous permet de crypter des fichiers variables afin que seuls les utilisateurs ayant accès au mot de passe de la chambre forte puissent voir, modifier ou décrypter ces fichiers. Le mot de passe de la chambre forte est également nécessaire pour exécuter un playbook ou une commande qui utilise des fichiers cryptés.

      Pour crypter votre fichier de variables de production, exécutez :

      • ansible-vault encrypt group_vars/production.yml

      Vous serez invité à fournir un mot de passe pour la chambre forte et à le confirmer. Une fois que vous aurez terminé, si vous vérifiez le contenu de ce fichier, vous verrez que les données sont maintenant cryptées.

      Si vous souhaitez visualiser le fichier de variables sans en modifier le contenu, vous pouvez utiliser la commande d'affichage : 

      • ansible-vault view group_vars/production.yml

      Vous serez invité à fournir le même mot de passe que celui que vous avez défini lors du cryptage de ce fichier avec ansible-vault. Après avoir fourni le mot de passe, le contenu du fichier apparaîtra dans votre terminal. Pour quitter la vue du fichier, tapez q.

      Pour modifier un fichier qui a été précédemment crypté avec Ansible Vault, utilisez la commande edit vault :

      • ansible-vault edit group_vars/production.yml

      Cette commande vous demandera de fournir le mot de passe de la chambre forte pour ce fichier. Votre éditeur de terminal par défaut sera alors utilisé pour ouvrir le fichier en vue de son édition. Après avoir effectué les modifications souhaitées, enregistrez et fermez le fichier, et il sera à nouveau automatiquement crypté par Ansible Vault.

      Vous avez maintenant terminé la configuration de vos fichiers variables. La prochaine étape consistera à mettre en place Nginx, PHP-FPM et MariaDB (qui, avec un système d’exploitation basé sur Linux comme Ubuntu, forment la pile LEMP) sur votre ou vos serveurs distants.

      Étape 4 – Exécuter le playbook LEMP

      Avant de déployer l’application Laravel de démonstration sur le(s) serveur(s) distant(s), nous devons mettre en place un environnement LEMP qui servira l’application. Le playbook serveur-setup.yml comprend les rôles Ansible nécessaires à la mise en place de ce système. Pour inspecter son contenu, exécutez :

      ansible-laravel-demo/server-setup.yml

      ---
      - hosts: all
        become: true
        roles:
          - { role: setup, tags: ['setup'] }
      
          - { role: mariadb, tags: ['mysql', 'mariadb', 'db', 'lemp'] }
      
          - { role: php, tags: ['php', 'web', 'php-fpm', 'lemp'] }
      
          - { role: nginx, tags: ['nginx', 'web', 'http', 'lemp'] }
      
          - { role: composer, tags: ['composer'] }
      

      Voici un aperçu de tous les rôles inclus dans ce playbook :

      • Installation : Contient les tâches nécessaires pour créer un nouvel utilisateur du système et lui accorder des privilèges sudo, ainsi qu’activer le pare-feu ufw. 
      • mariadb : Installe le serveur de base de données MariaDB et crée la base de données et l’utilisateur de l’application.
      • php : Installe les modules php-fpm et PHP qui sont nécessaires pour faire fonctionner une application Laravel.
      • nginx : Installe le serveur web Nginx et permet l’accès sur le port 80.
      • composer : Installe Composer globalement.

      Notez que nous avons mis en place quelques balises au sein de chaque rôle. Cette mesure vise à faciliter la réédition de certaines parties de ce manuel, si nécessaire. Si vous apportez des modifications à votre fichier modèle Nginx, par exemple, vous voudrez peut-être n’exécuter que le rôle Nginx.

      La commande suivante permet d’exécuter ce playbook sur tous les serveurs à partir de votre fichier d’inventaire. Le passe --ask-vault-pass n’est nécessaire que si vous avez utilisé ansible-vault pour crypter les fichiers variables à l’étape précédente : 

      • ansible-playbook -i hosts server-setup.yml -u root --ask-vault-pass

      Vous aurez une sortie similaire à celle-ci :

      Output

      PLAY [all] ********************************************************************************************** TASK [Gathering Facts] ********************************************************************************** ok: [203.0.113.0.101] ok: [203.0.113.0.102] TASK [setup : Install Prerequisites] ******************************************************************** changed: [203.0.113.0.101] changed: [203.0.113.0.102] ... RUNNING HANDLER [nginx : Reload Nginx] ****************************************************************** changed: [203.0.113.0.101] changed: [203.0.113.0.102] PLAY RECAP ********************************************************************************************** 203.0.113.0.101 : ok=31 changed=27 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1 203.0.113.0.102 : ok=31 changed=27 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1

      Votre ou vos nœuds sont maintenant prêts à servir des applications PHP en utilisant Nginx+PHP-FPM, avec MariaDB comme serveur de base de données. Dans une prochaine étape, nous déploierons l’application de démonstration Laravel incluse avec le playbook Ansible laravel-deploy.yml.

      Étape 5 – Déploiement de l’application Laravel

      Maintenant que vous avez un environnement LEMP fonctionnel sur votre ou vos serveurs distants, vous pouvez exécuter le playbook laravel-deploy.yml. Ce playbook permettra d’exécuter les tâches suivantes :

      1. Créez la racine du document d’application sur le serveur distant si elle n’a pas déjà été créée.
      2. Synchronisez le dossier d’application local avec le serveur distant à l’aide du module de synchronisation.
      3. Utilisez le module acl pour définir les autorisations pour l’utilisateur www-datapour le dossier de stockage. 
      4. Configurez le fichier d’application .env en se basant sur le modèle laravel-env.j2.
      5. Installez des dépendances d’application avec Composer.
      6. Générez la clé de sécurité de l’application.
      7. Établir un lien public pour le dossier de stockage. 
      8. Exécutez les migrations de bases de données et les seeders.

      Ce playbook doit être exécuté par un utilisateur non root avec des permissions sudo. Cet utilisateur doit avoir été créé lorsque vous avez exécuté le server-setup.yml playbook à l’étape précédente, en utilisant le nom défini par la variable remote_user. 

      Lorsque vous êtes prêt, lancez le playbook laravel-deploy.yml avec : 

      • ansible-playbook -i hosts laravel-deploy.yml -u sammy --ask-vault-pass

      Le passe --ask-vault-pass n’est nécessaire que si vous avez utilisé ansible-vault pour crypter les fichiers variables à l’étape précédente :

      Vous aurez une sortie similaire à celle-ci :

      Output

      PLAY [all] ********************************************************************************************** TASK [Gathering Facts] ********************************************************************************** ok: [203.0.113.0.101] ok: [203.0.113.0.102] TASK [Make sure the remote app root exists and has the right permissions] ******************************* ok: [203.0.113.0.101] ok: [203.0.113.0.102] TASK [Rsync application files to the remote server] ***************************************************** ok: [203.0.113.0.101] ok: [203.0.113.0.102] ... TASK [Run Migrations + Seeders] ************************************************************************* ok: [203.0.113.0.101] ok: [203.0.113.0.102] PLAY RECAP ********************************************************************************************** 203.0.113.0.101 : ok=10 changed=9 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 203.0.113.0.102 : ok=10 changed=9 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

      Lorsque l’exécution est terminée, vous pouvez accéder à l’application de démonstration en faisant pointer votre navigateur sur le nom de domaine ou l’adresse IP de votre nœud :

      http://node_domain_or_IP
      

      Vous verrez une page comme ceci :

      Démonstration de Laravel Travellist 

      Conclusion

      Ce tutoriel montre comment mettre en place un fichier d’inventaire Ansible et se connecter à des nœuds distants, et comment exécuter des playbooks Ansible pour mettre en place un serveur LEMP et y déployer une application de démonstration Laravel.Ce guide complète les diapositives et les notes de l’orateur du kit d’atelier sur l’automatisation de la configuration de serveur, et est accompagné d’une démo Dépôt GitHub contenant tous les fichiers nécessaires au suivi de la composante démo de cet atelier. 



      Source link