Как да разположим приложение Rails 5.2 PostgreSQL на AWS Elastic Beanstalk

Официално е, че използването на Heroku за всички мои Rails проекти досега ме разглези гнило. След като получих някои AWS кредити благодарение на състезание по терена, реших да разгърна последния си проект на Elastic Beanstalk (конкурент на AWS Heroku). Трябва само да кажа, че ми липсва Heroku.

Уви, ако сте в подобна ситуация, ето инструкции стъпка по стъпка за разполагане на вашето приложение Rails 5.2 / PostgreSQL на Elastic Beanstalk.

Инсталиране на Elastic Beanstalk CLI

Ще използваме терминала в този урок. Нека започнем с инсталирането на „Еластичен интерфейс на командния ред на Beanstalk“. Ето как да го направите на macOS с помощта на Homebrew:

brew install awsebcli

Ако използвате друга платформа, googling „как да инсталирате awsebcli на [вашата платформа]“ трябва да ви отведе в правилната посока.

Инициализиране на Elastic Beanstalk

Предполагам, че вече имате акаунт в Amazon Web Services, ако не, създайте такъв. Сега отидете в директорията на вашия проект и инициализирайте Elastic Beanstalk:

cd my_projecteb init

Тогава EB CLI ще ви зададе няколко въпроса за инициализиране на приложението Elastic Beanstalk. Частта за инициализация е ясна. Ако се забиете някъде, можете да проверите страницата „Конфигуриране на EB CLI“ от документацията.

Създаване на нова среда

Както вече знаете, вашето приложение може да има много среди (помислете за тях като за различни конфигурации). Например, може да имате „производствена“ среда. Това е средата, която използвате за версията на вашето приложение, ориентирана към потребителите. Но може да искате да имате друга среда, наречена „постановка“. Тук изпробвате нови версии на приложението си, преди да го избутате в производствената среда.

Можем да създадем среда, като използваме командата по-долу:

eb create production

Разполагане в Elastic Beanstalk

Ако приемем, че използвате Git, ангажирайте промените си преди да разгърнете приложението си. EB CLI разполага с последния ви ангажимент. Ако внедрите преди фиксиране, ще разположите по-ранна версия на приложението си.

След като извършите промените си, внедрете, като използвате следното:

eb deploy

Дотук добре, сега трябва да зададем няколко неща, преди приложението ни действително да започне да работи.

Настройване на главния ключ

Можете да използвате CLI и за тази цел, но аз предпочитам да използвам уеб панела за това. Ето как:

  1. Отидете на AWS, изберете „Услуги -> Еластично стъбло“, след което кликнете върху вашата среда.
  2. Отворете раздела „Конфигурация“ и щракнете върху „Промяна“ под полето, озаглавено „Софтуер“.
  3. Под „Свойства на околната среда“ добавете нов ключ с име RAILS_MASTER_KEY. Задайте стойността му на съдържанието на вашия файл "master.key". Можете да намерите този файл в директорията “config” на вашето приложение Rails.
  4. Кликнете върху бутона „Прилагане“ в долната част на страницата.

Създаване на база данни PostgreSQL

Elastic Beanstalk предоставя лесен начин за създаване на база данни, до която можете да достигнете чрез „Конфигурация -> База данни“. Предпочитам да не използвам това, защото ако трябва да възстановите вашата среда на Elastic Beanstalk, вашата база данни ще бъде изтрита. Така че, ние ще създадем базата данни отделно от нашата среда на Elastic Beanstalk.

Създаване на база данни PostgreSQL на RDS

  1. Отидете на AWS, изберете „Услуги -> RDS“.
  2. Изберете „Създаване на база данни“.
  3. Изберете „PostgreSQL“ и кликнете върху „Напред“.
  4. Изберете вашия случай на употреба, „Производство“ или „Разработване / тест“, и щракнете върху „Напред“.
  5. Тук можете да опитате различни опции и да видите какви са прогнозните месечни разходи. Решете се с нещо, което е в рамките на вашия бюджет. Можете да започнете с db.t2.microекземпляр, без мулти-AZ разполагане и SSD с общо предназначение.
  6. Изберете идентификатор на екземпляр, това е нещо като „пространство от имена“.
  7. Изберете потребителско име и парола, запазете ги за сега, щракнете върху „Напред“.
  8. В раздела „Конфигуриране на разширени настройки“ важното е групите за сигурност. Изберете „Изберете съществуващи групи за защита на VPC“ и изберете групата за сигурност, която изглежда като „... -AWSEBSecurityGroup- ...“
  9. Изберете име на база данни, като my_app_production.
  10. Кликнете върху „Създаване на база данни“, това ще отнеме известно време.

Разрешаване на достъп до базата данни

Междувременно, нека добавим Postgres достъп до вашата група за сигурност:

  1. Отидете на AWS, изберете „Услуги -> EC2“.
  2. Кликнете върху „Групи за сигурност“ в левия панел.
  3. Изберете групата за защита от предишния раздел.
  4. Отидете в раздела „Входящи“ и кликнете върху „Редактиране“.
  5. Кликнете върху „Добавяне на правило“. За „Тип“ изберете „PostgreSQL“, а за „Източник“ в идентификатора на групата за сигурност, към която добавяте това правило. Трябва да е точно над раздела „Входящи“ и да изглежда така sg-*.
  6. Кликнете върху „Запазване“.

Настройване на конфигурацията на производствената база данни

Сега, отворете вашата директория Rails config/database.yml. Променете го като такъв:

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

Добавяне на съответни променливи на средата към Elastic Beanstalk

Казахме на Rails да получат информацията за производствената база данни, използвайки горните променливи на средата. Сега трябва да се уверим, че нашата среда на Elastic Beanstalk включва следните променливи:

  1. Отидете на AWS, изберете „Услуги -> Еластично стъбло“, след което кликнете върху вашата среда.
  2. Отворете раздела „Конфигурация“ и щракнете върху „Промяна“ под полето, озаглавено „Софтуер“.
  3. Под „Свойства на околната среда“ добавете следните двойки ключ-стойност:
  4. RDS_DB_NAME: Име на базата данни, която сте избрали при настройката на вашата база данни.
  5. RDS_USERNAME: Потребителско име, което сте избрали при настройването на вашата база данни.
  6. RDS_PASSWORD: Парола, която сте избрали при настройването на вашата база данни.
  7. RDS_HOSTNAME: Отидете на „Услуги -> RDS“ и можете да намерите тази информация в раздела „Свързване“ на страницата с информация за екземпляра на вашата база данни. Тя се нарича „Крайна точка“.
  8. RDS_PORT: Задайте това на 5432.
  9. Кликнете върху бутона „Прилагане“ в долната част на страницата.

След това отново фиксирайте директорията на приложението Rails и изпълнете eb deploy. Може да искате да изчакате няколко минути, преди да направите това, защото Elastic Beanstalk прави някои неща във фонов режим след актуализиране на променливите на средата.

След тези стъпки вашето приложение Rails „трябва“ да работи.

Все още не работи?

Ако има някакви проблеми, можете да отидете до вашата среда на EB в уеб панела на AWS, да кликнете върху „Регистрационни файлове“ и да изберете „Request Logs -> Last 100 Lines“, за да видите дневниците. Но преди да направите това, бих препоръчал да опитате да стартирате приложението Rails, като използвате производствената среда на вашата локална машина, като използвате nd rails s RAILS_ENV=productйон за запетая .

Ще бъда първият, който ще признае, че не съм най-опитният човек по отношение на разполагането. Както казах, винаги съм използвал Heroku в миналото и вероятно ще го използвам и за бъдещите си проекти. Тези стъпки ми подействаха след няколко дни надраскване по главата, опитвайки се да настроя приложението си Rails на Elastic Beanstalk, така че исках да ги споделя с надеждата да спестя време за хората, които са в същата ситуация, в която бях и аз. Така че, вземете всичко това със зрънце сол и успех!

Ако харесвате тази статия, последвайте ме в Twitter или се регистрирайте в моя бюлетин, за да получавате известия, когато пиша нови статии. Пиша за софтуер и стартиращи компании.

Ако търсите разработчик на Rails, в момента съм на разположение за работа от разстояние. Чувствайте се свободни да се свържете с мен на hi {at} evrim.io.

Първоначално публикувано на evrim.io на 28 ноември 2018 г.