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.
Um diesem Tutorial zu folgen, benötigen Sie Folgendes:
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.
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.
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.
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.
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
--Ö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
which ruby
erneut ausführen und bestätigen, dass Sie die Chef Development Kit-Version von ruby verwenden, sollten Sie eine Ausgabe ähnlich der folgenden erhalten. chef@workstation:~$ which ruby
/opt/chefdk/embedded/bin/ruby
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
Gehen Sie folgendermaßen vor, um den Chef-Server einzurichten:
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.
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
--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:
Benutzername: admin
E-Mail: [email protected] --Passwort: nicht sicher
Führen Sie den folgenden Befehl aus, um das Skript ausführbar zu machen.
chef@chef_server:~$ sudo chmod u+x /tmp/installChefServer.sh
chef@chef_server:~$ sudo /tmp/installChefServer.sh
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:
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
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
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.
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.
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.
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'
Unten,
--USER
mit dem Namen des Benutzers auf dem Knotenserver
Geben Sie den Pfad zum SSH-Schlüssel des Knotenservers in "PATH_TO_YOUR_SSH_KEY" an.
Geben Sie node_name
mit reactJS-node
an. Verstehen Sie, dass "Knotenname" der Name ist, den Sie dem Knoten geben möchten.
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
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:
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.
Richten Sie node.js ein und installieren Sie es
--Installieren Sie pm2. pm2
ist ein Prozessmanager, der dabei hilft, die App react.js
am Laufen zu halten.
--Installieren Sie die Anwendung "react.js".
Starten Sie die Anwendung react.js
.
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:
Ersetzen Sie "USER" durch den Benutzernamen auf dem Knotenserver.
Geben Sie den Pfad zum SSH-Schlüssel des Knotenservers in "PATH_TO_YOUR_SSH_KEY" an.
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.
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