[RUBY] Koch-Tutorial

In diesem Tutorial erfahren Sie mehr über ** Chef ** und wie Sie mit Chef eine einfache ** React.js ** -Site in der ** Alibaba Cloud ** einrichten, erstellen und bereitstellen.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie Folgendes:

Chef kennenlernen

Der Küchenchef besteht aus verschiedenen Komponenten. Es ist wichtig, diese Komponenten zu verstehen. Schauen wir uns also kurz die drei Hauptkomponenten von Chef an.

Umgebungseinstellungen

Es ist endlich Zeit, etwas Praktisches zu tun. In diesem Tutorial richten Sie Ihre Umgebung ein und installieren die Tools, die zum Erstellen einer React.js-Anwendung mit chef erforderlich sind.

Workstation-Einstellungen

Die Workstation ist im Grunde der Ort, an dem die Chef-Konfigurationsdetails erstellt werden. Die Workstation kann ein beliebiges Betriebssystem Ihrer Wahl sein. Mit anderen Worten, Linux, MacOS und Windows funktionieren hier.

  1. Installieren Sie das ChefDK-Paket. Das Chef DK (Development Kit) enthält alle Tools, die Sie zum Entwickeln und Testen Ihrer Infrastruktur benötigen. Zum Zeitpunkt des Schreibens dieses Tutorials verwende ich die aktuelle stabile Version (4.0.60). Klicken Sie auf diesen Link, um das Chef DK basierend auf Ihrem Betriebssystem herunterzuladen.

  2. Stellen Sie sicher, dass Sie Chef DK installiert haben und über die Befehlszeile auf Chef DK zugreifen können. Dazu können Sie chef —version ausführen, um die Installation zu überprüfen.

 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. Für Mac- und Linux-Benutzer müssen Sie sicherstellen, dass die im Chef Development Kit enthaltene Ruby-Version als Standard-Ruby-Version festgelegt ist. Führen Sie dazu die folgenden Schritte aus.

--Öffnen Sie ein Terminal und führen Sie "Welcher Rubin" aus. Sie sollten folgendes Ergebnis erhalten:

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

Wenn Sie eine andere Shell als bash verwenden, z. B. "zsh", "fish" oder Windows PowerShell (posh), ersetzen Sie "SHELL_NAME" durch die Shell und "SHELL_PROFILE" durch das Shell-Profil und führen Sie den folgenden Befehl aus: Bitte.

 chef@workstation:~$ echo 'eval "$(chef shell-init SHELL_NAME)"' >> ~/.SHELL_PROFILE && source ~/.SHELL_PROFILE
  chef@workstation:~$ which ruby
      /opt/chefdk/embedded/bin/ruby
  1. Als Nächstes müssen Sie ein Arbeitsverzeichnis mit dem Namen "react-app-repo" für Ihre Workstation erstellen. Dazu verwenden Sie den Befehl chef generate repo repo_name. Dadurch wird die Datei- und Ordnerstruktur erstellt, die Chef benötigt.
 chef@workstation:~$ chef generate repo react-app-repo && cd react-app-repo
  1. Nachdem Sie Ihre Workstation konfiguriert haben, konfigurieren und konfigurieren Sie Ihren Chef-Server.

Chef Server Einstellungen

Gehen Sie folgendermaßen vor, um den Chef-Server einzurichten:

  1. Starten Sie eine unter Ubuntu 16.04 installierte Alibaba Cloud ECS-Instanz als Chef-Server und stellen Sie sicher, dass die Ports 80, 22 und 443 geöffnet sind. Wenn Sie den Chef-Server in der Cloud ausführen, stellen Sie sicher, dass diese Ports über die Sicherheitsgruppe geöffnet sind.

  2. Der Chef-Server benötigt eine auflösbare Domäne und einen auflösbaren Hostnamen. Sie müssen sicherstellen, dass der Hostname auf dem Server mit dem öffentlichen Hostnamen übereinstimmt. Dies ist möglich, indem Sie den folgenden Befehl ausführen:

  chef@chef_server:~$ echo YOUR_DOMAIN_NAME | xargs sudo hostname
  1. Zu Lernzwecken habe ich das folgende Bash-Skript für dieses Tutorial erstellt. Dies soll Ihnen helfen, das Chef-Server-Paket herunterzuladen und zu installieren.

--Kopieren Sie das folgende Skript in den Pfad / tmp / installChefServer.sh auf dem 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
      

--Dieses Skript erstellt auch einen Benutzer mit den folgenden Informationen:

  chef@chef_server:~$ sudo chmod u+x /tmp/installChefServer.sh
  chef@chef_server:~$ sudo /tmp/installChefServer.sh
  1. Sie können in Ihrem Browser über den Hostnamen auf die Weboberfläche von Chef zugreifen.

image.png

Konfigurieren Sie die Workstation für die Kommunikation mit Chef Server

Verwenden Sie das bereits im Chef DK enthaltene Dienstprogramm "Messer", um die Kommunikation zwischen der Workstation und dem Chef-Server herzustellen.

Grundsätzlich benötigt Knife zwei Dateien, um den Chef-Server zu authentifizieren.

--Die Messerkonfigurationsdatei messer.rb enthält Informationen wie die Chef-Server-URL, den Speicherort des privaten RSA-Schlüssels (SSH-Schlüssel) und den Standardspeicherort des Kochbuchs.

Gehen Sie folgendermaßen vor, um die Kommunikation zwischen Ihrer Workstation und dem Chef-Server herzustellen:

  1. Führen Sie den Befehl "Messerkonfiguration" aus, um die Messerkonfiguration zu erstellen.

Ersetzen Sie "IHR-HOST-NAME" durch den Domain-Namen des Chef-Servers und "KURZ-ORG-NAME" durch "Chef". Notieren Sie sich auch den in der Ausgabe angegebenen Pfad zum Platzieren des Client-Schlüssels.

  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. Sie müssen eine "Messer.rb" -Datei in Ihrem "React-App-Repo" -Verzeichnis erstellen, um sicherzustellen, dass das Messer den Speicherort von "Kochbüchern" kennt.
  chef@workstation:~$ mkdir .chef && echo 'cookbook_path ["#{File.dirname(__FILE__)}/../cookbooks"]' >> .chef/knife.rb

Sie müssen auch die SSH-Schlüsseldatei, die Sie beim Erstellen des Benutzers mit dem Skript "installChefServer.sh" erstellt haben, mit dem Befehl "scp" vom Chef-Server auf Ihre Workstation kopieren.

Hinweis ~ / .chef / admin.pem ist der Pfad, der zum Ablegen des Client-Schlüssels angegeben wird. Wenn er sich jedoch von dem in der Ausgabe des Befehls messer configure angegebenen Pfad unterscheidet, ändern Sie ihn.

Ersetzen Sie es dann durch das folgende Element.

Ersetzen Sie "IP-ADRESSE ODER HOSTNAME" durch die öffentliche IP-Adresse / den Hostnamen des Chef-Servers.

Ersetzen Sie "USER" durch Ihren Chef-Server-Benutzernamen.

Ersetzen Sie "PATH_TO_YOUR_SSH_KEY" durch den Pfad zum SSH-Schlüssel des Chef-Servers.

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

Wenn Sie alternativ ein Kennwort als Authentifizierungsmethode verwenden, um Zugriff auf den Server zu erhalten, können Sie auch den folgenden Befehl ausführen:

 chef@workstation:~$ scp USER@YOUR-IP-ADDRESS-OR-HOSTNAME:/creds/chefadmin.pem ~/.chef/admin.pem
  1. Als Nächstes müssen Sie das SSL-Zertifikat mit dem folgenden Befehl vom Chef-Server abrufen und validieren.
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

Führen Sie den Befehl messer ssl check aus, um die SSL-Konfiguration zu überprüfen.

  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

Nachdem Sie Ihre Workstation konfiguriert haben, können Sie mit dem Messer eine Verbindung zum Chef-Server herstellen. Im nächsten Teil konfigurieren Sie die Knoten.

Knoteneinstellungen und Bootstrap

Bevor Sie mit der Verwaltung Ihrer Einstellungen in Chef beginnen können, benötigen Sie einen Knoten, mit dem Sie arbeiten können. Erstellen Sie dazu eine weitere ECS-Instanz mit installiertem Ubuntu 16.04 und verwenden Sie die Unterbefehle "Knife" und "Bootstrap" von Ihrer Workstation. Erstellen Sie einfach einen Knotenserver und der größte Teil der Arbeit wird von der "Workstation" aus erledigt.

  1. Erstellen Sie eine weitere Alibaba Cloud-Instanz mit installiertem Ubuntu 16.04 und stellen Sie sicher, dass die Ports 80, 22, 443 und 3000 geöffnet sind. Die React.js-Anwendung wird auf Port 3000 ausgeführt.

  2. Sie müssen den folgenden Befehl ausführen, um zu überprüfen, ob der Hostname auf dem Knotenserver mit dem öffentlichen Hostnamen übereinstimmt.

Ersetzen wir es durch:

--USER mit dem Namen des Benutzers auf dem Knotenserver

 chef@workstation:~$ ssh -i PATH_TO_YOUR_SSH_KEY USER@YOUR-IP-ADDRESS-OR-HOSTNAME 'echo YOUR_DOMAIN_NAME | xargs sudo hostname'
  1. Führen Sie den folgenden Befehl aus, um den neuen Cloud-Server von Ihrer Workstation auf einen vom Chef-Server verwalteten Knoten zu booten:

Unten,

--USER mit dem Namen des Benutzers auf dem Knotenserver

 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

Wenn Sie alternativ ein Kennwort als Authentifizierungsmethode verwenden, um Zugriff auf den Server zu erhalten, führen Sie den folgenden Befehl aus.

 chef@workstation:~$ knife bootstrap IP-ADDRESS-OR-HOSTNAME -N NODE_NAME -x USER -P 'PASSWORD' --sudo
  1. Um zu überprüfen, ob Ihr Knoten dem Chef-Server zugeordnet ist, führen Sie den Befehl "Messerknotenliste" aus.
 chef@workstation:~$ knife node list
    reactJS-node

Sie können die Daten des Knotens anzeigen, indem Sie den Befehl "Messerknoten anzeigen" ausführen.

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:

Erstellen Sie die React.js-Anwendung

Nachdem Sie Ihren Chef-Server, Ihre Workstations und Ihre Knoten eingerichtet haben, können Sie Ihre react.js-Anwendung erstellen. Sie werden ein Kochbuch wie das folgende schreiben.

Sie werden dafür die Ressourcen chef execute und bash verwenden. Beide Ressourcen werden zum Ausführen von Befehlen und Skripten verwendet. Die Ressource "Ausführen" wird verwendet, um einen einzelnen Befehl auszuführen, und die Ressource "Bash" wird verwendet, um einen mehrzeiligen Befehl auszuführen. Weitere Informationen zu Syntax und Eigenschaften finden Sie in den Ressourcen execute und bash. Bitte beachten Sie die Dokumentation.

Öffnen Sie die Datei "default.rb" im Verzeichnis "cookbooks / example / attribute / prescription" auf Ihrer Workstation und ersetzen Sie sie wie folgt:

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

Um das Kochbuch auszuführen, müssen Sie es auf den Chef-Server hochladen. Bitte beachten Sie, dass Sie jedes Mal, wenn Sie Änderungen an dieser Datei vornehmen, erneut hochladen müssen. Stellen Sie sicher, dass es sich im Verzeichnis "react-app-repo" befindet, und führen Sie diesen Befehl aus.

chef@workstation:~$ knife upload cookbooks/example

Sie müssen das Kochbuch-Rezept mit dem folgenden Befehl zur Run-Liste des Knotens hinzufügen:

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

Details zu run_list finden Sie in Documentation.

Verwenden Sie nun den Befehl "Messer ssh", um das Kochbuch für "ReactJS-Node" bereitzustellen.

Ersetzen Sie es dann wie folgt:

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

Sie können jetzt auf die Anwendung react.js zugreifen, indem Sie "http: // NODE_SERVER_IP_ADDRESS: 3000" in Ihr Browserfenster einfügen. Sie sollten eine Seite wie diese sehen.

image.png

Fazit

Dieser Leitfaden bietet eine flexible Grundlage für den Einstieg in Chef. Weitere Informationen zu Chefkoch finden Sie in der offiziellen Dokumentation des Küchenchefs (https://docs.chef.io/?spm=a2c65.11461447.0.0.10585fa7zubQyM) und in der Kundgebung von Chefkoch (https: // learn). Siehe unter .chef.io /? Spm = a2c65.11461447.0.0.10585fa7zubQyM # /).

Recommended Posts

Koch-Tutorial
Schienen Tutry
Schienen Tutorial
Deshalb habe ich dieses Mal die Methode "Verknüpfen des Inhalts des Verzeichnisses" übernommen. Ich denke, es wird je nach Zeit und Fall richtig verwendet. Tutorial zu Linux, ln, Linux-Befehlsschienen
Raila Tutorial
Schienen Tutry
Schienen Tutorial
Schienen Tutorial
Docker-Tutorial (Memo)
Schienen-Tutorial Kapitel 6
Rails Tutorial Test
[Tutorial] Spring Batch
Schienen-Tutorial Kapitel 1
Rails Tutorial Memorandum 1
Rails Tutorial Memorandum 2
Schienen-Tutorial Kapitel 7
Schienen-Tutorial Kapitel 5
Schienen-Tutorial Kapitel 10
Schienen-Tutorial Kapitel 9
Schienen-Tutorial Kapitel 8
[Anfänger] Rails Tutorial