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 **.
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.
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.
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.
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.
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.
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
--Ouvrez un terminal et exécutez which ruby
Vous devriez obtenir le résultat suivant:
chef@workstation:~$ which ruby
/usr/bin/ruby
chef shell-init
. L'application utilisée par ChefDK peut être isolée des autres outils de développement Ruby qui peuvent également se trouver sur votre poste de travail. 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
which ruby
et confirmez que vous utilisez la version du kit de développement Chef de ruby, vous devriez obtenir un résultat similaire à ce qui suit. chef@workstation:~$ which ruby
/opt/chefdk/embedded/bin/ruby
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
Pour configurer le serveur Chef, procédez comme suit:
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é.
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
/ tmp / installChefServer.sh
sur le serveur. 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
Firstname:admin
Lastname: admin --Email: [email protected] --Mot de passe: non sécurisé
Exécutez la commande suivante pour rendre le script exécutable.
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
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.
Le fichier de configuration du couteau couteau.rb
contient des informations telles que l'URL du serveur Chef, l'emplacement de la clé privée RSA (clé SSH) et l'emplacement par défaut du livre de recettes.
La clé privée RSA est utilisée pour authentifier toutes les demandes envoyées au serveur Chef. La clé publique est détenue par le serveur Chef et la clé privée est détenue par le poste de travail.
Pour établir la communication entre votre poste de travail et le serveur Chef, procédez comme suit:
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
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
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.
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
.
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.
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'
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
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:
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
.
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.
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