Hallo allerseits, dies ist Qiitas erster Beitrag! Ich denke, es stimmt etwas nicht, aber bitte sag es mir zu diesem Zeitpunkt (lacht) Dieses Mal stellen wir ein Rails-Portfolio bereit, das bereits mit Aws und Docker erstellt wurde. Im aktuellen Status habe ich ein Portfolio mit Rails und Aws erstellt, aber ich denke, es ist schwierig, eine Umgebung zu erstellen, und ich möchte das Portfolio mit Docker bereitstellen, wodurch die Verwaltung der Umgebung mit Code vereinfacht wird.
Das Konfigurationsdiagramm zum Zeitpunkt der Bereitstellung lautet wie folgt. Um es auf sehr einfache Weise zu erklären: Wenn eine Kommunikationsanforderung vom Client kommt, geht sie an Nginx und kommuniziert mit Puma, wenn eine dynamische Verarbeitung erforderlich ist. Zu diesem Zeitpunkt kommunizieren auch Puma und MySQL. Dieses Mal möchte ich diese Konfiguration mit Docker erstellen.
Bei der Bereitstellung dieses Mal verwenden wir EC2 und RDS of Aws. Wir werden die Umgebung mit Docker erstellen, aber unter dem Gesichtspunkt der Datenpersistenz werden wir diesmal RDS Mysql anstelle von Docker verwenden. Das Folgende sind die Vorbereitungen und Arbeiten, die für die Arbeit erforderlich sind.
Erstellen Sie zunächst eine Docker-Datei. Hier schreiben wir den Code zum Erstellen der Umgebung um Ruby mithilfe von Dockerfile.
FROM ruby:2.5.7
RUN apt-get update -qq && \
apt-get install -y build-essential \
libpq-dev \
nodejs \
vim
RUN mkdir /App Name
WORKDIR /App Name
ADD Gemfile /App Name/Gemfile
ADD Gemfile.lock /App Name/Gemfile.lock
RUN gem install bundler
RUN bundle install
ADD . /App Name
RUN mkdir -p tmp/sockets
RUN mkdir -p tmp/pids
Erstellen Sie als Nächstes eine Docker-Komposition. Hier verwalten wir den Docker-Container und geben das zu tarnende Teil an!
Docker-compose.yml
version: '3'
services:
app:
build: .
command: bundle exec puma -C config/puma.rb -e production
volumes:
- .:/App Name:cached
- public-data:/App Name/public
- tmp-data:/App Name/tmp
- log-data:/App Name/log
web:
build:
context: containers/nginx
volumes:
- public-data:/App Name/public
- tmp-data:/App Name/tmp
ports:
- 80:80
volumes:
public-data:
tmp-data:
log-data:
Erstellen Sie als Nächstes die folgende Datei. Hier richten wir den Nginx-Container ein.
FROM nginx:1.15.8
RUN rm -f /etc/nginx/conf.d/*
ADD nginx.conf /etc/nginx/conf.d/App Name.conf
CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
containers/nginx/nginx.conf
upstream FashionInformation_app {
server unix:///App Name/tmp/sockets/puma.sock;
}
server {
listen 8000;
server_Name Domain Name;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /App Name/public;
client_max_body_size 100m;
error_page 404 /404.html;
error_page 505 502 503 504 /500.html;
try_files $uri/index.html $uri @App Name;
keepalive_timeout 5;
location @App Name{
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://App Name;
}
}
Klone Git auf EC2, wenn du hier bist!
ec2-user@ip-xxx-xx-xx-xxx ~]$Git-Klon-GitHub-Repository-URL
ec2-user@ip-xxx-xx-xx-xxx]$ cd myapp
[ec2-user@ip-xxx-xx-xx-xxx myapp]$ docker-compose build
[ec2-user@ip-xxx-xx-xx-xxx myapp]$ docker-compose run app rails assets:precompile RAILS_ENV=production
[ec2-user@ip-xxx-xx-xx-xxx myapp]$ docker-compose up -d
[ec2-user@ip-xxx-xx-xx-xxx myapp]$ docker-compose exec app rails db:create db:migrate RAILS_ENV=production
Wenn Sie auf die öffentliche IP zugreifen und diese korrekt angezeigt wird, sind Sie erfolgreich!
Recommended Posts