Vorheriger Inhalt [** STEP1-Netzwerkeinstellungen ](https://qiita.com/tksh8/items/9a8e88a777a3a4ee7a09#step1-%E3%83%8D%E3%83%83%E3%83%88%E3%83% AF% E3% 83% BC% E3% 82% AF% E7% 92% B0% E5% A2% 83% E8% A8% AD% E5% AE% 9A) [ STEP2 EC2-Einstellungen **] (https://qiita.com/tksh8/items/9a8e88a777a3a4ee7a09#step2-ec2%E3%81%AE%E8%A8%AD%E5%AE%9A)
Inhalt dieses Mal [** Aufbau der STEP3 EC2-Instanzumgebung ] (https://qiita.com/tksh8/items/3d2f2eeaf0e8de291b6d#step3-ec2%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89) [ STEP4 Link mit Git, Klon App ] (https://qiita.com/tksh8/items/3d2f2eeaf0e8de291b6d#step4-git%E3%81%A8%E3%81%AE%E9%80%A3%E6%90%BA%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%B3) [ STEP5 App secret_key_base Einstellungen ] (https://qiita.com/tksh8/items/3d2f2eeaf0e8de291b6d#step5-%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AEsecret_key_base%E3%81%AE%E8%A8%AD%E5%AE%9A) [ STEP6 Einhorneinstellungen ] (https://qiita.com/tksh8/items/3d2f2eeaf0e8de291b6d#step6-unicorn%E3%81%AE%E8%A8%AD%E5%AE%9A) [ STEP7 Nginx-Einstellungen ] (https://qiita.com/tksh8/items/3d2f2eeaf0e8de291b6d#step7-nginx%E3%81%AE%E8%A8%AD%E5%AE%9A) [ STEP8 Migration ] (https://qiita.com/tksh8/items/3d2f2eeaf0e8de291b6d#step8-%E3%83%9E%E3%82%A4%E3%82%B0%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3) [ SCHRITT 9 Bestätigung starten **] (https://qiita.com/tksh8/items/3d2f2eeaf0e8de291b6d#step9-%E8%B5%B7%E5%8B%95%E7%A2%BA%E8%AA%8D)
Stellen Sie Ruby und andere Umgebungen so ein, dass sie in der erstellten EC2-Instanz funktionieren.
Melden Sie sich bei AWS an
[~]$ ssh test_key_rsa
Gib Folgendes ein
[testuser@ ~]$ sudo yum install git make gcc-c++ patch openssl-devel libyaml-devel libffi-devel libicu-devel libxml2 libxslt libxml2-devel libxslt-devel zlib-devel readline-devel ImageMagick ImageMagick-devel epel-release
Sie werden nach einem Passwort gefragt, geben Sie es also ein
Is this ok [y/d/N]: y
Weil es in ist
Geben Sie mit y ein
[testuser@ ~]$ sudo rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
[testuser@ ~]$ sudo yum install mysql-devel mysql57 mysql57-server
[testuser@ ~]$ curl -sL https://rpm.nodesource.com/setup_6.x | sudo bash -
[testuser@ ~]$ sudo yum -y install nodejs
Dies wird ebenfalls bestätigt. Drücken Sie daher "y" → Enter.
[testuser@ ~]$ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
[testuser@ ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
[testuser@ ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
[testuser@ ~]$ source .bash_profile
-Überprüfen Sie die installierte rbenv-Version
[testuser@ ~]$ rbenv --version
rbenv 1.1.2-4-g577f046
(#.bash_Profil laden)
[testuser@ ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
(#ruby-Build installieren)
[testuser@ ~]$ rbenv rehash
-Überprüfen Sie die installierbare Version
[testuser@ ~]$ rbenv install -l
[testuser@ ~]$ rbenv install 2.5.1
[testuser@ ~]$ rbenv global 2.5.1
[testuser@ ~]$ rbenv rehash
-Überprüfen Sie die Version von installiertem Ruby
-Wenn die Ruby-Version angezeigt wird, ist sie erfolgreich.
[testuser@ ~]$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
Klonen Sie die erstellte App von git und platzieren Sie sie in der EC2-Instanz
Generieren Sie mit dem Befehl vi eine git-bezogene Konfigurationsdatei mit dem Namen .gitconfig
[testuser@ ~]$ vi .gitconfig
Drücken Sie "i", um den Bearbeitungsmodus aufzurufen und Folgendes hinzuzufügen Bitte geben Sie Ihren eigenen Namen und Ihre E-Mail-Adresse ein
[user]
name = your_name (#Mein Name ist in Git registriert)
email = [email protected] (#Meine eigene E-Mail bei der Registrierung bei git)
[alias](#Das ist dein Favorit)
a = add
b = branch
ch = checkout
st = status
[color](#Färbung)
ui = true
[url "github:"]
InsteadOf = https://github.com/
InsteadOf = [email protected]:
Drücken Sie "esc", um und zu beenden Speichern unter ": wq"
Speichern Sie die Datei, wenn Sie fertig sind Ich werde ein Verzeichnis erstellen, um die Anwendung zu platzieren
[testuser@ ~]$ cd /
[testuser@ ~]$ sudo chown testuser var (#Machen Sie den Besitzer des var-Ordners testuser)
[testuser@ ~]$ cd var
[testuser@ var]$ sudo mkdir www
[testuser@ var]$ sudo chown testuser www
[testuser@ var]$ cd www
(#Gleiche Verarbeitung wie www)
[testuser@ www]$ sudo mkdir rails
[testuser@ www]$ sudo chown testuser rails
Geben Sie zunächst den folgenden Befehl ein
Schlüssel erstellen, Schlüsselname ist "aws_git_rsa", Passwort ist leer
[testuser@ www]$ cd ~
[testuser@ ~]$ chmod 700 .ssh
[testuser@ ~]$ cd .ssh
[testuser@ .ssh]$ ssh-keygen -t rsa
-----------------------------
Enter file in which to save the key ():
aws_git_rsa
(#Geben Sie hier den Namen der Datei ein)
Enter passphrase (empty for no passphrase):
(#Treten Sie ein, wie es ist, ohne etwas zu tun)
Enter same passphrase again:
(#Treten Sie ein, wie es ist, ohne etwas zu tun)
[testuser@ .ssh]$ ls
(#「aws_git_rsa "und" aws "_git_rsa.Bestätigen Sie, dass "Pub" generiert wurde)
[[email protected]]$ vi config
Drücken Sie "i", um den Bearbeitungsmodus aufzurufen und Folgendes hinzuzufügen
Host github
Hostname github.com
User git
IdentityFile ~/.ssh/aws_git_rsa
Drücken Sie "esc", um und zu beenden Speichern unter ": wq"
Überprüfen Sie den Inhalt des Schlüssels. Kopiere es irgendwo hin
[[email protected]]$ cat aws_git_rsa.pub
Greifen Sie über einen Browser auf GitHub zu und wählen Sie "SSH- und GPG-Schlüssel" unter "Einstellungen".
Klicken Sie auf "Neuer SSH-Schlüssel", geben Sie "App-Name - EC2" in Titel, "Inhalt des zuvor erstellten Schlüssels" in Schlüssel ein und registrieren Sie sich mit "SSH-Schlüssel hinzufügen".
Kehren Sie zum Terminal zurück und ändern Sie die Berechtigungen der Einstellungsdatei
[[email protected]]$ chmod 600 config
Bestätigen Sie die Verbindung zu GitHub. Ja für Fragen auf dem Weg. Erfolgreich, wenn der Github-Benutzername angezeigt wird
[[email protected]]$ ssh -T github
#Hallo Github Benutzername! You've successfully authenticated, but GitHub does not provide shell access.
Wenn eine solche Nachricht zurückgegeben wird, ist die Verbindung erfolgreich.
Nach der Registrierung ist es Zeit zu klonen
[testuser@ .ssh]$ cd /var/www/rails
Die URL, die dem Git-Klon folgt, lautet Dies ist die Github-URL der von mir erstellten App (ssh's)
[testuser@ .rails]$ git clone [email protected]:~~~~~~~~~~~~
Bitte führen Sie zur Bestätigung den folgenden Befehl aus
[testuser@ .rails]$ ls
Wenn es einen Ordner mit Ihrem eigenen App-Namen gibt, ist der Klon erfolgreich.
Wenn der Klon erfolgreich ist, ändern Sie die in der Rails-Datei config / Secrets.yml beschriebene Secrets_key_base.
[testuser@ .rails]$ cd ~
[testuser@ ~]$ rbenv exec gem install bundler
[testuser@ ~]$ rbenv rehash
[testuser@ ~]$ which bundler
# /usr/local/rbenv/shims/Erfolg, wenn Bundler ausgegeben wird
[testuser@ .rails] cd /var/www/rails/App Name
[testuser@App Name]$ gem install rubygems-update -v '<3' && update_rubygems
[testuser@App Name]$ bundle config --local build.mysql2 "--with-cppflags=-I/usr/local/opt/openssl/include"
[testuser@App Name]$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"
[testuser@App Name]$ bundle install --path vendor/bundle
[testuser@App Name]$ bundle exec rake secret
Kopieren Sie den angezeigten Schlüssel
[testuser@]$ vi config/secrets.yml
production:
secret_key_base: ()
Drücken Sie "i", um den Bearbeitungsmodus aufzurufen, und fügen Sie den folgenden hinzu. Fügen Sie den gerade kopierten ein. Drücken Sie "esc", um den Vorgang zu beenden und mit ": wq" zu speichern. STEP6 Unicorn-Einstellungen (Ruby-Webanwendung in UNIX-Umgebung) Bereitgestellter Rack-HTTP-Server (Rails-Apps können auf dem App-Server ausgeführt werden)
[testuser@App Name]$ gem install unicorn
Fügen Sie Ihrem Gemfile Folgendes hinzu
[testuser@App Name]$ vi Gemfile
Gemfile
group :production, :staging do
gem 'unicorn', '5.4.1'
end
Drücken Sie "esc", um und zu beenden Speichern unter ": wq"
[testuser@App Name]$ bundle install
[testuser@App Name]$ vi config/unicorn.conf.rb
Erstellen Sie config / unicorn.rb und bearbeiten Sie den Inhalt wie folgt
config/unicorn.rb
#Legen Sie das Verzeichnis, in dem der Anwendungscode auf dem Server installiert ist, in einer Variablen ab
app_path = File.expand_path('../../', __FILE__)
#Bestimmen Sie die Leistung des Anwendungsservers
worker_processes 1
#Geben Sie das Verzeichnis an, in dem die Anwendung installiert ist
working_directory app_path
#Geben Sie den Speicherort der Dateien an, die zum Starten von Unicorn erforderlich sind
pid "#{app_path}/tmp/pids/unicorn.pid"
#Geben Sie die Portnummer an
listen "#{app_path}/tmp/sockets/unicorn.sock"
#Geben Sie eine Datei an, um Fehler zu protokollieren
stderr_path "#{app_path}/log/unicorn.stderr.log"
#Geben Sie eine Datei an, um normale Protokolle aufzuzeichnen
stdout_path "#{app_path}/log/unicorn.stdout.log"
#Legen Sie die maximale Wartezeit für die Antwort der Rails-Anwendung fest
timeout 60
#Das Folgende ist eine angewendete Einstellung, daher wird die Erklärung weggelassen.
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
Drücken Sie "i", um den Bearbeitungsmodus aufzurufen und Folgendes hinzuzufügen
gemfile:unicorn.conf.rb
# set lets
$worker = 2
$timeout = 30
$app_dir = "/var/www/rails/mumu" #Mein Anwendungsname
$listen = File.expand_path 'tmp/sockets/.unicorn.sock', $app_dir
$pid = File.expand_path 'tmp/pids/unicorn.pid', $app_dir
$std_log = File.expand_path 'log/unicorn.log', $app_dir
# set config
worker_processes $worker
working_directory $app_dir
stderr_path $std_log
stdout_path $std_log
timeout $timeout
listen $listen
pid $pid
# loading booster
preload_app true
# before starting processes
before_fork do |server, worker|
defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!
old_pid = "#{server.config[:pid]}.oldbin"
if old_pid != server.pid
begin
Process.kill "QUIT", File.read(old_pid).to_i
rescue Errno::ENOENT, Errno::ESRCH
end
end
end
# after finishing processes
after_fork do |server, worker|
defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
end
Drücken Sie "esc", um und zu beenden Speichern unter ": wq"
Nächster Kommentieren Sie Folgendes aus
config/environments/production.rb
# config.assets.js_compressor = :uglifier
(Einer der gleichen Webserver wie Apache usw. Da Nginx und Rack jedoch nicht direkt verbunden werden können, muss Unicorn zwischen ihnen eingeklemmt werden.)
[testuser@ ~]$ cd ~
[testuser@ ~]$ sudo yum install nginx
[testuser@ ~]$ cd /etc/nginx/conf.d/
[testuser@ conf.d]$ sudo vi test.conf #Benennen Sie die Datei mit Ihrem eigenen Anwendungsnamen um
Drücken Sie "i", um den Bearbeitungsmodus aufzurufen und Folgendes hinzuzufügen
upstream app_server {
#Einstellungen für die Verknüpfung mit Unicorn. Beachten Sie, dass Sie den Anwendungsnamen in Ihren eigenen Anwendungsnamen umschreiben. Wahrscheinlich diesmal chatten-space
server unix:/var/www/<Anwendungsname>/tmp/sockets/unicorn.sock;
}
# {}Der von umgebene Teil wird als Block bezeichnet. Kann den Server einstellen
server {
#Portnummer, an der dieses Programm Verbindungen akzeptiert
listen 80;
#URL anfordern, um Verbindung zu akzeptieren Kein Zugriff mit URL, die hier nicht geschrieben ist
server_name <Elastic IP>;
#Stellen Sie die maximale Größe der vom Client hochgeladenen Dateien auf 2 Giga ein. Der Standardwert ist 1 Mega, halten Sie ihn also groß
client_max_body_size 2g;
#Stammverzeichnis, als die Verbindung hergestellt wurde
root /var/www/<Anwendungsname>/public;
#Assets-Datei(CSS- und JavaScript-Dateien usw.)Einstellungen, die beim Zugriff angewendet werden
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
try_files $uri/index.html $uri @unicorn;
location @unicorn {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
error_page 500 502 503 504 /500.html;
}
Die folgenden drei Punkte müssen neu geschrieben werden.
Bitte ändern Sie den Teil von
Drücken Sie "esc", um und zu beenden Speichern unter ": wq"
Mach Folgendes
[testuser@ conf.d]$ cd /var/lib
[testuser@ lib]$ sudo chmod -R 775 nginx
[testuser@ ~]$ sudo yum install mysql-devel
-Installieren Sie MySQL Server
[testuser@ ~]$ sudo yum install mysql-server
-MySQL-Starteinstellungen
[testuser@ ~]$ sudo chkconfig mysqld on
-Mit dem Befehl chkconfig können Sie überprüfen, ob die Starteinstellung erfolgreich ist.
-Wenn Folgendes angezeigt wird, ist die Einstellung erfolgreich.
[testuser@ ~]$ chkconfig
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
-Starten Sie MySQL.
[testuser@ ~]$ sudo vi /etc/my.cnf
Fügen Sie Folgendes hinzu
character-set-server=utf8
[testuser@ ~]$ sudo /etc/init.d/mysqld start
-Oder das gleiche unten.
[testuser@ ~]$ sudo service mysqld start
-Melden Sie sich als root an und erstellen Sie einen neuen Benutzer.
[testuser@ ~]$ mysql -u root
mysql> GRANT ALL PRIVILEGES ON [Name der Datenbank].* TO [Ihr App-Name]@localhost IDENTIFIED BY '[Passwort zum Einstellen]';
Überprüfen Sie, ob der Zeichencode von MySQL standardmäßig latin1 ist.
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
- character_set_Dateisystem und Charakter_sets_Es ist in Ordnung, wenn außer dir utf8 ist.
-Wenn nicht, vereinheitlichen Sie sich mit utf8 und starten Sie neu.
mysql> set character_set_database = utf8;
mysql> set character_set_server = utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
[testuser@ ~]$ cd /var/www/rails/App Name
[testuser@App Name]$ vi config/database.yml
----------------------------
production:
<<: *default
database: mumu_production
username: root #Wechseln Sie hier zu root
password: #Lass das leer
----------------------------
[testuser@App Name]$ sudo service mysqld start #Starten Sie mysqld
[testuser@App Name]$ ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
[testuser@App Name]$ bundle exec rake db:create RAILS_ENV=production
[testuser@App Name]$ bundle exec rake db:migrate RAILS_ENV=production
Erfolgreich, wenn die Migration durchgeführt wird
[** Bitte fahren Sie mit der STEP9-Startbestätigung fort **] (https://qiita.com/tksh8/items/3d2f2eeaf0e8de291b6d#step9-%E8%B5%B7%E5%8B%95%E7%A2%BA%E8%AA%8D)
Erstellen Sie zusätzliche Subnetze und geben Sie in den folgenden beiden Subnetzen an, die zur Verfügbarkeitszone gehören ・ Ap-Nordosten-1a ・ Ap-Nordosten-1c
an der Spitze Suche nach "RDS"
Klicken Sie auf U-Boot-Gruppe> [DB-U-Boot-Gruppe erstellen]
"App Name" im Namen_DB-Subnet-Group」
"DB-Subnetzgruppe für App-Namen" in der Beschreibung
"VPC für App-Namen" in der VPC-ID
damit
Klicken Sie auf "Alle mit dieser VPC verknüpften Subnetze hinzufügen".
[Erstellen]Drücken Sie
Aus dem Dashboard Klicken Sie in RDS auf [Datenbank erstellen]
-Einfach zu erstellen
-MySQL
-Kostenlose Stufe
-"App-Name" in der DB-Instanz-ID-mysql」
-Hauptbenutzer und Hauptkennwort sind beliebige Werte
"Erstellen" mit
Die Datenbank wird in wenigen Minuten erstellt
Bitte beziehen Sie sich hier
https://qiita.com/nago3/items/1cd6daa5ad6377e325ed
Hinzufügen und Speichern von Datenbankinformationen für die Produktion als Rails-Umgebungsvariable
Schreiben Sie database.yml wie folgt um
database.yml
production:
adapter: mysql2
encoding: utf8
reconnect: false
pool: 5
host: <%= ENV['DB_HOST'] %>
username: <%= ENV['DB_USERNAME'] %>
password: "<%= ENV['DB_PASSWORD'] %>"
database: <%= ENV['DB_NAME'] %>
Bearbeiten Sie bash_profile
$ sudo vi ~/.bash_profile
Hinzufügen und Speichern von Datenbankinformationen für die Produktion als Rails-Umgebungsvariable
bash_profile
export DB_HOST="RDS-Endpunkt"
export DB_USERNAME="RDS-Benutzername"
export DB_PASSWORD="RDS-Passwort"
export DB_NAME="App Name_production"
[testuser@App Name]$ source ~/.bash_profile
Überprüfen Sie, ob es richtig eingestellt ist
[testuser@App Name]$ echo $DB_NAME
[testuser@App Name]$ echo $DB_USERNAME
[testuser@App Name]$ echo $DB_PASSWORD
[testuser@App Name]$ echo $DB_HOSTNAME
[testuser@App Name]$ echo $DB_PORT
Starten Sie mysqld
[testuser@App Name]$ sudo service mysqld start
Führen Sie die Migration durch
[testuser@App Name]$ rake db:create RAILS_ENV=production
[testuser@App Name]$ bundle exec rake db:migrate RAILS_ENV=production
SSH in EC2 und kompilieren Sie Ihre Rails-App vor
[testuser@App Name]$ bundle exec rake assets:precompile RAILS_ENV=production
Starten Sie Nginx neu
[testuser@App Name]$ sudo service nginx restart
Starten Sie Unicorn
[testuser@App Name]bundle exec unicorn_rails -c config/unicorn.conf.rb -E production -D
Oder
$ bundle exec unicorn_rails -E production -c config/unicorn.rb -D
Bestätigen Sie, dass Unicon gestartet wird
[testuser@App Name]$ ps -ef | grep unicorn | grep -v grep
#OK, wenn die Liste der Prozesse in 3 Schritten angezeigt wird
#Starten Sie Einhorn
#Bestätigung starten
$ ps aux | grep unicorn
#Überprüfen Sie das Protokoll, wenn das Einhorn nicht gestartet werden kann
$ tailf log/unicorn.log
$ sudo tail -f /var/log/nginx/access.log
$ sudo tail -f /var/log/nginx/error.log
$ sudo tail -f /var/www/vue_sample/log/unicorn.log
#Starten Sie nginx
$ sudo service nginx start
#Bestätigung starten
$ ps aux | grep nginx
Zugriff durch Drücken der IP-Adresse über den Browser * Wenn Sie die IP-Adresse nicht kennen, können Sie sie anhand der Beschreibung der EC2-Instanz überprüfen
Zugriff auf 52.64. ~~~~~~~~~ (Ihre eigene IP-Adresse) Dann
http://IPアドレス/ Erfolg, wenn die Rails-App funktioniert
Es wird angezeigt, wenn es funktioniert! !!
Recommended Posts