В предыдущей части рассмотрен сам продукт, а также простенький пример работы с PaaS реализацией. Пойдем дальше. Поставим Ruby-on-Rail 4 с PostgreSQL. В процессе познакомимся:
1. С встроенными граблями.
2. Схемой разработки, она отличается от таковой у v2.
3. Некоторыми командами консольного клиента.
Вообще готовая конфигурация «Ruby-on-Rail 4 с PostgreSQL» появлялась на web консоли и пропадала, так как вставала криво. Надежнее ручками по инструкции из репозитория на гитхабе. Коротко делаем форк себе, потом клонироуем локально.
Создаём проект:
Вообще в этом выводе важная информацияявкиимена/пароли/база PostgreSQL, и GitHub Webhook Secret, который понадобится ниже.
Переходим к «Overview» на web консоли дабы перейти к нашему приложению. Красуется наша public/index.html. Можем и у себя посмотреть, если что.
Идея простая. На странице инструкция как настроить автодеплой на push на github.com. Там неточность(как и QuickStart'ом ROR4), в «Builds» > «rails-postgesql-example» > «Action»(выпадающее меню) > «Edit». Там «GitHub WebHook». Далее по инструкции. Но вообще GitHub Webhook Secret мы уже сохранили раньше, хук сам по себе:
То есть можно сразу переходить к гитхабу.
Теперь если вы что-то сделали локально и отправили на гитхаб, то автоматом изменение попадет на OpenShift PaaS.
Кстати, в копилку.
К любому работающему поду можно подключиться. В v2 было подключение по ssh.
Есть вариант пойти дальше ковырять платформу, но нет проектов в работе, а выдумывать задачу… Я склоняюсь к написанию компиляции по архитектуре продукта путем глубокого изучения документации. Результат будет не мгновенный, но документация сырая и только на английском.
UPD1. Webhook github отрабатывает, а OpenShift v3 отвечает 401, не авторизован, то есть ребилд нужно запускать вручную. Будем разбираться.
1. С встроенными граблями.
2. Схемой разработки, она отличается от таковой у v2.
3. Некоторыми командами консольного клиента.
Создаем среду разработчика
Вообще готовая конфигурация «Ruby-on-Rail 4 с PostgreSQL» появлялась на web консоли и пропадала, так как вставала криво. Надежнее ручками по инструкции из репозитория на гитхабе. Коротко делаем форк себе, потом клонироуем локально.
Создаём проект:
$ oc new-project myror4
$ oc new-app openshift/templates/rails-postgresql.json -p SOURCE_REPOSITORY_URL=https://github.com/< yourusername >/rails-ex
Что-то такое
--> Deploying template rails-postgresql-example for "openshift/templates/rails-postgresql.json"
rails-postgresql-example
---------
An example Rails application with a PostgreSQL database
* With parameters:
* Name=rails-postgresql-example
* Namespace=openshift
* Memory Limit=512Mi
* Memory Limit (PostgreSQL)=512Mi
* Git Repository URL=https://github.com/zirf0/rails-ex
* Git Reference=
* Context Directory=
* Application Hostname=
* GitHub Webhook Secret=epApEumIQAFhye32wPsXlnAaDrh34UdoJlw6fGyC # generated
* Secret Key=b7augcv4ehdml4lyicyvi0tykum1t6stpwbrv8wpkxydrjpsg5rsrsoovxkjb6lf3wcp45f0wwp60b8uxd7qk1ma7kdmpm3kc00620girongf5aoqlh16fv3xsr0lqh # generated
* Application Username=openshift
* Application Password=secret
* Rails Environment=production
* Database Service Name=postgresql
* Database Username=userJSV # generated
* Database Password=0gD2YwnJ # generated
* Database Name=root
* Maximum Database Connections=100
* Shared Buffer Amount=12MB
* Custom RubyGems Mirror URL=
--> Creating resources with label app=rails-postgresql-example ...
service "rails-postgresql-example" created
route "rails-postgresql-example" created
imagestream "rails-postgresql-example" created
buildconfig "rails-postgresql-example" created
deploymentconfig "rails-postgresql-example" created
service "postgresql" created
deploymentconfig "postgresql" created
--> Success
Build scheduled, use 'oc logs -f bc/rails-postgresql-example' to track its progress.
Run 'oc status' to view your app.
Вообще в этом выводе важная информация
$ oc logs -f bc/rails-postgresql-example
А вот и лог
Pulling image "registry.ops.openshift.com/rhscl/ruby-23-rhel7@sha256:26423d3ba7749e77884580dfec370c0007d6bcfd331b89c2c24d45964f9da7ff" ...
Pulling image "registry.ops.openshift.com/rhscl/ruby-23-rhel7@sha256:26423d3ba7749e77884580dfec370c0007d6bcfd331b89c2c24d45964f9da7ff" ...
Cloning "https://github.com/zirf0/rails-ex" ...
Commit: b857f63c0fdb991cf93a52b80d325f7ab635c775 (Merge pull request #61 from luciddreamz/master)
Author: Ben Parees <bparees@users.noreply.github.com>
Date: Tue Sep 20 09:12:28 2016 -0400
---> Installing application source ...
---> Building your Ruby application from source ...
---> Running 'bundle install --deployment' ...
Fetching gem metadata from https://rubygems.org/...........
Fetching version metadata from https://rubygems.org/...
Fetching dependency metadata from https://rubygems.org/..
Installing rake 10.4.2
Installing i18n 0.7.0
Installing json 1.8.2 with native extensions
Installing minitest 5.6.1
Installing thread_safe 0.3.5
Installing tzinfo 1.2.2
Installing activesupport 4.2.1
Installing builder 3.2.2
Installing erubis 2.7.0
Installing mini_portile 0.6.2
Installing nokogiri 1.6.6.2 with native extensions
Installing rails-deprecated_sanitizer 1.0.3
Installing rails-dom-testing 1.0.6
Installing loofah 2.0.1
Installing rails-html-sanitizer 1.0.2
Installing actionview 4.2.1
Installing rack 1.6.0
Installing rack-test 0.6.3
Installing actionpack 4.2.1
Installing globalid 0.3.5
Installing activejob 4.2.1
Installing mime-types 2.5
Installing mail 2.6.3
Installing actionmailer 4.2.1
Installing activemodel 4.2.1
Installing arel 6.0.0
Installing activerecord 4.2.1
Installing debug_inspector 0.0.2 with native extensions
Installing binding_of_caller 0.7.2 with native extensions
Installing columnize 0.9.0
Installing byebug 4.0.5 with native extensions
Installing coffee-script-source 1.9.1.1
Installing execjs 2.5.2
Installing coffee-script 2.4.1
Installing thor 0.19.1
Installing railties 4.2.1
Installing coffee-rails 4.1.0
Installing multi_json 1.11.0
Installing jbuilder 2.2.13
Installing jquery-rails 4.0.3
Installing pg 0.18.1 with native extensions
Installing puma 2.11.3 with native extensions
Using bundler 1.10.6
Installing sprockets 3.0.3
Installing sprockets-rails 2.2.4
Installing rails 4.2.1
Installing rdoc 4.2.0
Installing sass 3.4.13
Installing tilt 1.4.1
Installing sass-rails 5.0.3
Installing sdoc 0.4.1
Installing spring 1.3.4
Installing sqlite3 1.3.11 with native extensions
Installing turbolinks 2.5.3
Installing uglifier 2.7.1
Installing web-console 2.1.2
Bundle complete! 14 Gemfile dependencies, 56 gems now installed.
Bundled gems are installed into ./bundle.
Post-install message from rdoc:
Depending on your version of ruby, you may need to install ruby rdoc/ri data:
<= 1.8.6 : unsupported
= 1.8.7 : gem install rdoc-data; rdoc-data --install
= 1.9.1 : gem install rdoc-data; rdoc-data --install
>= 1.9.2 : nothing to do! Yay!
---> Cleaning up unused ruby gems ...
---> Starting asset compilation ...
I, [2016-10-12T12:07:17.702238 #18863] INFO -- : Writing /opt/app-root/src/public/assets/application-dfda1387e2621704c9c53ddd9c1573c1f5099fd3108a2a96d2b02d9b79203f15.js
I, [2016-10-12T12:07:17.717678 #18863] INFO -- : Writing /opt/app-root/src/public/assets/application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css
Running post commit hook ...
sh: cannot set terminal process group (-1): Inappropriate ioctl for device
sh: no job control in this shell
Run options: --seed 19349
Running:
.
Finished in 0.096597s, 10.3523 runs/s, 10.3523 assertions/s.
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
Pushing image 172.30.47.227:5000/myror4/rails-postgresql-example:latest ...
Pushed 0/5 layers, 1% complete
Pushed 1/5 layers, 33% complete
Pushed 2/5 layers, 74% complete
Pushed 3/5 layers, 83% complete
Pushed 4/5 layers, 100% complete
Pushed 5/5 layers, 100% complete
Push successful
Переходим к «Overview» на web консоли дабы перейти к нашему приложению. Красуется наша public/index.html. Можем и у себя посмотреть, если что.
Настройка Github Webhook
Идея простая. На странице инструкция как настроить автодеплой на push на github.com. Там неточность(как и QuickStart'ом ROR4), в «Builds» > «rails-postgesql-example» > «Action»(выпадающее меню) > «Edit». Там «GitHub WebHook». Далее по инструкции. Но вообще GitHub Webhook Secret мы уже сохранили раньше, хук сам по себе:
https://api.preview.openshift.com/oapi/v1/namespaces/project.metadata.name/buildconfigs/buildConfig.metadata.name/webhooks/<Our GitHub WebHook Secret>/github.
То есть можно сразу переходить к гитхабу.
Теперь если вы что-то сделали локально и отправили на гитхаб, то автоматом изменение попадет на OpenShift PaaS.
Кстати, в копилку.
$ oc get -o wide pods
NAME READY STATUS RESTARTS AGE IP NODE
postgresql-1-72xmi 1/1 Running 0 1h 10.1.51.8 ip-172-31-10-169.ec2.internal
rails-postgresql-example-1-build 0/1 Completed 0 1h 10.1.8.4 ip-172-31-11-86.ec2.internal
rails-postgresql-example-1-z6q8d 1/1 Running 0 58m 10.1.8.4 ip-172-31-11-86.ec2.internal
$ oc rsh postgresql-1-72xmi
sh-4.2$ exit
$
К любому работающему поду можно подключиться. В v2 было подключение по ssh.
Что делать
Есть вариант пойти дальше ковырять платформу, но нет проектов в работе, а выдумывать задачу… Я склоняюсь к написанию компиляции по архитектуре продукта путем глубокого изучения документации. Результат будет не мгновенный, но документация сырая и только на английском.
UPD1. Webhook github отрабатывает, а OpenShift v3 отвечает 401, не авторизован, то есть ребилд нужно запускать вручную. Будем разбираться.
Поделиться с друзьями
arzonus
Добрый день!
Спасибо за статью.
Скажите пожалуйста, а что с данными PostgreSQL при ребилдинге? Стоит ли вообще запускать PostgreSQL в контейнере, так как непонятно где и как хранятся данные? А как дела с бекапом, репликами и HA?
zirf
Вообще, контейнер Docker с СУБД данных в себе содержать не должен. Контейнер — запущенный экземпляр образа (image), и если его удалить, то все внесенные в него данные будут потеряны. Новый контейнер будет содержать данные образа, а там движок и окружение. Поэтому содержимое хранят отдельно, к каталогу внутри контейнера монтируется каталог хранилища (можно другой контейнер, но не пользовался). Тут в темплэйтах все описывается. Скорее всего, данные хранятся снаружи. Пробовать надо. Я же говорю, перспективно выглядит, но under development.
Тут в документации пока ясно, что репликацией и HA заведует слой pods(грубая аналогия — виртуальная или физическая машина для контейнеров)/services(сервера балансировки/репликации) — это понятия из kubernetes, у меня не хватает опыта работы, если честно. Поэтому и хочу с документацией разобраться.