Das Erstellen eines Portfolios aus einem Zustand, in dem ich keine Kenntnisse über AWS hatte, die persönliche Bereitstellung in AWS und die automatische Bereitstellung von CircleCI waren am schwierigsten. Daher ein Memorandum. Ich werde von nun an ein Portfolio erstellen. Für diejenigen, die AWS von nun an verwenden Ich dachte, es wäre schön, wenn es einen Artikel gäbe.
Eine Übersicht über das von mir erstellte Portfolio [AWS? Docker?] Fassen Sie die erforderlichen Kenntnisse in Ihrem Portfolio auf leicht verständliche Weise zusammen. [Terraform? CircleCI?]
Der Vorgänger dieses Artikels ist [Teil 1] Testen / Bereitstellen eines mit Rails + Nuxt + MySQL + Docker mit ECS / ECR / CircleCI erstellten WEB-Dienstes und Konvertieren in Terraform
Ich würde mich freuen, wenn Sie einen Blick darauf werfen könnten.
Erstens: [Teil 1] Automatische Bereitstellung und Terraformierung von WEB-Diensten, die mit Rails + Nuxt + MySQL + Docker mit ECS / ECR / CircleCI erstellt wurden 2. Dieser Artikel Drittens: [Teil 2] Stellen Sie den mit Rails + Nuxt + MySQL + Docker erstellten WEB-Dienst automatisch mit ECS / ECR / CircleCI bereit und machen Sie ihn terraform
Was Sie mit diesem Artikel tun können, wird normalerweise über die kostenlose AWS-Stufe hinaus ** bezahlt **. Da Sie eine Domain mit Ihrem name.com erhalten, kostet dies auch ** Geld. ** ** ** Bitte lesen Sie nur diejenigen, die denken, dass es sich um eine Studiengebühr handelt und diese aufteilen kann. Vorerst möchte ich einen lose gekoppelten Webdienst mit ECS und ECR veröffentlichen! Für diejenigen, die sagen.
Zunächst erstellen wir ein Netzwerk auf dem AWS-Bildschirm. Lassen Sie uns begeistert sein!
Der CIDR-Block ist eine Abkürzung für Classless Inter-Domain Routing. Eine der Notationsmethoden für die IP-Adresse. Einfach gesagt, es ist die Palette der VPCs.
Hier ist es übrigens ein Display wie / 16
.
In der CIDR-Notation werden Notationen wie "/ 16", "/ 24" und "32" verwendet.
/ 16
kann bis zum dritten Oktett angeben.
Zum Beispiel die "0.0" von 10.20.0.0
Sie können diesen Teil angeben.
/ 24
kann bis zum 4. Oktett angeben.
Zum Beispiel die letzte "0" von 10.20.0.0
Sie können diesen Teil angeben.
/ 32
kann eine bestimmte IP-Adresse angeben.
Wenn Sie eine VPC erstellen, müssen Sie eine IP im Subnetz oder in AZ sichern, und die Änderung funktioniert nicht Geben Sie in vielen Fällen "/ 16" an, um viele verfügbare IPs zu sichern.
Hier verwenden wir AZ ** ap-nordöstlich-1a und ap-nordöstlich-1c **. Der Grund für die Verwendung der beiden AZs ist, dass wir ALB später verwenden werden.
Erstellen Sie das folgende Subnetz unter U-Boot> Unterabschnitt erstellen.
name | CIDR-Block | Region/AZ |
---|---|---|
qiita-sample-front-subnet-1a | 10.20.1.0/24 | ap-northeast-1a |
qiita-sample-front-subnet-1c | 10.20.2.0/24 | ap-northeast-1c |
qiita-sample-back-subnet-1a | 10.20.3.0/24 | ap-northeast-1a |
qiita-sample-back-subnet-1c | 10.20.4.0/24 | ap-northeast-1c |
qiita-sample-rds-subnet-1a | 10.20.5.0/24 | ap-northeast-1a |
qiita-sample-rds-subnet-1c | 10.20.6.0/24 | ap-northeast-1c |
Erstellen Sie die folgende Routentabelle über Routentabelle> Routentabelle erstellen.
name |
---|
qiita-sample-front-route-table |
qiita-sample-back-route-table |
qiita-sample-rds-route-table |
Erstellen Sie das folgende Internet-Gateway über Internet-Gateway> Internet-Gateway erstellen.
Assoziieren Sie VPC und IGW.
name |
---|
qiita-sample-igw |
--Wählen Sie die Registerkarte Bearbeiten der Routentabelle und ordnen Sie das zuvor erstellte IGW 0.0.0.0 für die andere Routentabelle als RDS zu. --Wählen Sie die Registerkarte U-Boot-Zuordnung und ordnen Sie sie wie in der folgenden Tabelle gezeigt zu
Subzone | Routentabelle |
---|---|
qiita-sample-front-subnet-1a | qiita-sample-front-route-table |
qiita-sample-front-subnet-1c | qiita-sample-front-route-table |
qiita-sample-back-subnet-1a | qiita-sample-back-route-table |
qiita-sample-back-subnet-1c | qiita-sample-back-route-table |
qiita-sample-rds-subnet-1a | qiita-sample-rds-route-table |
qiita-sample-rds-subnet-1c | qiita-sample-rds-route-table |
Erstellen Sie eine Sicherheitsgruppe in der folgenden Tabelle
Name der Sicherheitsgruppe | Art | Protokoll | Portbereich | Quelle |
---|---|---|---|---|
qiita-sample-front-sg | HTTP | TCP | 80 | 0.0.0.0/0 |
Das gleiche wie oben | SSH | TCP | 22 | Deine eigene IP |
Das gleiche wie oben | HTTPS | TCP | 443 | 0.0.0.0/0 |
Das gleiche wie oben | Benutzerdefiniert | TCP | 3000 | 0.0.0.0/0 |
qiita-sample-back-sg | Benutzerdefiniert | TCP | 3000 | 0.0.0.0/0 |
Das gleiche wie oben | HTTPS | TCP | 443 | 0.0.0.0/0 |
qiita-sample-rds-sg | MYSQL/Aurora | TCP | 3306 | qiita-sample-back-sg |
Dies ist das Ende des Netzwerks.
Holen Sie sich die Domain von Name.com. Bitte geben Sie die Domain an, die Ihnen gefällt (vorzugsweise 1 Yen) und die auf diesen Artikel verweist.
Informationen zum Abrufen einer Domain mit Ihrem name.com finden Sie unter [Abrufen einer Domain] Abrufen einer Domain mit Ihrem name.com und aws.
** * Deaktivieren Sie die automatische Domain-Update-Einstellung! (Es kostet jedes Jahr Geld) **
Dieses Mal habe ich in meiner Umgebung die folgenden Domänen erhalten.
Domainname | Rolle |
---|---|
qiita-sample.work | front |
qiita-sample-api.work | back |
Erstellen Sie eine Hostzone aus Route53.
Kopieren Sie aus den Details der Hostzone den ** Wert / das Verkehrsroutingziel ** des NS-Datensatzes.
Das Nachdenken wird einige Zeit dauern. (Es kann bis zu 1 Tag dauern)
dig qiita-sample.work(Erworbene Domain) +short NS
Wird vom Terminal eingegeben und wenn der erfolgreich registrierte NS-Datensatz angezeigt wird, wird er angezeigt.
Fordern Sie ein Zertifikat bei ACM an. Wählen Sie Öffentliches Zertifikat anfordern, um ein Zertifikat anzufordern.
Domainname |
---|
qiita-sample.work |
*.qiita-sample.work |
Geben Sie den obigen Domainnamen ein und wählen Sie DNS-Validierung. Machen Sie dasselbe für qiita-sample-api.work.
Anschließend werden Sie zum Überprüfungsbildschirm weitergeleitet, auf dem Sie ** einen Datensatz mit Route53 erstellen **. (Erstellen Sie Datensätze in allen oben genannten Domänen.) Nach einer Weile steht die Überprüfung noch aus und der Status wird veröffentlicht. Wenn die Überprüfung längere Zeit ansteht, ist es möglich, dass sich die Einstellungen des NS-Servers verzögern. Lassen Sie uns mit dem Befehl dig überprüfen.
Das Einrichten von Route53 und des Domain Name Servers dauert einige Zeit. Erstellen Sie daher hier schnell RDS.
Erstellen Sie RDS, indem Sie RDS> Datenbank erstellen auswählen und dabei die folgenden Einstellungen beachten.
Aufbau | Bemerkungen | |
---|---|---|
Motortyp | MySQL | |
Ausführung | 5.7.30 | Diesmal 5.7 |
Vorlage | Entwicklung von/Prüfung | Free Tier ist in Ordnung, aber diesmal zum Lernen |
DB-Instanzkennung | qiita-sample-rds | Alles ist ok |
Hauptbenutzername | ** | Alles ist ok |
Master Passwort | ** | Alles ist in Ordnung ・ Lassen Sie es nicht auslaufen |
Informationen zur DB-Instanzklasse | db.t2.micro | Ich werde es am billigsten behalten |
Speichertyp | Allzweck-SSD | |
Speicherzuordnung | 20 | 20 ist das kleinste |
Virtual Private Cloud (VPC) | Die VPC habe ich früher gemacht | |
Unterabschnittsgruppe | 先ほど作ったUnterabschnittsgruppe | |
Bestehende VPC-Sicherheitsgruppe | Die zuvor erstellte Sicherheitsgruppe | |
Datenbankauthentifizierung | Passwortauthentifizierung | |
Erster Datenbankname | production | |
DB-Parametergruppe | default | Setzen Sie diesmal den Standardwert. (Du kannst es selbst machen!) |
Optionsgruppe | default | Setzen Sie diesmal den Standardwert. (Du kannst es selbst machen!) |
Nach einer Weile ist es verfügbar, und die RDS-Erstellung ist abgeschlossen.
yml:./back/config/database.yml
production:
<<: *default
host: <%= Rails.application.credentials.rds[:host] %>
database: <%= Rails.application.credentials.rds[:database] %>
username: <%= Rails.application.credentials.rds[:username] %>
password: <%= Rails.application.credentials.rds[:password] %>
./
docker-compose run -e EDITOR="vi" back rails credentials:edit
Dann erscheint der vim-Bildschirm. Geben Sie die folgenden Einstellungen ein.
rds:
host: {Endpunkt}
database: {Datenbankname (früh erstellt)}
username: {Benutzernamen festlegen}
password: {Passwort festlegen}
Erstellen wir einen Load Balancer über EC2> Create Load Balancer.
front
back Registrieren Sie die zuvor erstellte VPC und das Subnetz in der Verfügbarkeitszone.
Wählen Sie das zuvor erstellte Zertifikat aus. Wenn Sie noch nicht zertifiziert wurden, warten Sie eine Minute.
Bitte hängen Sie die zuvor erstellte Sicherheitsgruppe an.
Erstellen Sie eine neue Zielgruppe. Diesmal vorne, um im von ECS generierten EC2 im ** Host-Modus ** zu starten Setzen Sie das Ziel auf die Instanz und akzeptieren Sie den Port auf 3000. Im Hintergrund ist das Ziel IP, da es in der Instanz von ECS im ** awsvpc-Modus ** im Container startet. Dies bezieht sich auf die private IP des Containers.
front
back
Wie wir später sehen werden, keine Sorge, das Ziel wird automatisch ausgewählt, wenn der ECS-Dienst gestartet wird. Lassen Sie uns einen Road Balancer erstellen, wie er ist!
Fügen Sie unter Route53> Hostzone einen Datensatz hinzu und stellen Sie ihn wie folgt ein. Bitte bearbeiten Sie Vorder- und Rückseite auf die gleiche Weise.
js:./front/plugins/axios.js
import axios from "axios"
export default axios.create({
//baseURL: "http://localhost:3000"
baseURL: "https://www.qiita-sample-api.work"
})
** * Lass uns aws cli zur Verfügung stellen! ** ** ** Installieren Sie AWS CLI Version 1 unter macOS AWS CLI installieren
Erstellen Sie ein Repository aus Amazon ECR. Bitte geben Sie den Repository-Namen ein und erstellen Sie ihn so wie er ist. Wählen Sie ein Repository aus und drücken Sie den Befehl push, um die Befehle anzuzeigen, die an das Repository gesendet werden sollen. Erstellen Sie ein Repository für Vorder- und Rückseite und führen Sie es in der lokalen Umgebung aus.
Wenn Sie diese Befehle ausführen, wird ein Image basierend auf der Docker-Datei im Verzeichnis erstellt. Es befindet sich in demselben Zustand wie beim Erstellen von Docker-Compose in der lokalen Umgebung. Laden Sie das hier erstellte und auf ECR übertragene Bild in ECS und starten Sie es.
Bitte beachten Sie, dass Sie vor der Ausführung überprüfen sollten, welches Repository Sie an ** vorne oder hinten verschieben möchten, und dann in das Verzeichnis wechseln sollten, in dem sich die Docker-Datei befindet. ** ** **
In ECS
Cluster> Dienste> Aufgaben
Es ist die Korngröße geworden.
Ein Cluster ist ein logischer Rahmen, eine Box.
Der Dienst ähnelt der automatischen Skalierung + ALB, die im Cluster gestartet wird.
Verwalten Sie automatisch die Anzahl der Aufgaben und konfigurieren Sie die Netzwerkeinstellungen.
Stellen Sie sich eine Aufgabe als eine Einheit vor, die ein Docker-Image ausführt.
Der Dienst erstellt Aufgaben basierend auf der Aufgabendefinition. Der Taiyaki-Schimmel ist eine Dienstleistung, und der Taiyaki selbst ist wie eine Aufgabe. Der Cluster ist der Stand eines Taiyaki-Shops.
Diesmal habe ich mich für EC2 Linux + Networking entschieden
Wählen Sie für das Netzwerk die zuvor erstellte VPC / das Subnetz (Front) aus. Wählen Sie außerdem Aktiviert für Automatische Zuweisung öffentlicher IP-Adressen. Stellen Sie das Schlüsselpaar so ein, dass Sie eine Verbindung mit ssh herstellen können.
Amazon EC2-Schlüsselpaare und Linux-Instanzen
Wenn die EC2-Instanz nach dem Erstellen des Clusters wie unten gezeigt gestartet wird, ist sie erfolgreich. Gute Sache Wenn EC2-Instanzen nicht gebunden sind, sind Sicherheitsgruppen und Routentabellen häufig das Problem.
Wählen Sie Neue Aufgabendefinition aus ECS erstellen
Wählen Sie EC2
front
Aufbau | Bemerkungen | |
---|---|---|
Name der Aufgabendefinition | qiita-sample-front | Alles ist ok |
Aufgabenrolle | Rollen, die zum Ausführen von ECS berechtigt sind | |
Netzwerkmodus | Gastgeber | |
Aufgabenausführungsrolle | Rollen, die zum Ausführen von ECS berechtigt sind | |
Aufgabenspeicher(MiB) | 700 | Passen Sie in die Größe der Instanz |
Task-CPU(Einheit) | 256 | Passen Sie in die Größe der Instanz |
back
Aufbau | Bemerkungen | |
---|---|---|
Name der Aufgabendefinition | qiita-sample-back | Alles ist ok |
Aufgabenrolle | Rollen, die zum Ausführen von ECS berechtigt sind | |
Netzwerkmodus | aws-vpc | |
Aufgabenausführungsrolle | Rollen, die zum Ausführen von ECS berechtigt sind | |
Aufgabenspeicher(MiB) | 400 | Passen Sie in die Größe der Instanz |
Task-CPU(Einheit) | 128 | Passen Sie in die Größe der Instanz |
Erstellen Sie einen Dienst aus dem Dienst-Tag des Clusters.
front
Aufbau | Bemerkungen | |
---|---|---|
Starttyp | EC2 | |
Aufgabendefinition | Was ich früher erstellt habe | |
Dienstname | qiita-front | Alles ist ok |
Servicetyp | REPLICA | |
Anzahl der Aufgaben | 1 | 1~Alles oben ist in Ordnung |
Wählen Sie für den Lastausgleich Application Load Balancer aus und wählen Sie den zuvor erstellten ALB und das Ziel aus.
back
Aufbau | Bemerkungen | |
---|---|---|
Starttyp | EC2 | |
Aufgabendefinition | Was ich früher erstellt habe | |
Dienstname | qiita-back | Alles ist ok |
Servicetyp | REPLICA | |
Anzahl der Aufgaben | 1 | 1~Alles oben ist in Ordnung |
Wählen Sie in der Netzwerkkonfiguration die zuvor erstellte Sicherheitsgruppe für VPC und Back-Subnetz aus. Wählen Sie für den Lastausgleich Application Load Balancer aus und wählen Sie den zuvor erstellten ALB und das Ziel aus.
Einmal wie oben erstellt, sollte eine Aufgabe automatisch hinzugefügt werden. Wenn es wie folgt aussieht, ist es in Ordnung! Der Container sollte innerhalb von EC2 sicher vom Image aus gestartet worden sein.
db:migrate Sie können eine Aufgabendefinition erstellen und die Aufgabe ausführen, aber dieses Mal werde ich eine SSH-Verbindung zur EC2-Instanz herstellen, dann in den Docker-Container gehen und "Rails DB: Migrate" versuchen. Ursprünglich musste ich eine Datenbank erstellen (db: create), aber dieses Mal habe ich RDS zum Zeitpunkt der Erstellung als Produktion in der ursprünglichen Datenbank festgelegt. Dies ist nicht erforderlich, da es bereits erstellt wurde.
[Pem-Datei DL](https://qiita.com/Shogo1222/items/dcbc1e50f6fc83f48b44#ecs%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF% E3% 83% BC% E3% 81% AE% E4% BD% 9C% E6% 88% 90)
ssh -i {PEM-Dateipfad} ec2-user@{Öffentliche IP der Instanz}
__| __| __|
_| ( \__ \ Amazon Linux 2 (ECS Optimized)
____|\___|____/
For documentation, visit http://aws.amazon.com/documentation/ecs
In einer EC2-Instanz
docker ps
Zeigt den aktuell ausgeführten Container an. Geben Sie die CONTAINER-ID der Container-Laufschienen an und geben Sie den folgenden Befehl ein, um sie in den Docker-Container einzufügen.
In einer EC2-Instanz
docker exec -it {CONTAINER ID} sh
Geben Sie hier die Umgebung und db an: migrate!
Im Docker-Container
rails db:migrate RAILS_ENV=production
Danke für deine harte Arbeit!
ttps: // www. {Von mir selbst festgelegte Frontdomäne} / users Es ist in Ordnung, wenn Sie sowohl auf den Benutzer als auch auf den lokalen Benutzer zugreifen und ihn registrieren können (siehe Abbildung unten). ttps: // www. {Von mir festgelegte Back-Domain} / users Es ist in Ordnung, wenn Sie darauf zugreifen und der JSON des registrierten Benutzers zurückgegeben wird.
Nachdem Sie im letzten, CircleCI, auf Master geklickt haben, aktualisieren wir die Aufgabendefinition automatisch, aktualisieren den ECS-Dienst und ermöglichen das Aktualisieren der Aufgabe.
Schieben Sie von lokal zu Github
→ Starten Sie CircleCI über Github
→ Führen Sie Docker Build auf CircleCI aus
→ Schieben Sie das Bild auf CircleCI auf ECR
→ ECS-Dienst aktualisieren ...
Es wird sein.
Der Unterschied zum lokalen Gebäude besteht in der Anwesenheit oder Abwesenheit von Umgebungsvariablen.
Der auf CircleCI ** ausgeführte Build verweist auf den Quellcode im Git-Repository ** und wird auch ** in einer virtuellen Maschine ** ausgeführt. Wenn die zum Ausführen von Rails erforderlichen Umgebungsvariablen nicht im Git-Repository vorhanden sind, können die Umgebungsvariablen nicht referenziert werden und schlagen fehl. Mit CircleCI können Sie jedoch Umgebungsvariablen auf der virtuellen Maschine festlegen.
Project Settings>Environment Variables
AWS_ACCESS_KEY_ID //AWS-Zugriffsschlüssel
AWS_SECRET_ACCESS_KEY //Geheimer AWS-Zugriffsschlüssel
AWS_ACCOUNT_ID //Siehe URL unten
AWS_ECR_ACCOUNT_URL //Beispiel für eine ECR-URL:{Konto-ID}.dkr.ecr.{Region}.amazonaws.com
AWS_REGION //Region
RAILS_MASTER_KEY // ./back/config/Meister unten.Wert des Schlüssels
AWS_RESOURCE_NAME_PREFIX //Präfix des von mir erstellten Dienstes (diesmal Qiita)-sample)
CLUSTER_NAME //Der Name des zuvor erstellten Clusters
REPO_NAME_FRONT //ECR-Repository-Name der Front
REPO_NAME_BACK //ECR-Repository-Name von back
FAMILY_NAME_FRONT //Der Name der Aufgabendefinition von front
FAMILY_NAME_BACK //Der Name der Aufgabendefinition von back
SERVICE_NAME_FRONT //Der Name des zuvor erstellten Front-ECS-Dienstes
SERVICE_NAME_BACK //Der Name des zuvor erstellten Front-ECS-Dienstes
yml:./front/.circleci/config.yml
version: 2.1
orbs:
aws-ecr: circleci/[email protected]
aws-ecs: circleci/[email protected]
#Job zum Ausführen
jobs:
#Job zu bauen
build:
machine:
image: circleci/classic:edge
steps:
- checkout
- run:
name: docker-compose build
command: docker-compose build
#Job zu testen
test:
machine:
image: circleci/classic:edge
steps:
- checkout
- run:
name: docker-compose up -d
command: docker-compose up -d
- run: sleep 30
- run:
name: docker-compose run back rails db:create RAILS_ENV=test
command: docker-compose run back rails db:create RAILS_ENV=test
- run:
name: docker-compose run back rails db:migrate RAILS_ENV=test
command: docker-compose run back rails db:migrate RAILS_ENV=test
- run:
name: docker-compose run back bundle exec rspec spec
command: docker-compose run back bundle exec rspec spec
- run:
name: docker-compose down
command: docker-compose down
#Workflow zur Steuerung der Bestellung
workflows:
build_and_test_and_deploy:
jobs:
- build
- test:
requires:
- build
- aws-ecr/build-and-push-image:
name: 'build-and-push-back'
account-url: AWS_ECR_ACCOUNT_URL
region: AWS_REGION
repo: ${REPO_NAME_BACK}
tag: "${CIRCLE_SHA1}"
path: './back'
dockerfile: back/Dockerfile.pro
extra-build-args: '--build-arg RAILS_MASTER_KEY=$RAILS_MASTER_KEY'
requires:
- test
filters:
branches:
only:
- master
- aws-ecr/build-and-push-image:
name: 'build-and-push-front'
account-url: AWS_ECR_ACCOUNT_URL
region: AWS_REGION
repo: ${REPO_NAME_FRONT}
tag: "${CIRCLE_SHA1}"
path: './front'
dockerfile: front/Dockerfile.pro
requires:
- test
filters:
branches:
only:
- master
- aws-ecs/deploy-service-update:
family: ${FAMILY_NAME_BACK}
service-name: ${SERVICE_NAME_BACK}
cluster-name: ${CLUSTER_NAME}
#"container="Bitte beachten Sie, dass dies der in der Aufgabendefinition festgelegte Containername ist.
container-image-name-updates: 'container=${AWS_RESOURCE_NAME_PREFIX}-back,image-and-tag=${AWS_ECR_ACCOUNT_URL}/${REPO_NAME_BACK}:${CIRCLE_SHA1}'
requires:
- build-and-push-back
filters:
branches:
only:
- master
- aws-ecs/deploy-service-update:
family: ${FAMILY_NAME_FRONT}
service-name: ${SERVICE_NAME_FRONT}
cluster-name: ${CLUSTER_NAME}
#"container="Bitte beachten Sie, dass dies der in der Aufgabendefinition festgelegte Containername ist.
container-image-name-updates: 'container=${AWS_RESOURCE_NAME_PREFIX}-front,image-and-tag=${AWS_ECR_ACCOUNT_URL}/${REPO_NAME_FRONT}:${CIRCLE_SHA1}'
requires:
- build-and-push-front
filters:
branches:
only:
- master
dockerfile:./back.Dockerfile.pro
#Angeben eines Bildes
FROM ruby:2.6.3-alpine3.10
#Laden Sie die erforderlichen Pakete herunter
ENV RUNTIME_PACKAGES="linux-headers libxml2-dev make gcc libc-dev nodejs tzdata mysql-dev mysql-client yarn" \
DEV_PACKAGES="build-base curl-dev" \
HOME="/app" \
LANG=C.UTF-8 \
TZ=Asia/Tokyo
#Wechseln Sie in das Arbeitsverzeichnis
WORKDIR ${HOME}
#Kopieren Sie die erforderlichen Dateien vom Host (Dateien auf Ihrem Computer) nach Docker
ADD Gemfile ${HOME}/Gemfile
ADD Gemfile.lock ${HOME}/Gemfile.lock
RUN apk update && \
apk upgrade && \
apk add --update --no-cache ${RUNTIME_PACKAGES} && \
apk add --update --virtual build-dependencies --no-cache ${DEV_PACKAGES} && \
bundle install -j4 && \
apk del build-dependencies && \
rm -rf /usr/local/bundle/cache/* \
/usr/local/share/.cache/* \
/var/cache/* \
/tmp/* \
/usr/lib/mysqld* \
/usr/bin/mysql*
#Kopieren Sie die erforderlichen Dateien vom Host (Dateien auf Ihrem Computer) nach Docker
ADD . ${HOME}
#Öffnen Sie den Port 3000
EXPOSE 3000
#Befehl ausführen
CMD ["bundle", "exec", "rails", "s", "puma", "-b", "0.0.0.0", "-p", "3000", "-e", "production"]
dockerfile:./front/Dockerfile.pro
FROM node:12.5.0-alpine
ENV HOME="/app" \
LANG=C.UTF-8 \
TZ=Asia/Tokyo
ENV HOST 0.0.0.0
WORKDIR ${HOME}
COPY package.json .
COPY . .
RUN apk update && \
apk upgrade && \
npm install -g n && \
yarn install &&\
rm -rf /var/cache/apk/*
RUN yarn run build
EXPOSE 3000
CMD ["yarn", "start"]
yml:./docker-compose.yml
version: "3"
services:
db:
image: mysql:5.7
env_file:
- ./back/environments/db.env
restart: always
volumes:
- db-data:/var/lib/mysql:cached
back:
build: back/
# rm -f tmp/pids/server.Nützlich, wenn Sie den Rails-Server nicht mit pid löschen können
command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
env_file:
- ./back/environments/db.env
environment: #hinzufügen
RAILS_MASTER_KEY: ${RAILS_MASTER_KEY}
volumes:
- ./back:/app:cached
depends_on:
- db
#Host-Computer-Port: Port in Docker
ports:
- 3000:3000
front:
build: front/
command: yarn run dev
volumes:
- ./front:/app:cached
ports:
#Host-Computer-Port: Port in Docker
- 8080:3000
depends_on:
- back
volumes:
public-data:
tmp-data:
log-data:
db-data:
Danke für deine harte Arbeit! Wie unten gezeigt, wird die Bereitstellung erfolgreich abgeschlossen, wenn alle Schritte erfolgreich sind.
Diejenigen, die mehr über VPC, AWS-Netzwerk usw. erfahren möchten. AWS-Kurs mit Video-VPC gelernt [Abschnitt 1] Region, Verfügbarkeitszone, Subzone
Diejenigen, die mehr über das Docker-Netzwerk und ECS erfahren möchten Docker-Kurs, um von nun an aufzuholen! Zielen Sie mit AWS ECS und Fargate auf den Container Master! ~ Serie 1 ~
Es ist eine sehr günstige Zeit, um aus Videos zu lernen ... Ich habe es ungefähr 30 Mal wiederholt.
Danke für deine harte Arbeit. Jetzt können Sie Nuxt und Rails mit ECS / ECR / CircleCI für die Produktion bereitstellen. Dies ist nur ein Beispiel, und ich denke, es gibt andere gute Konfigurationen. Sobald Sie es jedoch erstellt und debuggt haben, wissen Sie, wie es geht. (Ich habe noch mehr Möglicherweise enthält dieser Artikel Tippfehler oder Fehler. In einem solchen Fall würde ich es begrüßen, wenn Sie Masakari sanft werfen könnten.
Das nächste Mal wünschte ich, ich könnte auf Terraform schreiben.
Recommended Posts