The Codest
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Odvětví
    • Fintech a bankovnictví
    • E-commerce
    • Adtech
    • Healthtech
    • Výroba
    • Logistika
    • Automobilový průmysl
    • IOT
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
Šipka zpět ZPĚT
2021-11-17
Vývoj softwaru

Nasazení aplikace Rails pomocí služby Amazon ECS

The Codest

Marcin Doliwa

Software Engineer

V tomto návodu bych vám rád ukázal, jak nasadit ukázkovou aplikaci Rails pomocí služby Amazon Elastic Container Service (ECS).

Vytvoříme ji spuštěním kolejnice new sample-rails-app, a poté vygenerovat základní akci řadiče rails g kontrolér Welcome index a nastavení tras do kořenové cesty jako `kořenové to: welcome#index".

Naším cílem je, aby tato uvítací stránka byla nasazena pomocí systému ECS.

Vytvoření úložiště pomocí služby Amazon Elastic Container Registry (ECR)

Amazon ECR je registr kontejnerů. Budeme jej používat k ukládání obrazů našich aplikací a jejich stahování z něj, aby běžely na ECS.

Přejděte na svůj AWS panel, hledejte Elastický kontejner
Registr
a klikněte na Začněte. Zobrazí se následující obrazovka:

úložiště se službou Amazon Elastic Container Registry

Vytvoříme soukromé úložiště a pojmenujeme ho sample-rails-app.

Úložiště tam je, ale je prázdné. Chceme, aby obsahoval obraz naší aplikace. To je další krok.

# vyhodí chybu, pokud byl soubor Gemfile změněn od okamžiku Gemfile.lock

RUN bundle config --global frozen 1

WORKDIR /app

COPY Gemfile Gemfile.lock ./

Spustit instalaci balíčku

COPY .

CMD ["rails", "server", "-b", "0.0.0.0"]

Pak bychom měli vytvořit obraz a odeslat jej do úložiště ECR.

Ještě předtím si předkompilujme aktiva pomocí příkazu `rails assets:precompile`.

Nyní přejděte do vytvořeného úložiště. V horní části obrazovky se zobrazí položka Zobrazení příkazů push s podrobnými informacemi o tom, jak to provést.

V mém případě (Linux) jej spouštím pomocí těchto pokynů AWS:

aws ecr get-login-password --region eu-central-1 | docker login --username AWS --password-stdin 212516879399.dkr.ecr.eu-central-1.amazonaws.com

docker build -t sample-rails-app .

docker tag sample-rails-app:latest 212516879399.dkr.ecr.eu-central-1.amazonaws.com/sample-rails-app:latest

docker push 212516879399.dkr.ecr.eu-central-1.amazonaws.com/sample-rails-app:latest

Ujistěte se, že uživatel má k této operaci oprávnění. K uživateli jsem přidal zásadu AmazonElasticContainerRegistryPowerUser, která vypadá takto:

{
    "Verze": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ecr:GetRegistryPolicy",
                "ecr:DescribeRegistry",
                "ecr:GetAuthorizationToken",
                "ecr:DeleteRegistryPolicy",
                "ecr:PutRegistryPolicy",
                "ecr:PutReplicationConfiguration"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "ecr:*",
            "Resource": "arn:aws:ecr:*:212516879399:repository/*"
        }
    ]
}

Máme připravený obraz dockeru.

Vytvoření nástroje pro vyrovnávání zatížení aplikací

Chci, aby se vnější svět mohl připojit pouze k mému zařízení pro vyrovnávání zatížení aplikací. Ten bude předávat provoz kontejnerům, které běží uvnitř našeho clusteru ECS.

Přejít na Služby EC2 -> Vyrovnávání zátěže -> Vyrovnávače zatížení, klikněte Vytvoření nástroje pro vyrovnávání zatížení, vyberte Vyrovnávač zatížení aplikací a klikněte na Vytvořit tlačítko.

Nastavte jeho název na sample-rails-app-alb, použijte výchozí síť VPC a vyberte všechny její podsítě.

Zbývá nám Skupiny zabezpečení a Posluchači a směrování sekce.

Skupiny zabezpečení

Vytvoříme novou skupinu zabezpečení pro náš vyrovnávač zatížení. Funguje jako firewall; nastavíme pravidla pro příchozí a odchozí provoz. Chceme přijímat příchozí provoz http (port TCP 80) a povolit veškerý odchozí provoz. 

Chcete-li to provést, klikněte na "Vytvoření nové skupiny zabezpečení" odkaz.

V části "Základní údaje", nastavte název a popis, ponechte výchozí VPC.

V mém případě - název: "sample-rails-app-alb-sg", popis: "http zvenčí, vše zevnitř"

Přidejte pravidlo příchozího příjmu s typem: HTTP a zdroj: Kdekoli-IPv4. Pravidla pro odchozí hovory ponechte v původním znění.

Klikněte na vytvořit skupinu zabezpečení, pak se vraťte na kartu, kde jste vytvářeli nástroj Application Load Balancer, obnovte skupiny zabezpečení a přidejte tu, kterou jsme právě vytvořili, a odstraňte výchozí.

Posluchači a směrování

V této části definujeme, kam má vyrovnávač zátěže předávat přenosy. Ponechte Posluchač Protokol a Přístav jako HTTP a 80, protože to je přesně to, co chceme, a klikněte na "Vytvoření cílové skupiny" odkaz.

Nastavte název na "sample-rails-app-alb-tg". Jedinou změnou je číslo portu. Budeme ho předávat na port 3000, protože to je port pro naši aplikaci Rails. Další krok ignorujte (Registrované cíle) a vytvořte cílovou skupinu.

Nyní se vraťte na kartu, kde jsme vytvářeli nástroj Vyrovnávání zatížení aplikací, obnovte cílovou skupinu a vyberte tu, kterou jsme právě vytvořili.

Vyrovnávač aplikačního zatížení máme připravený, nyní si pohrajeme s ECS.

Vytvoření clusteru ECS

Setkáte se s mnoha děsivými termíny - cluster, úkoly, definice úkolů, služby. Pro zjednodušení si cluster představte jako skupinu serverů (instancí EC2). Na každé z nich spouštíme úlohy, což je jen skupina společně běžících kontejnerů. Definice úloh popisuje, které kontejnery jsou v dané skupině a jaké prostředky jim chceme přidělit (paměť, cpu). Služby tyto úlohy hlídají, aby v našem clusteru vždy běžel správný počet zdravých úloh.

S tímto vědomím vytvořme náš cluster.

Přejděte na stránku ECS a klikněte na položku Klastry odkaz a Vytvořit cluster tlačítko. Zvolte možnost "EC2 + Linux Networking" jeden a klikněte Další krok. 

Nastavte název clusteru na "sample-rails-app-cluster". Vyberte typ instance EC2, já jsem si vybral t2-micro, protože je k dispozici v rámci tarifu Free Tier. Počet instancí ponechte jako 1. 

V části Sítě použijte výchozí síť VPC a vyberte všechny její podsítě. Klikněte na tlačítko create, chvíli počkejte a voilá, máme vytvořený nový cluster ECS.

Definice úkolu

Klikněte na Definice úkolů odkaz, pak Vytvoření nové definice úlohy tlačítko. Vyberte EC2 a klikněte na možnost Další krok. Aplikace, kterou budeme spouštět, je velmi jednoduchá, takže zde potřebujeme jen několik možností. 

Sada Definice úkolu název na "sample-rails-app", pak přejděte přímo na Definice kontejnerů a klikněte na tlačítko "Přidat kontejner". Pojmenujte kontejner jako "sample-rails-app" a nastavte umístění obrázku ve formátu "repository-url/image:tag". Na nové kartě prohlížeče přejděte do ECR a zkopírujte URI obrázku. V mém případě to bylo: "212516879399.dkr.ecr.eu-central-1.amazonaws.com/sample-rails-app:latest".

Nastavte limit paměti na doporučených 300-500 MB. Nyní přichází na řadu to nejsložitější - mapování portů.

Naše aplikace běží v kontejneru na portu 3000. Jako port kontejneru tedy zadejte 3000. Jako port hostitele zadáme 0, což v podstatě znamená, že se vybere náhodný port. Naštěstí náš nástroj Application Load Balancer bude toto mapování portů znát a bude schopen správně směrovat provoz. Na této jediné instanci můžeme dokonce spustit více úloh. 

Přidání proměnné prostředí RAILS_ENV a nastavte ji na výroba.

Nyní klikněte na Přidat přidat definici kontejneru a kliknout na Vytvořit dokončit nastavení Definice úlohy.

Služba

Máme náš cluster, vyrovnávač zátěže a definici úlohy. Nyní musíme tyto úlohy nějak spustit uvnitř našeho clusteru. To je úkolem služeb. Přejděte do nově vytvořeného clusteru, vyberte položku Služby a klikněte na kartu Vytvořit tlačítko. 

Nastavte typ spuštění na EC2, přidejte název "sample-rails-app-service". Nastavte počet úloh na 1 a klikněte na tlačítko Další krok. Na této stránce vyberte přepínač Application Load Balancer a vyberte pro něj existující roli IAM. V části "Kontejner pro vyvažování zátěže" byste již měli mít zadaný správný kontejner "sample-rails-app:0:3000" a poté klikněte na tlačítko "Přidat k vyvažování zátěže".

Pro "Production listener port" vyberte 80:HTTP; jako název cílové skupiny použijte ten, který jsme vytvořili dříve - "sample-rails-app-alb-tg" a klikněte na tlačítko Další krok. Zanechte Automatické škálování možnosti, klikněte na Další krok a Vytvořit službu.

Aktualizace skupiny zabezpečení ECS

Můžete přejít na stránku vytvořeného clusteru a zkontrolovat. Úkoly karty, měla by být spuštěna jedna úloha. Služba ji spustila. Nyní přejděte na stránku služby EC2, klikněte na položku Load Balancers a podívejte se na podrobnosti našeho nástroje Application Load Balancer. Měli byste tam mít jeho název DNS. Zkopírujte jej a otevřete v prohlížeči. Měl by vás nasměrovat na naši aplikaci. Bohužel se nám zobrazí hlášení "504 časový limit brány" chyba. 

Problém je ve skupině zabezpečení našeho clusteru. Její příchozí pravidla nepovolují provoz přicházející z vyrovnávače zátěže. Chcete-li to napravit, vraťte se na panel EC2 a klikněte na tlačítko Skupiny zabezpečení odkaz. Během procesu vytváření clusteru byla vytvořena nová skupina. Její název by měl začínat "EC2ContainerService-sample-rails-app-cluster". Klikněte na něj a upravte pravidla příchozích hovorů. Protože chceme povolit jakýkoli provoz z našeho VPC, přejděte na panel Amazon VPC a zkontrolujte, jaký je váš IPv4 CIDR VPC. Nastavte typ pravidla na "Veškerý provoz" a zdroj na IPv4 CIDR. Uložte toto pravidlo a zkuste načíst název DNS balanceru. 

Snad to vidíte stejně jako já 🙂

Přečtěte si více

GraphQL Ruby. Jak je to s výkonem?

Kolejnice a další dopravní prostředky

Vývoj Rails pomocí TMUX, Vim, Fzf + Ripgrep

Související články

Ilustrace zdravotnické aplikace pro chytré telefony s ikonou srdce a rostoucím zdravotním grafem, označená logem The Codest, která představuje digitální zdraví a řešení HealthTech.
Vývoj softwaru

Softwarové vybavení pro zdravotnictví: a případy použití

Nástroje, na které se dnes zdravotnické organizace spoléhají, se v ničem nepodobají papírovým kartám z doby před desítkami let. zdravotnický software dnes podporuje zdravotnické systémy, péči o pacienty a moderní poskytování zdravotní péče v klinických a...

NEJKRÁSNĚJŠÍ
Abstraktní ilustrace klesajícího sloupcového grafu se stoupající šipkou a zlatou mincí symbolizující efektivitu nákladů nebo úspory. V levém horním rohu se zobrazuje logo The Codest se sloganem "In Code We Trust" na světle šedém pozadí.
Vývoj softwaru

Jak rozšířit tým vývojářů bez ztráty kvality produktu

Zvětšujete svůj vývojový tým? Zjistěte, jak růst, aniž byste museli obětovat kvalitu produktu. Tento průvodce se zabývá příznaky, že je čas na škálování, strukturou týmu, najímáním zaměstnanců, vedením a nástroji - a také tím, jak může The Codest...

NEJKRÁSNĚJŠÍ
Vývoj softwaru

Vytváření webových aplikací odolných vůči budoucnosti: postřehy týmu odborníků The Codest

Zjistěte, jak společnost The Codest vyniká při vytváření škálovatelných, interaktivních webových aplikací pomocí nejmodernějších technologií, které poskytují bezproblémové uživatelské prostředí na všech platformách. Zjistěte, jak naše odborné znalosti podporují digitální transformaci a obchodní...

NEJKRÁSNĚJŠÍ
Vývoj softwaru

10 nejlepších lotyšských společností zabývajících se vývojem softwaru

V našem nejnovějším článku se dozvíte o nejlepších lotyšských společnostech zabývajících se vývojem softwaru a jejich inovativních řešeních. Zjistěte, jak mohou tito technologičtí lídři pomoci pozvednout vaše podnikání.

thecodest
Podniková a škálovací řešení

Základy vývoje softwaru v jazyce Java: A Guide to Outsourcing Successfully

Prozkoumejte tuto základní příručku o úspěšném vývoji softwaru outsourcing Java, abyste zvýšili efektivitu, získali přístup k odborným znalostem a dosáhli úspěchu projektu s The Codest.

thecodest

Přihlaste se k odběru naší znalostní databáze a získejte aktuální informace o odborných znalostech z oblasti IT.

    O nás

    The Codest - Mezinárodní společnost zabývající se vývojem softwaru s technologickými centry v Polsku.

    Spojené království - ústředí

    • Kancelář 303B, 182-184 High Street North E6 2JA
      Londýn, Anglie

    Polsko - Místní technologická centra

    • Kancelářský park Fabryczna, Aleja
      Pokoju 18, 31-564 Krakov
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polsko

      The Codest

    • Home
    • O nás
    • Služby
    • Case Studies
    • Vědět jak
    • Kariéra
    • Slovník

      Služby

    • To Advisory
    • Vývoj softwaru
    • Vývoj backendu
    • Vývoj frontendů
    • Staff Augmentation
    • Vývojáři backendu
    • Cloudoví inženýři
    • Datoví inženýři
    • Další
    • Inženýři QA

      Zdroje

    • Fakta a mýty o spolupráci s externím partnerem pro vývoj softwaru
    • Z USA do Evropy: Proč se americké startupy rozhodly přesídlit do Evropy?
    • Srovnání technických vývojových center v zahraničí: Tech Offshore Evropa (Polsko), ASEAN (Filipíny), Eurasie (Turecko)
    • Jaké jsou hlavní výzvy CTO a CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Copyright © 2026 by The Codest. Všechna práva vyhrazena.

    cs_CZCzech
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech