Nous décrirons la procédure de publication d'une application à l'aide d'AWS. Cet article publie l'application.
Exécutez la commande suivante et accédez au répertoire ".ssh".
cd ~/.ssh/
Exécutez la commande suivante pour accéder à l'instance EC2 avec ssh. (Lorsque le nom du fichier pem téléchargé est "xxx.pem" et que l'adresse IP Elastic est 12.345.67.890)
ssh -i xxx.pem [email protected]
Pour accéder à Github à partir d'une instance EC2, vous devez enregistrer la clé publique SSH de l'instance EC2 avec Github. Si vous n'enregistrez pas la clé SSH, une erreur d'autorisation se produira et vous ne pourrez pas cloner. En enregistrant la clé SSH dans Github, vous serez authentifié et vous pourrez cloner le code.
Exécutez la commande suivante pour créer une paire de clés SSH pour le serveur EC2.
ssh-keygen -t rsa -b 4096
Exécutez la commande suivante pour afficher la clé publique SSH générée et copiez la valeur.
cat ~/.ssh/id_rsa.pub
Lorsque vous accédez à l'URL suivante, l'écran ressemble à l'image. https://github.com/settings/keys
Entrez un titre arbitraire dans le champ "Titre", collez la clé publique SSH que vous avez copiée précédemment dans le champ "Clé" et cliquez sur "Ajouter une clé SSH".
Exécutez la commande suivante et vérifiez si la connexion SSH est possible.
ssh -T [email protected]
Si Autorisation refusée (clé publique). S'affiche, le paramètre de clé SSH est incorrect.
La commande "ssh-keygen" est une commande pour créer une clé privée et une clé publique de la méthode d'authentification par clé publique. "-T" est une option pour spécifier le format de cryptage de la clé à créer à partir de "rsa", "dsa", "ecdsa" et "ed25519". "-B" est une commande pour spécifier le nombre de bits de la clé à créer. Cela signifie que la commande ci-dessus générera une clé de 4096 bits au format de cryptage RSA.
Le serveur d'applications est un logiciel qui exploite une application en réponse à une demande d'un navigateur.
Par exemple, lors de la vérification du fonctionnement d'une application Ruby on Rails dans un environnement local, entrez la commande "rails s". Cela démarre un serveur d'applications appelé "puma". Dans cet état, vous pouvez vérifier le fonctionnement de l'application rails en accédant à "localhost: 3000" depuis le navigateur. (localhost: 3000 points sur votre propre PC)
De même, pour exécuter une application sur le serveur EC2, il est nécessaire de démarrer le serveur d'applications sur le serveur EC2.
Unicorn est l'un des serveurs d'applications les plus populaires. Unicorn peut être démarré avec la commande "unicorn_rails" au lieu de la commande "rails s".
La licorne est écrite en rubis et est gemme Ajoutez la description suivante au Gemfile. Unicorn est utilisé uniquement dans l'environnement de production, il n'est donc pas nécessaire dans l'environnement de développement.
Gemfile
group :production do
gem 'unicorn', '5.4.1'
end
Exécutez la commande suivante dans le répertoire de l'application.
bundle install
Créez le fichier de configuration Unicorn suivant directement sous le répertoire de configuration.
config/unicorn.rb
#Placez le répertoire où le code de l'application sur le serveur est installé dans une variable
app_path = File.expand_path('../../', __FILE__)
#Déterminer les performances du serveur d'applications
worker_processes 1
#Spécifiez le répertoire dans lequel l'application est installée
working_directory app_path
#Spécifiez l'emplacement des fichiers requis pour démarrer Unicorn
pid "#{app_path}/tmp/pids/unicorn.pid"
#Spécifiez le numéro de port
listen 3000
#Spécifiez un fichier pour consigner les erreurs
stderr_path "#{app_path}/log/unicorn.stderr.log"
#Spécifiez un fichier pour enregistrer les journaux normaux
stdout_path "#{app_path}/log/unicorn.stdout.log"
#Définir le temps maximum d'attente pour la réponse de l'application Rails
timeout 60
preload_app true
GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true
check_client_connection false
run_once = true
before_fork do |server, worker|
defined?(ActiveRecord::Base) &&
ActiveRecord::Base.connection.disconnect!
if run_once
run_once = false # prevent from firing again
end
old_pid = "#{server.config[:pid]}.oldbin"
if File.exist?(old_pid) && server.pid != old_pid
begin
sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
Process.kill(sig, File.read(old_pid).to_i)
rescue Errno::ENOENT, Errno::ESRCH => e
logger.error e
end
end
end
after_fork do |_server, _worker|
defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection
end
Un processus est une unité au moment de l'exécution de tous les programmes s'exécutant sur un PC (serveur). Le programme comprend ici un navigateur, un logiciel de lecture de musique, une interface graphique telle qu'Excel et l'exécution d'un langage de script tel que Ruby. Il y a autant de processus que de programmes en cours d'exécution.
La licorne peut perturber le processus. Le processus divisé est appelé un travailleur. En fractionnant le processus, la réponse à la demande peut être effectuée plus rapidement. Définissez le nombre de nœuds de calcul dans l'élément appelé work_processes. Les travailleurs Unicorn exécutent des applications de rails lorsque les demandes proviennent de navigateurs. rails compare le contenu de la requête avec le routage et répond finalement avec la vue ou json appropriée. Unicorn reçoit la réponse et la renvoie au navigateur. Cette série de flux prend environ 0,1 à 0,5 seconde. Si l'application est telle que les demandes se produisent fréquemment à une vitesse plus élevée que cela, le traitement peut ne pas être en mesure de suivre le rythme d'un seul travailleur et il peut prendre beaucoup de temps pour répondre ou le serveur peut s'arrêter. Vous pouvez accélérer la réponse de votre application en augmentant le nombre de work_processes.
Éléments de réglage | Détails |
---|---|
worker_processes | Accepter les demandes Déterminer le nombre de travailleurs pour générer des réponses |
working_directory | Quand Unicorn exécute du code rails, il spécifie un répertoire pour rechercher les fichiers auxquels il fait réellement référence, comme le routage. |
pid | Spécifie l'emplacement pour générer le fichier avec l'ID de processus au démarrage de Unicorn. |
listen | Spécifiez le numéro de port pour accepter la demande. |
Il existe un joyau appelé Uglifier pour réduire le poids de Javascript. Si Javascript utilise la notation littérale de modèle (`), Uglifier ne le prend pas en charge et provoquera une erreur lors du déploiement, alors commentez-le.
Commentez la description suivante dans config / environnements / production.rb.
config/environments/production.rb
# config.assets.js_compressor = :uglifier
Validez le fichier et transférez-le sur Github. Si vous avez une branche, fusionnez-la dans la branche principale.
Clonez le code configuré Unicorn sur une instance EC2.
Après la connexion SSH à l'instance EC2, exécutez la commande suivante pour créer le répertoire / var / www.
sudo mkdir /var/www/
Exécutez la commande suivante pour modifier les autorisations du répertoire www créé en ec2-user.
sudo chown ec2-user /var/www/
Accédez à la page de l'application de Github et copiez l'URL du référentiel faisant référence à l'image ci-dessous.
Exécutez la commande suivante pour cloner le code. (Dans l'exemple ci-dessous, lorsque le nom d'utilisateur de Github est "test1234" et le nom du référentiel est "testapp")
cd /var/www/
git clone https://github.com/test1234/testapp.git(L'URL du référentiel que vous avez copiée précédemment)
Définissez les paramètres pour publier le service.
L'instance EC2 actuelle n'a pas assez de mémoire et une erreur peut se produire lors de l'installation d'un gem. Par conséquent, augmentez d'abord la mémoire.
Lorsqu'un ordinateur effectue un traitement, le contenu du traitement est temporairement enregistré dans un endroit appelé mémoire. La capacité de la mémoire est fixe et si elle dépasse cette capacité, le traitement s'arrêtera avec une erreur. La zone Swap est un fichier préparé pour augmenter temporairement la quantité de mémoire lorsque la mémoire est sur le point d'être épuisée. EC2 n'a pas de zone de swap par défaut, donc préparer cela évitera une erreur de manque de mémoire.
Connectez-vous en SSH à l'instance EC2 et accédez à votre répertoire personnel.
cd
Exécutez les commandes suivantes afin de sécuriser la zone d'échange.
sudo dd if=/dev/zero of=/swapfile1 bs=1M count=512
sudo chmod 600 /swapfile1
sudo mkswap /swapfile1
sudo swapon /swapfile1
sudo sh -c 'echo "/swapfile1 none swap sw 0 0" >> /etc/fstab'
Installez les gemmes nécessaires pour lancer l'application clonée.
Exécutez la commande suivante pour accéder au répertoire de l'application clonée.
cd /var/www/testapp
Exécutez la commande suivante pour vérifier si la version de Ruby installée par rbenv est utilisée.
ruby -v
Exécutez la commande suivante dans l'environnement local pour vérifier la version du bundler utilisé dans l'environnement de développement.
bundler -v
La version diffère selon l'environnement de développement, mais cette fois, il s'agissait de 2.0.1. Afin d'installer la même version dans l'environnement de production, connectez-vous SSH à l'instance EC2 à nouveau et exécutez la commande suivante.
gem install bundler -v 2.0.1(Même version que l'environnement local)
bundle install
Les informations qui ne peuvent pas être téléchargées sur Github pour des raisons de sécurité, telles que les mots de passe de base de données, sont définies à l'aide de variables d'environnement. Dans les rails, la valeur d'une variable d'environnement peut être utilisée en écrivant "ENV ['<nom de la variable d'environnement>']".
secret_key_base est une chaîne de caractères utilisée pour crypter les cookies. Vous devez le préparer lorsque vous exécutez l'application rails. Puisqu'il s'agit d'une valeur qui ne doit pas être divulguée vers l'extérieur, faites-y référence à partir de la variable d'environnement.
Exécutez la commande suivante pour créer secret_key_base. Lorsque vous exécutez la commande, une longue chaîne de caractères sera générée, donc copiez-la.
rake secret
Les variables d'environnement sont appliquées à l'ensemble du serveur en les enregistrant dans un fichier appelé / etc / environment. Utilisez la commande vim pour écrire des variables d'environnement.
Exécutez la commande suivante pour modifier / etc / enrvironment.
sudo vim /etc/environment
Modifiez / etc / environment comme suit.
/etc/environment
DATABASE_PASSWORD='<Mot de passe de l'utilisateur root MySQL>'
SECRET_KEY_BASE='<Le secret que vous avez copié plus tôt_key_base>'
Après la modification et l'enregistrement, exécutez la commande suivante et déconnectez-vous une fois.
exit
Connectez-vous à nouveau à l'instance EC2. Exécutez la commande suivante et vérifiez si les variables d'environnement sont appliquées.
env | grep DATABASE_PASSWORD
env | grep SECRET_KEY_BASE
L'instance EC2 nouvellement lancée est accessible par SSH, mais ne peut être connectée par aucune autre méthode de communication telle que HTTP. Par conséquent, il est nécessaire d'ouvrir au préalable le port de l'instance EC2 utilisée comme serveur WEB pour que HTTP puisse être connecté.
Afin de définir le port, il est nécessaire de modifier le paramètre appelé groupe de sécurité EC2. Un groupe de sécurité est comme un groupe auquel appartient un serveur EC2 et est utilisé pour configurer collectivement les paramètres réseau pour plusieurs instances EC2.
Connectez-vous à AWS, sélectionnez l'instance cible dans l'écran de la liste des instances EC2, puis cliquez sur le lien du groupe de sécurité.
L'écran passera à l'écran de paramétrage du groupe de sécurité, cliquez donc sur Modifier dans l'onglet entrant.
Lorsque l'écran contextuel Modifier la règle entrante apparaît, cliquez sur Ajouter une règle, saisissez «Règle TCP personnalisée», protocole «TCP», plage de ports «3000», source «Personnalisé», «0.0. Réglez sur "0.0 / 0".
Avant de démarrer les rails dans l'environnement de production, les paramètres MySQL de l'environnement de développement et de l'environnement de production sont actuellement différents, donc ajustez les paramètres MySQL de l'environnement de développement à l'environnement de production.
Modifiez config / database.yml dans l'environnement de développement comme suit, validez et transmettez à Github.
config/database.yml
production:
<<: *default
database: ~~~(Ne modifiez pas ceci car cela dépend de chaque nom d'application)
username: root
password: <%= ENV['DATABASE_PASSWORD'] %>
socket: /var/lib/mysql/mysql.sock
Connectez-vous en SSH à l'instance EC2 et exécutez la commande suivante.
git pull origin master
Exécutez la commande suivante pour accéder au répertoire de l'application.
cd /var/www/testapp
Exécutez la commande suivante pour créer une base de données.
rails db:create RAILS_ENV=production
Exécutez la commande suivante pour exécuter la migration.
rails db:migrate RAILS_ENV=production
Si l'erreur Mysql2 :: Error: Can't connect to local MySQL server via socket se produit ici, il est possible que MySQL n'ait pas démarré, alors exécutez la commande suivante pour démarrer MySQL. ..
sudo service mysqld start
Exécutez la commande suivante pour démarrer unicorn dans l'environnement de production. "-C config / unicorn.rb" signifie spécifier le fichier de paramétrage et "-E production" signifie fonctionner dans l'environnement de production. "-D" est une abréviation pour Daemon, qui est une commande qui vous permet de taper une autre commande dans le terminal lors du démarrage du programme.
bundle exec unicorn_rails -c config/unicorn.rb -E production -D
Maintenant, essayez d'accéder à http: //123.456.789: 3000 / avec votre navigateur. (Lorsque l'IP élastique est 123.456.789) Succès si un écran qui ne reflète pas le CSS est affiché.
L'environnement de développement dispose d'un mécanisme pour compiler automatiquement les fichiers d'actifs (image, css, javascript) pour chaque accès, mais dans l'environnement de production, il n'est pas exécuté pour chaque accès en raison des performances. Par conséquent, il est nécessaire de compiler les actifs à l'avance dans l'environnement de production. Exécutez la commande suivante pour compiler l'actif.
rails assets:precompile RAILS_ENV=production
Si la compilation réussit, redémarrez les rails pour vérifier la réflexion. Tout d'abord, vérifiez le processus Unicorn à partir du terminal et tuez le processus.
Exécutez la commande suivante pour vérifier la commande Unicorn. La commande ps est une commande pour vérifier le processus en cours d'exécution, et aux est une option pour rendre le résultat d'affichage de la commande ps plus facile à voir. | En utilisant grep unicorn, seuls les processus liés à la licorne sont extraits du résultat de la commande ps.
ps aux | grep unicorn
Vérifiez le PID du maître unicorn_rails à partir du résultat affiché. Ici, on suppose qu'il s'agit de "17877" à titre d'exemple.
Exécutez la commande suivante pour arrêter le processus Unicorn.
kill 17877
Exécutez la commande suivante pour redémarrer Unicorn. À ce stade, ajoutez RAILS_SERVE_STATIC_FILES = 1 au début. Cela permettra à Unicorn de trouver l'actif compilé.
RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D
Essayez à nouveau d'accéder à http://12.345.67.890:3000/ avec votre navigateur. (Lorsque l'IP élastique est 12.345.67.890) Cette fois, l'écran doit être affiché avec css reflété.
commande ssh-keygen Notation littérale de modèle
Procédure pour publier une application à l'aide d'AWS (1) Créer un compte AWS Procédure pour publier une application à l'aide d'AWS (2) Create EC2 instance [Comment publier une application à l'aide de la construction d'environnement d'instance AWS (3) EC2] (https://qiita.com/osawa4017/items/8dc09203f84e04bf0e66) [Procédure pour publier une application à l'aide de AWS (4) Create database] (https://qiita.com/osawa4017/items/7dba25f4fa30ab0b1246) [Procédure pour publier une application à l'aide d'AWS (6) Install Nginx] (https://qiita.com/osawa4017/items/9b707baf6ddde623068c)
Recommended Posts