Как написать appspec.yml для Ruby on Rails на AWS CodeDeploy

Я пытаюсь перенести свое приложение Rails с Heroku на AWS. Я заставил свой AWS CodePipeline работать до последнего бита, написав appspec.yml для CodeDeploy.

Это требует, чтобы я написал команды Ubuntu, чтобы остановить мое приложение, возможно, выполнить некоторые действия по миграции, а затем снова запустить приложение.

Это не моя сильная сторона, поэтому я немного борюсь с этой частью. Я думал, что начну с выполнения "rails server" как действия "AfterInstall". Но затем я открываю целую коробку новых проблем, то есть на экземпляре EC2 не установлены Rails и Bundler и т.д. с нуля.

Итак, вот мой вопрос: разве это не идентично для всех приложений Rails, развертываемых с помощью CodeDeploy? Разве это не должно быть уже доступно, надеюсь, сделано кем-то, у кого есть гораздо больше информации, чем у меня, о том, что именно он или она делает? Я не нашел многого через Google, поэтому я надеюсь, что кто-нибудь сможет пролить свет на это для меня. Боюсь, что даже если он заработает, в любом случае это не будет хорошим, надежным и готовым к работе appspec.yml ...

Уже большое спасибо!


person hendrikbeck    schedule 18.02.2018    source источник


Ответы (2)


Похоже, вы пытаетесь запустить сервер rails непосредственно на экземпляре EC2, я бы, вероятно, использовал NGINX с Passenger, потому что перезапуск вашего приложения Rails после развертывания был бы таким же простым, как запуск сценария после установки, чтобы коснуться tmp / restart.txt, что будет заставить Пассажира перезапустить приложение.

Я немного поискал и нашел следующий пост, в котором они также используют NGINX и Passenger, это очень похоже на тот подход, который я бы использовал, и я вижу, что они также включают сценарии до и после установки.

http://sfviapgh.com/blog/2016/2/18/how-to-deploy-rails-with-aws-codedeploy

На случай, если сообщение позже станет недоступным, вот ключевые моменты:

  1. Установите экземпляр EC2 со всем, что вам нужно для вашего производственного сервера. В нашем случае это были Ruby, Passenger и nginx. Вы не хотите заранее клонировать свое приложение на сервер через git, но вам нужно знать путь, по которому ваше приложение будет размещаться на сервере (например, www / var / ...). Убедитесь, что вы знаете, каких пользователей вы будете использовать для каждого процесса (клонирование кода, перезапуск процессов).
  2. Установите агент AWS CodeDeploy на сервер.
  3. Переместите экземпляр EC2 в производственный AMI группы приложений.
  4. В нашей кодовой базе мы добавили следующие сценарии bash в нашу папку / script. Наши полные скрипты немного сложнее (клонирование наших переменных окружения из безопасного ведра s3), но они помогут вам начать твердый старт. CodeDeploy в настоящее время подключается только к GitHub. К счастью, GitHub - это то, что мы используем для управления нашими кодовыми базами.
  5. Настройте требуемый AWS CodeDeploy appspec.yml в корне вашего приложения, который ссылается на эти сценарии (см. Ниже).

application / appspec.yml

version: 0.0
os: linux
files:
  - source: /
    destination: <the directory your code will live>
permissions:
  - object: <the directory your code will live>
    owner: <user who will deploy your code>
    group: <group that user lives in>
  AfterInstall:
    - location: script/AfterInstall.sh
      runas: <user who will deploy your code>
  ApplicationStart:
    - location: script/ApplicationStart.sh
      runas: <root user>

приложение / скрипт / AfterInstall.sh

#!/bin/bash
cd /var/www/<app location>
RAILS_ENV=production bundle install --path vendor/bundle
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production bundle exec rake assets:clobber
RAILS_ENV=production bundle exec rake assets:precompile

приложение / скрипт / ApplicationStart.sh

#!/bin/sh
sudo service nginx restart

Я надеюсь, что это поможет вам в дальнейшем развертывании.

person Thomas Bindzus    schedule 03.03.2018
comment
Спасибо за ссылку, Томас! Я думаю, что, возможно, я даже наткнулся на него, но пропустил его, но на самом деле он дал много идей. По-прежнему нужно было много учиться, выясняя все детали, которые должны быть правильными, чтобы все работало. Теперь это прекрасно работает, и я думаю, что напишу об этом в блоге или что-то в этом роде. Учитывая, насколько неприятно это было для меня, я чувствую, что мне нужно внести свой вклад и поделиться :-) - person hendrikbeck; 12.03.2018
comment
Привет, у вас есть запись в блоге об этом? Я хотел бы получить больше информации, так как я новичок в Codedeploy и Appspec.yml, и информации в Интернете кажется недостаточно. - person Steven Smith; 18.02.2021
comment
Извините, @StevenSmith, у меня нет - person Thomas Bindzus; 02.03.2021

< / а>. Это дает вам пошаговый подход к настройке. Надеюсь, это поможет.

person i_use_the_internet    schedule 20.02.2018
comment
Привет, спасибо за ссылку! К сожалению, здесь ничего не говорится о написании этого файла appspec.yml. Они только устанавливают целевую папку для источников, что очень просто. Я все еще не понимаю, как убедиться, что приложение правильно остановлено до начала установки и правильно запущено после ее завершения. Наверное, это набор команд linux в appspec.yml ?! - person hendrikbeck; 20.02.2018