Sådan installeres en Rails 5.2 PostgreSQL-app på AWS Elastic Beanstalk

Det er officielt, at bruge Heroku til alle mine Rails-projekter hidtil har forkælet mig råddent. Efter at have modtaget nogle AWS-kreditter takket være en pitchkonkurrence besluttede jeg at implementere mit seneste projekt på Elastic Beanstalk (AWS 'Heroku-konkurrent). Alt hvad jeg skal sige er, at jeg savner Heroku.

Ak, hvis du er i en lignende situation, her er trinvise instruktioner til installation af din Rails 5.2 / PostgreSQL-app på Elastic Beanstalk.

Installation af elastisk bønnestængel CLI

Vi bruger terminalen i denne vejledning. Lad os begynde med at installere "Elastic Beanstalk Command Line Interface." Sådan gør du det på macOS ved hjælp af Homebrew:

brew install awsebcli

Hvis du bruger en anden platform, skal googling "hvordan man installerer awsebcli på [din platform]" føre dig i den rigtige retning.

Initialisering af elastisk bønnestængel

Jeg antager, at du allerede har en Amazon Web Services-konto, hvis ikke fortsæt og opret en. Gå nu ind i projektmappen og initialiser Elastic Beanstalk:

cd my_projecteb init

Derefter vil EB CLI stille dig et par spørgsmål for at initialisere Elastic Beanstalk-applikationen. Initialiseringsdelen er ligetil. Hvis du sidder fast hvor som helst, kan du tjekke siden "Konfigurer EB CLI" fra dokumentationen.

Oprettelse af et nyt miljø

Som du allerede ved, kan din applikation have mange miljøer (tænk på dem som forskellige konfigurationer). For eksempel har du muligvis et "produktionsmiljø". Dette er det miljø, du bruger til den bruger-vendte version af din app. Men du vil måske have et andet miljø ved navn "iscenesættelse". Det er her, du prøver nye versioner af din app, inden du skubber den til produktionsmiljøet.

Vi kan oprette et miljø ved hjælp af kommandoen nedenfor:

eb create production

Implementering til elastisk bønnestængel

Forudsat at du bruger Git, skal du foretage dine ændringer, inden du implementerer din applikation. EB CLI implementerer din sidste forpligtelse. Hvis du distribuerer inden du forpligter dig, implementerer du en tidligere version af din app.

Efter at have foretaget dine ændringer, implementer ved hjælp af følgende:

eb deploy

Så langt så godt, nu er vi nødt til at indstille et par ting, før vores app rent faktisk begynder at arbejde.

Opsætning af masternøglen

Du kan også bruge CLI til dette formål, men jeg foretrækker at bruge webpanelet til dette. Sådan gør du:

  1. Gå til AWS, vælg "Services -> Elastic Beanstalk", og klik derefter på dit miljø.
  2. Åbn fanen "Konfiguration", og klik på "Rediger" under feltet "Software".
  3. Under "Miljøegenskaber" skal du tilføje en ny nøgle med navnet RAILS_MASTER_KEY. Indstil dens værdi til indholdet af din "master.key" -fil. Du kan finde denne fil i "config" -mappen i din Rails-app.
  4. Klik på knappen "Anvend" nederst på siden.

Opsætning af en PostgreSQL-database

Elastic Beanstalk giver en nem måde at oprette en database på, som du kan nå gennem "Konfiguration -> Database." Jeg foretrækker ikke at bruge det, for hvis du har brug for at genopbygge dit Elastic Beanstalk-miljø, slettes din database. Så vi opretter databasen adskilt fra vores Elastic Beanstalk-miljø.

Oprettelse af en PostgreSQL-database på RDS

  1. Gå til AWS, vælg "Tjenester -> RDS."
  2. Vælg "Opret database."
  3. Vælg "PostgreSQL", og klik på "Næste".
  4. Vælg din brugssag, "Produktion" eller "Udvikling / test", og klik på "Næste".
  5. Her kan du prøve forskellige muligheder og se, hvad de estimerede månedlige omkostninger er. Afgør med noget, der ligger inden for dit budget. Du kan starte med en db.t2.microforekomst, ingen multi-AZ-implementering og en generel SSD.
  6. Vælg en instans-id, dette er en slags "navneområde".
  7. Vælg et brugernavn og en adgangskode, hold dem praktiske indtil videre, klik på "Næste".
  8. I afsnittet "Konfigurer avancerede indstillinger" er det vigtige sikkerhedsgrupperne. Vælg "Vælg eksisterende VPC-sikkerhedsgrupper", og vælg den sikkerhedsgruppe, der ligner "... -AWSEBSecurityGroup- ..."
  9. Vælg et databasenavn, f.eks my_app_production.
  10. Klik på "Opret database", det vil tage et stykke tid.

Tillader adgang til databasen

I mellemtiden, lad os tilføje Postgres-adgang til din sikkerhedsgruppe:

  1. Gå til AWS, vælg "Tjenester -> EC2."
  2. Klik på "Sikkerhedsgrupper" i venstre panel.
  3. Vælg sikkerhedsgruppen fra det foregående afsnit.
  4. Gå til fanen "Indgående", og klik på "Rediger".
  5. Klik på "Tilføj regel." For "Type" skal du vælge "PostgreSQL" og for "Kilde" indtaste id'et for den sikkerhedsgruppe, som du tilføjer denne regel til. Det skal være lige over fanen "Indgående" og skal se ud sg-*.
  6. Klik på "Gem".

Opsætning af produktionsdatabasekonfigurationen

Åbn nu i din Rails-bibliotek config/database.yml. Skift det som sådan:

# ...
production: <<: *default database:  username:  password:  host:  port: 

Tilføjelse af relevante miljøvariabler til Elastic Beanstalk

Vi bad Rails om at få oplysningerne til produktionsdatabasen ved hjælp af ovenstående miljøvariabler. Nu skal vi sørge for, at vores elastiske bønnestængermiljø inkluderer disse variabler:

  1. Gå til AWS, vælg "Services -> Elastic Beanstalk", og klik derefter på dit miljø.
  2. Åbn fanen "Konfiguration", og klik på "Rediger" under feltet "Software".
  3. Tilføj følgende nøgleværdipar under "Miljøegenskaber":
  4. RDS_DB_NAME: Databasenavn, du valgte, da du oprettede din database.
  5. RDS_USERNAME: Brugernavn, du valgte, da du oprettede din database.
  6. RDS_PASSWORD: Adgangskode, du valgte, da du oprettede din database.
  7. RDS_HOSTNAME: Gå til "Tjenester -> RDS", og du kan finde disse oplysninger under afsnittet "Opret forbindelse" på din databaseinstansinformationsside. Det kaldes "Slutpunkt".
  8. RDS_PORT: Indstil dette til 5432.
  9. Klik på knappen "Anvend" nederst på siden.

Herefter forpligter du din Rails-appkatalog igen og kører eb deploy. Du vil måske vente et par minutter, før du gør dette, fordi Elastic Beanstalk laver nogle ting i baggrunden efter opdatering af miljøvariabler.

Efter disse trin ”skal” din Rails-app køre.

Arbejder du stadig ikke?

Hvis der er problemer, kan du gå til dit EB-miljø på AWS-webpanelet, klikke på "Logs" og vælge "Request Logs -> Last 100 Lines" for at se logfilerne. Men inden du gør det, vil jeg anbefale at prøve at køre din Rails-app ved hjælp af produktionsmiljøet på din lokale maskine ved hjælp af kommaet nd rails s RAILS_ENV=product.

Jeg vil være den første til at indrømme, at jeg ikke er den mest erfarne person, når det kommer til implementering. Som sagt brugte jeg altid Heroku tidligere, og jeg vil sandsynligvis også bruge det til mine fremtidige projekter. Disse trin fungerede for mig efter et par dage med at skrabe hovedet og forsøge at oprette min Rails-app på Elastic Beanstalk, så jeg ville dele disse i håb om at spare tid for folk, der er i samme situation som jeg var. Så tag alt dette med et saltkorn og held og lykke!

Hvis du kan lide denne artikel, skal du følge mig på Twitter eller tilmelde dig mit nyhedsbrev for at få besked, når jeg skriver nye artikler. Jeg skriver om software og opstart.

Hvis du leder efter en Rails-udvikler, er jeg i øjeblikket tilgængelig til fjernarbejde. Du er velkommen til at kontakte mig på hej {at} evrim.io.

Oprindeligt offentliggjort på evrim.io den 28. november 2018.