OpenShift v3. Часть II. Продолжение знакомства. ROR4

    В предыдущей части рассмотрен сам продукт, а также простенький пример работы с PaaS реализацией. Пойдем дальше. Поставим Ruby-on-Rail 4 с PostgreSQL. В процессе познакомимся:

    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. 
    


    Вообще в этом выводе важная информация явкиимена/пароли/база PostgreSQL, и GitHub Webhook Secret, который понадобится ниже.

    $ 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, не авторизован, то есть ребилд нужно запускать вручную. Будем разбираться.
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 2

      0
      Добрый день!
      Спасибо за статью.

      Скажите пожалуйста, а что с данными PostgreSQL при ребилдинге? Стоит ли вообще запускать PostgreSQL в контейнере, так как непонятно где и как хранятся данные? А как дела с бекапом, репликами и HA?
        0

        Вообще, контейнер Docker с СУБД данных в себе содержать не должен. Контейнер — запущенный экземпляр образа (image), и если его удалить, то все внесенные в него данные будут потеряны. Новый контейнер будет содержать данные образа, а там движок и окружение. Поэтому содержимое хранят отдельно, к каталогу внутри контейнера монтируется каталог хранилища (можно другой контейнер, но не пользовался). Тут в темплэйтах все описывается. Скорее всего, данные хранятся снаружи. Пробовать надо. Я же говорю, перспективно выглядит, но under development.
        Тут в документации пока ясно, что репликацией и HA заведует слой pods(грубая аналогия — виртуальная или физическая машина для контейнеров)/services(сервера балансировки/репликации) — это понятия из kubernetes, у меня не хватает опыта работы, если честно. Поэтому и хочу с документацией разобраться.

      Only users with full accounts can post comments. Log in, please.