Статьи

Как настроить приложение Rails с AppFog & Bare Metal от CenturyLink

Эта статья была спонсирована AppFog . Спасибо за поддержку спонсоров, которые делают возможным использование SitePoint.

Существует много поставщиков облачных платформ. Одним из наиболее полных и масштабных предложений является платформа CenturyLink Cloud. Для охвата просто взгляните на меню на сайте CenturyLink:

Century Link menu

CenturyLink постоянно ищет новые сервисы для платформы и недавно выпущенные серверы Bare Metal. Ранее я написал учебник по подготовке сервера Bare Metal и развертыванию простого приложения Rails на этом сервере. Серверы Bare Metal вписываются в разрыв между виртуальными машинами общего пользования и выделенными серверами. Они имеют изоляцию физического блока, но масштабирование и предоставление больше похожи на общую виртуальную машину. Я рекомендую вам прочитать эту статью, чтобы понять, как серверы Bare Metal вписываются в картину.

В этой статье я собираюсь перенести приложение из предыдущей статьи на следующий этап архитектуры, а именно на отдельный сервер репозитория и приложений. CenturyLink предлагает AppFog — платформу как сервис (PaaS), подобную Heroku, поэтому имеет смысл перенести туда приложение Rails. База данных приложения будет перемещена из SQLite в PostgreSQL. Экземпляр PostgreSQL будет создан на сервере Bare Metal, так что это приложение будет расти совсем немного.

Вот простое изображение, которое показывает новую архитектуру:

AppFog новая архитектура

Настройка CenturyLink

Обратитесь к первому сообщению, чтобы зарегистрироваться в CenturyLink и убедиться, что Bare Metal включен.

Сервер базы данных Bare Metal: PostgreSQL

Если вы следовали первому учебнику, то знаете, как развернуть сервер Bare Metal. Здесь я собираюсь развернуть новый для нашей базы данных PostgreSQL. Я хочу добавить новый сервер в существующее развертывание VA1 — US East (созданное в первой статье), поэтому я щелкаю значок гамбургера для этого региона:

Меню PostgreSQL

Который затем показывает:

Меню PostgreSQL

С этого момента, это действительно просто вопрос выбора некоторых основных опций:

  • Выберите «Bare Metal» для типа сервера
  • Я пошел с самой маленькой конфигурацией (4 ГБ)
  • Для ОС я выбрал Ubuntu 14

Завершение подготовки занимает несколько минут. Опять же, это тот же процесс, который описан в первом уроке, поэтому обращайтесь к нему при необходимости.
Глядя на приборную панель, у меня теперь есть новый сервер Bare Metal под названием VA1SPGGSPPG202 . Ваш сервер будет иметь другое имя. Давайте установим PostgreSQL на него. Нам потребуется SSH в поле для установки, что означает назначение публичного IP-адреса и открытие соответствующих портов. Порт по умолчанию для SSH — 22, как мы все знаем. Помните, что PostgreSQL будет на этой машине, которая по умолчанию использует порт 5432.

PostgreSQL устанавливает публичный IP-адрес

Предоставление публичного IP занимает несколько минут. Добавление публичного IP-адреса не является лучшей практикой безопасности. Не делайте этого в реальном сценарии производства. По крайней мере, вы хотели бы ограничить исходный IP для ваших серверов приложений для этого поля. Скорее всего, нужна частная виртуальная сеть, где только ваши серверы могут видеть ваши серверы, а сервер приложений является единственной точкой входа. Даже следуя инструкциям, вы должны привыкнуть использовать VPN, предоставляемую вам при создании сервера. Для краткости руководства мы приведем инструкции CenturyLink по настройке VPN-клиента .

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

После того, как публичный IP-адрес был добавлен, введите SSH в поле, используя имя пользователя и пароль (доступно на панели инструментов сервера).

 ssh root@<your public ip> root@<public ip>'s password: Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-68-generic x86_64) * Documentation: https://help.ubuntu.com/ * * The programs included with the Ubuntu system are free software; * the exact distribution terms for each program are described in the * individual files in /usr/share/doc/*/copyright. * * Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by * applicable law. root@VA1SPGGSPPG202:~# 

Отлично, мы в деле. Установка PostgreSQL действительно довольно проста:

 apt-get update ...lots of updates... sudo apt-get install postgresql postgresql-contrib ....lots of installation fodder... 

Вы можете убедиться, что PostgreSQL работает, переключившись на пользователя postgres и запустив psql :

 root@VA1SPGGSPPG202:~# sudo -i -u postgres postgres@VA1SPGGSPPG202:~$ psql psql (9.3.10) Type "help" for help. postgres=# 

Да, все хорошо. Однако роль postgres связана с пользователем Linux postgres (это называется «равноправная аутентификация») и является несколько привилегированной. Поэтому давайте создадим роль, которую мы можем использовать для нашего приложения. Выйдите из psql , набрав \q чтобы вернуться в командную строку Ubuntu, а затем введите:

 vi /etc/postgresql/9.3/main/pg_hba.conf 

Это открывает файл в vi. По умолчанию PostgreSQL настроен на использование только Peer Authentication, но мы хотим использовать Password Authentication. Найдите следующую строку:

 local all postgres peer 

Измените это на:

 local all postgres md5 

Также добавьте следующую строку в файл:

 host all all all md5 

Это позволяет PostgreSQL принимать входящие соединения от удаленных хостов.

Сохраните и выйдите из файла ( :wq ).

Затем необходимо настроить PostgreSQL для прослушивания удаленных подключений. Это делается в основном файле конфигурации:

 vi /etc/postgresql/9.3/main/postgresql.conf 

Найдите строку с listen_addresses , раскомментируйте ее и измените на:

 listen_addresses='*' 

Примечание. Это не рекомендуемые методы обеспечения безопасности для производственного экземпляра PostgreSQL. Это предназначено исключительно как иллюстрация среды разработки PostgreSQL.

Вернитесь в командную строку:

 postgres@VA1SPGGSPPG202:~$ createuser --interactive Enter name of role to add: thingsuser Shall the new role be a superuser? (y/n) n Shall the new role be allowed to create databases? (y/n) y Shall the new role be allowed to create more new roles? (y/n) n Password: postgres@VA1SPGGSPPG202:~$ 

Теперь вы сможете войти, используя этого пользователя и psql :

 psql -U thingsuser -d postgres Password for user thingsuser: psql (9.3.10) Type "help" for help. postgres=> 

Мы готовы настроить наше приложение Rails на AppFog.

Rails Application

Репозиторий GitHub для приложения Rails находится здесь . Я создал ветку appfog-application для изменений, необходимых в этой статье. Там не так уж много.

Требования AppFog

  1. Убедитесь, что AppFog включен в вашей учетной записи и выберите регион.
  2. Установите CloudFoundry CLI (можно использовать ссылку для скачивания: https://github.com/cloudfoundry/cli/blob/master/README.md#downloads или homebrew — я использую homebrew).
 brew tap pivotal/tap brew install cloudfoundry-cli cf -v cf version 6.13.0-e68ce0f-2015-10-15T22:53:29+00:00 

Войдите в AppFog с помощью CLI. Вам понадобится URL из региона, где вы включили AppFog. Моя была на востоке США и выглядит так:

AppFog CLI

Изменения в Gemfile

Поскольку приложение перемещается из SQLite в PostgreSQL, удалите гем sqlite и добавьте гем pq . Кроме того, капистрано больше не используется, поэтому удалите все эти драгоценные камни.

Конфигурация базы данных

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

 # config/database.yml default: &default adapter: postgresql pool: 5 timeout: 5000 host: 206.128.135.30 port: 5432 user: thingsuser password: <%=ENV["DB_PASS"] %> development: <<: *default database: things_development # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: <<: *default database: things_test production: <<: *default database: things_production 

Ради этого примера я использую сервер базы данных Bare Metal для всех сред. Если вы DB_PASS за этим, вам нужно установить переменную окружения DB_PASS в качестве пароля вашей базы данных. После добавления этой конфигурации вы можете создавать и переносить базы данных:

 rake db:create rake db:migrate == 20150928152221 CreateThings: migrating ===================================== -- create_table(:things) -> 0.0360s == 20150928152221 CreateThings: migrated (0.0361s) ============================ 

Теперь у вас должна быть things_development данных things_development в вашем экземпляре PostgreSQL.

Изменения файлов

Файлы развертывания больше не требуются, поэтому удалите config / deploy.rb и каталог config / deploy .

Другие соображения AppFog

Переменные среды

Хорошей идеей будет добавить строку подключения к базе данных в качестве переменной среды в наше приложение. Один из способов сделать это — использовать команду cf set-env :

 cf set-env sitepoint-things DATABASE_URL postgres://thingsuser:password@<bm-pg-ip>/things_production 

Перенос базы данных

Есть несколько вариантов при миграции базы данных. Одним из способов является вызов cf push другой командой «start», например:

 cf push sitepoint-things -c 'rake db:create && rake db:migrate' -i 1 

Это создаст и перенесет базу данных.

Развернуть в AppFog

 cf push sitepoint-things 

Откройте URL своего приложения в браузере и посмотрите, как работает ваш Things Server.

Демо-страница Bare Metal Fun

Отлично. Теперь у нас есть приложение Rails, размещенное в AppFog с использованием базы данных PostgreSQL, которая, в свою очередь, размещена на сервере Bare Metal.

Следующие шаги

Следует признать, что этот учебник носит основополагающий характер. Он раскрывает только часть того, что может предложить облачная платформа CenturyLink. На самом деле, он показывает только биты AppFog и Bare Metal. Существует ряд следующих шагов, которые вы можете предпринять с этого момента:

Оголенный метал

  • Реализуйте стратегию резервного копирования для базы данных.
  • Изучите API CenturyLink, в частности, как подготовить и управлять серверами Bare Metal.
  • Добавить серверы для фоновых работников.

AppFog

  • Узнайте, как использовать манифест для переноса базы данных при каждом развертывании.
  • Добавьте пользовательский домен.
  • Используйте Procfile для объявления и управления командой запуска приложений.

Другой

  • Изучите другие предложения CenturyLink, такие как База данных как услуга , которая в настоящее время находится в бета-версии и скоро будет доступна для всех.

Вывод

Облачная платформа CenturyLink представляет собой обширное предложение облачного хостинга и услуг. Это, безусловно, стоит изучить, если вы хотите надежную платформу, которая может контролировать все ваши приложения и инфраструктурные потребности под одним зонтиком. Кроме того, серверы Bare Metal — это новый и интеллектуальный подход к виртуальным машинам, который требует изоляции, но может быть быстро подготовлен.