La procédure pour «utiliser le serveur AWS» est écrite en 5 parties.
Veuillez consulter les articles ci-dessous.
① Configuration initiale de EC2 ② Créer une base de données dans l'environnement de production ③ Rails de départ de EC2 ← Imakoko ④ Configurer le serveur Web ⑤ Automatiser le déploiement
Exécuter dans le terminal (dans EC2)
[ec2-user@ip-***-**-**-*** ~]$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ec2-user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ec2-user/.ssh/id_rsa.
Your public key has been saved in /home/ec2-user/.ssh/id_rsa.pub.
The key fingerprint is:
3a:8c:1d:d1:a9:22:c7:6e:6b:43:22:31:0f:ca:63:fa ec2-user@ip-172-31-23-189
The key's randomart image is:
+--[ RSA 4096]----+
| + |
| . . = |
| = . o . |
| * o . o |
|= * S |
|.* + . |
| * + |
| .E+ . |
| .o |
+-----------------+
En exécutant la "commande cat", vous pouvez vérifier le contenu spécifique du fichier sur le terminal.
[ec2-user@ip-***-**-**-*** ~]$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2E......
Ensuite, enregistrez la clé publique affichée par la commande cat dans GitHub. Accédez à l'URL suivante
https://github.com/settings/keys
Remplissez "Titre" Collez la clé publique dans "Key" Appuyez sur "ADD SSH Key" pour enregistrer
Après avoir enregistré la clé dans GitHub, vérifiez si vous pouvez vous connecter avec ssh avec la commande suivante
[ec2-user@ip-***-**-**-*** ~]$ ssh -T [email protected]
Hi <Nom d'utilisateur Github>! You've successfully authenticated, but GitHub does not provide shell access.
Si «Autorisation refusée (clé publique).» S'affiche, Le réglage de la clé ssh est incorrect, alors vérifiez à nouveau le travail.
Le "serveur d'applications" accepte les "demandes" des navigateurs Logiciel qui exécute réellement les applications Rails
Il est également nécessaire d'exécuter le serveur d'applications sur le serveur EC2. Les outils nécessaires pour cela sont ** `ʻUnicorn`` **
"Unicorn" est un serveur d'applications souvent utilisé sur des serveurs ouverts sur le monde. Il peut être démarré par "commande unicorn_rails" au lieu de la commande rails.
Ajoutez le contenu suivant au bas du Gemfile et installez le bundle
group :production do
gem 'unicorn', '5.4.1'
end
Créez "config / unicorn.rb" et modifiez le contenu comme suit
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
#Travailleur qui accepte les demandes et génère des réponses(ouvrier)Déterminez le nombre de
worker_processes 1
#Spécifiez le répertoire dans lequel l'application est installée
#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.
working_directory app_path
#Spécifiez l'emplacement des fichiers requis pour démarrer Unicorn
#Unicorn générera un fichier avec l'identifiant du processus au démarrage. Spécifiez l'emplacement.
pid "#{app_path}/tmp/pids/unicorn.pid"
#Spécifiez le numéro de port
#Décidez du numéro de port pour lequel vous souhaitez accepter la demande. Cette fois, spécifiez le port 3000.
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
#Ce qui suit est un paramètre appliqué, donc l'explication est omise.
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
"Commit → push" vers le référentiel distant Après l'avoir reflété dans le référentiel distant de GitHub, reflétez tout le contenu local jusqu'à présent dans EC2.
#Créez un nouveau répertoire avec la commande mkdir
[ec2-user@ip-***-**-**-*** ~]$ sudo mkdir /var/www/
#Autorisations Ec2 sur le répertoire www créé-Changer d'utilisateur
[ec2-user@ip-***-**-**-*** ~]$ sudo chown ec2-user /var/www/
Ensuite, récupérez l '"URL du dépôt" sur GitHub et clonez-la. Vous pouvez copier l'URL en appuyant sur le "Code" vert.
Une fois que vous avez copié l'URL, clonez le code
[ec2-user@ip-***-**-**-*** ~]$ cd /var/www/
[ec2-user@ip-***-**-**-*** www]$git clone collez l'URL copiée
Succès s'il n'y a pas d'erreur dans l'entrée ci-dessus.
L'instance EC2 en cours d'exécution n'a pas assez de puissance informatique, Une erreur peut survenir lors de l'installation de Gem. Plus précisément, il n'y a pas assez de mémoire liée à la puissance de traitement de l'ordinateur. C'est la limite des instances qui peuvent être exécutées gratuitement, donc ça ne peut pas être aidé ...
Par conséquent, avant de procéder à de futurs réglages, nous effectuerons un processus appelé "Swap file" pour augmenter la mémoire.
Un «fichier d'échange» est un fichier préparé pour augmenter temporairement la quantité de mémoire. EC2 ne prépare pas de fichier Swap par défaut, donc le préparer évitera les erreurs de traitement de mémoire insuffisante.
Établissez une connexion ssh à EC2 et accédez à votre répertoire personnel Exécuter dans le terminal (dans EC2)
[ec2-user@ip-***-**-**-*** ~]$ cd
Exécutez les commandes suivantes dans l'ordre
[ec2-user@ip-***-**-**-*** ~]$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=512
#Attendez un moment et réussissez si ce qui suit s'affiche
512+0 Entrée d'enregistrement
512+0 sortie d'enregistrement
536870912 octets(537 MB)Copié, 7.35077 secondes, 73.0 MB/Secondes
[ec2-user@ip-***-**-**-*** ~]$ sudo chmod 600 /swapfile1
[ec2-user@ip-***-**-**-*** ~]$ sudo mkswap /swapfile1
#Succès si ce qui suit est affiché
Définir la taille de l'espace de swap version 1= 524284 KiB
Pas de label, UUID=74a961ba-7a33-4c18-b1cd-9779bcda8ab1
[ec2-user@ip-***-**-**-*** ~]$ sudo swapon /swapfile1
[ec2-user@ip-***-**-**-*** ~]$ sudo sh -c 'echo "/swapfile1 none swap sw 0 0" >> /etc/fstab'
Ceci termine la sécurisation de la zone pour le fichier d'échange.
Installez le gem requis pour lancer l'application clonée sur EC2 avec la commande suivante
Exécuter dans le terminal (dans EC2)
#Déplacer vers le répertoire cloné
[ec2-user@ip-***-**-**-*** www]$ cd /var/www/Application en cours de développement
#Vérifiez la version de ruby
[ec2-user@ip-***-**-**-*** <Nom du référentiel>]$ ruby -v
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]
Ensuite, installez le bundler pour gérer les gemmes dans l'environnement de production. Tout d'abord, vérifiez quelle version de bundler a été utilisée dans l'application développée localement.
Exécuter dans le terminal (local)
#Exécuter dans le répertoire de l'application en cours de développement
% bundler -v
Bundler version 2.1.4 ← Exemple
Introduit la même version de bundler que le local du côté EC2. Dans le cas ci-dessus, installez la version de "bundler 2.1.4" et exécutez l'installation du bundle.
Exécuter dans le terminal (dans EC2)
# 「2.1.Dans la partie "4", la version du bundler confirmé localement est introduite.
[ec2-user@ip-***-**-**-*** <Nom du référentiel>]$ gem install bundler -v 2.1.4
#Le traitement des commandes suivantes peut prendre quelques minutes ou plus
[ec2-user@ip-***-**-**-*** <Nom du référentiel>]$ bundle install
La valeur de la variable d'environnement peut être utilisée à partir de Rails en écrivant "ENV ['<nom de la variable d'environnement>']". Cette fois, spécifiez la variable d'environnement "SECRET_KEY_BASE".
"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 une application Rails. De plus, étant donné qu'il s'agit d'une valeur qui ne doit pas être divulguée vers l'extérieur, elle est également désignée par la variable d'environnement.
Commencez par créer secret_key_base avec la commande suivante
Exécuter dans le terminal (dans EC2)
# 「2.1.Dans la partie "4", la version du bundler confirmé localement est introduite.
[ec2-user@ip-***-**-**-*** <Nom du référentiel>]$ rake secret
69619d9a75b78f2e1c87ec5e07541b42f23efeb6a54e97da3723de06fe74af29d5718adff77d2b04b2805d3a1e143fa61baacfbf4ca2c6fcc608cff8d5a28e8d
Ensuite, définissez la variable d'environnement dans EC2. Enregistrez les variables d'environnement dans un fichier appelé "/ etc / environnement". Utilisez la commande vim pour écrire des variables d'environnement. À ce moment-là, utilisez l'option "sudo".
"Sudo" est une option avec le rôle d '"exécution de commandes avec pleine autorité". Puisque les "fichiers sous / etc" ne peuvent pas être écrits ou enregistrés sans une autorité forte, ajoutez "sudo" au début de la commande.
Exécuter dans le terminal (dans EC2)
# 「2.1.Dans la partie "4", la version du bundler confirmé localement est introduite.
[ec2-user@ip-***-**-**-*** ~]$ sudo vim /etc/environment
Tapez "i" pour accéder au mode d'entrée. Après cela, il est décrit comme suit.
#Entrez le mot de passe de l'utilisateur root de la base de données (vous pouvez vous référer à l'article à partir du lien ci-dessous)
DATABASE_PASSWORD='Mot de passe de l'utilisateur racine de la base de données'
SECRET_KEY_BASE='Le secret créé plus tôt_key_base'
Une fois la saisie terminée, exécutez dans l'ordre "touche esc" → ": wq" et enregistrez. Déconnectez-vous de l'environnement de production une fois pour refléter les variables d'environnement définies.
Exécuter dans le terminal (dans EC2)
# 「2.1.Dans la partie "4", la version du bundler confirmé localement est introduite.
[ec2-user@ip-***-**-**-*** ~]$ exit
logout
Connection to 52.xx.xx.xx closed.
Ensuite, vérifiez si les variables d'environnement que vous venez de définir sont correctement reflétées. Connectez-vous à nouveau à EC2 avec la commande suivante.
Terminal (local)
$ ssh -i [Le nom de la clé téléchargée].pem ec2-user@[Adresse IP élastique associée à l'instance EC2 créée]
Après la reconnexion, combinez la "commande env" et la "commande grep" pour Assurez-vous que les variables d'environnement que vous avez définies précédemment sont appliquées.
Commande env: une commande pour afficher les variables d'environnement définies Commande grep: commande utilisée pour rechercher des variables d'environnement, etc. L'utilisation est "grep (cible de recherche)".
Exécuter dans le terminal (dans EC2)
# 「2.1.Dans la partie "4", la version du bundler confirmé localement est introduite.
[ec2-user@ip-***-**-**-*** ~]$ env | grep SECRET_KEY_BASE
SECRET_KEY_BASE='secret_key_base'
[ec2-user@ip-***-**-**-*** ~]$ env | grep DATABASE_PASSWORD
DATABASE_PASSWORD='Mot de passe de l'utilisateur racine de la base de données'
L'instance EC2 nouvellement lancée est accessible avec ssh, Il n'est pas du tout connecté par d'autres méthodes de communication telles que HTTP. Par conséquent, l'instance EC2 utilisée comme serveur doit ouvrir le "port" à l'avance afin que HTTP puisse être connecté. Auparavant, j'ai écrit "listen 3000" dans config / unicorn.rb, Cela signifie "démarrer le serveur Rails sur le port 3000".
Afin de définir le port, il est nécessaire de modifier le paramètre appelé "groupe de sécurité" de EC2.
Sélectionnez l'instance cible dans l'écran de liste des instances EC2 et sélectionnez-la. Cliquez sur le lien "Security Group" en bas à droite de la figure ("launch-wizard-2" sur la figure) ](https://gyazo.com/cef10db71b1cb250b5fcc8851bc46d1b)
Cliquez ensuite sur "Modifier la règle entrante" dans l'onglet "Entrant"
Après la transition d'écran, cliquez sur "Ajouter une règle" et modifiez comme suit Type: TCP personnalisé Protocole: TCP Portée: 3000 Source: personnalisé /0.0.0.0/0
Après le réglage, cliquez sur "Enregistrer la règle". C'est tout pour ouvrir le port.
Utilisez la "commande unicorn_rails" pour démarrer Rails dans un environnement de production.
Tout d'abord, modifiez les paramètres de l'environnement de production de "database.yml" avec VS Code. Modifiez le fichier database.yml local comme suit pour qu'il corresponde aux paramètres mysql dans l'environnement de production.
config/database.yml (local)
production:
<<: *default
database:(* Ne modifiez pas ici)
username: root
password: <%= ENV['DATABASE_PASSWORD'] %>
socket: /var/lib/mysql/mysql.sock
Ensuite, éditez "commit → push"
Ensuite, reflétez le contenu de GitHub dans EC2 Exécutez la commande suivante dans le terminal (dans EC2)
[ec2-user@ip-***-**-**-*** <Nom du référentiel>]$ git pull origin master
Ensuite, créez une base de données dans EC2. Il existe une option "RAILS_ENV = production". RAILS_ENV = production: Options qui sont attachées lors de l'exécution de commandes dans l'environnement de production.
Exécuter dans le terminal (dans EC2)
[ec2-user@ip-***-**-**-*** <Nom du référentiel>]$ rails db:create RAILS_ENV=production
Created database '<Nom de la base de données>'
[ec2-user@ip-***-**-**-*** <Nom du référentiel>]$ rails db:migrate RAILS_ENV=production
Une fois cela fait, démarrez Rails.
Exécuter dans le terminal (dans EC2)
[ec2-user@ip-***-**-**-*** <Nom du référentiel>]$ cd /var/www/[Dépôt]
[ec2-user@ip-***-**-**-*** <Nom du référentiel>]$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D
Accédez à http: //
Lorsque je le vérifie avec un navigateur, la vue reste interrompue. Un message d'erreur (Désolé, mais une erreur s'est produite.) Peut s'afficher.
Ce n'est pas bon, alors organisez les "fichiers d'actifs".
Fichier d'actif: un fichier qui gère les images, CSS, JavaScript, etc. Le processus de compression de ce fichier d'actif et de transfert des données est appelé «compilation». Si vous ne le faites pas, le CSS ne sera pas reflété dans l'environnement de production et la vue sera corrompue. Des problèmes tels que le navigateur ne s'affichant pas en raison d'une erreur se produisent.
Exécuter dans le terminal (dans EC2)
[ec2-user@ip-***-**-**-*** <Nom du référentiel>]$ rails assets:precompile RAILS_ENV=production
Quand j'ai terminé jusqu'à présent, j'ai redémarré Rails, mais comme le serveur est déjà opérationnel, je dois redémarrer Rails.
Commencez par vérifier "Processus Unicorn". Utilisez la "commande ps" pour vérifier le processus depuis le terminal. Après cela, terminez le processus avec la "commande kill".
commande ps: une commande pour vérifier le processus en cours d'exécution. commande kill: une commande pour arrêter le processus en cours d'exécution.
Exécuter dans le terminal (dans EC2)
[ec2-user@ip-***-**-**-*** <Nom du référentiel>]$ ps aux | grep unicorn
...
Ensuite, vous devriez voir le processus comme ci-dessous.
#### **`Terminal`**
```bash
ec2-user 17877 0.4 18.1 588472 182840 ? Sl 01:55 0:02 unicorn_rails master -c config/unicorn.rb -E production -D
ec2-user 17881 0.0 17.3 589088 175164 ? Sl 01:55 0:00 unicorn_rails worker[0] -c config/unicorn.rb -E production -D
ec2-user 17911 0.0 0.2 110532 2180 pts/0 S+ 02:05 0:00 grep --color=auto unicorn
Au-dessus de "ec2-Le numéro à droite de "utilisateur" est l'identifiant du processus (PID) 「unicorn_Le processus appelé «maître des rails» est le corps du processus Unicorn L'ID de processus à ce moment est "17877"
Terminal (dans EC2))Courir
[ec2-user @ ip - *** - ** - ** - *** <nom du référentiel>] $ kill <ID de processus maître confirmé de licorne rails> ← Cette fois 17878
Visualisez à nouveau le processus exécuté et confirmez qu'il a été arrêté.
[ec2-user @ ip - *** - ** - ** - *** <nom du référentiel>] $ ps aux | grep unicorn
...
ec2-user 17911 0.0 0.2 110532 2180 pts/0 S+ 02:05 0:00 grep --color=auto unicorn
Si le résultat de l'exécution est comme ci-dessus, l'arrêt de Unicorn est terminé.
###Enfin, exécutez la commande pour redémarrer Rails 「RAILS_SERVE_STATIC_FILES="1" a pour rôle de spécifier Rails pour trouver l'actif compilé.
Terminal (dans EC2))Courir
[ec2-user @ ip - *** - ** - ** - *** <nom du référentiel>] $ RAILS_SERVE_STATIC_FILES = 1 unicorn_rails -c config / unicorn.rb -E production -D
Http dans le navigateur://<Elastic IP>:3000/Accédez à et vérifiez si le site est affiché.
##Quand Rails ne démarre pas bien unicorn_Lors de l'exécution de rails 「master failed to start, check stderr log for details」 Si vous obtenez, vous devez vérifier le journal des erreurs de la licorne.
Utilisez quelque chose appelé «moins de commande» lors de l'affichage des fichiers journaux
commande less: une commande qui vous permet de vérifier le contenu d'un fichier. La "commande cat" a un rôle similaire.
Terminal (dans EC2))Courir
[ec2-user @ ip - *** - ** - ** - *** <nom du référentiel>] $ less log / unicorn.stderr.log
I, [2016-12-21T04:01:19.135154 #18813] INFO -- : Refreshing Gem list
I, [2016-12-21T04:01:20.732521 #18813] INFO -- : listening on addr=0.0.0.0:3000 fd=10
E, [2016-12-21T04:01:20.734067 #18813] Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
/var/www/furima/shared/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `connect'
/var/www/furima/shared/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `initialize'
/var/www/furima/shared/bundle/ruby/2.6.0/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/mysql2_adapter.rb:24:in `new'
/var/www/furima/shared/bundle/ruby/2.6.0/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/mysql2_adapter.rb:24:in `mysql2_connection'
/var/www/furima/shared/bundle/ruby/2.6.0/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:889:in `new_connection'
##「We’re sorry,mais ~ "s'affiche Tout d'abord, "la production.Vérifiez "journal".
production.log: un endroit pour enregistrer les journaux du serveur, "un endroit pour enregistrer les événements dans EC2"
Terminal (dans EC2))Courir
[ec2-user @ ip - *** - ** - ** - *** <nom du référentiel>] $ moins log / production.log
(Afficher production.log)
####tail -utilisez la commande f tail -Commande f: commande qui affiche le dernier journal pour seulement 10 lignes. C'est un outil qui vous permet de vérifier facilement le journal, alors utilisez-le autant que possible.
c'est tout. Je vous remercie pour votre travail acharné.
Continuer →Ici
Recommended Posts