[RUBY] Tutoriel du chef

Dans ce didacticiel, vous découvrirez ** Chef ** et comment utiliser Chef pour configurer, créer et déployer un site ** React.js ** simple sur ** Alibaba Cloud **.

Conditions préalables

Pour suivre ce didacticiel, vous avez besoin des éléments suivants:

--Deux instances Alibaba Cloud Elastic Compute Service (ECS) sont installées sur Ubuntu 16.04 et disposent d'au moins 2 Go de RAM. L'une de ces instances sera utilisée pour le nœud Chef et l'autre pour le serveur Chef. Assurez-vous également que les ports 22, 80 et 443 sont ouverts sur ces instances. --Domaine d'enregistrement entièrement qualifié (ou FDQN) utilisé pour les nœuds et les serveurs Chef. Achetez Alibaba Cloud Domain ou accédez à Freenom Vous pouvez l'obtenir gratuitement.

Apprenez à connaître le chef

Chef est composé de plusieurs composants différents. Il est important de comprendre ces composants, alors jetons un coup d'œil aux trois principaux composants de Chef.

Paramètres d'environnement

Il est enfin temps de faire quelque chose de pratique. Dans ce didacticiel, vous allez configurer votre environnement et installer les outils nécessaires pour créer une application React.js à l'aide de chef.

Paramètres du poste de travail

Le poste de travail est essentiellement l'endroit où créer les détails de configuration de Chef. Le poste de travail peut être n'importe quel système d'exploitation de votre choix. En d'autres termes, Linux, MacOS et Windows fonctionnent tous ici.

  1. Installez le package ChefDK. Le Chef DK (Development Kit) contient tous les outils dont vous avez besoin pour développer et tester votre infrastructure. Au moment de la rédaction de ce tutoriel, j'utilise la version stable actuelle (4.0.60). Cliquez sur ce lien pour télécharger Chef DK basé sur votre système d'exploitation.

  2. Assurez-vous que vous avez installé Chef DK et que vous pouvez accéder à Chef DK à partir de la ligne de commande. Pour ce faire, vous pouvez exécuter chef —version pour vérifier l'installation.

 chef@workstation:~$ chef --version
   Chef Development Kit Version: 4.0.60
   chef-client version: 15.0.300
   delivery version: master
   berks version: 7.0.8
   kitchen version: 2.2.5
   inspec version: 4.3.2
  1. Pour les utilisateurs Mac et Linux, vous devez vous assurer que la version Ruby incluse dans le Kit de développement Chef est définie comme version Ruby par défaut. Pour faire ça, suit les étapes suivantes.

--Ouvrez un terminal et exécutez which ruby Vous devriez obtenir le résultat suivant:

   chef@workstation:~$ which ruby
       /usr/bin/ruby
  chef@workstation:~$ echo 'eval "$(chef shell-init bash)"' >> ~/.bash_profile && source ~/.bash_profile

Si vous utilisez un shell différent de bash, tel que zsh, fish ou Windows PowerShell (posh), remplacez SHELL_NAME par le shell et SHELL_PROFILE par le profil du shell et exécutez la commande suivante: S'il vous plaît.

 chef@workstation:~$ echo 'eval "$(chef shell-init SHELL_NAME)"' >> ~/.SHELL_PROFILE && source ~/.SHELL_PROFILE
  chef@workstation:~$ which ruby
      /opt/chefdk/embedded/bin/ruby
  1. Ensuite, vous devez créer un répertoire de travail appelé react-app-repo pour votre poste de travail. Vous utiliserez la commande chef generate repo repo_name pour cela. Cela créera la structure de fichiers et de dossiers dont Chef a besoin.
 chef@workstation:~$ chef generate repo react-app-repo && cd react-app-repo
  1. Maintenant que vous avez configuré votre poste de travail, configurez et configurez votre serveur Chef.

Paramètres du serveur Chef

Pour configurer le serveur Chef, procédez comme suit:

  1. Lancez une instance Alibaba Cloud ECS installée sur Ubuntu 16.04 en tant que serveur Chef et assurez-vous que les ports 80, 22 et 443 sont ouverts. Si vous exécutez le serveur Chef dans le cloud, assurez-vous que ces ports sont ouverts via le groupe de sécurité.

  2. Le serveur Chef requiert un domaine résoluble et un nom d'hôte. Vous devez vous assurer que le nom d'hôte sur le serveur correspond au nom d'hôte public. Ceci est possible en exécutant la commande suivante:

  chef@chef_server:~$ echo YOUR_DOMAIN_NAME | xargs sudo hostname
  1. À des fins d'apprentissage, j'ai créé le script bash suivant pour ce didacticiel. Cela devrait vous aider à télécharger et installer le package Chef-server.
   chef@chef_server:~$ sudo vi /tmp/installChefServer.sh
      
  bash
      #!/usr/bin/env bash

      BOLD='\e[1m'
      GREEN='\e[92m'
      NC='\e[0m'

      updateLinuxPackages() {
        printf "${BOLD}${GREEN}=================================== Updating all packages ============================================ ${NC}\n"
        apt-get update

      }


      createDirectories() {
        if [ ! -d /creds ]; then
          mkdir /creds
        fi
        if [ ! -d /downloads ]; then
          mkdir /downloads
        fi
      }

      downloadAndInstallChefServer() {
        if [ ! -f /downloads/chef-server-core_12.19.26-1_amd64.deb ]; then
          printf "${BOLD}${GREEN}=================================== Downloading the Chef server package... ================== ${NC}\n"
          wget -nv -P /downloads https://packages.chef.io/files/stable/chef-server/12.19.26/ubuntu/16.04/chef-server-core_12.19.26-1_amd64.deb
        fi

        if [ ! $(which chef-server-ctl) ]; then
          printf "${BOLD}${GREEN}=================================== Installing Chef server =================================== ${NC}\n"
          dpkg -i /downloads/chef-server-core_12.19.26-1_amd64.deb
          chef-server-ctl reconfigure

          printf "${BOLD}${GREEN}=================================== Waiting for services ====================================== ${NC}\n"
          until (curl -D - http://localhost:8000/_status) | grep "200 OK"; do sleep 15s; done
          while (curl http://localhost:8000/_status) | grep "fail"; do sleep 15s; done

          printf "${BOLD}${GREEN}============================= Creating user ========================== ${NC}\n"
          # creating user format: chef-server-ctl user-create USER_NAME FIRST_NAME LAST_NAME EMAIL 'PASSWORD' --filename FILE_NAME
          chef-server-ctl user-create admin admin admin [email protected] 'notsecure' --filename /creds/chefadmin.pem
          
          printf "${BOLD}${GREEN}============================= Creating oganization with user ========================== ${NC}\n"
          # creating org format: chef-server-ctl org-create SHORT_ORG_NAME 'FULL_ORG_NAME' --association_user USER_NAME --filename FILE_NAME
          chef-server-ctl org-create chef "Chef-learn, Inc." --association_user admin --filename organization-validator.pem
          
          printf "${BOLD}${GREEN}============================= Adding Web UI for chef  ========================== ${NC}\n"
          chef-server-ctl install chef-manage
          chef-server-ctl reconfigure
          chef-manage-ctl reconfigure --accept-license
        fi

        printf "${BOLD}${GREEN}==================================== Your Chef server is ready! ================================== ${NC}\n"
      }

      main() {
        updateLinuxPackages
        createDirectories
        downloadAndInstallChefServer
      }

      main
      

--Ce script crée également un utilisateur avec les informations suivantes:

--Nom d'utilisateur: admin

  chef@chef_server:~$ sudo chmod u+x /tmp/installChefServer.sh

--Enfin, exécutez le script. Cela peut prendre un certain temps.

  chef@chef_server:~$ sudo /tmp/installChefServer.sh
  1. Vous pouvez accéder à l'interface Web de Chef sur votre navigateur par nom d'hôte.

image.png

Configurer le poste de travail pour communiquer avec Chef Server

Utilisez l'outil utilitaire Knife déjà inclus dans Chef DK pour établir la communication entre le poste de travail et le serveur Chef.

Fondamentalement, Knife a besoin de deux fichiers pour authentifier le serveur Chef.

Pour établir la communication entre votre poste de travail et le serveur Chef, procédez comme suit:

  1. Exécutez la commande couteau configure pour créer la configuration de couteau.

Remplacez YOUR-HOST-NAME par le nom de domaine chef-server et SHORT-ORG-NAME par chef. Notez également le chemin spécifié dans la sortie pour placer la clé client.

  chef@workstation:~$ knife configure
    WARNING: No knife configuration file found. See https://docs.chef.io/config_rb_knife.html for details.
    Please enter the chef server URL: [https://devops1c.mylabserver.com/organizations/chef]: https://YOUR-HOST-NAME/organizations/SHORT-ORG-NAME
    Please enter an existing username or clientname for the API: [user] admin
    *****
    
    You must place your client key in:
    /home/user/.chef/chefadmin.pem
    Before running commands with Knife

    *****
    Configuration file written to /home/user/.chef/credentials
  1. Vous devez créer un fichier couteau.rb dans votre répertoire react-app-repo pour vous assurer que le couteau connaît l'emplacement des livres de cuisine.
  chef@workstation:~$ mkdir .chef && echo 'cookbook_path ["#{File.dirname(__FILE__)}/../cookbooks"]' >> .chef/knife.rb

Vous devez également copier le fichier de clé SSH que vous avez créé lorsque vous avez créé l'utilisateur avec le script ʻinstallChefServer.sh depuis chef-server vers votre poste de travail en utilisant la commande scp`.

Remarque ~ / .chef / admin.pem est le chemin spécifié pour placer la clé client, mais s'il est différent du chemin spécifié dans la sortie de la commande knife configure, changez-le.

Remplacez-le ensuite par l'élément suivant.

Remplacez ʻIP-ADDRESS-OR-HOSTNAME` par l'adresse IP publique / le nom d'hôte du chef-server.

Remplacez ʻUSER` par le nom d'utilisateur de votre serveur Chef.

Remplacez PATH_TO_YOUR_SSH_KEY par le chemin d'accès à la clé ssh du serveur Chef.

   chef@workstation:~$ scp -i PATH_TO_YOUR_SSH_KEY USER@YOUR-IP-ADDRESS-OR-HOSTNAME:/creds/chefadmin.pem ~/.chef/admin.pem

Sinon, si vous utilisez un mot de passe comme méthode d'authentification pour accéder au serveur, vous pouvez également exécuter la commande suivante:

 chef@workstation:~$ scp USER@YOUR-IP-ADDRESS-OR-HOSTNAME:/creds/chefadmin.pem ~/.chef/admin.pem
  1. Ensuite, vous devez obtenir et valider le certificat SSL du serveur Chef à l'aide de la commande suivante.
chef@workstation:~$ knife ssl fetch
    WARNING: Certificates from www.mydomainname.com will be fetched and placed in your trusted_cert
    directory (/home/user/.chef/trusted_certs).

    Knife has no means to verify these are the correct certificates. You should
    verify the authenticity of these certificates after downloading.

    Adding certificate for www_mydomainname_com in /home/user/.chef/trusted_certs/www_mydomainname_com.crt

Exécutez la commande knife ssl check pour vérifier la configuration SSL.

  chef@workstation:~$ knife ssl check
     Connecting to host ec2-34-207-124-26.compute-1.amazonaws.com:443
     Successfully verified certificates from ec2-34-207-124-26.compute-1.amazonaws.com

Maintenant que vous avez configuré votre poste de travail, vous pouvez utiliser le couteau pour vous connecter au serveur Chef. Dans la partie suivante, vous allez configurer les nœuds.

Paramètres de nœud et bootstrap

Avant de pouvoir commencer à gérer vos paramètres dans Chef, vous avez besoin d'un nœud avec lequel travailler. Pour ce faire, créez une autre instance ECS avec Ubuntu 16.04 installé et utilisez les sous-commandes Knife et bootstrap de votre poste de travail. Créez simplement un serveur de nœuds et la plupart du travail sera effectué à partir du poste de travail.

  1. Créez une autre instance Alibaba Cloud avec Ubuntu 16.04 installé et assurez-vous que les ports 80, 22, 443 et 3000 sont ouverts. L'application react.js s'exécute sur le port 3000.

  2. Vous devez exécuter la commande suivante pour vérifier que le nom d'hôte sur le serveur de noeud correspond au nom d'hôte public.

Remplaçons-le par:

--Remplacez IP-ADDRESS-OR-HOSTNAME` par l'adresse IP publique / le nom d'hôte du serveur de nœud.

--ʻUSER` avec le nom de l'utilisateur sur le serveur de nœuds

--Spécifiez le chemin d'accès à la clé ssh du serveur de nœuds dans PATH_TO_YOUR_SSH_KEY.

 chef@workstation:~$ ssh -i PATH_TO_YOUR_SSH_KEY USER@YOUR-IP-ADDRESS-OR-HOSTNAME 'echo YOUR_DOMAIN_NAME | xargs sudo hostname'
  1. Pour amorcer le nouveau serveur cloud de votre poste de travail vers un nœud géré par le serveur Chef, exécutez la commande suivante:

Au dessous de,

--Remplacez IP-ADDRESS-OR-HOSTNAME` par l'adresse IP publique / le nom d'hôte du serveur de nœud.

--ʻUSER` avec le nom de l'utilisateur sur le serveur de nœuds

--Spécifiez le chemin d'accès à la clé ssh du serveur de nœuds dans PATH_TO_YOUR_SSH_KEY.

--Spécifiez node_name avec reactJS-node. Comprenez que nom_noeud est le nom que vous voulez donner au nœud.

 chef@workstation:~$ knife bootstrap IP-ADDRESS-OR-HOSTNAME --connection-user USER --sudo -i PATH_TO_YOUR_SSH_KEY --node-name NODE-NAME
    Bootstrapping 34.76.3.167
    [34.76.3.167] -----> Installing Chef Omnibus (stable/15)
    [34.76.3.167] 
    [34.76.3.167] downloading https://omnitruck.chef.io/chef/install.sh
    ......
    [34.76.3.167] Getting information for chef stable 15 for ubuntu...
     
    [34.76.3.167] Installing chef 15
    [34.76.3.167] 
    [34.76.3.167] 
    [34.76.3.167] Thank you for installing Chef Infra Client! For help getting started visit https://learn.chef.io
    [34.76.3.167] 
    [34.76.3.167] Starting the first Chef Infra Client Client run...
    [34.76.3.167] 
    [34.76.3.167] +---------------------------------------------+
    [34.76.3.167] 
    [34.76.3.167]  2 product licenses accepted.
    [34.76.3.167] 
    [34.76.3.167] +---------------------------------------------+
    [34.76.3.167] 
    [34.76.3.167] Starting Chef Infra Client, version 15.0.300
    [34.76.3.167] 
    [34.76.3.167] resolving cookbooks for run list: []
    [34.76.3.167] Synchronizing Cookbooks:
    [34.76.3.167] Installing Cookbook Gems:
    [34.76.3.167] Compiling Cookbooks...
    [34.76.3.167] [2019-07-01T06:52:36+00:00] WARN: Node reactJS-node has an empty run list.
    [34.76.3.167] Converging 0 resources
    ........
    [34.76.3.167] Running handlers:
    [34.76.3.167] 
    [34.76.3.167] Running handlers complete
    [34.76.3.167] Chef Infra Client finished, 0/0 resources updated in 02 seconds

Sinon, si vous utilisez un mot de passe comme méthode d'authentification pour accéder au serveur, exécutez la commande suivante.

 chef@workstation:~$ knife bootstrap IP-ADDRESS-OR-HOSTNAME -N NODE_NAME -x USER -P 'PASSWORD' --sudo
  1. Pour vérifier que votre nœud est associé au serveur Chef, exécutez la commande liste de nœuds couteau.
 chef@workstation:~$ knife node list
    reactJS-node

Vous pouvez voir les données du nœud en exécutant la commande couteau node show.

knife node show NODE-NAME
chef@workstation:~$ knife node show reactJS-node
   Node Name:   reactJS-node
   Environment: _default
   FQDN:        ip-172-31-56-238.home.internal
   IP:          41.215.245.118
   Run List:    
   Roles:       
   Recipes:     
   Platform:    ubuntu 16.04
   Tags:

Créer une application React.js

Maintenant que vous avez configuré votre serveur chef, vos postes de travail et vos nœuds, vous êtes prêt à créer votre application react.js. Vous écrirez un livre de cuisine comme celui ci-dessous.

--Configurez et installez node.js --Installez pm2. pm2 est un gestionnaire de processus qui aide à maintenir l'application react.js en cours d'exécution. --Installez l'application react.js.

Vous utiliserez les ressources chef execute et bash pour cela. Ces deux ressources sont utilisées pour exécuter des commandes et des scripts. La ressource ʻexecute est utilisée pour exécuter une seule commande, et la ressource bash` est utilisée pour exécuter une commande multiligne. Pour plus d'informations sur la syntaxe et les propriétés, consultez les ressources execute et bash. Veuillez vous référer à la documentation.

Ouvrez le fichier default.rb situé dans le répertoire cookbooks / exemple / attributes / recettes sur votre poste de travail et remplacez-le comme suit:

bash 'Install Node.js' do
 cwd "/home/ubuntu"
 code <<-EOH
   curl -sL https://deb.nodesource.com/setup_8.x -o nodesource_setup.sh
   bash nodesource_setup.sh
   apt-get install nodejs -y 
   EOH
end

execute 'Install pm2' do
 cwd "/home/ubuntu"
 command 'npm install pm2 -g'
end

execute 'Setup react app' do
 cwd "/home/ubuntu"
 command 'npx create-react-app my-app'
 only_if do ! File.exist?('/home/ubuntu/my-app') end
end

bash 'Start application' do
 cwd "/home/ubuntu"
 code <<-EOH
   cd my-app
   pm2 start npm -- start
   EOH
end

Pour exécuter le livre de recettes, vous devez le télécharger sur le serveur Chef. Veuillez noter que vous devrez réimporter chaque fois que vous apporterez des modifications à ce fichier. Assurez-vous qu'il se trouve dans le répertoire react-app-repo et exécutez cette commande.

chef@workstation:~$ knife upload cookbooks/example

Vous devez ajouter la recette du livre de recettes à la run_list du nœud à l'aide de la commande suivante:

chef@workstation:~$ knife node run_list add reactJS-node 'recipe[example]'
reactJS-node:
  run_list: recipe[example]

Les détails de run_list peuvent être trouvés dans Documentation.

Maintenant, utilisez la commande couteau ssh pour déployer le livre de recettes sur reactJS-node.

Puis remplacez-le comme suit:

--Remplacez ʻUSER` par le nom d'utilisateur sur le serveur de nœuds.

--Spécifiez le chemin d'accès à la clé ssh du serveur de nœuds dans PATH_TO_YOUR_SSH_KEY.

chef@workstation:~$ knife ssh 'name:reactJS-node' 'sudo chef-client' --ssh-user USER --ssh-identity-file PATH_TO_YOUR_SSH_KEY

Vous pouvez maintenant accéder à l'application react.js en collant http: // NODE_SERVER_IP_ADDRESS: 3000 dans la fenêtre de votre navigateur. Vous devriez voir une page comme celle-ci.

image.png

Conclusion

Ce guide fournit une base flexible pour démarrer avec Chef. Pour plus d'informations sur Chef, consultez la documentation officielle de Chef (https://docs.chef.io/?spm=a2c65.11461447.0.0.10585fa7zubQyM) et Learn Chef rally (https: // learn) Veuillez consulter .chef.io /? Spm = a2c65.11461447.0.0.10585fa7zubQyM # /).

Recommended Posts

Tutoriel du chef
rails tutry
tutoriel sur les rails
tutoriel sur les rails
tutoriel raila
rails tutry
tutoriel sur les rails
tutoriel sur les rails
tutoriel docker (mémo)
tutoriel rails Chapitre 6
Test du tutoriel sur les rails
[Tutoriel] Spring Batch
tutoriel rails Chapitre 1
Mémorandum du didacticiel Rails 1
Tutoriel Rails Memorandum 2
tutoriel rails Chapitre 7
tutoriel rails Chapitre 5
tutoriel rails Chapitre 10
tutoriel rails Chapitre 9
tutoriel rails Chapitre 8
[Débutant] Tutoriel Rails