Kako rasporediti aplikaciju Rails 5.2 PostgreSQL na AWS Elastic Beanstalk

Službeno je, upotreba Herokua za sve moje dosadašnje projekte Railsa pokvarila me. Nakon što sam dobio neke AWS bodove zahvaljujući natjecanju u smotri, odlučio sam svoj najnoviji projekt rasporediti na Elastic Beanstalk (AWS-ov Heroku konkurent). Sve što moram reći je da mi nedostaje Heroku.

Jao, ako ste u sličnoj situaciji, evo detaljnih uputa za postavljanje vaše Rails 5.2 / PostgreSQL aplikacije na Elastic Beanstalk.

Instaliranje Elastic Beanstalk CLI

Terminal ćemo upotrijebiti u ovom vodiču. Počnimo s instaliranjem "Elastičnog sučelja naredbenog retka Beanstalk". Evo kako to učiniti na macOS-u pomoću Homebrewa:

brew install awsebcli

Ako koristite drugu platformu, guglanje "kako instalirati awsebcli na [vašu platformu]" trebalo bi vas odvesti u pravom smjeru.

Inicijalizacija elastičnog zrna graha

Pretpostavit ću da već imate račun Amazon Web Services, ako ne, kreirajte ga. Sada idite u direktorij vašeg projekta i inicijalizirajte Elastic Beanstalk:

cd my_projecteb init

Tada će vam EB CLI postaviti nekoliko pitanja za inicijalizaciju aplikacije Elastic Beanstalk. Dio za inicijalizaciju je jednostavan. Ako negdje zapnete, možete pogledati stranicu "Konfiguriranje EB CLI-a" iz dokumentacije.

Stvaranje novog okruženja

Kao što već znate, vaš program može imati mnogo okruženja (shvatite ih kao različite konfiguracije). Na primjer, možda imate "proizvodno" okruženje. Ovo je okruženje koje upotrebljavate za verziju svoje aplikacije okrenute prema korisnicima. Ali možda biste željeli imati drugo okruženje pod nazivom "inscenacija". Ovdje isprobavate nove verzije aplikacije prije nego što je gurnete u produkcijsko okruženje.

Okruženje možemo stvoriti pomoću naredbe u nastavku:

eb create production

Raspoređivanje u Elastično zrno graha

Pod pretpostavkom da koristite Git, izvršite promjene prije postavljanja aplikacije. EB CLI postavlja vaše posljednje urezivanje. Ako implementirate prije urezivanja, postavit ćete stariju verziju svoje aplikacije.

Nakon što izvršite promjene, implementirajte se pomoću sljedećeg:

eb deploy

Do sada je dobro, sada moramo postaviti nekoliko stvari prije nego što naša aplikacija stvarno počne raditi.

Postavljanje glavnog ključa

CLI možete koristiti i u tu svrhu, ali ja više volim koristiti web ploču za to. Evo kako:

  1. Idite na AWS, odaberite "Services -> Elastic Beanstalk", a zatim kliknite svoje okruženje.
  2. Otvorite karticu "Konfiguracija" i kliknite "Izmijeni" ispod okvira pod nazivom "Softver".
  3. U odjeljak "Svojstva okoliša" dodajte novi ključ s imenom RAILS_MASTER_KEY. Postavite njegovu vrijednost na sadržaj vaše datoteke "master.key". Ovu datoteku možete pronaći u direktoriju “config” vaše aplikacije Rails.
  4. Kliknite gumb "Primijeni" na dnu stranice.

Postavljanje baze podataka PostgreSQL

Elastic Beanstalk pruža jednostavan način postavljanja baze podataka do koje možete doći putem "Konfiguracija -> Baza podataka". Radije to ne bih koristio, jer ako trebate obnoviti svoje okruženje Elastic Beanstalk, vaša će se baza podataka izbrisati. Dakle, bazu podataka ćemo postaviti odvojeno od našeg okruženja Elastic Beanstalk.

Stvaranje PostgreSQL baze podataka na RDS-u

  1. Idite na AWS, odaberite "Usluge -> RDS".
  2. Odaberite "Stvori bazu podataka".
  3. Odaberite "PostgreSQL" i kliknite "Dalje".
  4. Odaberite svoj slučaj upotrebe, "Proizvodnja" ili "Razvoj / test", i kliknite "Dalje".
  5. Ovdje možete isprobati različite opcije i vidjeti koliki su procijenjeni mjesečni troškovi. Riješite se s nečim što vam je unutar proračuna. Možete započeti s db.t2.microinstancom, bez implementacije više AZ-a i SSD-a opće namjene.
  6. Odaberite identifikator instance, ovo je vrsta "prostora imena".
  7. Odaberite korisničko ime i lozinku, držite ih za sada pri ruci, kliknite "Dalje".
  8. U odjeljku "Konfiguriranje naprednih postavki" važne su sigurnosne grupe. Odaberite "Odaberi postojeće VPC sigurnosne grupe" i odaberite sigurnosnu grupu koja izgleda poput "... -AWSEBSecurityGroup- ..."
  9. Odaberite naziv baze podataka, kao što je my_app_production.
  10. Kliknite "Stvori bazu podataka", ovo će potrajati.

Omogućavanje pristupa bazi podataka

U međuvremenu, dodamo Postgres pristup vašoj sigurnosnoj grupi:

  1. Idite na AWS, odaberite "Usluge -> EC2".
  2. Kliknite "Sigurnosne grupe" na lijevoj ploči.
  3. Odaberite sigurnosnu grupu iz prethodnog odjeljka.
  4. Idite na karticu "Ulazno" i kliknite "Uredi".
  5. Kliknite "Dodaj pravilo". Za "Type" odaberite "PostgreSQL", a za "Source" ID u sigurnosnoj grupi u koju dodajete ovo pravilo. Trebao bi biti točno iznad kartice "Ulazno" i trebao bi izgledati sg-*.
  6. Kliknite "Spremi".

Postavljanje konfiguracije proizvodne baze podataka

Sada u svom direktoriju Rails otvorite config/database.yml. Promijenite ga kao takvog:

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

Dodavanje relevantnih varijabli okoline Elastičnom zrnu graha

Rekli smo Railsu da informacije za produkcijsku bazu podataka dobije pomoću gore navedenih varijabli okruženja. Sada moramo biti sigurni da naše okruženje Elastičnog zrna graha uključuje ove varijable:

  1. Idite na AWS, odaberite "Services -> Elastic Beanstalk", a zatim kliknite svoje okruženje.
  2. Otvorite karticu "Konfiguracija" i kliknite "Izmijeni" ispod okvira pod nazivom "Softver".
  3. U "Svojstva okoline" dodajte sljedeće parove ključ / vrijednost:
  4. RDS_DB_NAME: Ime baze podataka koje ste odabrali prilikom postavljanja baze podataka.
  5. RDS_USERNAME: Korisničko ime koje ste odabrali prilikom postavljanja baze podataka.
  6. RDS_PASSWORD: Lozinka koju ste odabrali prilikom postavljanja baze podataka.
  7. RDS_HOSTNAME: Idite na "Usluge -> RDS" i ove podatke možete pronaći u odjeljku "Povezivanje" na stranici podataka o instanci baze podataka. Zove se "Krajnja točka".
  8. RDS_PORT: Postavite ovo na 5432.
  9. Kliknite gumb "Primijeni" na dnu stranice.

Nakon toga, ponovo urežite svoj direktorij aplikacije Rails i pokrenite eb deploy. Možda ćete htjeti pričekati nekoliko minuta prije nego što to učinite, jer Elastic Beanstalk radi neke stvari u pozadini nakon ažuriranja varijabli okruženja.

Nakon ovih koraka, vaša aplikacija Rails "trebala bi" biti pokrenuta.

Još uvijek ne radi?

Ako postoje problemi, možete otići u svoje EB okruženje na AWS web ploči, kliknuti na "Dnevnici" i odabrati "Zahtjev za zapisnike -> Posljednjih 100 linija" da biste pregledali zapisnike. No, prije nego što to učinite, preporučio bih da pokušate pokrenuti aplikaciju Rails koristeći produkcijsko okruženje na vašem lokalnom računalu pomoću zareza nd rails s RAILS_ENV=product.

Prvi ću priznati da nisam najiskusnija osoba što se tiče raspoređivanja. Kao što sam rekao, Heroku sam uvijek koristio u prošlosti, a vjerojatno ću ga koristiti i za svoje buduće projekte. Ovi su mi koraci uspjeli nakon nekoliko dana češanja po glavi pokušavajući postaviti aplikaciju Rails na Elastic Beanstalk, pa sam ih želio podijeliti u nadi da uštedim vrijeme ljudima koji su u istoj situaciji u kojoj sam bio i ja. Dakle, uzmite sve ovo s rezervom i sretno!

Ako vam se sviđa ovaj članak, slijedite me na Twitteru ili se prijavite na moj bilten da biste dobivali obavijesti kada pišem nove članke. Pišem o softveru i startupovima.

Ako tražite programera za Rails, trenutno sam dostupan za rad na daljinu. Slobodno me kontaktirajte na hi {at} evrim.io.

Izvorno objavljeno na evrim.io 28. studenog 2018.