Статьи

Облако Шелли: разверните приложение Rails менее чем за 5 минут

shellycloud

Прошло 2 недели, 1 приложение готово к производству. Что теперь? Пришло время развернуть приложение на сервере. Но вы разработчик, и вы не должны знать все об управлении VPS для приложения Rails. Шелли Облако здесь, чтобы помочь. Shelly Cloud — это размещенная платформа для разработчиков приложений Ruby или Ruby on Rails. Если вы уже использовали Heroku , это та же концепция; просто git push и у вас есть развернутое приложение.

Эта концепция называется Платформа как услуга (или PaaS ). В отличие от хостинга виртуального частного сервера (VPS), PaaS настраивает аппаратное обеспечение и платформу развертывания для вас, в то время как вы должны настроить свой собственный с VPS. С VPS вы должны масштабировать приложение самостоятельно. Но с PaaS это масштабирование выполняется для вас по мере роста вашего трафика.

Shelly Cloud — это PaaS, который очень много для вас делает ; Развертывание на основе git и различные формы масштабирования являются основными. Shelly также включает в себя различные службы (например, базы данных), которые настраиваются для вас автоматически. Звучит круто? Давайте развернем приложение в Shelly Cloud.

Как и с любым сервисом, вам понадобится аккаунт. Shelly Cloud не является бесплатным, поэтому проверьте их цены и зарегистрируйтесь, если вы хотите следовать

Сначала нам нужно что-то развернуть. Давайте создадим простое маленькое приложение. Я не буду подробно объяснять код, поскольку могу предположить, что вы знаете основы разработки на Rails, если читаете это.

 $ rails new shelly-books $ rails generate controller pages index 

Теперь для простой страницы:

 # app/views/pages/index.html.erb <h1>Hello, world!</h1> <p>I'm alive! Thanks to a little help from <a href="https://shellycloud.com/"></p> <small><%= Time.now %></small> 

А теперь, чтобы направить рут на эту страницу…

 # config/routes.rb Rails.application.routes.draw do root to: 'pages#index' end 

Это просто небольшая страница «Hello World», которая также отображает текущее время. Посмотрим, сможем ли мы его развернуть.

Перед развертыванием нам нужно добавить больше зависимостей в Gemfile , а затем создать Cloudfile :

 # ... other gems for app gem 'puma' # or thin, if you'd like gem 'shelly-dependencies', group: :production # ... 

Puma — это один из двух веб-серверов, которые поддерживает Shelly Cloud, а другой — Thin. Вы можете выбрать между ними по своему усмотрению, но для этого примера мы будем использовать Puma.

Убедитесь, что вы bundle install и передали свои изменения до следующей части.

Shelly Cloud имеет собственное приложение командной строки, вы можете установить его с RubyGems:

 $ gem install shelly 

Теперь давайте подготовим наше приложение для Шелли:

 $ shelly login Your public SSH key will be uploaded to Shelly Cloud after login. Email ([email protected] - default): Password: $ shelly add # some options for your app 

Новый пульт дистанционного управления был добавлен в ваш репозиторий git, shelly , к которому мы shelly добавим. Вы также заметите хороший Cloudfile в корне своего приложения. Это чисто файл конфигурации Shelly Cloud, поэтому PaaS знает, что делать с приложением, которое вы нажали. Я добавил несколько комментариев, чтобы объяснить, что делает каждый параметр.

 shelly-books: # our app name ruby_version: 2.2.2 environment: production # RAILS_ENV domains: # a list of all the domains that you might be using - shelly-books.shellyapp.com # for example: # - something.here.com # then point CNAME to shelly-books.shellyapp.com servers: # you can make as many servers as you want app1: # our server name size: small # size of this server puma: 2 # minimum number of threads # other things you want on the server # delayed_job: 1 # sidekiq: 1 # clockwork: on # whenever: on # elasticsearch: on databases: # DBs to set up - postgresql # - mysql # - mongodb # - redis 

Теперь мы готовы выдвинуть приложение!

 $ git push shelly master Counting objects: 123, done. Delta compression using up to 4 threads. Compressing objects: 100% (108/108), done. Writing objects: 100% (123/123), 25.16 KiB | 0 bytes/s, done. Total 123 (delta 24), reused 0 (delta 0) ---> Received push to cloud 'shelly-books' ---> Checking Gemfile ---> Creating code package... done. ---> Push accepted ---> Start your cloud using: `shelly start --cloud shelly-books` To [email protected]:shelly-books.git * [new branch] master -> master 

Наше приложение почти готово к просмотру, нам просто нужно запустить наши серверы. Цены в Shelly Cloud основаны на использовании, поэтому вы можете запускать и останавливать серверы по мере необходимости.

 $ shelly start --cloud shelly-books $ shelly open # your browser should open showing our beautiful page 

Посмотрим, что у нас есть!

Shelly Books (Alpha)

Хорошая вещь! Но это довольно скучная страница, она просто говорит нам время. Давайте добавим некоторые вещи базы данных в него.

Отказ от ответственности: мне не особенно нравится команда rails scaffold , но мы собираемся использовать ее сегодня, чтобы быстро показать, как использовать базу данных в Shelly Cloud.

 $ rails scaffold Book title:string author:string 

Вы должны быть знакомы с этим выводом, поэтому нет необходимости его объяснять. (Вероятно, вам следует зафиксировать здесь.) Теперь нам нужно настроить конфигурацию нашей производственной базы данных.

Shelly Cloud предоставляет переменные среды для своих баз данных. Вы можете посмотреть их здесь.

 # config/database.yml # ... other DB config production: adapter: postgresql database: <%= ENV['POSTGRESQL_DATABASE'] %> encoding: unicode pool: 16 host: <%= ENV['POSTGRESQL_HOST'] %> username: <%= ENV['POSTGRESQL_USER'] %> password: <%= ENV['POSTGRESQL_PASSWORD'] %> port: 5432 

Передайте эти изменения и отправьте приложение в Shelly Cloud:

 $ git commit -m "Add database config." $ git push shelly master 

Вы можете спросить, нужно ли запускать миграцию вручную, и ответ «нет». В этой статье объясняется, как код развертывается в Shelly Cloud, в том числе при rake db:migrate . Ответ заключается в том, что при каждом запуске миграция запускается на первом сервере развертывания.

Теперь давайте снова посмотрим на наше приложение, но на этот раз по маршруту /books .

Shelly-Books with some DB stuff

Не стесняйтесь поиграть с этим, чтобы проверить функциональность базы данных. Работает отлично.

Вот оно! Приложение на основе базы данных развернуто в Shelly Cloud менее чем за 5 минут.

Дополнительно: собственный домен

Чтобы добавить пользовательский домен, просто добавьте свой домен в список domains в своем Cloudfile . Затем укажите запись CNAME вашего домена на ваш домен myappname.shellyapp.com .

Вывод

Из моего опыта написания этой статьи я определенно рекомендую Shelly Cloud в качестве хостинг-провайдера; но вариантов много. Heroku — это еще одна опция PaaS, которая предоставляет языки, отличные от Ruby, или, возможно, вы хотите настроить свой собственный VPS. Независимо от того, какого хостинг-провайдера вы используете, конечная цель одна и та же: простота развертывания с надежным хостингом. Шелли Облако обеспечивает именно это.